Consulting Services
أردوينومشاريع

قيادة ليدات RGB باستخدام أردوينو و دارة demultiplexer

مقدمة

في العادة لا تستخدم آيسيات خارجية عند وصل ليدات كثيرة مع الأردوينو و لكن عند الكثرة قد لا يكون من الممكن التحكم بها عبر الأردوينو لأن عدد المخارج أقل من عدد هذه الليدات .

سيتم في هذا المشروع تعلم استخدام دارات multiplexer/demultiplexer لتقليل عدد المخارج اللازمة للتحكم بالليدات ، و لزيادة التحدي سنستخدم ليدات RGB و التي تختلف عن الليدات العادية بأنها قادرة على بث الألوان الرئيسية R red G green B blue و الأمزجة الممكنة بينهما و ذلك من خلال تحديد قيمة الجهد المطبق و هي بحاجة إلى استخدام مخارج نوع PWM المحدودة أصلاً .

ليد RGB

يتألف الليد RGB من ثلاث ليدات داخلية ( أحمر  و أخضر  و أزرق ) و بالتالي يوجد له 3 أرجل بالإضافة إلى رجل و هي عبارة عن النقطة المشتركة بينها ، بالتالي لدى هذا النوع من الليدات أربع أرجل ، و لها نوعين تبعاً لذلك :

  • النقطة المشتركة هي (+) .
  • النقطة المشتركة هي (-) .

يتم تمييز الأرجل من خلال أطوالها حيث يكون الرجل الأطول هي النقطة المشتركة و الرجل على يسارها هي red و على يمنها Green ثم Blue ، كما يمكن فحص الأرجل عبر مقياس متعدد multimeter و ذلك من وضع نمط فحص الديود .

RGB_common_K_A

RGB_RGBpin

الشكل الحقيقي لليد
الشكل الحقيقي لليد

لإضاءة اللون الاحمر مثلاً فإننا نطبق جهد على رجل الليد الأحمر فقط و نطفئ الأخضر و الأزرق . و لإضاءة لون أبيض فإننا نضيء الليدات الثلاثة حيث أن اللون الأبيض هو مزيج الألوان الثلاثة معا  و كذلك أي لون هو مزيج للألون الثلاثةبنسب معينة .

يمكن عبر الأردوينو الحصول على خرج بأي قيمة جهد (بين 0 و 5 ب 256 تدريجة ) نريد عبر أرجل PWM و يمكن معرف الجهود التي نريد تطبيقها عبر رمز اللون بالHEX فهو يحوي ثلاث مجموعات أرقام (كل مجموعة خانتين ) و كل مجموعة هي للون . مثلاً : #FFFFFF هي للون الابيض أي أنه ناتج عن دمج الألون التالية :

  • الأحمر FF و بالتحويل من نظام العد السداسي عشر إلى العشري فهو يساوي 255 .
  • الأخضر  FF و بالتحويل من نظام العد السداسي عشر إلى العشري فهو يساوي 255 .
  • الأزرق FF و بالتحويل من نظام العد السداسي عشر إلى العشري فهو يساوي 255 .

و إن تابع الخرج التماثلي في الأردوينو يأخذ قيم تتراوح بين 0 و 255 . و يمكن الحصول على رمز اللون  ( و بالتالي نسب مزجه من الألوان الثلاثة) من خلال برنامج رسم أو مواقع color hex code .

multiplexer/demultiplexer

إن الـ multiplexer هو دارة منطقية تستخدم لانتخاب (اختيار) دخل واحد من مجموعة مداخل و أما الـ demultiplexer فهو دارة منطقية لها آلية عمل مشابهة و لكن لانتخاب(اختيار) خرج واحد من عددة مخارج مع وجود دخل موحد . عملياً يصنع البعض هذه الدارات لتعمل بالاتجاهين لذلك يسمونها multiplexer/demultiplexer .

تتألف هذه الدارة بشكل عام من مجموعة من الأرجل و هي :

  • أرجل الانتخاب(الاختيار) : المسؤولة عن اختيار أية قناة دخل/خرج ستعمل من بين مجموعة الأقنية الموجودة .
  • أرجل الدخل/الخرج المشترك :  الدخل الذي سيطبق على الخرج/الدخل المنتخب .
  • أرجل الأقنية التي ستُنتخب : ليكن لدينا multiplexer/demultiplexer له قناتين (مجموعتين) من المداخل/المخارج و يمكن حسب الدارة أن تكون كل قناة تتألف من خط إلى عدّة خطوط لذلك مثلاً النوع الذي سنستخدمه في هذا الدرس CD4053 يسمى triple 2 channel multiplexer  أي قناتين و كل قناة ثلاثية (بثلاث خطوط) .
  • أرجل التغذية .

