في هذا الدرس سنتعلم كيفية استعمال الـLED الملون أو RGBعن طريق خاصية الـ PWM وكذلك سوف نستعمل أمرanalogWrite من مكتبة الاردوينو للتحكم في لون الـLED.
قبل البدء في الدرس سوف اتحدث عن ال RGB led و خاصية ال PWM بشكل عام ,
الـ RGB LED :
عبارة عن LED ملون مثل اي LED عادي ولكن يوجد داخل الـ LED الملون 3 من ال led وهي، أحمر LED أخضر LED وأزرق LED ويمكننا التحكم فيهم، كما يمكننا إنتاج الالوان بدمج كل من ألوانها عن طريق التحكم في بريق كل واحدة من هذه الإضاءات.
يتكون اللد الملون من نوعين وهما common anode وال common cathod كما ويوجد له أربع أرجل بحيث يوجد أحد الارجل أطول من الباقي حيث يختلفوا بطريقة التوصيل الداخلية لليد كما في الشكل التالي
يكون ال common anode الأطراف الموجبة للدات الثلاثة متصلة مع بعضها البعض اما في حالة ال comman cathod يكون الأطراف السالبة متصلات مع بعضها البعض ويكون الرجل الطويلة هي النقطة المشتركة.
MWP نظرياً
MWP هي تقنية للتحكم في الطاقة نحن نستعملها هنا للتحكم في كمية الطاقة لكل LED.
يعرض الرسم البياني التالي إشارة MWP على منفذ الأردوينو
تقريبا كل 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 عدد1
مقاومة 220 اوم عدد 3
اسلاك
اردوينو من نوع اونو عدد 1
لوحة توصيل
طريقة التوصيل
سوف نقوم بتوصيل ليد ال rgb الى لوحة التوصيل بحيث نوصل الرجل الطويلة مع المنفذ الأرضي، ومن ثم نقوم بتوصيل باقي الأرجل الى أحد أطراف المقاومة والطرف الاخر للمقاومة الى منافذ الاردوينو وهم D9, D10,D11
كما في الشكل التالي:
بعد ما قمنا بتوصيل الدائرة سوف ننتقل الى الكود لشرحه.
الكود:
سوف نقوم بتعريف 3 متغيرات و ربطهم من المنافذ المتصلة في اليد عن طريق هذه الأمر
ومن ثم تعريف المخارج الثلاث كمخارج في دالة ال setup () عن طريق هذا الأوامر
قبل الذهاب الى الدالة loop سوف نقوم بتعريف داله جديده وهي setcolor و في هذه الدالة تم اخذ ثلاث عوامل متغيرة، واحدة لكل بريق لون ، سيكون العامل المتغير من 0 وحتى 250
حيث يعني 0 القيمة الصغرى و 255 هي القيمة القصوى
تستدعى الدالة analogWrite للتحكم في بريق كل LED
إذا نظرت في دالة loop فستلاحظ اننا نغير في قيمة الألوان التي نريد عرضها ثم ننتظر ثانية قبل أن نذهب إلى اللون التالي. وذلك بكتابة اسم الدالة ومن ثم كتابة قيم الألوان لكل متغير كما يلي:
الكود كامل
الألوان
السبب وراء قدرتنا على خلق أي لون نريده من طريقة مزج وتغير سطوع كل من الأحمر والاخضر والأزرق هو انه لدينا في أعيننا مستقبلات لهذه الألوان الثلاث ويأخذ العقل هذا الكمية من السطوع من نسبة الألوان ليمزجها ويستخرج لون جديد منها.
بلغة أخرى، استعمالنا لثلاث إضاءات هو طريقة لخدع العين. نفس الفكرة مستعمل في أجهزة التلفاز، حيث كل بيكسل متكون من ثلاث نقاط (أحمر، أخضر،أزرق).
إذا وضعنا القيمة القصوى لكل LED فسنحصل على اللون الأبيض، وإذا أغلقنا LED الأزرق فسنحصل على اللون الأصفر الذي هو مزيج بين الأحمر والأخضر اما إذا أغلقنا اللون الأخضر فسنحصل على اللون البنفسجي وهو عباره عن المزيج بين اللون الأحمر والأزرق وهكذا. كما ويمكن لنا أن نحصل على كل ألون الطيف عن طريق التحكم في في هذا الألوان الثلاثة، اما اللون الأسود هو ليس لون انما هو نتيجة غياب الضوء. إذاً الطريقة الأقرب للوصول إليه هو بإطفاء جميع اللدات والضوء في الغرفة التي تستعملها.
استعمال ألوان الإنترنت
يمكنك أيضا إنتاج أي لون تريده وذلك باختياره عن طريق أي مصدر من المصادر الخاصة بالألوان بالدخول مثلا الى هذا الرابط
https://color.adobe.com/create/color-wheel/
إذا كنت قد قمت ببعض البرمجة من قبل فستعلم أن الألوان ترمز إليها بأرقام HEX على القاعدة 16. مثلا يرمز للون الأحمر بـ FF0000# فهذه الأرقام 6 ترمز للون متكونة من ثلاث أزواج، فأول رقمين يرمزان للأحمر، الرقمان التاليان للأخضر والأخيران للأزرق الأحمر هو FF0000# لأن فيه القيمة القصوى للأحمر وليس فيه أي ألوان أخرى
بهذه الطريقة يمكن لنا ان نستخرج أي لون بسرعة. لنصنع هذا اللون مثلاً (#4B0082) قيمة الأحمر الأخضر والأزرق هم كالآتي.
يمكنك أن تضع هذه القيم في دالة “SetColor” وذلك بإضافة 0x أمام الأرقام وذلك لأنها ارقام HEX لنقم بكتابة هذا الون في الدالة ومن ثم تحميله على الاردوينو: #4B0082 وقم باختيار الوان أخرى واضافتها الى دالة اللوب loop كما يلي
لا تنسى أن تضيف امر الـ“Delay” بعد كل لون حتى تتمكن من مشاهدته.
المرجع : roboticx
قبل البدء في الدرس سوف اتحدث عن ال RGB led و خاصية ال PWM بشكل عام ,
الـ RGB LED :
عبارة عن LED ملون مثل اي LED عادي ولكن يوجد داخل الـ LED الملون 3 من ال led وهي، أحمر LED أخضر LED وأزرق LED ويمكننا التحكم فيهم، كما يمكننا إنتاج الالوان بدمج كل من ألوانها عن طريق التحكم في بريق كل واحدة من هذه الإضاءات.
يتكون اللد الملون من نوعين وهما common anode وال common cathod كما ويوجد له أربع أرجل بحيث يوجد أحد الارجل أطول من الباقي حيث يختلفوا بطريقة التوصيل الداخلية لليد كما في الشكل التالي
يكون ال common anode الأطراف الموجبة للدات الثلاثة متصلة مع بعضها البعض اما في حالة ال comman cathod يكون الأطراف السالبة متصلات مع بعضها البعض ويكون الرجل الطويلة هي النقطة المشتركة.
MWP نظرياً
MWP هي تقنية للتحكم في الطاقة نحن نستعملها هنا للتحكم في كمية الطاقة لكل LED.
يعرض الرسم البياني التالي إشارة MWP على منفذ الأردوينو
تقريبا كل 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 عدد1
مقاومة 220 اوم عدد 3
اسلاك
اردوينو من نوع اونو عدد 1
لوحة توصيل
طريقة التوصيل
سوف نقوم بتوصيل ليد ال rgb الى لوحة التوصيل بحيث نوصل الرجل الطويلة مع المنفذ الأرضي، ومن ثم نقوم بتوصيل باقي الأرجل الى أحد أطراف المقاومة والطرف الاخر للمقاومة الى منافذ الاردوينو وهم D9, D10,D11
كما في الشكل التالي:
بعد ما قمنا بتوصيل الدائرة سوف ننتقل الى الكود لشرحه.
الكود:
سوف نقوم بتعريف 3 متغيرات و ربطهم من المنافذ المتصلة في اليد عن طريق هذه الأمر
PHP:
int redPin = 11;
int greenPin = 10;
int bluePin = 9;
ومن ثم تعريف المخارج الثلاث كمخارج في دالة ال setup () عن طريق هذا الأوامر
PHP:
void setup()
{
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
قبل الذهاب الى الدالة loop سوف نقوم بتعريف داله جديده وهي setcolor و في هذه الدالة تم اخذ ثلاث عوامل متغيرة، واحدة لكل بريق لون ، سيكون العامل المتغير من 0 وحتى 250
حيث يعني 0 القيمة الصغرى و 255 هي القيمة القصوى
تستدعى الدالة analogWrite للتحكم في بريق كل LED
PHP:
void setColor(int red, int green, int blue)
{
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}
إذا نظرت في دالة loop فستلاحظ اننا نغير في قيمة الألوان التي نريد عرضها ثم ننتظر ثانية قبل أن نذهب إلى اللون التالي. وذلك بكتابة اسم الدالة ومن ثم كتابة قيم الألوان لكل متغير كما يلي:
PHP:
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);
}
الكود كامل
PHP:
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)
{
#ifdef COMMON_ANODE
red = 255 - red;
green = 255 - green;
blue = 255 - blue;
#endif
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 كما يلي
PHP:
setColor(0x4B, 0x0, 0x82);
المرجع : roboticx
التعديل الأخير: