الاثنين، 12 نوفمبر، 2012

Knight Rider and LED

Knight Rider





موضوع اليوم سيكون شيق نوعاً ما و سنسترجع فيها بالذاكرة السلسلة التلفزيونية" نايت رايدر" حيث كان ديفيد هاسلهوف  بطل المسلس لديه  جهاز اسمه  في سيارته بونتياك السوداء الجميلة AI KITT  .

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


سنهتم اليوم ببرمجة نظام بسيط مشابه باستخدام الأردوينو و سنتعلم تقنيات جديدة و مهارات جديدة بالبرمجة في بيئة اردوينو .




حسناً بعد هذه المقدمة .... لنبدأ 


جهّز معداتك ! 


ستحتاج للقيام بهذه التجربة :




1) بواعث ضوئية LED عدد 8 " أي لون متوافر "
2) مقاومات " القيمة بين 100 - 180 أوم " 
3) بطاقة أردوينو 
4) لوحة تعليمية مثقوبة Bread Board
5) بعض الأسلاك للتوصيل 

طريقة التوصيل :

طريقة التوصيل موضحة بالصورة التالية :


أنا قمت بتنفيذ المشروع أيضاً بواسطة Arduino Nano لكن هنا جعلت تغذية المصعد للLED مشتركة من مصدر الجهد 5V و كل مهبط قمت بتوصيله إلى مدخل من مداخل المتحكم " أي كمصرف للتيارCurrent Sink " .



الآن و بعد أن قمنا بالتوصيل سنبدأ بالبرمجة .

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

الطريقة الأولى : الطريقة التقليدية 


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

البرنامج تجدوه مكتوباً أدناه :

------------------------------------------------------------------------
//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 "30/6/2012 10:00pm
// Description: This program designed For Knight rider circuit.
// , Using digital pin 2-9 Using For loop Statment.
// Programmed for genotronex blog http://genotronex.blogspot.com/

//*******************************************************
int i;                      //Integer variable for Counter 
void setup(){
  for (i=2;i<10;i++){       // Define Digital pin as OUTPUT Pin.
  pinMode(i,OUTPUT);
}
}
// Void setup ended _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
void loop(){
 //In loop area  4 program will execute 
 // first one , blink on one led each time starting from pin 2
  for(i=1;i<10;i++){
    digitalWrite(i,HIGH);
     delay(150);
    digitalWrite(i,LOW);
     delay(10);
}
//First program end

//******************************************************

// Second program , blink on one led each time starting from pin 9
for(i=10;i>1;i--){
    digitalWrite(i,HIGH);
     delay(150);
    digitalWrite(i,LOW);
     delay(10);
}
//Second program end

//******************************************************

// Third program , blink on 3 led each time starting from pin 1 and shifting
//it  LST FIRST
  for(i=1;i<11;i++){
    digitalWrite(i-1,HIGH);
    digitalWrite(i,HIGH);
     digitalWrite(i+1,HIGH);
     delay(150);
     digitalWrite(i-1,LOW);
    digitalWrite(i,LOW);
     digitalWrite(i+1,LOW);
     delay(10);
}
//Third program end

//******************************************************

// fourth program , blink on 3 led each time starting from pin 1 and shifting
//it  MSB FIRST
for(i=10;i>1;i--){
    digitalWrite(i-1,HIGH);
    digitalWrite(i,HIGH);
     digitalWrite(i+1,HIGH);
     delay(150);
     digitalWrite(i-1,LOW);
    digitalWrite(i,LOW);
     digitalWrite(i+1,LOW);
     delay(10);
}
}
//end and return to loop.





هذا البرنامج البسيط سيكون يمكن رؤية طريقة عمله في هذا الفيديو .




الطريقة الثانية : طريقة مسجلات المرابط Port Registers 

هي طريقة تسمح فيها للغة المتدنية المستوى Low-level بالوصول و المعالجة السريعة للمداخل و المخارج الخاصة بالمتحكم , يمكن معرفة المزيد عن هذه الميزة أكثر بزيارة الرابط  هنا 

ما يهمنا هو معرفة أن :
PORT D : هي للمداخل الرقمية في الأردوينو من D0-D7
PORT B : هي للمداخل الرقمية في الأردوينو من D8-D13

لو كتبنا : 
 PORTD=B00000000;     //Let digital pin from D0-D7 Equal LOW

فهذا سيعني أن المرابط الرقمية من D0-D7 قيمتها صفر فولت " صفر منطقي"

 PORTD=B00000100;     //Let digital pin from D0-D7 Equal LOW

هذا سيعني أن D2 قيمته 1 منطقي "5 فولت " و الباقي صفر 

بمعنى أخر , الباعث الضوئي المربوط مع D2 سيضيئ عندها .

البرنامج موجود هنا 

-----------------------------------------------------------------
//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 "30/6/2012 3:00pm
// Description: This program design to make Knight rider 
//with delay of 100ms , Using digital pin 2-7 Using For loop Statment.
// Programmed for http://genotronex.blogspot.com/

//*******************************************************
//Define Delay constant 
int del=75;              // Intial delay value 
int i;                   // counter 
void setup(){
  for (i=2;i<14;i++){
    pinMode(i,OUTPUT);   //define Digital Pin AS OUTPUT
  }
}
  void clr(){
    PORTD=B00000000;     //Let digital pin from D0-D7 Equal LOW
  }
  void loop(){
    byte C= B00000100;   // Define byte "C" as main  variable 
    for(i=0;i<6;i++){ 
    PORTD=C;             // first time loop , D2 triggred to be HIGH            
    delay(del);
    clr();               // void main "clr" to initalize Digital pin to be Low again!
    delay(10);
    C=C<<1;             // shift C ONE digit to the left "MSB"
    }
    // fimish first level ***********************
    C=B10000000;        // new value of C =255 DEC
  for(i=0;i<6;i++){
    PORTD=C;             //first time loop , D7 triggred to be HIGH
    delay(del);
    clr();               // void main "clr" to initalize Digital pin to be Low again!
    delay(10);
    C=C>>1;              // shift C ONE digit to the left "LSB"
  }
  }
  //end the program ^_^ 



أمر آخر جديد هو أمر الإزاحة >> , <<   هذا الأمر يقوم بإزاحة الأرقام خانة واحدة إما لليمين << أو لليسار >> , هنا توضيح لهذا الأمر بشكل مفصل 

الفيديوأدناه توضيح كيفية عمل البرنامج بعد تحميله على المتحكم .





هنا أيضاً يمكن تحميل ملفات البروتوس و الHEX الخاصة بالبرامج .


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



تحويل الملفات ذات الإمتداد ino الخاصة بأردوينو إلى الإمتداد hex 



يمكنكم تحميل ملفات هذه التجربة من خلال هذا الرابط هنا 

قم بتجربة هذه البرنامج و بناء الدوائر الخاصة بها , فهي سهلة و ستمكنك من تطوير قدراتك البرمجية بشكل كبير , و لأي استفسار سأكون بتلقي اسئلتكم على الموضوع عبر التعليقات أو على بريدي الإلكتروني GENOTRONEX@Gmail.com


0 التعليقات :

إرسال تعليق

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