التطبيق العملي

سوف نستخدم أردوينو و نأخذ منها ثلاث مخارج PWM للتحكم بالليدين بنفس الوقت أي أنها خرج مشترك و سنختار خرج (ليد) من بين الليدين لكي يطبق عليه هذا الخرج ، حيث يتم ذلك عبر آيسية CD4053 .

للاستفادة من ميزة اتصال أردوينو مع الحاسب تم التحكم باختيار اللون عبر الحاسب من خلال ارسال محرف عبارة عن أول حرف فقط (للسهول فقط r – g -b ) .

و يتم انتخاب أية قناة (ليد) من خلال قاطع موصول إلى الأرضي و التغذية و النقطة المشتركة إلى مدخل الانتخاب ، فحسب جدول الحقيقة فإنه إذا كان الدخل 0 يتم انتخاب قناة و إذا كان واحد فإنه ينتخب الأخرى .

تنبيه : الليد الذي تم استخدامه في هذا الدرس من نوع مصعد مشترك (+) و بالتالي تفعيل الليد عبر جعله في حالة 0 أول LOW و لا ننسى طبعاً استخدام مقاومات حماية لكل ليد جزءي عند كل رجل من الليد RGB بقيمة 470 أو 220 أوم  .

CD4053_truthtable

مخطط CD4053

مخطط وظيفي لـ CD4053
مخطط وظيفي لـ CD4053
توضيح لأرجل الآيسية
توضيح لأرجل الآيسية

مخطط الوصل

مخطط توضيحي للتوصيل
مخطط توضيحي للتوصيل

الكود

/*
RGB and CD4053 code by atadiat.com
2013-2014
*/

int red_led_pin = 6 ;
int green_led_pin = 10 ;
int blue_led_pin = 9 ;

void setup(){

 pinMode(red_led_pin,OUTPUT);
 pinMode(green_led_pin,OUTPUT);
 pinMode(blue_led_pin,OUTPUT);

Serial.begin(9600);

}

void loop(){
  int color ;
  if(Serial.available()){
  color = Serial.read();}

  switch (color) {
   case 'r' :

     analogWrite(red_led_pin, 0);
     analogWrite(green_led_pin, 255);
     analogWrite(blue_led_pin, 255);
     break ;
   case 'g' :

     analogWrite(red_led_pin, 255);
     analogWrite(green_led_pin, 0);
     analogWrite(blue_led_pin, 255);
     break ;  
   case 'b' :

     analogWrite(red_led_pin, 255);
     analogWrite(green_led_pin, 255);
     analogWrite(blue_led_pin, 0);
     break ;

  }
}

شرح عن الكود

تم بداية تعريف متحولات تدل على الأرجل المستخدمة للدخل المشترك ، و هذا لكي يصبح الكود سهل التعديل في حال استخدم أرجل أخرى ، ثم في تابع التهيئة setup و الذي ينفذ لمرة واحدة أول إقلاع المتحكم ، فإنه يتم تفعيل هذه الأرجل كخرج و أيضاً إنشاء اتصال تسلسلي للربط مع الحاسب بسرعة 9600 .

يتم في تابع الحلقة loop و الذي ينفذ طالما المتحكم في حالة عمل ، استقبال المحرف عبر هذا الاتصال في حال كان مهيئ و تخزينه في متحول من نوع محرف ، ثم يتم استخدام بنية switch لمعالجة الاحتمالات حسب المحرف .

فيديو التنفيذ

https://www.youtube.com/watch?v=F500fBec8Qk

روابط خارجية

 

Yahya Tawil

مؤسس عتاديات وأسعى لدعم المحتوى العربي عن النظم المضمنة في الويب العربي. خبرتي في مجال النظم المضمّنة تتركز في كتابة البرامج المضمنة وتصميم الدارات المطبوعة والمخططات وإنشاء المحتوى.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

هذا الموقع يستخدم Akismet للحدّ من التعليقات المزعجة والغير مرغوبة. تعرّف على كيفية معالجة بيانات تعليقك.

زر الذهاب إلى الأعلى