الاثنين، 24 ديسمبر، 2012

RGB LED controlled By arduino part 1

RGB LED Digital control 



اليوم سنتكلم عن موضوع جديد و ممتع في عالم الإضاءة ألا و هو ال RGB و سنتكلم عن ماهيته , و أنواعه و كيف يعمل ؟



كما سنتطرق لكيفية توصيله مع الأردوينو و نتعلم عدة تقنيات لبرمجته .

أولاً : ما هو ال RGB ؟


هو نوع من أنواع الباعث الضوئي LED يحتوي على الألوان الرئيسية المكونة لكل الألوان في الطبيعة "الأخضر و الأحمر و الأزرق" و عندما يتم خلط هذه الألوان بنسب مختلفة , تظهر ألوان أخرى نتيجة هذا الخلط , كالأصفر و الأبيض و الزهري ..ألخ كلٌ حسب نسبة "شدة" إضاءة كل لون من الألوان الأساسية RGB 

تسمى هذه الطريقة بطريقة " الباعث متعدد الألوان " و هي بحاجة لدارة إلكترونية لعمل هذا الخلط بُغية الحصول على ألوان مختلفة .

يتكون ال  RGB من 4 أرجل , رجل مشترك "مصعد أو مهبط" و رجل لكل لون رئيسي " أحمر ,أخضر , أزرق " كما في الصورة .


ال RGB يمكن أن يكون ذا مصعد مشترك أو مهبط مشترك , و لكل نوع طريقة مختلفة قليلاً في التحكم "أي في كود البرمجة"

لنبدأ العمل J :

لنبدأ الآن العمل و لنحضر المكونات الرئيسية لبداية تعاملنا مع ال RGB :
1) RGB LED  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 .
}


و كود البرنامج موجود هنا 
//This program is free software: you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//You should have received a copy of the GNU General Public License
// along with this program. If not, see http://www.gnu.org/licenses/

//*************************************************
//Name :Mohannad Rawashdeh .
//Date "3/8/2012 10:30pm
// Description: This  Code for using An RGB LED with digital code           //
// to give us 7 colors green ,blue ,red, shyblue ,fuchsia, yellow ,white 
// Using arduino pin # 3 for red column.
// pin #5 for green column.
// pin #6 for green column,
// Programmed for http://http://genotronex.blogspot.com
//...............................
// define pin ....
const int redPin=3;
const int greenPin=5;
const int bluePin=6;
void setup(){
//  define pin mode as output
  pinMode(redPin,OUTPUT);
  pinMode(greenPin,OUTPUT);
  pinMode(bluePin,OUTPUT);
}
void clr(){ 
  //this void let the RGB Become off
  digitalWrite(redPin,LOW);
  digitalWrite(greenPin,LOW);
  digitalWrite(bluePin,LOW);
  delay(10);
}
  
void blue(){
  //this void let the RGB Become Blue
  digitalWrite(redPin,LOW);
  digitalWrite(greenPin,LOW);
  digitalWrite(bluePin,HIGH);
  delay(50);
}
void green(){
  //this void let the RGB Become green
  digitalWrite(redPin,LOW);
  digitalWrite(greenPin,HIGH);
  digitalWrite(bluePin,LOW);
  delay(50);
}
 void red(){
    //this void let the RGB Become red
  digitalWrite(redPin,HIGH);
  digitalWrite(greenPin,LOW);
  digitalWrite(bluePin,LOW);
  delay(50);
} 
void skyblue(){
   //this void let the RGB Become skyblue
  digitalWrite(redPin,LOW);
  digitalWrite(greenPin,HIGH);
  digitalWrite(bluePin,HIGH);
  delay(50);
} 
void fuchsia(){
   //this void let the RGB Become 
  digitalWrite(redPin,HIGH);
  digitalWrite(greenPin,LOW);
  digitalWrite(bluePin,HIGH);
  delay(50);
} 
void yellow(){
   //this void let the RGB Become yellow
  digitalWrite(redPin,HIGH);
  digitalWrite(greenPin,HIGH);
  digitalWrite(bluePin,LOW);
  delay(50);
}
void white(){
   //this void let the RGB Become white
   digitalWrite(redPin,HIGH);
  digitalWrite(greenPin,HIGH);
  digitalWrite(bluePin,HIGH);
  delay(50);
}
void loop(){
//  loop statment , here we will blink the RGB avaliable color with diferent delay .
  for(int i=500;i>75;i-=50){
  blue();delay(i);clr();delay(5);
  green();delay(i);clr();delay(5);
  red();delay(i);clr();delay(5);
  skyblue();delay(i);clr();delay(5);
  fuchsia();delay(i);clr();delay(5);
  yellow();delay(i);clr();delay(5);
  white();delay(i);clr();delay(5);
}
}


//.......................................................................................


و هنا فيديو يبين تطبيق البرنامج على دارة عمليه :


التدوينة القادمة ستتحدث عن التحكم  باستخدام أوامر الإخراج التناظرية analog Write 

إلى ذلك الوقت , إلى اللقاء 



0 التعليقات :

إرسال تعليق

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.