مشروع Mood lamp

مبتدئ

image_pdf

في هذا الدرس سوف نقوم بعمل مشروع جمالي قليلا وهو مشروع الـ Mood lamp او مصباح المزاج، وهو عبارة عن أنبوبة من الورق المقوى الخفيف وبداخله مجموعه من الـ LEDs ذات الألوان (حمراء، خضراء، زرقاء). يقوم هذا المصباح بتغيير الألوان بشكل جميل وسلس لإضافة الهدوء والراحة في المكان.

مشروع-mood-lamp-لإضافة-ديكور-مميز-لبيتك

المكونات المطلوبة

arduino uno r3

Arduino Uno

220 Ω resistor

220 Ohm – 330 Ohm Resistors

Full size breadboard 830

Breadboard

Breadboard Jumper Wire 65 pcs

Wires

blue led 5mm

Blue LED

green led 5mm

Green LED

led 5mm red

Red LED

white-paper

ورق مقوى خفيف (أي شكل ترغب به، هذه لمستك الجمالية)

توصيل الدارة على لوحة التجارب

mood-lamp

 

mood-lamp

شرح المشروع

نقوم بتوصيل الـثلاثة LEDs على مخارج PWM من الأردوينو وعن طريق التحكم في نسبة الفولت الخارجة للـLED  نستطيع التحكم في شدة الإضاءة.

سبب اختيار ألوان الـ LED (الأحمر، الأخضر، الأزرق)، لأنها الألوان الرئيسية التي يمكن تكوين أي لون آخر منها عن طريق خلط النسب بين الثلاثة والعمل على تداخل الضوء بوضعهم بجانب بعضهم (وهذا ما يحدث حقيقة في RGB LED).

للتحكم في شدة الإضاءة يمكنك أن تكتب كود الأردينو (analogWrite(x  حيث x  تمتد من 0 الى 255 (و هذا نظير 0 الى 100% تقريبًا).

نقوم بفتح نافذة اختيار اللون color picker – والتي توجد غالبًا في برامج الجرافيك مثل الفوتوشوب- لإختيار قيم RGB حتى نقوم بعرض جميع ألوان الطيف فكانت النتيجة كالآتي:

مشروع-mood-lamp-لإضافة-ديكور-مميز-لبيتك

وبالتالي سوف نقوم بعمل دالتين decrease color ودالة أخرى increase color. كلتا الدالتين تأخذ معامل وهو اسم اللون الذي نريد أن نقوم بزيادته من 0 الى 255 او بنقصانه من 255 الى 0.

برمجة الأردوينو

#define LED_RED   11
#define LED_GREEN 10
#define LED_BLUE  9

void setup() {
  // Define the output LEDs
  pinMode(LED_RED, OUTPUT);
  pinMode(LED_GREEN, OUTPUT);
  pinMode(LED_BLUE, OUTPUT);
}

void loop() {
  increaseColor(LED_BLUE);
  decreaseColor(LED_RED);
  increaseColor(LED_GREEN);
  decreaseColor(LED_BLUE);
  increaseColor(LED_RED);
  decreaseColor(LED_GREEN);
}

void increaseColor(unsigned char colorPin) {
  for(int i=0; i<=255; i++) {
    analogWrite(colorPin, i);
    delay(5);
  }
}

void decreaseColor(unsigned char colorPin) {
  for(int i=255; i>=0; i--) {
    analogWrite(colorPin, i);
    delay(5);
  }
}

شرح الكود :

في البداية نقوم بتسمية مداخل الاردوينو حسب الـ LEDs  الموصلة معها، فالمدخل  9 موصل مع LED  الأزرق، والمدخل 10 موصل مع LED  الأخضر، ومدخل 11 موصل مع الأحمر.
ثم نقوم بتعريف هذه الأطراف كمخرج في دالة ()setup .

#define LED_RED   11
#define LED_GREEN 10
#define LED_BLUE  9

void setup() {
  // Define the output LEDs
  pinMode(LED_RED, OUTPUT);
  pinMode(LED_GREEN, OUTPUT);
  pinMode(LED_BLUE, OUTPUT);
}

في دالة ()loop نقوم بالتحكم في شدة اضاءة كل LEDs ودمج الألوان الثلاثة معا، وبهذه الطريقة نحصل على مزيج من الألوان تعتمد على شدة تركيز كل لون LED على حدة .
يتم التحكم في شدة إضاء كل LED عن طريق استدعاء الدالة increaseColor والدالة decreaseColor .

void loop() {
  increaseColor(LED_BLUE);
  decreaseColor(LED_RED);
  increaseColor(LED_GREEN);
  decreaseColor(LED_BLUE);
  increaseColor(LED_RED);
  decreaseColor(LED_GREEN);
}

الدالة increaseColor  تعمل على زيادة شدة اضاءة اللون تدريجيا. تقوم هذه الدالة باستخدام الدالة analogWrite(Pin_name,Vlaue) للتحكم في شدة الإضاءة، وبإستخدام for loop تبدأ شدة الاضاءة بالإزدياد تدريجيا من 0 إلى قيمة 255 .

/* هذه الدالة تقوم بعمل تأثير ناعم بزيادة قيمة اللون المطلوب منها من 0 الى 255 */
void increaseColor(unsigned char colorPin) {
  for(int i=0; i<=255; i++) {
    analogWrite(colorPin, i);
    delay(5);
  }
}

تقوم الدالة decreaseColor  بتقليل شدة اضاءة الـ LED  تدريجيا. تعمل هذه الدالة بنفس طريقة الدالة السابقة increaseColor ، ولكن تستخدم الـ for loop لتقليل شدة الإضاءة من 255 إلى 0 .

/*
و هذه الدالة تفعل العكس
*/
void decreaseColor(unsigned char colorPin) {
  for(int i=255; i>=0; i--) {
    analogWrite(colorPin, i);
    delay(5);
  }
}

باستخدام نفس التقنية مع باقي الـ LEDs يمكننا دمج الألوان بصورة رائعة لنحصل على Mood Lamp .

X
تم إضافة المنتج إلى السلة بنجاح