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

مبتدئ

image_pdf

الكود البرمجي

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

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# يمكن أن تجد أرقام العديد من الألوان في الجدول التالي:

RGB LED

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

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

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

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

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

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

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

 

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

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

10

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

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

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

X
Product added to the cart