اردوينو – الدرس الرابع – إضاءة RGB LEDs

مبتدئ

مقدمة

في هذا الدرس سنتعلم كيفية إستعمال الـLED الملون أو RGB (Led Green Blue)
سوف تستعمل analogWrite من مكتبة الاردوينو للتحكم في لون الـLED.

1

تبدو الـLED الملون مثل الـLED العادي ولكن يوجد داخل الـLED الملون 3 LEDS ، أحمر  LED أخضر LED وأزرق LED  يمكن لنا التحصل على الوان عن طريق التحكم في بريق كل واحدة من هذه الإضاءات.

تمزج الألوان الضوئية كما الألوان التي تستعمل للرسم، وذلك بتعديل كمية أو قيمة كل لون.
الطريقة الصعبة للقيام بهذا تكون بإستعمال عدة مقاومات كما قمنا في الدرس السابق ولكن هذا صعب. لحسن الحظ ، يمتلك الاردوينو دالة اسمها  analogWrite لإستخراج قيمة متغيرة من التيار الكهربائي لتغذية الـLED

القطع المطلوبة

لتنفيذ هذه التجربة يجب عليك توفير القطع التالية.

2

Diffuse RGB LED 10mm

220 Ω resistor

220 Ω Resistors ثلاث قطع

4

Half-size Breadboard

5

Arduino Uno R3

6

Jumper wire pack

تصميم لوحة التجارب

لدى الـLED الملون أربع نهايات ،هنالك منفذ لكل قطب سالب لـ3  LEDSوقطب واحد موحد للأقطاب الموجبة.

 t12

القطب الموجب الموحد هو القطب الثاني من الجهة المسطحة وهو كذلك الأطول بين الأقطاب الأربعة ستربطه بمقاومة بقيمة 220 اوم حتى تمنع مرور تيار كهربائي كبير ويربط قطب المقاومة من الجهة الأخرى بالاردوينو 5v.

يتم ربط كل من أقطاب الـ LEDs الملونة بالاردوينو كما هو موضح بالصورة.

إذا كنت تستعمل RGB LED بقطب سالب موحد عوض عن قطب الموجب الموحد اربط القطب الطويل بـ GND عوضاً عن 5v.

matlab-gui

الألوان

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

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

9

إذا وضعنا القيمة القصوى لكل LED فسنحصل على اللون الأبيض ، وإذا اغلقنا LED الأزرق فسنحصل على اللون الأصفر الذي هو مزيج بين الأحمر والأخضر.

يمكن لنا أن نتحصل على كل ألون الطيف عن طريق التحكم في بريق كل لون من اللادات

الأسود ليس بلون انما هو نتيجة غياب الضوء. إذاً الطريقة الأقرب لنا للوصول إلى اللون الأسود هي بإطفاء جميع اللادات.

مخطوطة الاردوينو

هذه المخطوطة ستدور حول الألوان : الأحمر، الأخضر، الأزرق، الأصفر، البنفسجي والبحري تندرج هذه الألوان ضمن معيار الألوان في الإنترنت
إنسخ الكود
جرب المخطوطة، سوف نشرح ببعض التفاصيل

int redPin = 9;
int greenPin = 10;
int bluePin = 11;
 
#define COMMON_ANODE
 
void setup()
{
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);  
}
 
void loop()
{
  setColor(255, 0, 0);  // red
  delay(1000);
  setColor(0, 255, 0);  // green
  delay(1000);
  setColor(0, 0, 255);  // blue
  delay(1000);
  setColor(200,255 , 0);  // yellow
  delay(1000);  
  setColor(80, 0, 80);  // purple
  delay(1000);
  setColor(0, 255, 255);  // aqua
  delay(1000);
}
 
void setColor(int red, int green, int blue)
{
  #ifdef COMMON_ANODE
    red = 255 - red;
    green = 255 - green;
    blue = 255 - blue;
  #endif
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue);  
}

 

 

تبدأ المخطوطة بتحديد منفذ كل لون
إنسخ الكود

int redPin = 11;
int greenPin = 10;
int bluePin = 9;

 

الخطوة الثانية، هي كتابة دالة التعريف SETUP كما شهدنا في الدروس السابق أن وظيفة التعريق تعمل مره واحدة في بداية التشغيل.  في هذه المخطوطة كل ما علينا فعله هو إعداد المنافذ الثلاث للإستخراج
إنسخ الكود

    void setup()
    {
      pinMode(redPin, OUTPUT);
      pinMode(greenPin, OUTPUT);
      pinMode(bluePin, OUTPUT);  
    }

 

 

