اردوينو – الدرس الثامن – تغيير درجة الالوان لـ RGB LED

مبتدئ

image_pdfimage_print

في هذا الدرس ستقوم بتطبيق ماتعلمته بالدرس السابع والرابع وذلك لاستخدام الازرار في تغيير درجة الالوان في RGB Led

1

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

لاتمام هذا الدرس عليك توفير القطع التالية

10mm Common Cathode RGB LED

10mm Common Cathode RGB LED

270 Ω Resistor

270 Ω Resistor

عدد 3

Tactile push switch

Tactile push switch

عدد 3

Half-size Breadboard

Half-size Breadboard

لوح تجارب حجم متوسط

Arduino Uno R3

Arduino Uno R3

Jumper wires

Jumper wires

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

 كما يظهر لك بالتصميم التالي فإن السن الأطول لـRBG LED (السن الثاني) تم وضعه في الصف الثاني من لوح التجارب ليتم توصيلة بـGND

نفترض ان لديك RBG LED ذات توصيل سالب ‘common cathode’ ، اذا كان لديك RBG LED ذات توصيل موجب ‘common anode’ قم بتوصيل السن الأطول بـ 5V عوضاُ عن GND
لاحظ عند استخدام التوصيل الموجب سيتم عكس دورة الألوان.

8

كود الأردوينو

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

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

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

اذا اردت البدء مره اخرى كل ماعليك فعله هو الضغط على زر اعادة البدء ‘reset’ الموجود بمتحكم الأردوينو ( الزر الأحمر الموجود بالقرب من منفذ الـUSB)

int redLEDPin = 11;
int greenLEDPin = 10;
int blueLEDPin = 9;
 
int redSwitchPin = 7;
int greenSwitchPin = 6;
int blueSwitchPin = 5;
 
int red = 0;
int blue = 0;
int green = 0;
 
void setup()
{
  pinMode(redLEDPin, OUTPUT);
  pinMode(greenLEDPin, OUTPUT);
  pinMode(blueLEDPin, OUTPUT);  
  pinMode(redSwitchPin, INPUT_PULLUP);
  pinMode(greenSwitchPin, INPUT_PULLUP);
  pinMode(blueSwitchPin, INPUT_PULLUP);
}
 
void loop()
{
  if (digitalRead(redSwitchPin) == LOW)
  {
    red ++;
    if (red > 255) red = 0;
  }
  if (digitalRead(greenSwitchPin) == LOW)
  {
    green ++;
    if (green > 255) green = 0;
  }
  if (digitalRead(blueSwitchPin) == LOW)
  {
    blue ++;
    if (blue > 255) blue = 0;
  }
  analogWrite(redLEDPin, red);
  analogWrite(greenLEDPin, green);
  analogWrite(blueLEDPin, blue);  
  delay(10);
}

مخطط الكود مشابة لمخطط الدرس الرابع ، لدينا 3 منافذ مخارج للتحكم بالـLED.
وهي منافذ تعديل عرض النبضة PWD (pulse width modulation) لنتمكن من وضع مقدار الطاقة التي نرغب وضعها لكل لون .

هنالك ثلاث منافذ اخرى نحتاجها ، واحدة لكل زر وسيتم تعريفها داخل دالة setup لتكون منافذ ادخال والتي ستعطي قيمة عالية (قيمة تساوي 1 ) عند عدم الضغط عليها، وعند الضغط عليها ستعطي قيمة منخفضة (قيمة تساوي 0)

بعد تعريف المنافذ ، نقوم بتعريف المتغيرات للالوان (احمر ، اخضر ، ازرق )

int red = 0;
int blue = 0;
int green = 0;

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

دالة loop تحتوي على جزئين ، الجزء الأول يقوم بالتحقق من قيم الأزرار والقيام بمايلزم . كل زر يعمل نفس الوظيفة ولكن  للون مختلف. هذا الجزء هو التالي

  if (digitalRead(redSwitchPin) == LOW)
  {
    red ++;
    if (red > 255) red = 0;
  }

اذا  كانت قيمة red switch pin (كقراءة رقمية) هي قيمة منخفضة (اي تساوي صفر ) فهذا يعني أنه يتم الضغط على الزر حالياً ، فنقوم بإضافة 1 لمتغيرred الاحمر
الأمر red++ يعني اضافة 1 للمتغير

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

الجزء الثاني من دالة loop تحمل قيم نظيرية ‘analogWrite’s’ لكل LED

  analogWrite(redLEDPin, red);
  analogWrite(greenLEDPin, green);
  analogWrite(blueLEDPin, blue);

أخيراً، سيكون هنالك تأخير طفيف delay  بنهاية  loop لإبطاء تحويل الألوان (يمكن تغيير قيمة التأخير)

امور اخرى عليك القيام بها

قم بازالة خاصية التأخير بنهاية loop ، يمكنك ذلك عبر جل السطر عبارة عن تعليق comment وذلك عن طريق وضع // ببداية السطر

  analogWrite(blueLEDPin, blue);  
  // delay(10);
}

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

بدون خاصية التأخير delay ، سترى قيمة سطوع بشكل عشوائي كلما قمت برفع اصبعك من الزر.

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