مقدمة
في هذا الدرس ستتعلم كيفية إستعمال الـRGB LED الملون أو RGB (Led Green Blue) ، سوف تستعمل analogWrite من مكتبة الاردوينو للتحكم في لون الـRGB LED.
تبدو الـLED الملونة مثل الـLED العادي ولكن يوجد داخل الـ LED الملون 3LEDS ، أحمر LED أخضر LED وأزرق LED يمكن لك الحصول على ألوان عن طريق التحكم في بريق كل واحدة من هذه الإضاءات.
تمزج الألوان الضوئية كما الألوان التي تستعمل للرسم، وذلك بتعديل كمية أو قيمة كل لون.
الطريقة الصعبة للقيام بهذا تكون بإستعمال عدة مقاومات كما قمت به في الدرس السابق ولكن هذا صعب لحسن الحظ، يمتلك الاردوينو دالة اسمها analogWrite لإستخراج قيمة متغيرة من التيار الكهربائي لتغذية الـRGB LED.
المواد والأدوات
1× (Diffuse RGB LED 10mm)
1× لوحة التجارب (Half-size Breadboard)
1× اردوينو اونو
1× سلك اردوينو
الألوان
السر وراء قدرتنا على خلق أي لون هو عن طريق مزج كل من الأحمر الأخضر والأزرق.
إن لدى أعيننا ثلاثة أنواع من المستقبلات واحدة لكل لون. تمزج كلا من العين والعقل الألوان الثلاث لتستخرج اللون الناتج عن هذا الخليط.
بلغة أخرى، استعمالنا لثلاث اضاءات هو طريقة لخدع العين نفس الفكرة مستعملة في أجهزة التلفاز، حيث كل بيكسل متكون من ثلاث نقاط (أحمر، أخضر،أزرق).
إذا وضعنا القيمة القصوى لكل RGB LED فسنحصل على اللون الأبيض، وإذا اغلقنا RGB LED الأزرق فسنحصل على اللون الأصفر الذي هو مزيج بين الأحمر والأخضر.
يمكن لنا أن نتحصل على كل ألون الطيف عن طريق التحكم في بريق كل لون من اللادات
الأسود ليس بلون انما هو نتيجة غياب الضوء إذًا الطريقة الأقرب للوصول إلى اللون الأسود هي بإطفاء جميع الليدات.
توصيل الدائرة
لدى الـRGB LED الملون أربع نهايات، هنالك منفذ لكل قطب سالب لـ3 RGB LED وقطب واحد موحد للأقطاب الموجبة.
القطب الموجب الموحد هو القطب الثاني من الجهة المسطحة وهو كذلك الأطول بين الأقطاب الأربعة ستربطه بمقاومة بقيمة 220 اوم حتى تمنع مرور تيار كهربائي كبير ويربط قطب المقاومة من الجهة الأخرى بالاردوينو 5v.
يتم ربط كل من أقطاب الـ RGB LED الملونة بالاردوينو كما هو موضح بالصورة.
إذا كنت تستعمل RGB LED بقطب سالب موحد عوض عن قطب الموجب الموحد اربط القطب الطويل بـ GND عوضاً عن 5v.
الكود البرمجي
هذا الكود يدور حول الألوان: الأحمر، الأخضر، الأزرق، الأصفر، البنفسجي والبحري تندرج هذه الألوان ضمن معيار الألوان في الإنترنت:
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 للتحكم في بريق كل RGB 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); }
أضف بعض الألوان إلى الكود وشاهد تأثيرها في الـRGB LED الملونة.
إذا كنت تستعمل الـLED الملونة ذات قطب سالب موحد، لا تقم بطرح القيمة المرادة من 255
استعمال ألوان الإنترنت:
إذا كنا قد قمنا ببعض البرمجة من قبل فسنعلم أن الألوان ترمز إليها بأرقام HEX على القاعدة 16.
مثلا يرمز للون الأحمر بـ FF0000# يمكن أن تجد أرقام العديد من الألوان في الجدول التالي:
الأرقام 6 التي ترمز للون متكونة من ثلاث أزواج، الرقمان الأولان يرمزان للأحمر، الرقمان التاليان للأخضر والأخيران للأزرق الأحمر هو FF0000# لأن فيه القيمة القصوى للأحمر وليس فيه أي ألوان أخرى
بهذه الطريقة يمكن لك ان تستخرج أي لون بسرعة.
لنصنع هذا اللون مثلاً (#4B0082)
قيمة الأحمر الأخضر والأزرق هم كالآتي:
يمكن لنا أن نضع هذه القيم في دالة “SetColor” هكذا:
setColor(0x4B, 0x0, 0x82);
قمنا بإضافة 0X أمام الأرقام لأنها أرقام HEX
نقوم بإضافة بعض الألوان إلى دالة “Loop” لا ننسى أن نضيف “Delay” بعد كل واحدة.
MWP هي تقنية للتحكم في الطاقة نحن نستعملها هنا للتحكم في كمية الطاقة لكل RGB LED.
يعرض الرسم البياني التالي إشارة MWP على منفذ الأردوينو
تقريبا كل 1/500 ذبذبة بالثانية، نتحكم في طول هذه الذبذبة بإستعمال دالة “analogWrite إذا كانتanalogWrite(0) لا تعطينا أي ذبذبة و analogWrite(255) تعطينا ذبذبة متواصلة.
إذا حددنا قيمة بين 0 و 255 فسنحصل على ذبذبة، إذا كانت الإشارة عالية مقدار 5% فقط فذلك يعني اننا نستعمل في 5% من الطاقة.
نفس الشيء إذا كان منفذ الإستخراج يساوي 5V في 90% من الوقت فسنحصل على 90% من الطاقة.
لا يمكننا ملاحظة تغير(إطفاء وتشغيل) إشعاع الإضاءة بهذه السرعة فيخيل لنا أن بريقها يتغير فقط.
أنشطة أخرى
- يمكنك وضع كرة PING-PONG فوق الـ RGB LED الملونة.
- يمكنك تغيير مدة الإنتظار عبر دالة “Delay” لتسرع أو تبطئ سرعة تغير الألوان.