مقدمة
الدرج عنصر معماري هام وظيفيًا يمكن أن يكون عنصر جمالي بإضافة مصابيح على طول الدرج توضح الخطوات للأفراد تجنبًا للعثرات والسقوط ويمكن جعل هذه المصابيح موفرة للطاقة بحيث تعمل وقت مرور الأفراد من حولها وتتوقف عن العمل إذا كان هناك سكون بالمكان، في هذا الدرس ستتعلم طريقة صنع الدرج المضيء باستخدام الاردوينو وحساس الحركة.
المواد والأدوات
1× اردوينو اونو
يمكنك اختيار 11 ثنائي مشع للضوء حسب الألوان التي تريديها وحسب حاجة مشروعك:
11× مقاومة 220 Ω
2× حساس الحركة
1× هيكل درج
توصيل الدائرة
للمزيد حول حساس الحركة يمكنك الرجوع للدرس حساس الحركة (PIR Sensor).
الهيكل
في هذا الدرس تم استخدام قالب فليني لمحاكاة الدرج
يمكنك اختيار شكل الهيكل المناسب لك سواء قالب فيليني أو كرتوني أو نموذج بالطابعة ثلاثية الأبعاد أو نموذج خشبي بجهاز الليزر.
تم تثبيت الدائرة الكهربائية بشكل محكم خلف القالب الفليني.
الكود البرمجي
ارفع كود مشروع الدرج المضيء على لوحة الاردوينو باستخدام برنامج اردوينو (IDE).
const int led1 = 1; const int led2 = 2; const int led3 = 3; const int led4 = 4; const int led5 = 5; const int led6 = 6; const int led7 = 7; const int led8 = 8; const int led9 = 9; const int led10 = 10; const int led11 = 11; int PIRsensor1 = 13; int PIRsensor2 = 12; int val1 = 0; int val2 = 0; void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); pinMode(led7, OUTPUT); pinMode(led8, OUTPUT); pinMode(led9, OUTPUT); pinMode(led10, OUTPUT); pinMode(led11, OUTPUT); pinMode(PIRsensor1, INPUT); pinMode(PIRsensor2, INPUT); } void loop() { val1 = digitalRead(PIRsensor1); val2 = digitalRead(PIRsensor2); if (val1 == HIGH) { digitalWrite(led1, HIGH); delay(500); digitalWrite(led2, HIGH); delay(500); digitalWrite(led3, HIGH); delay(500); digitalWrite(led4, HIGH); delay(500); digitalWrite(led5, HIGH); delay(500); digitalWrite(led6, HIGH); delay(500); digitalWrite(led7, HIGH); delay(500); digitalWrite(led8, HIGH); delay(500); digitalWrite(led9, HIGH); delay(500); digitalWrite(led10, HIGH); delay(500); digitalWrite(led11, HIGH); delay(500); digitalWrite(led1, LOW); delay(500); digitalWrite(led2, LOW); delay(500); digitalWrite(led3, LOW); delay(500); digitalWrite(led4, LOW); delay(500); digitalWrite(led5, LOW); delay(500); digitalWrite(led6, LOW); delay(500); digitalWrite(led7, LOW); delay(500); digitalWrite(led8, LOW); delay(500); digitalWrite(led9, LOW); delay(500); digitalWrite(led10, LOW); delay(500); digitalWrite(led11, LOW); delay(200); } if (val2 == HIGH) { digitalWrite(led11, HIGH); delay(500); digitalWrite(led10, HIGH); delay(500); digitalWrite(led9, HIGH); delay(500); digitalWrite(led8, HIGH); delay(500); digitalWrite(led7, HIGH); delay(500); digitalWrite(led6, HIGH); delay(500); digitalWrite(led5, HIGH); delay(500); digitalWrite(led4, HIGH); delay(500); digitalWrite(led3, HIGH); delay(500); digitalWrite(led2, HIGH); delay(500); digitalWrite(led1, HIGH); delay(500); digitalWrite(led11, LOW); delay(500); digitalWrite(led10, LOW); delay(500); digitalWrite(led9, LOW); delay(500); digitalWrite(led8, LOW); delay(500); digitalWrite(led7, LOW); delay(500); digitalWrite(led6, LOW); delay(500); digitalWrite(led5, LOW); delay(500); digitalWrite(led4, LOW); delay(500); digitalWrite(led3, LOW); delay(500); digitalWrite(led2, LOW); delay(500); digitalWrite(led1, LOW); delay(200); } else { digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led5, LOW); digitalWrite(led6, LOW); digitalWrite(led7, LOW); digitalWrite(led8, LOW); digitalWrite(led9, LOW); digitalWrite(led10, LOW); digitalWrite(led11, LOW); } }
شرح الكود البرمجي
في البداية عرفنا المتغيرات التي سنستخدمها لتخزين قيم الثنائي المشع للضوء.
const int led1 = 1; const int led2 = 2; const int led3 = 3; const int led4 = 4; const int led5 = 5; const int led6 = 6; const int led7 = 7; const int led8 = 8; const int led9 = 9; const int led10 = 10; const int led11 = 11;
بعد ذلك عرفنا المتغيرين PIRsensor1 و PIRsensor2 اللذين سنستخدمهم لتعريف حساسي الحركة.
int PIRsensor1 = 13; int PIRsensor2 = 12;
المتغيرين val1 و val2 سيحملون القيمة الابتدائية وهي صفر لحساسي الحركة.
int val1 = 0; int val2 = 0;
في الدالة ()setup سيتم تهيئة الثنائي المشع للضوء على أن يكون مخرج.
وحساس الحركة على أن يكون مدخل للبيانات.
void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); pinMode(led7, OUTPUT); pinMode(led8, OUTPUT); pinMode(led9, OUTPUT); pinMode(led10, OUTPUT); pinMode(led11, OUTPUT); pinMode(PIRsensor1, INPUT); pinMode(PIRsensor2, INPUT); }
في الدالة ()loop ستتم قراءة قيم كلا حساسي الحركة.
إذا كان هناك حركة في الحساس الأول (الدرج أسفل الدرج) ستبدأ الإضاءة بالعمل بشكل متناوب وزمن إيقاف بينهم مدته نصف ثانية,
void loop() { val1 = digitalRead(PIRsensor1); val2 = digitalRead(PIRsensor2); if (val1 == HIGH) { digitalWrite(led1, HIGH); delay(500); digitalWrite(led2, HIGH); delay(500); digitalWrite(led3, HIGH); delay(500); digitalWrite(led4, HIGH); delay(500); digitalWrite(led5, HIGH); delay(500); digitalWrite(led6, HIGH); delay(500); digitalWrite(led7, HIGH); delay(500); digitalWrite(led8, HIGH); delay(500); digitalWrite(led9, HIGH); delay(500); digitalWrite(led10, HIGH); delay(500); digitalWrite(led11, HIGH); delay(500); digitalWrite(led1, LOW); delay(500); digitalWrite(led2, LOW); delay(500); digitalWrite(led3, LOW); delay(500); digitalWrite(led4, LOW); delay(500); digitalWrite(led5, LOW); delay(500); digitalWrite(led6, LOW); delay(500); digitalWrite(led7, LOW); delay(500); digitalWrite(led8, LOW); delay(500); digitalWrite(led9, LOW); delay(500); digitalWrite(led10, LOW); delay(500); digitalWrite(led11, LOW); delay(200); }
إذا كان هناك حركة مقابل الحساس الثاني (الدرج أعلى الدرج) ستبدأ الإضاءة بالعمل بشكل متناوب وزمن إيقاف بينهم مدته نصف ثانية.
if (val2 == HIGH) { digitalWrite(led11, HIGH); delay(500); digitalWrite(led10, HIGH); delay(500); digitalWrite(led9, HIGH); delay(500); digitalWrite(led8, HIGH); delay(500); digitalWrite(led7, HIGH); delay(500); digitalWrite(led6, HIGH); delay(500); digitalWrite(led5, HIGH); delay(500); digitalWrite(led4, HIGH); delay(500); digitalWrite(led3, HIGH); delay(500); digitalWrite(led2, HIGH); delay(500); digitalWrite(led1, HIGH); delay(500); digitalWrite(led11, LOW); delay(500); digitalWrite(led10, LOW); delay(500); digitalWrite(led9, LOW); delay(500); digitalWrite(led8, LOW); delay(500); digitalWrite(led7, LOW); delay(500); digitalWrite(led6, LOW); delay(500); digitalWrite(led5, LOW); delay(500); digitalWrite(led4, LOW); delay(500); digitalWrite(led3, LOW); delay(500); digitalWrite(led2, LOW); delay(500); digitalWrite(led1, LOW); delay(200); }
إذا لم يكن هناك حركة مقابل كلا الحساسين ستتوقف الإضاءة عن العمل.
else { digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led5, LOW); digitalWrite(led6, LOW); digitalWrite(led7, LOW); digitalWrite(led8, LOW); digitalWrite(led9, LOW); digitalWrite(led10, LOW); digitalWrite(led11, LOW); }
يمكنك اختبار مشروع الدرج المضيء بعد رفع الكود البرمجي.
لا تنسَ فصل مصدر الطاقة بعد الانتهاء من استخدام النظام.