الأربعاء، 26 ديسمبر، 2012

RGB LED controlled By arduino part 2


أهلاً بكم مجدداً .

قد تحدثنا في الجزء الأول لهذه التدوينة عن الباعث ثلاثي الألوان RGB و كيفية وصله و برمجة المتحكم الأصغري على بيئة الأردوينو للتحكم بالألوان التي يضيئها .


اليوم سأعرض الطريقة الثانية في التحكم بهذا الباعث الضوئي مستفيداً من الأوامر التناظرية Analog Write و تقنية التعديل النبضي PWM

الفرق بين الطريقة الرقمية و التناظرية , أن الرقمية محصورة بثمانية الألوان فقط , أما هذه الطريقة"التناظرية" فتعطي مجالأ واسعاً من الألوان أكبر من الرقمي .

لنبدأ بالتعرف عليها أكثر :

 البرمجة باستخدام أوامر الإخراج التناظرية analog Write:
و هي الطريقة الأكثر شيوعاً للتحكم بالRGB نظراً للكم الهائل من الألوان الممكن الحصول عليها " فعلياً حسب تجربتي 216 لون "

كيفية البرمجة :
هنا سنستخدم أقطاب الأردوينو ك PWM Pin و هنا يمكننا التحكم بفولتية الخرج 0-5 فولت بحيث تكون الحساسية 19.53 ملي فولت \وحدة " مدى التحكم من 0 -255 وحده "

هنا سنستخدم القيم التي في برمجية الPaint  أو أي برنامج يمكنه أن يعطينا قيم تناظرية لكل لون على حدا .

مثلاً : اللون الأزرق يعبر عن( 0,0,255) و هكذا ....
لنبدأ بكتابة الألوان التي نريد إظهارها و بموازاتها القيم التناظرية لها " أو يطلق عليها الرمز العشري Decimal code :
هذا رابط لموقع إلكتروني يحتوي على كل الألوان بالإضافة للرموز العشريه لها

الآن وقت كتابة الكود .....


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

كود البرنامج هنا ...
//انسخ البرنامج من هنا 
//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 4:00pm
// Description: This  Code for using An RGB LED with Analouge code           //
// to give us many  colors green ,blue ,red, shyblue ,fuchsia, yellow ,white, purple, ....etc 
// Using arduino pin # 3 for red column.
// pin #5 for green column.
// pin #6 for green column,
// Programmed for 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 blue(){
   //this void let the RGB Become blue
  int rgb[]={0,0,255};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void red(){
   //this void let the RGB Become  red
  int rgb[]={255,0,0};
  analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void yellow(){
   //this void let the RGB Become  yellow
  int rgb[]={255,255,0};
  analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void green(){
   //this void let the RGB Become green
  int rgb[]={0,128,0};
  analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void lime(){
   //this void let the RGB Become lime 
  int rgb[]={0,255,0};
  analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void medium_spring_green(){
  int rgb[]={0,250,154};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void auqa(){
  int rgb[]={0,255,255};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void indigo(){
  int rgb[]={75,0,130};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void purple(){
  int rgb[]={128,0,128};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void fuchsia(){
  int rgb[]={255,0,255};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void silver (){
  int rgb[]={192,192,192};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void orange (){
  int rgb[]={255,165,0};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
;void violet(){
  int rgb[]={238,130,238};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void deep_pink(){
  int rgb[]={255,20,147};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void wheat(){
  int rgb[]={245,222,179};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void maroon(){
  int rgb[]={128,0,0};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void dark_blue(){
  int rgb[]={0,0,139};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}

void blue_violet(){
  int rgb[]={138,43,226};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void dark_turquoise(){
  int rgb[]={0,206,209};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void meduim_violet_red(){
  int rgb[]={219,112,147};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void dark_green(){
  int rgb[]={0,100,0};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void gold(){
  int rgb[]={255,215,0};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void crimson(){
  int rgb[]={220,20,60};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
void skyblue(){
  int rgb[]={135,206,235};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
  
}
//......................................
void white(){
  int rgb[]={255,255,255};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
void clr(){
  int rgb[]={0,0,0};
   analogWrite(redPin,rgb[0]);
   analogWrite(greenPin,rgb[1]);
   analogWrite(bluePin,rgb[2]);
}
//---------------------------------------------
void loop(){
  //  loop statment , here we will blink the RGB avaliable color with diferent delay .
  for (int i=500;i>50;i-=50){
 blue(); delay(i);  red(); delay(i); yellow();delay(i); green(); delay(i);lime(); delay(i);medium_spring_green(); delay(i); auqa(); delay(i);indigo(); delay(i);
 purple(); delay(i); fuchsia(); delay(i); silver (); delay(i); orange (); delay(i);violet(); delay(i);deep_pink(); delay(i);wheat(); delay(i);maroon();delay(i);
 dark_blue(); delay(i);blue_violet();delay(i);dark_turquoise();delay(i);meduim_violet_red();delay(i);dark_green();delay(i); gold();delay(i);crimson();delay(i);
}
}

الأمر سهل أليس كذلك ؟
هكذا نكون قد أمتلكنا المهارات الكافيه للتعامل مع الrgb .

و يمكن تحميل هذا الكود على برنامج البروتوس و عمل محاكاة للنظام ككل .


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

سأشرح المكتبة الخاصة بالRGB و التي قمت بتنفيذها خلال التدوينة القادمة .

تحية طيبة 
...................................................................................................................


0 التعليقات :

إرسال تعليق

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