قبل أن ننظر إلى دالة “LOOP” ، لنلقي نظرة على آخر دالة  في المخطوطة.
إنسخ الكود

    
void setColor(int red, int green, int blue)
{
  #ifdef COMMON_ANODE
    red = 255 - red;
    green = 255 - green;
    blue = 255 - blue;
  #endif
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue);  
}

لأننا نستعمل الـLED الملونه ذات قطب موجب موحد، عليك إذاً أن تغير قيمة العوامل المتغيرة لكل لون وذلك بطرح القيمة المرادة من 255

 

 

في هذه الدالة تم اخذ ثلاث عوامل متغيرة، واحدة لكل بريق لون ، سيكون العامل المتغير من 0 وحتى 250
حيث يعني 0 القيمى الصغرى  و 255 هي القيمة القصوى
تستدعى الدالة analogWrite للتحكم في بريق كل LED
إذا نظرت في دالة  loop فستلاحظ اننا نغير في قيمة الألوان التي نريد عرضها ثم ننتظر ثانية قبل أن نذهب إلى اللون التالي.
إنسخ الكود

    void loop()
    {
      setColor(255, 0, 0);  // red
      delay(1000);
      setColor(0, 255, 0);  // green
      delay(1000);
      setColor(0, 0, 255);  // blue
      delay(1000);
      setColor(255, 255, 0);// yellow
      delay(1000);  
      setColor(80, 0, 80);  // purple
      delay(1000);
      setColor(0, 255, 255);// aqua
      delay(1000);
    }

 

 

قم بإضافة بعض الألوان إلى المخطوطة الخاص بك وشاهد تأثيرها في الـLED الملونه.

إذا كنت تستعمل الـLED الملونه ذات قطب سالب موحد، لا تقم بطرح القيمة المرادة من 255

إستعمال ألوان الإنترنت

إذا كنت قد قمت ببعض البرمجةمن قبل  فستعلم أن الألوان ترمز إليها بأرقام HEX على القاعدة 16.  مثلا يرمز للون الأحمر بـ  FF0000# يمكن أن تجد أرقام العديد من الألوان في مصادر عديدة، مثل

http://www.devguru.com/features/colors

الأرقام 6 التي ترمز للون متكونة من ثلاث أزواج، الرقمان الأولان يرمزان للأحمر، الرقمان التاليان للأخضر والأخيران للأزرق الأحمر هو FF0000#  لأن فيه القيمة القصوى للأحمر وليس فيه أي ألوان أخرى

بهذه الطريقة يمكن لنا ان نستخرج أي لون بسرعة.

لنصنع هذا اللون مثلاً  (#4B0082)

قيمة الأحمر الأخضر والأزرق هم كالآتى.
يمكن لنا أن نضع هذه القيم  في دالة “SetColor” هكذا :
إنسخ الكود

setColor(0x4B, 0x0, 0x82);

 

 

قمنا بإضافة 0X أمام الأرقام لأنها أرقام HEX

قم بإضافة بعض الألوان إلى دالة “Loop”  لا تنسى أن تضيف “Delay” بعد كل واحدة

MWP نظرياً

MWP هي تقنية للتحكم في الطاقة نحن نستعملها هنا للتحكم في كمية الطاقة لكل LED.

يعرض الرسم البياني التالي إشارة MWP على منفذ  الأردوينو

10

تقريبا كل 1/500  ذبذبة بالثانية، نتحكم في طول هذه الذبذبة بإستعمال دالة  “analogWrite  إذا كانتanalogWrite(0)  لا تعطينا أي ذبذبة و analogWrite(255) تعطينا ذبذبة متواصلة.

إذا حددنا قيمة بين 0 و 255 فسنحصل على ذبذبة ،إذا كانت الإشارة عالية مقدار 5% فقط فذلك يعني اننا نستعمل في 5% من الطاقة.

نفس الشيء إذا كان منفذ الإستخراج يساوي 5V  في 90% من الوقت فسنحصل على 90% من الطاقة.
لا يمكننا ملاحظة تغير(إطفاء وتشغيل) إشعاع الإضاءة بهذه السرعة فيخيل لنا أن بريقها يتغيرفقط.

أنشطة أخرى

  • حاول وضع كرة PING-PONG فوق الـ LEDالملونة
  • غير مدة الإنتظار عبر دالة  “Delay” لتسرع أوتبطئ سرعة تغير الألوان.

هنالك العديد من الأنشطة التي يمكنلك فعله ابإستعمال الـLED الملونة قم بتصفح الإنترنت لتستكشف كل المؤثرات الخاصة القائمة على الـLED الملونة