قد تحدثنا في الجزء الأول لهذه التدوينة عن الباعث ثلاثي الألوان RGB و كيفية وصله و برمجة المتحكم الأصغري على بيئة الأردوينو للتحكم بالألوان التي يضيئها .
اليوم سأعرض الطريقة الثانية في التحكم بهذا الباعث الضوئي مستفيداً من الأوامر التناظرية Analog Write و تقنية التعديل النبضي PWM
الفرق بين الطريقة الرقمية و التناظرية , أن الرقمية محصورة بثمانية الألوان فقط , أما هذه الطريقة"التناظرية" فتعطي مجالأ واسعاً من الألوان أكبر من الرقمي .
لنبدأ بالتعرف عليها أكثر :
البرمجة باستخدام
أوامر الإخراج التناظرية analog Write:
و هي الطريقة الأكثر شيوعاً للتحكم بالRGB نظراً للكم الهائل من الألوان الممكن الحصول عليها
" فعلياً حسب تجربتي 216 لون "
كيفية البرمجة :
هنا سنستخدم أقطاب الأردوينو ك PWM Pin و هنا يمكننا التحكم
بفولتية الخرج 0-5 فولت بحيث تكون الحساسية 19.53 ملي فولت \وحدة " مدى
التحكم من 0 -255 وحده "
هنا سنستخدم القيم التي في برمجية الPaint أو أي برنامج
يمكنه أن يعطينا قيم تناظرية لكل لون على حدا .
مثلاً : اللون الأزرق يعبر عن( 0,0,255) و هكذا ....
لنبدأ بكتابة الألوان التي نريد إظهارها و بموازاتها القيم التناظرية لها
" أو يطلق عليها الرمز العشري Decimal code :
هذا رابط لموقع إلكتروني يحتوي على كل الألوان بالإضافة للرموز العشريه لها
الجزء الأكثر إمتاعاً .... إنشاء مكتبة خاصة للطريقتين على الأردوينو .
قمت بعمل مكتبه خاصة لكل طريقة لتسهل علينا التحكم مستقبلاً بالrgb و لتقليل الوقت اللازم لعمل نفس البرنامج . سأشرح المكتبة الخاصة بالRGB و التي قمت بتنفيذها خلال التدوينة القادمة.
اليوم سنتكلم عن موضوع جديد و ممتع في عالم الإضاءة ألا و هو ال RGBو سنتكلم عن ماهيته , و أنواعه و كيف يعمل ؟
كما سنتطرق لكيفية توصيله مع الأردوينو و نتعلم عدة تقنيات لبرمجته .
أولاً : ما هو ال RGB ؟
هو نوع من أنواع الباعث الضوئي LED يحتوي على الألوان
الرئيسية المكونة لكل الألوان في الطبيعة "الأخضر و الأحمر و الأزرق" و
عندما يتم خلط هذه الألوان بنسب مختلفة , تظهر ألوان أخرى نتيجة هذا الخلط ,
كالأصفر و الأبيض و الزهري ..ألخ كلٌ حسب نسبة "شدة" إضاءة كل لون من
الألوان الأساسية RGB
تسمى هذه الطريقة بطريقة " الباعث متعدد الألوان " و هي بحاجة
لدارة إلكترونية لعمل هذا الخلط بُغية الحصول على ألوان مختلفة .
يتكون ال RGBمن 4 أرجل , رجل مشترك "مصعد أو
مهبط" و رجل لكل لون رئيسي " أحمر ,أخضر , أزرق " كما في الصورة .
ال RGBيمكن أن يكون ذا مصعد مشترك أو مهبط مشترك , و
لكل نوع طريقة مختلفة قليلاً في التحكم "أي في كود البرمجة"
لنبدأ العمل J :
لنبدأ الآن العمل و لنحضر المكونات الرئيسية لبداية تعاملنا مع ال RGB:
1) RGBLED 5mm
أنا استخدمت الباعث ذو المهبط المشترك
2)مقاومة 470 أوم .
3)أسلاك
4) لوحة تعليمية مثقوبة BreadBoard
5) أفوميتر
6) بطاقة أردوينو .
أولاً كيف نتحقق من نوعية ال RGBالذي بين
يدينا ؟ هل هو مصعد مشترك أم مهبط مشترك ؟
1) أول طريقة للأختبار هو استخدام طريقة الأفوميتر , و التي تعتمد على
خاصية فحص الديود في الجهاز , يجب عند وصل القطب الموجب للأفوميتر بالطرف الموجب
للباعث الضوئي و الطرف السالب للأفوميتر بالطرف السالب للباعث الضوئي , يجب عندها
أن يضيئ الLED أو أن تظهر قراءة على
شاشة الجهاز .
و إذا لم يضيئ ال LED نقوم بعكس أقطاب
الأفوميتر للتأكد .
إذا لم يضيئ ال LED فأعلم أن هناك عطل بالديود أو خطأ بضبط الجهاز
2) بإستخدام طريقة توصيل الدارة بمصدر تغذية :
فقط تقوم بإيصال التغذية للأقطاب بشكل صحيح " ولا تنسى المقاومة لكي لا يتلف
الled.
ممتاز لقد أنتهينا من الجزء الأول من العمل .
السؤال التالي الآن ... ما هي النسبة التي يجب أن نخلط بها الألوان لنحصل
على ألون المطلوب ؟ و كيف يتم ذلك بالبرمجة ؟
حسناً , يجب معرفة في البداية
الألوان الفرعية و نسبة تداخل كل لون اساسي فيها , يتم معرفة هذا بطرق
عديدة , حيث أن أغلب برامج الرسوم و التعامل مع الصور تعطي هذه النسب بشكل دقيق .
فمثلاً برنامج الpaint المتوافر لدى الجميع
تقريباً يوفر ما نحتاجه للبرمجة , و طريقة الحصول على القيم كالآتي
كيفية توصيله :
يتم توصيل الدارة مع بطاقة الأردوينو على الشكل التالي :
يمكن أيضاً توصيل فقط مقاومة واحدة على المدخل المشترك " 150- 220 أوم
" .
معلومة مهمة ايضاً حول برمجة ال RGB, حيث يمكننا عمل جدول
يسمى جدول الحقيقة Truth
table يمكننا معرفة ما هو اللون الذي
سينتج عند كل عملية إدخال و هذا ما سنراه بعد قليل :
الآن لندخل للبرمجة ..
برمجة ال RGB باستخدام الأردوينو :
سنسنخدم طريقتين للبرمجة :
1) البرمجة باستخدام أوامر الإخراج الرقمية digital Write .
2) البرمجة باستخدام أوامر الإخراج التناظرية analog Write
و سنرى الفرق بين الطريقتين كما يلي :
1) البرمجة
باستخدام أوامر الإخراج الرقمية digital Write:
يستحدم الأمر digital Write لتفعيل أو عدم تفعيل الخرج , و محددات استخدام
هذه الطريقة هي محدودية الألوان التي يمكن الحصول عليها " عددها 23
و يساوي 8 ألوان فقط ! ."
سنقوم بعمل جدول حقيقة و استخدام طريقة برمجية الPaint لمعرفة
الألوان التي ستظهر :
هذا ما سنستخدمه في كتابة برنامج الأردوينو الآن
أولاً جدول الحقيقة Truth Table هو جدول يتم وضع جميع الأحتمالات التي ستظهر عند تطبيق الأمر و إخراجه لمداخل المتحكم , أي بمعنى أخر هو جدول يوضح العلاقة بين المدخلات و المخرجات . لنرى الجدول التالي و الذي يوضح جدول الحقيقة لمشروعنا :
جدول الحقيقة للRGB
و للتوضيح أكثر , لو اردنا إظهار اللون الأحمر RED يجب أن تكون المداخل المربوطة مع مدخلي اللون الأزرق و الأخضر في وضع منخفضLOW و مدخل اللون الأحمر في وضع مرتفع HIGH و هكذا .
توصيلة الدارة كما في الصورة أدناه .
توضيح بسيط للبرنامج ... قمت هنا بكتابة الأوامر في جملة استدعاء لوحدها و
وضعت كل تعليمات الخرج فيها ثم قمت باستدعائها داخل جملة التكرار , مثال
Void setup(){
…….
}
Void Red(){
Write your
code for red color ….
}
Void loop(){
// need to
blink red color….
Red();…..
call statement , here the prog. Will return
to void Red and execute it then return to loop statement .
في البوست السابق طرحت هذا التساؤل .. هل بإمكاننا التحكم بمسجلي أزاحة باستخدام نفس عدد المداخل التي استخدمناها للتحكم بمسجل إزاحة واحد ؟
الجواب نعم ! هناك مدخل لم نقم بتوصيله , هو المدخل رقم 9 في مسجل الإزاحة , يقوم هذا المدخل بنقل" Shifting " للبيانات الموجودة في المسجل إذا تم تحميل بايت لمسجل الإزاحة , و يحمل البايت الذي تم استبداله للمسجل الإزاحة الآخر المربوط معه. هذه الطريقة مفيد جداً لو أردنا التحكم بالبواعث الضوئية , المقطّعات السباعية Seven segment , مصفوفات البواعث الضوئية LED Matrix , الشاشات البلورية الكريستالية LCD , و غيرها الكثير . لكي نعرف الطريقة التي يمكننا من خلالها نقل أكثر من بايت واحد عبر عدد من مسجلات الإزاحة المربوطة معاً . سنحتاج لنفس المعدات التي استخدمناها في التجربة السابقة , لكن سنضيف مسجل إزاحة آخر . مخطط الدارة يكون كما يلي :
لم يختلف توصيلها عن التوصيل الماضي سوى توصيل المدخل # 9 من مسجل الإزاحة الأول إلى المدخل رقم 14 من مسجل الإزاحة الثاني , و هكذا ....
اليوم سنتحدث سنسلط الضوء على فكرة على درجة كبيرة من الأهمية تساعدنا على قيادة عدد كبير من البواعث الضوئية LED ألا و هو مسجلات الإزاحة Shift Register.
ما هو مسجل الإزاحة Shift Register ؟
هو مجموعة متسلسلة من القلابات flip flop التي لها نفس دور الساعة CLK , و خرجها متصل بقلاب آخر , هذا يعمل على نقل البيانات بين المسجلات بتسلسل , و تنتقل البيانات عندما يتغير دور الساعة صعوداً أو هبوطاً .
تنقسم مسجلات الإزاحة إلى عدة أنواع و هي
1.Serial in ,
serial out " SISO "
2.Serial in
,parallel out "SIPO"
3.Parallel in
,serial out "PISO"
Our shift
register used as" SISO " or
"SIPO"
سنستخدم مسجل الإزاحة 74HC595 و الذي سيكون له استخدامات كثيرة في الدروس القادمة , نظراً لسهولة برمجته .
توزيع الأرجل لهذه الدارة المتكاملة :
سنشرح كل وظيفة كل مدخل من مداخل مسجل الإزاحة .
الرجل # 14:
الرجل المسؤولة عن إدخال البيانات تسلسلياً . يتم إزاحة البيانات على هذا المدخل
الرجل رقم 13 "تمكين الخرج ":
هذا المدخل مسؤول عن إظهار البيانات على المخرج ، يجب أن تكون هذا الرجل في وضعية منخفض LOW حتى يظهر الخرج. الرجل # 12 : Storage latch input تقوم هذه الرجل بوظيفة إمساك البيانات و تخزينها عند تتحول حالتها إلى وضع مرتفع HIGH . الرجل # 11 : دخل الساعة , عندما تكون في وضع مرتفع HIGH تسمح للبيانات على الدخل التسلسلي" مدخل #14 " بإزاحة بيانات بمقدار 8 بت . الرجل # 10 : مدخل التصفير RESET إذا كان هذا المدخل بوضع منخفض LOW فإن الخرج يكون قيمته صفر . لذلك نضع هذا المربط على الوضع المرتفع HIGH إذا أردنا ظهور نتائج المسجل . الرجل# 9: تسمى Serial Data Output تعمل على إزاحة بيانات الخرج "8بت" التي تظهر باتجاه مسجل إزاحة آخر , أي بأختصار لو أردنا شبك أكثر من مسجل إزاحة واحد يمكننا ذلك بوصل هذه الرجل مع الرجل #14 في المسجل الآخر . الأرجل 15 , 1-7 : أرجل الخرج " 8 بت " . يمكنك العودة إلى النشرة الفنية الحصول على مزيد من المعلومات. باستخدام مسجل الإزاحة , نحتاج فقط ل 3-4 أرجل ففقط من المتحكم للتحكم ب 8 بت و هذا يعتبر مفيد جداً لو أردنا استخدام المتحكم في تطبيقات متعددة .
لنبدأ الآن بتجهيز معداتنا , لنبدأ استعمال هذه الدارة المتكاملة .
سنحتاج لهذه التجربة المكونات التالية : 1) بطاقة أردوينو . 2)LED عدد 8
3) مسجل إزاحة من النوعShift register 74HC595
4)بعض الأسلاك Some wires
5)مقاومة 100Ohm عدد 8
6)مكثق 100nF
7) لوحة تعليمية مثقوبة BreadBoard
الشكل أدناه يبين توصيل الدارة كهربائيا .
صورة تبين التوصيل , مع الأنتباه إلى أن المكثق مربوط مع المدخل رقم 12 و الأرضي
و هذا مخطط الدارة لمن يستصعب من فهم المخطط أعلاه
الآن و قبل البدء بالبرمجة , سأوضح امر مهم جديد , ألا وهو أمر shiftOut
قد فاتني ذكر أمر هو أن مسجل الإزاحة 74595 , تتم برمجته بطريقة التخاطب الشهيرة SPI و هي اختصار Serial Peripheral Interfaceو هو طريقة
لنقل البيانات تزامنياً , يمكن بداية الإطلاع على مكتبتها على الرابط هنا
نعود للأمر shiftOut , هذا الأمر هو الذي سنقوم من خلاله بنقل البيانات من المتحكم إلى مسجل الإزاحة .
الطريقة سهلة , يكتب الكود الخاص بمقل البيانات على الصيغة التالية
shiftOut(datapin,clockpin,bitorder,value);
حيث :
datapin: هو المدخل المسؤول عن إخراج البيانات بت بت .
clockpin: المدخل المسؤؤل عن دخل الساعة المنظم للمتحكم , و يتغير الخرج عندما يقدح المسجل باستخدام هذا المدخل .
bitorder: هو خيار يحدد طريقة نقل المعلومات إلى المسجل
إما أن تكون MSBFIRST أي ابتداءاً من البت ذو القيمة الأعلى اهمية للأقل أهمية "من اليسار لليمين "
أو أن تكون LSBFIRST أي من البت الأقل أهمية للأعلى أهمية " من اليمين لليسار"
في البرنامج هنا , قد تلاحظ استخدام مدخل إضافي هو PIN 10 من متحكم AVR و الهدف منه إعطاء تحكم اكبر بمسجل الإزاحة من حيث ظهور الخرج, فأنا أريد أن لا تضيئ كل البواعث الضوئية بمجرد تشغيل المسجل , فهذا خطأ .
يمكنك مشاهدة الفيديو لترى تطبيق البرنامج الفعلي .
الآن و بعد أن تمكنا من الإلمام بطريقة استخدام مسجل إزاحة واحد , ننتقل لسؤال مهم , هل بإمكاننا التحكم بمسجلي أزاحة باستخدام نفس عدد المداخل التي استخدمناها للتحكم بمسجل إزاحة واحد ؟
سأُجيب عن هذا التساؤل في البوست القادم , إلى ذلك الوقت إلى اللقاء .