عناوين الدرس

الدرج المضيء باستخدام الاردوينو وحساس الحركة

مبتدئ

مقدمة

الدرج عنصر معماري هام وظيفيًا يمكن أن يكون عنصر جمالي بإضافة مصابيح على طول الدرج توضح الخطوات للأفراد تجنبًا للعثرات والسقوط ويمكن جعل هذه المصابيح موفرة للطاقة بحيث تعمل وقت مرور الأفراد من حولها وتتوقف عن العمل إذا كان هناك سكون بالمكان، في هذا الدرس ستتعلم طريقة صنع الدرج المضيء باستخدام الاردوينو وحساس الحركة.

الدرج المضيء

المواد والأدوات

الاردوينو يستخدم في حساس الغاز/ الدخان

1× اردوينو اونو

arduino-smoke-gas-sensor

1× سلك الاردوينو

 

arduino-stair-lighting

1× لوحة تجارب – حجم كبير

arduino-stair-lighting

حزمة أسلاك توصيل (ذكر – أنثى)

الدرج المضيء

 حزمة أسلاك توصيل (ذكر- ذكر)

 

يمكنك اختيار 11 ثنائي مشع للضوء حسب الألوان التي تريديها وحسب حاجة مشروعك:

 

arduino-stair-lighting

  ثنائي مشع للضوء أحمر (LED)

arduino-stair-lighting

ثنائي مشع للضوء أبيض (LED)

الدرج المضيء

ثنائي مشع للضوء أزرق (LED)

الدرج المضيءثنائي مشع للضوء أخضر (LED)

الدرج المضيء

11×  مقاومة 220 Ω

حساس الحركة

الدرج المضيء

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);
}

يمكنك اختبار مشروع الدرج المضيء بعد رفع الكود البرمجي.

 لا تنسَ فصل مصدر الطاقة بعد الانتهاء من استخدام النظام.

X
Product added to the cart