مقدمة
في العادة لا تستخدم آيسيات خارجية عند وصل ليدات كثيرة مع الأردوينو و لكن عند الكثرة قد لا يكون من الممكن التحكم بها عبر الأردوينو لأن عدد المخارج أقل من عدد هذه الليدات .
سيتم في هذا المشروع تعلم استخدام دارات multiplexer/demultiplexer لتقليل عدد المخارج اللازمة للتحكم بالليدات ، و لزيادة التحدي سنستخدم ليدات RGB و التي تختلف عن الليدات العادية بأنها قادرة على بث الألوان الرئيسية R red G green B blue و الأمزجة الممكنة بينهما و ذلك من خلال تحديد قيمة الجهد المطبق و هي بحاجة إلى استخدام مخارج نوع PWM المحدودة أصلاً .
ليد RGB
يتألف الليد RGB من ثلاث ليدات داخلية ( أحمر و أخضر و أزرق ) و بالتالي يوجد له 3 أرجل بالإضافة إلى رجل و هي عبارة عن النقطة المشتركة بينها ، بالتالي لدى هذا النوع من الليدات أربع أرجل ، و لها نوعين تبعاً لذلك :
- النقطة المشتركة هي (+) .
- النقطة المشتركة هي (-) .
يتم تمييز الأرجل من خلال أطوالها حيث يكون الرجل الأطول هي النقطة المشتركة و الرجل على يسارها هي red و على يمنها Green ثم Blue ، كما يمكن فحص الأرجل عبر مقياس متعدد multimeter و ذلك من وضع نمط فحص الديود .
لإضاءة اللون الاحمر مثلاً فإننا نطبق جهد على رجل الليد الأحمر فقط و نطفئ الأخضر و الأزرق . و لإضاءة لون أبيض فإننا نضيء الليدات الثلاثة حيث أن اللون الأبيض هو مزيج الألوان الثلاثة معا و كذلك أي لون هو مزيج للألون الثلاثةبنسب معينة .
يمكن عبر الأردوينو الحصول على خرج بأي قيمة جهد (بين 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
مخطط الوصل
الكود
/* 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