RGB Led إضاءة الـ July 7, 2017 – Posted in: Arduino – Tags: arduino, Learn arduino, LED, RGB
في هذا الدرس سنتعلم كيفية استعمال الـLED الملون أو RGBعن طريق خاصية الـ PWM وكذلك سوف نستعمل أمرanalogWrite من مكتبة الاردوينو للتحكم في لون الـLED.
قبل البدء في الدرس سوف اتحدث عن ال RGB led و خاصية ال PWM بشكل عام ,
الـ RGB Led
ال RGB led عبارة عن LED ملون مثل اي LED عادي ولكن يوجد داخل الـ LED الملون 3 من ال led وهي، أحمر LED أخضر LED وأزرق LED ويمكننا التحكم فيهم، كما يمكننا إنتاج الالوان بدمج كل من ألوانها عن طريق التحكم في بريق كل واحدة من هذه الإضاءات.
يتكون اللد الملون من نوعين وهما common anode وال common cathod كما ويوجد له أربع أرجل بحيث يوجد أحد الارجل أطول من الباقي حيث يختلفوا بطريقة التوصيل الداخلية لليد كما في الشكل التالي
يكون ال common anode الأطراف الموجبة للدات الثلاثة متصلة مع بعضها البعض اما في حالة ال comman cathod يكون الأطراف السالبة متصلات مع بعضها البعض ويكون الرجل الطويلة هي النقطة المشتركة.
PWM نظرياً
PWM هي تقنية للتحكم في الطاقة نحن نستعملها هنا للتحكم في كمية الطاقة لكل LED.
يعرض الرسم البياني التالي إشارة PWM على منفذ الأردوينو
تقريبا كل 1/500 ثانية، تستطيع الاردوينوا اخراج نبضة من الPWM, ,ونستطيع التحكم في طول –طاقة – هذا النبضة باستعمال دالة “analogWrite بحيث إذا كانتanalogWrite(0) لا تعطينا أي ذبذبة و analogWrite(255) تعطينا ذبذبة متواصلة.
إذا حددنا قيمة بين 0 و255 فسنحصل على ذبذبة، إذا كانت الإشارة العالية مقدارها 5% فقط فذلك يعني اننا نستعمل 5% من الطاقة كما في الشكل أعلاه.
نفس الشيء إذا كان منفذ الاخراج يساوي 5V في 90% من الوقت فسنحصل على 90% من الطاقة, وتساوي 90% * 5V وتساوي 4.5V.
لا يمكننا ملاحظة تغير(إطفاء وتشغيل) إشعاع الإضاءة بهذه السرعة فيخيل لنا أن بريقها يتغير فقط.
ولا توجد هذا الخاصية لجميع منافذ الاردوينو بل توجد في عدد معين، ففي اردوينو اونو توجد في منافذ ذات الارقام التالية D3,D5,D6,D9,D10,D11 ويكون بجانب كل منفذ الإشارة التالية.
القطع المطلوبة
نحتاج في هذا الفيديو ليد من نوع RGB, مقاومات ٢٢٠ اوم, اسلاك , اردوينو من نوع اونو ولوحة توصيل:
طريقة التوصيل
سوف نقوم بتوصيل ليد ال rgb الى لوحة التوصيل بحيث نوصل الرجل الطويلة مع المنفذ الأرضي، ومن ثم نقوم بتوصيل باقي الأرجل الى أحد أطراف المقاومة والطرف الاخر للمقاومة الى منافذ الاردوينو وهم D9, D10,D11
كما في الشكل التالي:
بعد ما قمنا بتوصيل الدائرة سوف ننتقل الى الكود لشرحه.
الكود:
سوف نقوم بتعريف ٣ متغيرات و ربطهم من المنافذ المتصلة في اليد عن طريق هذه الأمر
1 2 3 |
int redPin = 11; int greenPin = 10; int bluePin = 9; |
ومن ثم تعريف المخارج الثلاث كمخارج في دالة ال setup () عن طريق هذا الأوامر
1 2 3 4 5 6 7 |
void setup() { pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); } |
قبل الذهاب الى الدالة loop سوف نقوم بتعريف داله جديده وهي setcolor و في هذه الدالة تم اخذ ثلاث عوامل متغيرة، واحدة لكل بريق لون ، سيكون العامل المتغير من 0 وحتى 250
حيث يعني 0 القيمة الصغرى و 255 هي القيمة القصوى
تستدعى الدالة analogWrite للتحكم في بريق كل LED
1 2 3 4 5 6 7 |
void setColor(int red, int green, int blue) { analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue); } |
إذا نظرت في دالة loop فستلاحظ اننا نغير في قيمة الألوان التي نريد عرضها ثم ننتظر ثانية قبل أن نذهب إلى اللون التالي. وذلك بكتابة اسم الدالة ومن ثم كتابة قيم الألوان لكل متغير كما يلي:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
void loop() { setColor(255, 0, 0); // Red Color delay(1000); setColor(0, 255, 0); // Green Color delay(1000); setColor(0, 0, 255); // Blue Color delay(1000); setColor(255, 255, 255); // White Color delay(1000); setColor(170, 0, 255); // Purple Color delay(1000); } |
الكود كامل
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
int redPin = 11; int greenPin = 10; int bluePin = 9; 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(255, 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) { analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue); } |
الألوان
السبب وراء قدرتنا على خلق أي لون نريده من طريقة مزج وتغير سطوع كل من الأحمر والاخضر والأزرق هو انه لدينا في أعيننا مستقبلات لهذه الألوان الثلاث ويأخذ العقل هذا الكمية من السطوع من نسبة الألوان ليمزجها ويستخرج لون جديد منها.
بلغة أخرى، استعمالنا لثلاث إضاءات هو طريقة لخدع العين. نفس الفكرة مستعمل في أجهزة التلفاز، حيث كل بيكسل متكون من ثلاث نقاط (أحمر، أخضر،أزرق).
إذا وضعنا القيمة القصوى لكل LED فسنحصل على اللون الأبيض، وإذا أغلقنا LED الأزرق فسنحصل على اللون الأصفر الذي هو مزيج بين الأحمر والأخضر اما إذا أغلقنا اللون الأخضر فسنحصل على اللون البنفسجي وهو عباره عن المزيج بين اللون الأحمر والأزرق وهكذا. كما ويمكن لنا أن نحصل على كل ألون الطيف عن طريق التحكم في في هذا الألوان الثلاثة، اما اللون الأسود هو ليس لون انما هو نتيجة غياب الضوء. إذاً الطريقة الأقرب للوصول إليه هو بإطفاء جميع اللدات والضوء في الغرفة التي تستعملها.
استعمال ألوان الإنترنت
يمكنك أيضا إنتاج أي لون تريده وذلك باختياره عن طريق أي مصدر من المصادر الخاصة بالألوان بالدخول مثلا الى هذا الرابط
https://color.adobe.com/create/color-wheel/
إذا كنت قد قمت ببعض البرمجة من قبل فستعلم أن الألوان ترمز إليها بأرقام HEX على القاعدة 16. مثلا يرمز للون الأحمر بـ FF0000# فهذه الأرقام 6 ترمز للون متكونة من ثلاث أزواج، فأول رقمين يرمزان للأحمر، الرقمان التاليان للأخضر والأخيران للأزرق الأحمر هو FF0000# لأن فيه القيمة القصوى للأحمر وليس فيه أي ألوان أخرى
بهذه الطريقة يمكن لنا ان نستخرج أي لون بسرعة. لنصنع هذا اللون مثلاً (#4B0082) قيمة الأحمر الأخضر والأزرق هم كالآتي.
يمكنك أن تضع هذه القيم في دالة “SetColor” وذلك بإضافة 0x أمام الأرقام وذلك لأنها ارقام HEX لنقم بكتابة هذا الون في الدالة ومن ثم تحميله على الاردوينو: #4B0082 وقم باختيار الوان أخرى واضافتها الى دالة اللوب loop كما يلي
1 |
setColor(0x4B, 0x0, 0x82); |
لا تنسى أن تضيف امر الـ“Delay” بعد كل لون حتى تتمكن من مشاهدته.