image_pdfimage_print

اردوينو – الدرس الثالث عشر – عرض درجة الحرارة والاضاءة على الشاشة (الجزء الثاني)

في هذا الدرس سنقوم بإظهار درجة الحرارة ودرجة سطوع اضاءة الغرفة على الشاشة الكرستالية LCD

LCD Sensing project

سنقوم بقياس درجة سطوع اضاءة الغرفة عبر مستشعر الاضاءة ‘photocell’ الذي قمنا بإستخدامه في الدرس العاشر.

لقياس درجة الحرارة ، سنقوم بإستخدام  مستشعر الحرارة . هذه الاداة تمتلك ثلاث رؤوس ، واحدة للحصول على طاقة 5V وواحدةللمخرج الأرضي GND وواحدة لأجل التوصيل إلى مدخل تناظري analog input بالأردوينو.

اردوينو – الدرس الثاني عشر – التحكم بشاشة LCD (الجزء الأول)

في هذا الدرس ستتعلم تركيب وتشغيل شاشة LCD

LCD display project

الشاشة الكرستالية LCD  تمتلك اضاءة خلفية وتسمح بعرض سطرين ، كل سطر يحتوى على 16 حرف كحد أقصى.

القطع المطلوبة

لبناء المشروع عليك توفير القطع التالية

lcd

LCD Display (16×2 characters)

pot

10kΩ variable resistor (pot)

Half-size Breadboard

Half-size Breadboard

Arduino Uno R3

Arduino Uno R3

Jumper wires

Jumper wires

تصميم لوح التجارب

شاشة الـ LCD تحتاج إلى 6 منافذ رقمية  ‘digital pins’ من الأردوينو  كمخارج رقمية ‘digital outputs’ . كما تحتاج لطاقة 5V و مخرج أرضي GND.

lcd breadboard design

هنالك بعض التوصيلات التي علينا ربطها ، لذلك من الأفضل أن تقوم بوضع شاشة الـLCD بمحاذاة لوح التجارب بحيث تستطيع من تعقب التوصيلات بشكل صحيح كما في صورة التصميم السابقه.
تذكر أن السلك الأصفر الطويل هو مايربط المقاوم المتغير بمنفذ pin 3  لشاشة الـLCD. المقاوم المتغير وظيفته هنا هي لتغيير درجة سطوع الشاشة.

قد تجد أن الشاشة لا تمتلك رؤوس ‘pins’ ليتم تركيبها على لوح التجارب كما تجري العاده لبعض القطع الالكترونية الاخرى كالازرار مثلاً. لا تقلق إن لم تكن كذلك فستتعلم كيفية تركيبها بالقسم التالي.

تلحيم رؤوس التوصيل للشاشة

الشاشة تحتاح إلى 16 رأس توصيل ، لذا ان كنت تمتلك شريط رؤوس أكثر من ذلك ، ماعليك سوى قصها ليكون مجموعها 16 رأس فقط.

LCD Pins

قم بوضع الشاشة على شريط الرؤوس (الجهه الأقصر) وقم بتلحيم كل رأس على حدة كما في الصورة التالية (كن حريصاً )

LCD pins soldering

الكود البرمجي للأردوينو

برنامج الأردوينو يحتوى على مكتبة من الأمثلة خاصة بإستخدام شاشة الـLCD والتي سنقوم باستخدام احدها الآن.
تستطيع ان تجدها عبر الذهاب إلى
File> Examples> Liquid Crystal > HelloWorld

هذا المثال يستخدم منافذ مختلفة عن التي نقوم بإستخدامها في هذا الدرس، لذلك قم بالبحث عن السطر التالي

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

 

وقم بتغييره إلى

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

 

قم برفع الكود إلى متحكم الأردوينو وسترى جملة ‘Hello World’ تظهر على الشاشة يتبعها رقم (عداد بدأ من الرقم صفر ).

السطر الأول الذي يتوجب عليك ملاحظته هو السطر الأول من البرنامج

#include <LiquidCrystal.h>

 

هذا السطر يطلب من الأردوينو استعمال مكتبة الشاشة الكرستالية  ( حتى يستطيع الأردوينو من استيعاب الاوامر الخاصة بالشاشة )

السطر الآخر الذي عليم معرفته هو السطر الذي قمنا بتغييره . هذا السطر يوضح أي من منافذ الأردوينو التي قمنا بإستخدامها للربط مع منافذ (رؤوس) الشاشة

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

 

في دالة setup هنالك سطرين

  lcd.begin(16, 2);
  lcd.print("hello, world!");

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

في دالة loop هنالك سطرين

  lcd.setCursor(0, 1);
  lcd.print(millis()/1000);

 

السطر الأول لإعداد المؤشر على الشاشة ( حيث ستظهر الجمل التي نرغب بإظهارها )
السطر الثاني لاظهار أجزاء الثانية منذ أن بدأ تشغيل البرنامج على الأردوينو.

أمور أخرى عليك القيام بها

جرب الضغط على زر الإعادة reset في الأردوينو ، ولاحظ أن العداد يبدأ مره أخرى من الصفر .

حاول تغيير اعداد المؤشر (موضع الجملة والرقم )

اردوينو – الدرس الحادي عشر – اصدار الأصوات

في هذا الدرس ستتعلم كيفية اصدار الاصوات بمتحكم الأردوينو.
اولاً ستقوم بتشغيل مقطع صوتي ، ثم القيام بالتلاعب بمستوى الصوت عبر المستشعر الضوئي ‘photocell’.

making sounds

القطع المطلوبة

1 kΩ Resistor

1 kΩ Resistor

Piezo sounder

Piezo sounder

سماعة البيزو

photocell

Photocell
المستشعر الضوئي

Half-size Breadboard

Half-size Breadboard

Arduino Uno R3

Arduino Uno R3

Jumper wires

Jumper wires

تشغيل المقطع الصوتي

في هذا الجزء ستجد ان سماعة البيزو ‘piezo buzzer’ موضوعه على لوح التجارب . واحده من ارجل القطعه موصولة بالمجال الأرضي GND والرجل الأخرى مربوطه بالمنفذ الرقمي digital pin 12 .

piezo breadbaord

piezo breadboard2

قم برفع الكود البرمجي التالي على متحكم الأردوينو

int speakerPin = 12;
 
int numTones = 10;
int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};
//            mid C  C#   D    D#   E    F    F#   G    G#   A
 
void setup()
{
  for (int i = 0; i < numTones; i++)
  {
    tone(speakerPin, tones);
    delay(500);
  }
  noTone(speakerPin);
}
 
void loop()
{
}

 

لتشغيل مقطع صوتي ، تقوم بتحديد المجال الترددي . انظر للجزء التالي من الدرس المخصص للصوت .
كل مجال ترددي لكل نوته صوتية تم الاحتفاظ به في مصفوفه ‘array’ . المصفوفه ‘array’ هي مثل القائمة ، وبذلك يتم تشغيل المقطع عبر الانتقال لكل نوته صويته بالقائمه.

في حلقة ‘for’ loop سيبدأ العد من 0 وحتى 9 باستخدام القيمه i . للحصول على المجال الترددي للنوته الصوتية لتشغيلها بكل خطوه نقوم باستخدام ‘tone‘. هذا يعني ان القيمة الموجودة في مصفوفة ‘tones’  في موضع ‘i’
كمثال ، قيمة ‘[0]tones’ هي 261 ، وقمية ‘[1]tones’ هي 277 .. وهكذا ..

الأمر ‘tone’ في الأردوينو  يقوم بأخذ متغيرين اثنين ، الأول هو المنفذ الذي يقوم بتشغيل المقطع الصوتي والثاني هي التردد الصوتي للمقطع لتشغيله.

عند الانتهاء من تشغيل من جميع النوتات الصوتية ، أمر ‘noTone’ يقوم بإيقاف تشغيل الصوت.

كان بإمكاننا  ان نضع الكود البرمجي لتشغيل الاصوات داخل دالة loop عوضاَ عن دالة setup وذلك لأنها ستكرر المقطع الصوتي مره بعد مره دون توقف مما سيتسبب بالإزعاج لذلك تم وضعه داخل دالة setup
لذلك دالة loop فارغة .

لاعادة تشغيل المقطع الصوتي كل ماعليك فعله هو الضغط على زر reset الموجود بمتحكم اردوينو .

الصوت

الصوت هو عبارة عن ذبذبة في ضغط الهواء . سرعة الذبذبة (دورات بالثانية أو هيرتز ) هي مايصدر الصوت. كلما زادت قوة الذبذبة كلما زاد علو الصوت.

piezo

المتوسط C عادة يعرف بالتردد 261Hz. وكأنك قمت بتشغيل واطفاء منفذ رقمي ‘digital pin’ لاكثر من 261 مره بالثانية .

لسماع النتيجة ، علينا القيام بتركيب قطعه تقوم بترجمة التردادت الالكترونية إلى صوت . هذا يمكن عن طريق تركيب سماعات كبيره او عبر استخدامنا لسماعة البيزو ‘piezo sounder’.

سماعة piezo تستخدم نوع خاص من الكريستال تتمدد وتنكمش كتردد الكتروني والتي ينتج عنها الصوت.

آلة Pseudo-Theremin الموسيقية

هذه الآلة تقوم بإصدار اصوات غريبة عند تمرير يدك امامها ،
سنقوم بصنع آلة مشابهه في الوظيفة للتحكم والتأثير على مستوى الصوت بمجرد تمرير يدك فوق المستشعر الضوئ ‘photocell’.

سنقوم باضافة المستشعر الضوئي ‘photocell’ و المقاوم resistor للوح التجارب.

piezo breadboard

الكود البرمجي للأردوينو

قم برفع الكود التالي على متحكم الاردوينو

int speakerPin = 12;
int photocellPin = 0;
 
void setup()
{
}
 
void loop()
{
  int reading = analogRead(photocellPin);
  int pitch = 200 + reading / 4;
  tone(speakerPin, pitch);
}

الكود واضح ، نستخدم المنفذ التناظري ‘analog pin’  للقراءة من A0 لقياس الضوء. وستكون القيمة مابين 0 و 700.

اضفنا القيمة 200 لجعل التردد 200Hz كأقل تردد ، وببساطه يتم اضافة القراءه عبر قسمة القيمة على 4 ، لاصدار تردد مابين 200Hz و 370Hz.

امور اخرى عليك القيام بها

حاول تغيير القيمة 4 بالسطر التالي لخفض القيم المرتفعة

int pitch = 200 + reading / 4;

 

تغيير القيمه سيرفع أو يقلل من التردد اعتماداً على الرقم الذي قمت بوضعه.

حاول التلاعب بقيم النوتات الصوتية لترى ماذا سيحدث..

اردوينو – الدرس العاشر– استشعار الاضاءة

ستتعلم في هذا الدرس كيفية قياس قوة الاضاءة باستخدام المدخل التناظري ‘analog input’.
ستستخدم ماتعلمته في الدرس التاسع، واستخدام قوة الاضاءة بالغرفة للتحكم في عدد مصابيح الـLEDs التي يتم اضاءتها.

sensing light

تم استبدال المقاوم المتغير ‘pot’ في الدرس التاسع ووضعنا مكانه المستشعر الضوئي ‘photocell’

القطع المطلوبة

5mm Red LED

5mm red LED

عدد 8

270 Ω Resistors

270 Ω Resistors

عدد 8

1 kΩ Resistor

1 kΩ Resistor

74HC595 Shift Register

74HC595 Shift Register

Photocell

Photocell

المستشعر الضوئي

Half-size Breadboard

Half-size Breadboard

Arduino Uno R3

Arduino Uno R3

Jumper wires

Jumper wires

تصميم لوح التجارب

تصميم الدائرة في هذا الدرس هو نفس التصميم بالدرس التاسع ولكن قمنا باستبدال المقاوم المتغير ‘pot’ بـالمستشعر الضوئي ‘photocell’ و مقاومة 1 kΩ .

التالي هو تصميم لوح التجارب من الدرس التاسع

lesson 9

فقط قم بازالة المقاوم المتغير ‘pot’ واستبداله بالمستشعر الضوئي’photocell’ ومقاوم ..كالتالي

lesson 10

المستشعر الضوئي photocell

المستشعر الضوئي ‘photocell’ يعتبر مقاوم يعتمد على الضوء ويدعى احيانا بـ’LDR’ وذلك اختصار لـ Light Dependent Resistor.

المستشعر الضوئي يملك قوة مقاومه تصل حتى 50kΩ في الظلام الدامس و 500Ω عند وجود الاضاءة . يمكنان بواسطة متحكم الأردوينو أن نقرأ قيمة المقاومه للمستشعر عبر مدخل تناظري ‘Analog input’

أسهل طريقة للقيام بهذا هو ربطها مع مقاوم ثابث

photocell_fixedResistor

المقاوم الثابت  والمستشعر الضوئي ‘photocell’ معاً يعتبرون كالمقاوم المتغير ‘pot’، اعتماداً على كمية الضوء المسلطه على المستشعر الضوئي ‘photocell’ يتغير قدر المقاومة التي يقوم بها المستشعر الضوئي ‘photocell’
فاذا كانت كمية الضوء مشعة بالقدر الكافي فإن كمية المقاومه التي ينتجها المستشعر الضوئي أقل من المقاومه الثابته وبالتالي فكأنها عباره عن مقاوم متغير ‘pot’ تم رفع قيمة للقيمه القصوى. والعكس صحيح..

قم برفع الكود البرمجي التالي بمتحكم الأردوينو وقم بتغطيه المستشعر الضوئي بيدك ورفعها مره اخرى لترى مدى التأثير.

كود أردوينو البرمجي

الكود التالي مشابه للدرس التاسع ولكن نظراً لإستخدامنا للمستشعر الضوئي قمنا ببعض التغيرات البسيطه

int lightPin = 0;
int latchPin = 5;
int clockPin = 6;
int dataPin = 4;
 
int leds = 0;
 
void setup()
{
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
}
 
void loop()
{
  int reading  = analogRead(lightPin);
  int numLEDSLit = reading / 57;  //1023 / 9 / 2
  if (numLEDSLit > 8) numLEDSLit = 8;
  leds = 0;   // no LEDs lit to start
  for (int i = 0; i < numLEDSLit; i++)
  {
    leds = leds + (1 << i);  // sets the i'th bit
  }
  updateShiftRegister();
}
 
void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}

 

أول شيء قمنا بتغييره هو تسيمة المنفذ التناظري ‘analog pin’ من ‘potPin’ إلى ‘lightPin’  وذلك قمنا بتبديل المقاوم المتغير ‘pot’ بالمستعشر الضوئي ‘photocell’ .

التغيير الآخر هو السطر الذي يقوم باحتساب عدد مصابيح الـLEDs لإضاءتها

int numLEDSLit = reading / 57;  // all LEDs lit at 1k

هذه المره قمنا بقسمة القراءة على 57 بدلاً من 114 من الدرس التاسع . بمعنى آخر قمنا بقسمتها على نصف القيمة السابقه  حتى نقوم بتوزيعها على 9 مجموعات، ابتداءاً من (حيث لايتم اضاءة أي من المصابيح الثمانية) وحتى (اضاءة جميع المصابيح الثمانية) ، العامل الاضافي هو حساب قيمة المقاومه الثابته 1kΩ
هذا يعني انه عندما تكون قيمة المستشعر الضوئي ‘photocell’ هي 1kΩ (نفس قيمة المقاوم الثابت ) يتم قراءة الصف 1023 وقسمته على 2 = 511 . بذلك يتم اضاءة جميع المصابيح (numLEDSLit ستكون 9)

امور اخرى عليك القيام بها

لتغيير مقدار حساسية المستشعر للضوء قم بتغيير القيمة 57 التي يتم قسمة القراءه عليها.

زيادة القيمه ستجعل من المستشعر أقل حساسية.

اردوينو – الدرس التاسع – المدخلات التناظرية Analog inputs

مقدمة

في هذا الدرس ، سنقوم بإستخدام الإتصال التسلسلي (Serial Monitor) لعرض قراءات المدخلات التناظرية “Analog Inputs” ومن ثم اضافة 8 مصابح LED (من الدرس الخامس) لتتمكن من التحكم بزيادة وتقليل درجة اضاءة الـLEDS عبر المقاوم المتغير (Variable resister)

analog inputs

القطع المطلوبة

للقيام بهذه التجربة تحتاج القطع التالية

5mm red LED

5mm red LED

عدد 8

270 Ω Resistors

270 Ω Resistors

عدد 8

74HC595 Shift Register

74HC595 Shift Register

10 kΩ variable resistor مقاوم متغير

10 kΩ variable resistor
مقاوم متغير

Half-size Breadboard

Half-size Breadboard
لوح تجارب حجم متوسط

Arduino Uno R3

Arduino Uno R3

Jumper wires

Jumper wires

التجربة

قبل البدء بإستخدام مصابيح الـLEDs ، تستطيع القيام بالتجربة التالية عبر إستخدام المقاوم المتغير (potentiometer) و تفعيل خاصية شاشة الاتصال التسلسلي (Serial Monitor) في الأردوينو

قم بتوصيل لوح التجارب كالتالي

pot circuit

قم برفع الكود التالي بالأردوينو

int potPin = 0;
 
void setup()
{
  Serial.begin(9600);
}
 
void loop()
{
  int reading  = analogRead(potPin);
  Serial.println(reading);
  delay(500);
}

 

والآن ، قم بفتح شاشة الإتصال التسلسلي (Serial Monitor)

serial monitor

قم بتحريك وتغيير المقاومة وسوف ترى القراءات تتغير مابين 0 و 1023

شاشة الاتصال التسلسلي (Serial Monitor) تقوم بعرض القراءات من A0 بواسطة السطر التالي

int reading  = analogRead(potPin);

الجهد (Voltage) في A0 يتم تحويله إلى رقم مابين 0 و 1023.

المقاوم المتغير (Variable Resistors)

المقاومات المتغيرة تدعى “potentiometers” وتختصر بـ pot

في تجربتنا مع شاشة الاتصال التسلسلي (Serial Monitor) يقوم المقاوم بتغيير الجهد على A0 ، كما يقوم الكود البرمجي  بتحويل هذا الجهد إلى رقم مابين 0 و 1023.

pot slider

في المقاوم المتغير “pot” يوجد مسار يمثل المقاومة ، في هذه الحالة مقاومه مقدارها  10 kΩ . كما يوجد سن متوسط يعتبر الموصل الفاصل يسمى “Slider” وظيفته هي تغيير مقدار المقاومة مابين 0 وحتى 5V

تصميم الدائره على لوح التجارب

والآن دعنا نقوم بإستخدام المقاوم المتغير “pot” للتحكم في عدد الـLEDs

يعتمد تصميم هذه الدائرة على الدرس الخامس ، هناك بعض الاسلاك التي قمنا بتحريكها ، كما قمنا بإضاة المقاوم المتغير ‘pot’ وبعض السلاك له إلى الدائرة.

pot breadboard

الكود البرمجي للأردوينو

قم برفع الكود التالي إلى متحكم الأردوينو

int potPin = 0;
int latchPin = 5;
int clockPin = 6;
int dataPin = 4;
 
int leds = 0;
 
void setup()
{
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
}
 
void loop()
{
  int reading  = analogRead(potPin);
  int numLEDSLit = reading / 114;  //1023 / 9
  leds = 0;
  for (int i = 0; i < numLEDSLit; i++)
  {
    bitSet(leds, i);
  }
  updateShiftRegister();
}
 
void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}

 

عليك أن تعلم أن بعض الأسطر في هذا الكود هو من الدرس الخامس ، لذا تستطيع العودة للدرس الخامس لمعرفة شرح الكود المتعلق بالتحكم في الـLEDs

اما بالنسبة للجزء الجديد من الكود وهو تعريف منفذ المدخل التناظري “Analog inputs” والتي سنقوم بربط المقاوم المتغير بها

int potPin = 0;

 

لاحظ بأننا لم نقم بإضافة أي جديد في دالة ‘setup’ لتعريف حالة المنفذ للمدخل التناظري.

في دالة ‘loop’ نقوم بقراءة القيمة التناظرية “Analog value” بالطريقة التالية

int reading  = analogRead(potPin);

ولكن علينا تحويل هذه القراءة التي مابين 0 و 1023 إلى عدد الـLEDs ليتم اضاءتها ، مابين 0 و 8 . الأرقام التي مابين 0 و 8 هي في الحقيقة مجموعها 9 قيم . لذا علينا توسيع نطاق القراءة عبر 1023 مقسومة على 9 أو 114

int numLEDSLit = reading / 114;

لإضاءة الأعداد الصحيحة للـLEDs ، نقوم بإستخدام for loop للعد من 0 وحتى “numLEDSLit” لوضع البت الصحيح.

  leds = 0;
  for (int i = 0; i < numLEDSLit; i++)
  {
    bitSet(leds, i);
  }

وأخيراً نقوم بتحديث رقاقة مسجل الإزاحة ‘shift register’ عبر السطر التالي

updateShiftRegister();

امور اخرى عليك القيام بها

حاول استخدام مصباح LED واحد فقط بهذا المشروع وقم بالتحكم به.

اردوينو – الدرس الثامن – تغيير درجة الالوان لـ RGB LED

في هذا الدرس ستقوم بتطبيق ماتعلمته بالدرس السابع والرابع وذلك لاستخدام الازرار في تغيير درجة الالوان في RGB Led

1

القطع المطلوبة

لاتمام هذا الدرس عليك توفير القطع التالية

10mm Common Cathode RGB LED

10mm Common Cathode RGB LED

270 Ω Resistor

270 Ω Resistor

عدد 3

Tactile push switch

Tactile push switch

عدد 3

Half-size Breadboard

Half-size Breadboard

لوح تجارب حجم متوسط

Arduino Uno R3

Arduino Uno R3

Jumper wires

Jumper wires

تصميم لوح التجارب

 كما يظهر لك بالتصميم التالي فإن السن الأطول لـRBG LED (السن الثاني) تم وضعه في الصف الثاني من لوح التجارب ليتم توصيلة بـGND

نفترض ان لديك RBG LED ذات توصيل سالب ‘common cathode’ ، اذا كان لديك RBG LED ذات توصيل موجب ‘common anode’ قم بتوصيل السن الأطول بـ 5V عوضاُ عن GND
لاحظ عند استخدام التوصيل الموجب سيتم عكس دورة الألوان.

8

كود الأردوينو

قم برفع الكود التالي لمتحكم الأردوينو.

في البداية فإن جميع الـ LEDs ستكون مطفأه . اذا استمريت بالضغط على واحد من الأزرار فإنه سيبدأ في زيادة درجة سطوع الـLED تدريجياً. سيكون اللون أحمر للزر الأعلى ، أخضر للزر المتوسط ، وأزرق للزر الموجود أسفل لوح التجارب

عند اكتفاءك بدرجة سطوع احد الألوان ، قم بضغط زر آخر لرفع درجة سطوع اللون الاخر وشاهد كيف سيتم دمجها ببعض.

اذا اردت البدء مره اخرى كل ماعليك فعله هو الضغط على زر اعادة البدء ‘reset’ الموجود بمتحكم الأردوينو ( الزر الأحمر الموجود بالقرب من منفذ الـUSB)

int redLEDPin = 11;
int greenLEDPin = 10;
int blueLEDPin = 9;
 
int redSwitchPin = 7;
int greenSwitchPin = 6;
int blueSwitchPin = 5;
 
int red = 0;
int blue = 0;
int green = 0;
 
void setup()
{
  pinMode(redLEDPin, OUTPUT);
  pinMode(greenLEDPin, OUTPUT);
  pinMode(blueLEDPin, OUTPUT);  
  pinMode(redSwitchPin, INPUT_PULLUP);
  pinMode(greenSwitchPin, INPUT_PULLUP);
  pinMode(blueSwitchPin, INPUT_PULLUP);
}
 
void loop()
{
  if (digitalRead(redSwitchPin) == LOW)
  {
    red ++;
    if (red > 255) red = 0;
  }
  if (digitalRead(greenSwitchPin) == LOW)
  {
    green ++;
    if (green > 255) green = 0;
  }
  if (digitalRead(blueSwitchPin) == LOW)
  {
    blue ++;
    if (blue > 255) blue = 0;
  }
  analogWrite(redLEDPin, red);
  analogWrite(greenLEDPin, green);
  analogWrite(blueLEDPin, blue);  
  delay(10);
}

مخطط الكود مشابة لمخطط الدرس الرابع ، لدينا 3 منافذ مخارج للتحكم بالـLED.
وهي منافذ تعديل عرض النبضة PWD (pulse width modulation) لنتمكن من وضع مقدار الطاقة التي نرغب وضعها لكل لون .

هنالك ثلاث منافذ اخرى نحتاجها ، واحدة لكل زر وسيتم تعريفها داخل دالة setup لتكون منافذ ادخال والتي ستعطي قيمة عالية (قيمة تساوي 1 ) عند عدم الضغط عليها، وعند الضغط عليها ستعطي قيمة منخفضة (قيمة تساوي 0)

بعد تعريف المنافذ ، نقوم بتعريف المتغيرات للالوان (احمر ، اخضر ، ازرق )

int red = 0;
int blue = 0;
int green = 0;

هذه المتغيرات سيتم استخدامها لتخزين القيم الحالية لكل لون ، مثال. لو كانت قيمة متغير اللن الأحمر هي صفر فيعني ذالك انها مطفأه ، واذا كانت قيمتها تساوي 255 فيعني ذالك انها مضاءه في اعلى درجات السطوع.

دالة loop تحتوي على جزئين ، الجزء الأول يقوم بالتحقق من قيم الأزرار والقيام بمايلزم . كل زر يعمل نفس الوظيفة ولكن  للون مختلف. هذا الجزء هو التالي

  if (digitalRead(redSwitchPin) == LOW)
  {
    red ++;
    if (red > 255) red = 0;
  }

اذا  كانت قيمة red switch pin (كقراءة رقمية) هي قيمة منخفضة (اي تساوي صفر ) فهذا يعني أنه يتم الضغط على الزر حالياً ، فنقوم بإضافة 1 لمتغيرred الاحمر
الأمر red++ يعني اضافة 1 للمتغير

ولكن علينا أن نحرص هنا لأن القيمة الأعلى ستكون 255 عبر استخدام خاصية تعديل عرض النبضة PWD لذلك فالسطر التالي هو للتحقق من أننا لم نقم بتجاوز هذه القيمة، وإن قمنا بتجاوزه فإن القيمة ستعود وتبدأ من الصفر

الجزء الثاني من دالة loop تحمل قيم نظيرية ‘analogWrite’s’ لكل LED

  analogWrite(redLEDPin, red);
  analogWrite(greenLEDPin, green);
  analogWrite(blueLEDPin, blue);

أخيراً، سيكون هنالك تأخير طفيف delay  بنهاية  loop لإبطاء تحويل الألوان (يمكن تغيير قيمة التأخير)

امور اخرى عليك القيام بها

قم بازالة خاصية التأخير بنهاية loop ، يمكنك ذلك عبر جل السطر عبارة عن تعليق comment وذلك عن طريق وضع // ببداية السطر

  analogWrite(blueLEDPin, blue);  
  // delay(10);
}

بذلك لن يتم تنفيذ امر التأخير لانها اصبحت عبارة عن سطر تعليق ، واذا اردت ان تعيد الأمر ليتم تنفيذه يمكنك عبر ازالة // من بداية السطر

بدون خاصية التأخير delay ، سترى قيمة سطوع بشكل عشوائي كلما قمت برفع اصبعك من الزر.

امر آخر يمكنك القيام به ، هو التلاعب بوظائف الأزرار لتتمكن من اضاءة الـ LED كإشارة المرور.
حاول ذلك عبر جعل الزر الأول ظهر اللون الأحمر، الزر الأوسط يظهر اللون الأصفر ، الزر الأسفل يظهر اللون الأخضر.

اردوينو – الدرس السابع – (استخدام الأزرار) المدخلات الرقمية

في هذا الدرس ستتعلم كيفية استخدام ازرار “push buttons” مع المدخلات الرقمية”digital inputs” لإضاءة وإطفاء الـLED.

digital inputs

بالضغط على زر الموجود في أعلى لوح التجارب سيتم إضاءة الـLED ، وبالضغط على الزر الآخر سيتم إطفاءه.

القطع المطلوبة

لإتمام هذا الدرس يجب توفير القطع التالية

5mm Red LED

5mm Red LED

270 Ω Resistor

270 Ω Resistor

Tactile push switch

Tactile push switch

عدد 2

Half-size Breadboard

لوح تجارب حجم متوسط

Half-size Breadboard

Arduino Uno R3

Arduino Uno R3

Jumper wires

Jumper wires

تصميم لوح التجارب

ستجد أن نهايات الأزرار تسمح لك بتركيبها على لوح التجارب بسهولة

breadboard design

تذكر أنه يجب عليك تركيبها بحيث تكون الجهه السالبة (الأقصر) بإتجاه اليمين .

كود الأردوينو

قم برفع المخطط التالي إلى متحكم الأردوينو. وبعد اكتمال الرفع ستجد أنه عند الضغط على الزر الموجد في أعلى لوح التجارب سيتم إضاءة الـLED وعند الضغط على الزر الآخر سيتم إطفاءه.

int ledPin = 5;
int buttonApin = 9;
int buttonBpin = 8;
 
byte leds = 0;
 
void setup()
{
  pinMode(ledPin, OUTPUT);
  pinMode(buttonApin, INPUT_PULLUP);  
  pinMode(buttonBpin, INPUT_PULLUP);  
}
 
void loop()
{
  if (digitalRead(buttonApin) == LOW)
  {
    digitalWrite(ledPin, HIGH);
  }
  if (digitalRead(buttonBpin) == LOW)
  {
    digitalWrite(ledPin, LOW);
  }
}

 

 

الجزء الأول من المخطط يقوم بتعريف ثلاث متغيرات لثلاث منافذ سيتم استخدامها في الأردوينو.
‘ledPin’ هو منفذ المخرج و ‘buttonApin’ سيستخدم للزر الموجود في أعلى لوح التجارب و ‘buttonBpin’ سيستخدم للزر الآخر.

دالة ‘setup’ ستقوم بتعريف متغير ‘ledPin’ كمخرج ، ولكن سيكون أيضاً لدينا مدخلين اثنين (لأجل الأزرار) لذلك سنقوم بإستخدام دالة ‘pinMode’ لإضافة خاصية ‘INPUT_PULLUP’ لكل زر كالتالي

  pinMode(buttonApin, INPUT_PULLUP);
  pinMode(buttonBpin, INPUT_PULLUP);

 

 

استخدامنا لـ INPUT_PULLUP يعني أن منفذ الإدخال للزر سيعطي قيمة 1 (قيمة عالية) اذا لم يتم الضغط عليه ، بمعنى آخر القيمه الاساسية لمنفذ الإدخال للزر هي 1 ، واذا تم الضغط على الزر فستعطي قيمة 0(قيمة منخفضة)

وهذا هو سبب ربط بـ GND . عند الضغط على الزر سيقوم الزر بتوصيل منفذ الإدخال إلى GND وعندها تكون القيمة منخفضة (0)

ولأننا قمنا بوضع التصميم بهذه الطريقة ، بمعنى ان قيمة الزر عالية ولكن عند الضغط عليه تكون منخفضة ،أي العكس لذلك سنقوم ببرمجتها داخل دالة ‘loop’

void loop()
{
  if (digitalRead(buttonApin) == LOW)
  {
    digitalWrite(ledPin, HIGH);
  }
  if (digitalRead(buttonBpin) == LOW)
  {
    digitalWrite(ledPin, LOW);
  }
}

 

 

داخل دالة ‘loop’ هناك جملتين IF شرطية . جملة شرطية لكل زر تقوم بقراءة ‘digitalRead’ لمدخل الزر (لمعرفة الحالة اذا كانت عالية او منخفضة)

تذكر انه عند الضغط على الزر ستكون القيمة منخفضة لذلك سيتم تحقيق الشرط وسيتم اضاءة الـLED وذالك بإعطاء قيمة عالية (1) لـledPin
كذالك الحال للزر الأخر (بجملة IF الشرطية الثانية)ولكن سيتم اطفاء الـLED لأننا قمنا بإعطاء قيمة منخفضة(0) لـledPin

ازرار مفاتيح الضغط  Push Switches

تعتبر مكون بسيط يسهل استخدامه في المشاريع ، فعند الضغط عليه يقوم بتوصيل الدائرة .

الأزرار المستخدمه في هذا الدرس “مفاتيح اللمس – tactile switches” تمتلك أربعة موصلات

Push Switches inside

في الحقيقة هنالك موصلين اثنين كهربائية داخلها ( كما في الصورة) منفذ B ومنفذ c موصولة ببعضها كذلك الحال منفذ a ومنفذ D موصولة ببعض.

امور اخرى عليك القيام بها

هناك أمرين يمكنك القيام بها..

أولاً، يمكنك استخدام ماتعلمته من الدرس السادس واافة بعض الاوامر عليها لتتمكن من إظهار القيمة على شاشة الاتصال التسلسلي Serial Monitor عند الضغط على الأزرار.

تذكر بانه عليك استخدام امر الطباعة على الشاشة في الكود داخل دالة loop لإظهار القيمة بالشاشة

Serial.println(“Button A Pressed”);

 

 

كما عليك القيام باضافة وتعريف خدمة الاتصال التسلسلي وذلك عبر اضافة الكود داخل دالة setup

while (!Serial);
Serial.begin(9600);

 

 

ثانياً، حاول تغيير الكود بحيث تستطيع اضاءة الـLED عند الغضط على الزر الموجود باعلى لوح التجارب وإطفاءه بشكل تلقائي بعد ثلاثين ثانية.

اردوينو – الدرس السادس – شاشة الاتصال التسلسلي – Serial Monitor

في هذا الدرس سنتعلم كيفية التحكم بإضاءة الـ LEDs عبر شاشة الإتصال التسلسلي “serial monitor” وهو يعتبر حلقة الوصل بين جهاز الكمبيوتر والأردوينو حيث يمكنك من ارسال واستقبال الرسائل والتحكم بالأردوينو .

serial monitor

مثال ، يمكنك ارسال اوامر من جهاز الكمبيوتر لإضاءة الـLED .
في هذا الدرس سوف تستخدم نفس القطع المستخدمة في الدرس الخامس ، لذلك ننصحك بمتابعته اولاً قبل إكمال هذا الدرس.

شاشة الاتصال التسلسلي – Serial Monitor

قم برفع الكود التالي إلى الاردوينو ، وسنرى كيف سوف يعمل

int latchPin = 5;
int clockPin = 6;
int dataPin = 4;
 
byte leds = 0;
 
void setup()
{
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
  updateShiftRegister();
  Serial.begin(9600);
  while (! Serial);
  Serial.println("Enter LED Number 0 to 7 or 'x' to clear");
}
 
void loop()
{
  if (Serial.available())
  {
    char ch = Serial.read();
    if (ch >= '0' && ch <= '7')
    {
      int led = ch - '0';
      bitSet(leds, led);
      updateShiftRegister();
      Serial.print("Turned on LED ");
      Serial.println(led);
    }
    if (ch == 'x')
    {
      leds = 0;
      updateShiftRegister();
      Serial.println("Cleared");
    }
  }
}
 
void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}

 

 

بعد رفع المخطط على الأردوينو بنجاح قم بالضغط على الزر الموجود يمين الشاشة بشريط الأدوات ( كما في الصورة )

serial monitor

سوف تظهر لك هذه النافذة التالية

serial monitor

هذه النافذة تسمى “Serial Monitor” شاشة الاتصال التسلسلي وهو أحد خصائص برنامج الأردوينو. وظيفته هي السماح لك بإرسال وإستقبال الرسائل من جهاز الكمبيوتر إلى الأردوينو عبر كيبل USB.

الرسالة “Enter LED Number 0 to 9 or ‘x’ to clear” تم ارسالها عبر الأردوينو ، تطلب منا معرفة الأمر الذي سيتم تنفيذه . هل هو “X” (لإطفاء جميع الـ LEDs) أو ادخال رقم الـLED الذي ترغب بإضاءته (من 0 إلى 7 )

جرب ادخال الأمر التالي:
Enter    X
Enter    3
Enter    5

عملية ادخال X لن تؤثر لأن جميع الـ LEDs مطفأه ، ولكن عند ادخال رقم الـLED المراد إضاءته سيقوم الأردوينو بالرد عليك برسالة تؤكد تشغيله كما نشاهد بالصورة التالية.

serial monitor

يمكنك تجربة الأمر X لتشاهد عملية الإطفاء لها جميعاً.

كود الأردوينو

كما ستلاحظ سوف نعتمد على كود الدرس السابق وسوف نقوم فقط بتغطية الاجزاء الجديدة بالكود ( عليك مراجعة كود الدرس السابق كاملاً حتى يسهل عليك متابعة الجزء الجديد)

أولاً ، دالة “setup” هنالك ثلاثة أسطر جديدة في نهايته

   

void setup()
    {
      pinMode(latchPin, OUTPUT);
      pinMode(dataPin, OUTPUT);  
      pinMode(clockPin, OUTPUT);
      updateShiftRegister();
      Serial.begin(9600);
      while (! Serial);
      Serial.println("Enter LED Number 0 to 7 or 'x' to clear");
    }

 

 

أولاً لدينا الأمر “Serial.begin(9600)” وهو يقوم ببدء عملية الإتصال التسلسلي ليمكن الأردوينو من إرسال الأوامر عبر كيبل الـUSB. القيمة 9600 هو معدل سرعة نقل البيانات،يمكنك تغيير القيمة لقيمة أعلى ولكن يجب عليك تغيير قيمة شاشة الاتصال التسلسلي لنفس القيمة.

السطر الثاني يبدأ بـ”While” الشرطية للتأكد من ان هنالك اتصال عبر الـUSB للأردوينو قبل بدء ارسال الرسائل .

السطر الثالث لطباعة السؤال بالشاشة.

دالة “loop”

   

void loop()
    {
      if (Serial.available())
      {
        char ch = Serial.read();
        if (ch >= '0' && ch <= '7')
        {
          int led = ch - '0';
          bitSet(leds, led);
          updateShiftRegister();
          Serial.print("Turned on LED ");
          Serial.println(led);
        }
        if (ch == 'x')
        {
          leds = 0;
          updateShiftRegister();
          Serial.println("Cleared");
        }
      }
    }

 

 

كل شي يحدث داخل دورة الـ loop يحدث داخل الجملة الشرطية IF (اذا كان)،
“Serial.available()” للتأكد من انه مازال هناك اتصال تسلسلي نشط (وذلك عبر استرجاع قيمة True – نعم) وعندها فقط يتم تنفيذ سلسلة الأوامر التي بداخلها.
اذا تم استقبال رسالة فسوف ينتقل لسطر الكود التالي

char ch = Serial.read();

 

 

هذا الأمر سيقوم بقراءة الحرف الذي تم استلامه ويقوم بتخزينه للمتغير ch ،المتغير ch تم تعريفه  لتخزين القيم التي هي عبارة عن حروف  char وهي اختصار لـcharacter “حرف ” يتم تخزن حرف واحد فقط كقيمة للمتغير

السطر الذي يليله بالكود هي جملة IF الشرطية ، وذلك للتأكد من أن القيمة المدخلة أعلى من 0 وأقل من 7. قد تبدو غريبة عليك الآن ولكن اعدك عبر الممارسة ستقوم بفهمها جيداً.

كل حرف مدخل يحمل قيمة خاصة بالنظام ، يدعى قيمة ASCII .وهذا يعني انه عند استخدام <= و => فنحن نقوم بالمقارنة بقيم ASCII

اذا نجح الاختبار فسوف ينتقل للسطر الذي يليه

int led = ch – '0';

 

 

يقوم باحتساب قيمة الـ LED = وذلك عبر عملية طرح الصفر من  قيمة (ASCII) للحرف المدخل

لأننا نعلم برقم الـLED الذي نرغب بإضاءته كل ماعلينا فعله هو وضع تلك القيمة لـleads والقيام بتحديث مسجل الإزاحة shift register

  

 bitSet(leds, led);
    updateShiftRegister();

 

 

السطرين التاليين سيقومون بإرسال رسالة التأكيد لشاشة الاتصال التسلسلي serial monitor

          Serial.print("Turned on LED ");
          Serial.println(led);

 

 

كما تلاحظ لقد قمنا بإستخدام Serial.print عوضاً عن Serial.println.الفرق بين الإثنين هو أن Serial.print لايقوم بوضع سطر جديد في الشاشة بعد طباعة الرسالة.
ولأننا نود أن نطبع في الشاشة رسالة التأكيد اضافة إلى رقم الـLED الذي تم اضاءته فيجب علينا ان نستمر بالطباعة على الشاشة في نفس السطر لذلك السطر الذي يليه قمنا بإستخدام Serial.println لأننا نرغب بوضع سطر جديد بعد طباعة الرسالة ورقم الـLED

قيمة الـLED هو عبارة عن integer رقم صحيح “int”
بعد جملة IF الشرطية الأولى هنالك جملة IF شرطية ثانية تقوم بالتأكد ما اذا كان قيمة “ch” يحمل الحرف x او لأ.

        if (ch == 'x')
        {
          leds = 0;
          updateShiftRegister();
          Serial.println("Cleared");
        }

 

 

امور اخرى عليك القيام بها

قمنا بإرسال الحروف منفصله وذلك عبر الضغط على إنتر Enter بعد كل حرف لارسال الأمر ، ولكن يمكنك ارسالها جميعاً مره واحدة في سطر واحد .. جرب ادخال التالي في شاشة الاتصال التسلسلي وارسلها:
X0246

لنرى الآن لأي مدى سرعة اتصال الأردوينو . قم بتغيير معدل سرعة نقل البيانات في الكود من 9600 إلى 115200 وقم برفعه لمتحكم الأردوينو مره أخرى.
بعد ذلك قم بفتح شاشة الاتصال التسلسلي وقم بتغيير معدل سرعة نقل البيانات إلى 115200 (مثل الصورة)

5

ستلاحظ أنه لايزال كل شي يعمل بشكل صحيح ، معدل سرعات نقل البيانات العالية جداً غير ضرورية لذلك 9600 هي الشائع استخداما والعديد من وحدات الـGPS تستخدم هذه السرعة.

كما يمكنك عدم توحيد معدل نقل البيانات بين شاشة الاتصال التسلسلي و كود الأردوينو ، لتشاهد ماذا يحدث ولتعرف كيف يظهر الخطأ وماسببه.

شاشة الاتصال التسلسلي “Serial Monitor” هي طريقة جيدة أيضاً لتحليل أخطاء الكود وتصحيحها أيضاً

اردوينو – الدرس الخامس – إضاءة 8LEDs بإستخدام رقاقة Shift Register

في هذا الدرس ستتعلم طريقة تشغيل  8LEDs  حمراء كبيرة بدون إستعمال 8 منافذ مخارج

arduino with Shift register

رغم أنه يمكنك ربط كل LED بمنفذ منفرد بالأردوينو ولكن في هذه الحالة لن يبقى لديك الكثير من المنافذ لاستعمالات أخرى. قد يكون الأمر ممكن في حالة عدم وجود الكثير من الأجهزة مرتبطة بالاردوينو، ولكننا في أغلب الأحيان نود إضافة أزرار، محركات ومستشعرات  إلخ…  الحل هو إستعمال رقاقة  74HC595  ، تمتلك هذه الرقاقة 8 منافذ إستخراج و3 منافذ إدخال

ستقوم هذه الرقاقة في إبطاء سرعة الـ LEDs
( من 8000000 إلى 500000 تحويله في الثانية  ولكنها تبقى سريعة جدا ولن نلاحظ الفرق)

القطع المطلوبة

حتى يمكنك تنفيذ التجربة في هذا الدرس عليك توفير القطع التالية

5mm Red LED5mm Red LED عدد 8

270 Ω Resistors270 Ω Resistors عدد 8

74HC595 Shift Registerرقاقة مسجل الإزاحة
74HC595 Shift Register

Half-size Breadboardلوح تجارب حجم متوسط
Half-size Breadboard

Arduino Uno R3Arduino Uno R3

Jumper wire pack

Jumper wire pack

تصميم لوح التجارب

بما ان لدينا 8LEDs لتربط مع 8 مقومات يجب وضع العديد من الأسلاك.

8

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

  • تربط منفذ الديجيتال 4 من الأردوينو بالمنفذ 14 من مسجل الإزاحة.
  • تربط منفذ الديجيتال 5 من الأردوينو بالمنفذ 12 من مسجل الإزاحة.
  • تربط منفذ الديجيتال 6 من الأردوينو بالمنفذ 11 من مسجل الإزاحة.

أغلب منافذ الإستخراج من الرقاقة توجد على اليسار، حتى يسهل ربط الـ LEDs.

بعد وضع رقاقة مسجل الإزاحة  نقوم بإضافة المقاومات ، يجب ان تتأكد ان ليس هنالك التماس بين مختلف نهايات المقاومات يجب أن تتأكد مجددا قبل أن تغذي الاردوينو بالطاقة ، قد يساعدك التقصير في طول نهاية المقاومات.نقوم بوضع الـ LED في لوح التجارب

يجب على المنافذ الطويلة للـ LED أن تواجه الرقاقة مباشرة.

المرحلة الأخيرة هي إضافة الأسلاك كما في الصورة.  لا تنسى أن تربط المنفذ 8 من الرقاقة إلى خانة الأرض أو GND

قم بتحمل المخطط وتجربته.  على كل LED أن يعمل مرة واحدة ثم الكل معا وأخيراً ينطفئ الكل معا قبل أن يعيد الاردوينو الدورة.

74HC595 Shift Register

من الافضل فهم طريقة عمل رقاقة مسجل الإزاحة حتى نفهم الكود جيدا.

الرقاقة هي عبارة عن مسجل للإزاحة

تحمل 8 أماكن تعتبر مثل الذاكرة الصغيرة ، يمكن لكل واحدة فيها أن تسجل 1 أو 0 كقيمة

لنسجل كل من هذه الخانات بالقيمة المراد وضعها ، ندخل كل من المعلومات عبر منفذ “Data” ومنفذ “Clock”

على منفذ الـ”Clock”  أن يستقبل 8 ذبذبات، إذا كان منفذ “Data” عالي فسيتم إدخال القيمة “1” إلى داخل مسجل الإزاحة. بعد إستقبال الذبذبات الثمانية تعطى الإشارة لمنفذ “Latch” لتخرج الإشارة لجميع الـ LEDs الثمانية دفعة واحدة.

تمتلك الرقاقة منفذ “OE” (إختصار لـ output enable ) وهي التي تتحكم في كل المخرجات معا.  يمكن لك التحكم في البريق الكلي للـLED إذا قمت بربط منفذ “OE” بمنفذ إستخراج “MWP” من الاردوينو وقمت بإستخدام الدلة ” analogWrite” بالكود فسوف يعمل الـ LEDعلى مستوى منخفض، لذلك سنربطها بالأرض.

كود الاردوينو

تمتلك مكتبة الاردوينو “دالة” مميزة تسمى “ShiftOut” وهي مصممة خصيصا لإرسال البيانات لرقاقة مسجل الإزاحة.

التالي هو المخطط الكامل، سنتحدث عن طريقة عمل هذا المخطط  في ما بعد.
إنسخ الكود

int latchPin = 5;
int clockPin = 6;
int dataPin = 4;
 
byte leds = 0;
 
void setup()
{
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
}
 
void loop()
{
  leds = 0;
  updateShiftRegister();
  delay(500);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    updateShiftRegister();
    delay(500);
  }
}
 
void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}

 

 

أول ما علينا فعله هو التعريف بالمنافذ الثلاث التي سنستعملها. هذه هي منافذ الاردوينو التي سنستعملها للتحكم في “Latch”، “Clock” ومنفذ “Data” من الرقاقة 74HC595.

Int latchPin=5;
Int clockPin=6;
Int dataPin=4;

 

 

ثم يأتي التعريف بالمتغيرالمسمى Leds سنستعمل هذا المتغير لإحتواء نمط تغيير(تشغيل أو اطفاء) الـ LED.
تمثل البيانات من نوع ” – Byteبايت” أرقام تكتب بإستعمال 8 أجزاء.  يمكن أن يحمل كل جزء قيمة 1 أو 0
وهذا سيمكننا من تتبع قيمة كل LED.

byte leds = 0;

 

 

تقوم دالة التنصيب  “Setup” هذه بإعداد المنافذ الثلاث التي سنستخدمها كمخرجات للـ LEDs.

void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);  
pinMode(clockPin, OUTPUT);
}

 

 

تقوم دالة “Loop” بإطفاء كل LED وذلك بإعطاء قيمة ‘0’ كقيمة للـ LEDs. ثم تقوم بمناداة دالة “updateShiftRegister” التي سترسل نمط Leds إلى رقاقة مسجل الإزاحة حتى تنطفئ كل LED. سوف نتعلم كيفية عمل “updateShiftRegister” لاحقا.

تقف دالة “Loop” لنصف ثانية ثم تبدء بالعد من 0 إلى 7 عبر دورة “For” والمتغير “I”.  وفي كل مرة تستعمل وظيفة “bitSet” لتثبيت الجزء المتحكم في الـLED داخل متغير Leds . ثم تنادي دالة  “updateShiftRegister” حتى يتم تحديث حالة الـLED التي تعكس قيمة المتغير”leds”

هنالك فترة إنتظار نصف ثانية في كل تكرار للدورة “For”

void loop()
{
leds = 0;
updateShiftRegister();
delay(500);
for (int i = 0; i < 8; i++)
{
bitSet(leds, i);
updateShiftRegister();
delay(500);
}
}

 

 

تقوم دالة UpdateShiftRegister بوضع منفذ “Latch” إلى الوضع المنخفض ثم تنادي دالة shiftOut قبل ان تعيد منفذ “Latch” إلى الوضع العالي مره أخرى ، تأخد هذه الدالة أربع متغيرات، تحدد المتغيرتان الأولى المنافذ المستعملة لنقل البيانات عبر “Data” و”Clock” .

تحدد المتغيرة الثالثة جهة البدء بقراءة البايت. سوف نقرأ البايت من اليمين إلى اليسار.

المتغير الأخيريمثل القيمة الفعلية التي سترسل إلى رقاقة مسجل الإزاحة.

void updateShiftRegister()
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, leds);
digitalWrite(latchPin, HIGH);
}

 

 

إذا كنت تود تغيير قيم أحد الـ LEDs، كل ماعليك هو أن تنادي دالة مشابهة اسمها (bitClear) لتغير قيمتها إلى 0
هكذا ستطفئ واحدة من الـLEDs وكل مايتبقى لك فعله هو مناداة دالة “updateShiftRegister” لتحديث حالة الـLED.

التحكم في البريق

لم نتحدث كثيراً في رقاقة الـ 74HC595 عن منفذ “OE” أو “OutputEnable” ، رقم هذا الـ LED هو 13, وفي لوح التجارب مربوط دوما بالأرض.  يعمل هذه المنفذ كالمحول، هو الذي  يمكن له ان يطفئ ويشغل المخرجات(الـLEDs (
ولكن عليك أن تحذر لأنها تعمل في الوضع المنخفض. ذلك يعني، إن كانت كلها مربوطة بطاقة5V ستطفئ جميعها. وإن كانت مربوطة بالأرض ستعمل جميعها حسب ما يأتيها من بيانات.

يمكن لنا أن نستعمل هذه المنفذ والإستعانة بدالة “analogWrite” للتحكم في بريق إضاءة الـ LED معا.

كل ما عليك فعله هو تغيير المنفذ 13 من الأرض إلى المنفذ 3 في الأردوينو.

سيجعل المخطط التالي كل الـLEDs تعمل ببطء ثم تنطفئ ببطء.

int latchPin = 5;
int clockPin = 6;
int dataPin = 4;
int outputEnablePin = 3;
 
byte leds = 0;
 
void setup()
{
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
  pinMode(outputEnablePin, OUTPUT);
}
 
void loop()
{
  setBrightness(255);
  leds = 0;
  updateShiftRegister();
  delay(500);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    updateShiftRegister();
    delay(500);
  }
  for (byte b = 255; b > 0; b--)
  {
    setBrightness(b);
    delay(50);
  }
}
 
void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}
 
void setBrightness(byte brightness) // 0 to 255
{
  analogWrite(outputEnablePin, 255-brightness);
}

 

 

أنشطة أخرى

عندما تتمكن من فهم رقاقة مسجل الإزاحة ستجد العديد من التطبيقات التي يمكن لك فعلها بإستعمال عدد كبير من الـLEDs.

واحدةمن الأشياء الرائعة في رقاقة 74HC595 أنه يمكن وضعها بجانب بعضها والتحكم في عدد أكبر من الـLEDs بإستعمال نفس منافذ المخارج من الأردوينو.

لا تقوم بتغيير الدائرة في لوح التجارب، سوف نستعملها في الدرس القادم.

اردوينو – الدرس الرابع – إضاءة RGB LEDs

مقدمة

في هذا الدرس سنتعلم كيفية إستعمال الـLED الملون أو RGB (Led Green Blue)
سوف تستعمل analogWrite من مكتبة الاردوينو للتحكم في لون الـLED.

1

تبدو الـLED الملون مثل الـLED العادي ولكن يوجد داخل الـLED الملون 3 LEDS ، أحمر  LED أخضر LED وأزرق LED  يمكن لنا التحصل على الوان عن طريق التحكم في بريق كل واحدة من هذه الإضاءات.

تمزج الألوان الضوئية كما الألوان التي تستعمل للرسم، وذلك بتعديل كمية أو قيمة كل لون.
الطريقة الصعبة للقيام بهذا تكون بإستعمال عدة مقاومات كما قمنا في الدرس السابق ولكن هذا صعب. لحسن الحظ ، يمتلك الاردوينو دالة اسمها  analogWrite لإستخراج قيمة متغيرة من التيار الكهربائي لتغذية الـLED

القطع المطلوبة

لتنفيذ هذه التجربة يجب عليك توفير القطع التالية.

2

Diffuse RGB LED 10mm

220 Ω resistor

220 Ω Resistors ثلاث قطع

4

Half-size Breadboard

5

Arduino Uno R3

6

Jumper wire pack

تصميم لوحة التجارب

لدى الـLED الملون أربع نهايات ،هنالك منفذ لكل قطب سالب لـ3  LEDSوقطب واحد موحد للأقطاب الموجبة.

 t12

القطب الموجب الموحد هو القطب الثاني من الجهة المسطحة وهو كذلك الأطول بين الأقطاب الأربعة ستربطه بمقاومة بقيمة 220 اوم حتى تمنع مرور تيار كهربائي كبير ويربط قطب المقاومة من الجهة الأخرى بالاردوينو 5v.

يتم ربط كل من أقطاب الـ LEDs الملونة بالاردوينو كما هو موضح بالصورة.

إذا كنت تستعمل RGB LED بقطب سالب موحد عوض عن قطب الموجب الموحد اربط القطب الطويل بـ GND عوضاً عن 5v.

matlab-gui

الألوان

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

بلغة أخرى، استعمالنا لثلاث اضاءات هو طريقة لخدع العين.  نفس الفكرة مستعمل في أجهزة التلفاز، حيث كل بيكسل متكون من ثلاث نقاط (أحمر، أخضر،أزرق).

9

إذا وضعنا القيمة القصوى لكل LED فسنحصل على اللون الأبيض ، وإذا اغلقنا LED الأزرق فسنحصل على اللون الأصفر الذي هو مزيج بين الأحمر والأخضر.

يمكن لنا أن نتحصل على كل ألون الطيف عن طريق التحكم في بريق كل لون من اللادات

الأسود ليس بلون انما هو نتيجة غياب الضوء. إذاً الطريقة الأقرب لنا للوصول إلى اللون الأسود هي بإطفاء جميع اللادات.

مخطوطة الاردوينو

هذه المخطوطة ستدور حول الألوان : الأحمر، الأخضر، الأزرق، الأصفر، البنفسجي والبحري تندرج هذه الألوان ضمن معيار الألوان في الإنترنت
إنسخ الكود
جرب المخطوطة، سوف نشرح ببعض التفاصيل

int redPin = 9;
int greenPin = 10;
int bluePin = 11;
 
#define COMMON_ANODE
 
void setup()
{
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);  
}
 
void loop()
{
  setColor(255, 0, 0);  // red
  delay(1000);
  setColor(0, 255, 0);  // green
  delay(1000);
  setColor(0, 0, 255);  // blue
  delay(1000);
  setColor(200,255 , 0);  // yellow
  delay(1000);  
  setColor(80, 0, 80);  // purple
  delay(1000);
  setColor(0, 255, 255);  // aqua
  delay(1000);
}
 
void setColor(int red, int green, int blue)
{
  #ifdef COMMON_ANODE
    red = 255 - red;
    green = 255 - green;
    blue = 255 - blue;
  #endif
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue);  
}

 

 

تبدأ المخطوطة بتحديد منفذ كل لون
إنسخ الكود

int redPin = 11;
int greenPin = 10;
int bluePin = 9;

 

الخطوة الثانية، هي كتابة دالة التعريف SETUP كما شهدنا في الدروس السابق أن وظيفة التعريق تعمل مره واحدة في بداية التشغيل.  في هذه المخطوطة كل ما علينا فعله هو إعداد المنافذ الثلاث للإستخراج
إنسخ الكود

    void setup()
    {
      pinMode(redPin, OUTPUT);
      pinMode(greenPin, OUTPUT);
      pinMode(bluePin, OUTPUT);  
    }

 

 

قبل أن ننظر إلى دالة “LOOP” ، لنلقي نظرة على آخر دالة  في المخطوطة.
إنسخ الكود

    
void setColor(int red, int green, int blue)
{
  #ifdef COMMON_ANODE
    red = 255 - red;
    green = 255 - green;
    blue = 255 - blue;
  #endif
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue);  
}

لأننا نستعمل الـLED الملونه ذات قطب موجب موحد، عليك إذاً أن تغير قيمة العوامل المتغيرة لكل لون وذلك بطرح القيمة المرادة من 255

 

 

في هذه الدالة تم اخذ ثلاث عوامل متغيرة، واحدة لكل بريق لون ، سيكون العامل المتغير من 0 وحتى 250
حيث يعني 0 القيمى الصغرى  و 255 هي القيمة القصوى
تستدعى الدالة analogWrite للتحكم في بريق كل LED
إذا نظرت في دالة  loop فستلاحظ اننا نغير في قيمة الألوان التي نريد عرضها ثم ننتظر ثانية قبل أن نذهب إلى اللون التالي.
إنسخ الكود

    void loop()
    {
      setColor(255, 0, 0);  // red
      delay(1000);
      setColor(0, 255, 0);  // green
      delay(1000);
      setColor(0, 0, 255);  // blue
      delay(1000);
      setColor(255, 255, 0);// yellow
      delay(1000);  
      setColor(80, 0, 80);  // purple
      delay(1000);
      setColor(0, 255, 255);// aqua
      delay(1000);
    }

 

 

قم بإضافة بعض الألوان إلى المخطوطة الخاص بك وشاهد تأثيرها في الـLED الملونه.

إذا كنت تستعمل الـLED الملونه ذات قطب سالب موحد، لا تقم بطرح القيمة المرادة من 255

إستعمال ألوان الإنترنت

إذا كنت قد قمت ببعض البرمجةمن قبل  فستعلم أن الألوان ترمز إليها بأرقام HEX على القاعدة 16.  مثلا يرمز للون الأحمر بـ  FF0000# يمكن أن تجد أرقام العديد من الألوان في مصادر عديدة، مثل

http://www.devguru.com/features/colors

الأرقام 6 التي ترمز للون متكونة من ثلاث أزواج، الرقمان الأولان يرمزان للأحمر، الرقمان التاليان للأخضر والأخيران للأزرق الأحمر هو FF0000#  لأن فيه القيمة القصوى للأحمر وليس فيه أي ألوان أخرى

بهذه الطريقة يمكن لنا ان نستخرج أي لون بسرعة.

لنصنع هذا اللون مثلاً  (#4B0082)

قيمة الأحمر الأخضر والأزرق هم كالآتى.
يمكن لنا أن نضع هذه القيم  في دالة “SetColor” هكذا :
إنسخ الكود

setColor(0x4B, 0x0, 0x82);

 

 

قمنا بإضافة 0X أمام الأرقام لأنها أرقام HEX

قم بإضافة بعض الألوان إلى دالة “Loop”  لا تنسى أن تضيف “Delay” بعد كل واحدة

MWP نظرياً

MWP هي تقنية للتحكم في الطاقة نحن نستعملها هنا للتحكم في كمية الطاقة لكل LED.

يعرض الرسم البياني التالي إشارة MWP على منفذ  الأردوينو

10

تقريبا كل 1/500  ذبذبة بالثانية، نتحكم في طول هذه الذبذبة بإستعمال دالة  “analogWrite  إذا كانتanalogWrite(0)  لا تعطينا أي ذبذبة و analogWrite(255) تعطينا ذبذبة متواصلة.

إذا حددنا قيمة بين 0 و 255 فسنحصل على ذبذبة ،إذا كانت الإشارة عالية مقدار 5% فقط فذلك يعني اننا نستعمل في 5% من الطاقة.

نفس الشيء إذا كان منفذ الإستخراج يساوي 5V  في 90% من الوقت فسنحصل على 90% من الطاقة.
لا يمكننا ملاحظة تغير(إطفاء وتشغيل) إشعاع الإضاءة بهذه السرعة فيخيل لنا أن بريقها يتغيرفقط.

أنشطة أخرى

  • حاول وضع كرة PING-PONG فوق الـ LEDالملونة
  • غير مدة الإنتظار عبر دالة  “Delay” لتسرع أوتبطئ سرعة تغير الألوان.

هنالك العديد من الأنشطة التي يمكنلك فعله ابإستعمال الـLED الملونة قم بتصفح الإنترنت لتستكشف كل المؤثرات الخاصة القائمة على الـLED الملونة

اردوينو – الدرس الثالث – إضاءات LEDs

مقدمة

سنتعلم في هذا الدرس كيفية تغيير درجة بريق الـLED  بإستعمال عدة قيم من المقاومات.

arduino with breadboard and leds

القطع المطلوبة

لتنفيذ هذه التجربة يجب عليك توفير القطع التالية.

5mm Red LED

5mm Red LED

270 Ω Resistor

270 Ω Resistor

470 Ω Resistor

470 Ω Resistor

2.2 kΩ Resistor

2.2 kΩ Resistor

10 kΩ Resistor

10 kΩ Resistor

Half-size Breadboard

لوحة التجارب الصغيره   Half-size Breadboard

Arduino Uno R3

Arduino Uno R3

Jumper wire pack

Jumper wire pack

الـ LED

تعتبر الـLED مؤشر ضوئي فعال فهي تستعمل كميات ضئيلة من الكهرباء ويمكنها العيش لفترة طويلة جدا

سنستعمل في هذا الدرس أكثر  LEDشعبية هوmm red LED5 . ترمز mm5 إلى قطر الـLED.

لا يمكنك ربط الـLED مباشرة إلى بطارية أو أي مصدر طاقة.
السبب الأول هو أنها تمتلك قطب سالب وقطب موجب وقد لا تعمل إذا كانت مربوطة بالخطأ.
السبب الثاني هو انه يجب إضافة مقاومة  resistorبين مصدر الطاقة و الـLED حتى تحد من قيمة التيار الكهربائي المار عبر الـLED والذي يمكن له أن يحرقها.

5mm red led

إذا لم تستعمل مقاومة resistor  مع الـLED فيمكن أن يؤدي ذلك إلى إحتراق الـLED مباشرة. لأن قيمة كبيرة من الكهرباء ستمر عبر الـLED والتي ستنتج  عنها حرارة عالية لا يمكن تحملها.

هنالك طريقتين لمعرفة أي من القطبين موجب وأيهما سالب.
أولا: القطب الموجب هو القطب الأطول.
ثانيا: من حيث يدخل القطب السالب للـLED ستجد حافة مسطحة الجسم.

المقاومات Resistors

كما يظهر من الاسم، المقاومة تقاوم تدفق التيار الكهربائي، وكلما ارتفعت قيمة المقاومة كلما قاومت أكثر وقل تدفق التيار الكهربائي.  سنستعمل المقاومة إذاً للتحكم في كمية التيار الكهربائي المتدفقة في الـLED كذلك في درجة بريق الـLED.

resistor

ولكن لنتحدث قليلاً عن المقاومة.

وحدة قياس المقاومة هي الأوهم، ويرمز لها الحرف اليوناني Ω
كما نستعمل قيمة مقاومة في حدود الـ  1000 kΩ  =   Ω (كيلو أوهم)
و 1000,000 MΩ =  Ω (ميجا أوهم)

في هذا الدرس سنستعمل 3 قيم مختلفة للمقاومة، 270Ω، 470Ω، 2.2kΩ و 10kΩ.

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

يمكن لنا أن نستخرج قيمة المقاومة من خلال الألوان.

كل لون لديه رقم يرمز كالتالي:

  • الأسود 0
  • البني 1
  • الأحمر 2
  • البرتقالي 3
  • الأصفر 4
  • الأخضر 5
  • الأزرق 6
  • البنفسجي 7
  • الرمادي 8
  • الأبيض 9

الشريط الأول والثاني يمثلان الرقمان الأولان لقيمة المقاومة ، إذا كانت أحمر ثم بنفسجي يعني 7 و 2 ، يمثل الشريط الثالث عدد الأصفار التي تأتي بعد الرقمين الأول و الثاني، فإذا كان اللون بني فذلك يعني أنه علينا إضافة صفر وحيد وتصبح قيمة المقاومة إذن 270 أوهم.

تمتلك مقاومة بشرائط بني، أسود، برتقالي، مقاومة بقيمة 10 kΩ

على عكس الـLED تمتلك المقاومة قطبين، يمكن لها إن توصل من الجهتين.

تصميم لوحة التجارب

قم بوصل دائرتك مثل الصورة التالية

circuit1

يمكن للأردوينو أن يمدنا بطاقة مقدارها 5Volts التي ستوفر الطاقة الكافية لـLED  والمقاومة.
عليك الأن ربط الاردوينو بالحاسوب عبر كيبل USB

arduino uno with breadboard and led

مع وجود المقاومة بقيمة 270 أوهم ستضيء الـLED بقوة.
إذا قمت بتغيير المقاومة بمقاومة 470 أوهم سينخفض بريق الـLED

مع وجود مقاومة 2.2 K أوهم سينخفض بريق الـLED أكثر
وأخيرا مع مقاومة بقيمة 10K أوهم ستكون الـLED بالكاد مضاءة.
قم بنزع السلك الأحمر من لوحة التجارب وأعده حتى يعمل كمحول.  سيسهل عليك ملاحظة الفرق.

أطفئ الأضواء لمشاهدة أفضل.

تغيير مكان المقاومة

لديك الأن، 5V من الاردوينو إلى منفذ المقاومة الأولى، المنفذ الثاني للمقاومة مربوط بالقطب الموجب للـLED والقطب السالب موصل ب GND ولكن إن غيرنا مكان المقاومة بعد الـLED ، فلن يغير ذلك من بريق الـLED.

circuit1 view 2

قد تريد إعادة المقاومة بقيمة 270 أوهم إلى مكانها.

إذن..لا يهم مكان وجود المقاومة. المهم هوان تكون موصوله  مع الـLED.

وميض الـLED

بتغيير طفيف للدائرة ، سنوصل الـLED بمنفذ إستخراج من الاردوينو قم بتحريك السلك الأحمر من منفذ 5V إلى D13، مثل الصورة التالية

circuit1 view3

والإن قم بتحميل برنامج مخطط “Blink” من الدرس الأول ستلاحظ أن كل الـLED الملحق بالأردوينو و الـLED في لوحة التجارب يومضان.

لنستعمل المنفذ D7 حرك السلك الأحمر من D13 إلى D7 وغير هذا المقطع في بداية الكود

int led = 13 ;

إلى:

int led = 7 ;

قم بلف و تحميل الكود، ستواصل الـLED الوميض ولكن المرة هذه من خلال المنفذ D7

في الدرس القادم ستستعمل الـLED مره أخرى، ولكن سيتحكم فيها الاردوينو

اردوينو – الدرس الثاني – الوميض

مقدمة

في هذا الدرس ستتعلم برمجة الاردوينو لتجعل الـ LED الملحقة بها يومض.

arduino plus IDE

القطع المطلوبة

 

Arduino Uno R3

Arduino Uno R3

Cabel Type A to B USB

كيبل Type A to B USB –

الـ LED

 

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

يمتلك الاردوينو مع ذلك LED ملحقة به والتي يمكن لك أن تتحكم بها عن طريق البرمجة مباشرة. هذه الـLED ملحقة بأردوينو ويرمز لها عادة بالـLED ‘L’

توجد هذه الـLED داخل محيط الدائرة الحمراء في الصورة التالية.

arduino uno led

arduino leonardo led

تحميل مثال الوميض أو Blink

 

قد تلاحظ أن الـLED  في الاردوينو تومض بدون تحميل أي برنامج . ذلك لأن كل لوحات الاردوينو تشحن مع برنامج الوميض.

في هذا الدرس سنعيد برمجة الاردوينو بإستعمال برنامجنا الخاص ثم سنغير معدل وميض الـ LED.

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

يمتلك برنامج الاردوينو العديد من المخططات “برامج جاهزة” التي يمكن لك أن تحملها تستعملها بسرعة. و ذلك يشمل مثال الوميض لـ LED  ‘L’ .

قم بتحميل مخطط Blink من خلال  File->Examples->01.Basics

browse to blink example

عندما تفتح نافذة قم بتكبيرها حتى تشاهد المخططات بوضوح

blink sketch

تسجيل نسخة من برنامج “الوميض”

 

كل الأمثلة الملحقة ببرنامج الاردوينو “للقراءة فقط”  ذلك يعني أنه يمكن لك أن تحملها للوحتك ولكن لا يمكنك تغييرها.

بما اننا سنغير في المخططات علينا إذاً أن نقوم بتسجيل نسختنا الخاصة.

من خلال قائمة “File” من برنامج الاردوينو قم بإختيار “save as” ثم إحفظة بإسم مناسب مثل “My Blink”

save sketch

لقد قمت بتسجيل نسختك.  ذلك يعني انه يمكنك العثور على برنامجك من خلال قائمة File->Sketchbook

browse to sketchbook

تحميل مثال الوميض للوحة

 

أربط لوحتك بالكمبيوتر عبر كيبل USB ثم تأكد من صحة “Board Type” و “Serial Port”.  قد تحتاج إلى العودة للدرس السابق.
يعرض برنامج الاردوينو الاعدادت الجارية للوحة في أسفل النافذة.

أنقر على زر Upload   الزر الثاني من اليسار في لوحة الأدوات

upload button

إذا شاهدت لوحة الحالة فستلاحظ لوحة تقدم والعديد من الرسائل  في الأول سيكتب لك Compiling Sketch ….  هذا يعني أن المخطط في خضم التحويل إلى نسخة  قابلة للتنفيذ في الاردوينو.

compiling sketch

بعد ذلك ستتغير الحالة إلى “Uploading” أو تحميل  في هذه المرحلة على الـLED الملحقه في الاردوينو أن تبدأ في الوميض

uploading sketch

أخيرا ستتحول الحاله إلى “Done” أي “انتهى”

done uploading

تخبرنا الرسالة أن هذا البرنامج يستعمل 1,084 بيتس من ال-32,256 المتوفرة.
يمكن أن تواجهك الرسالة التالية

arduino serial connection error

ذلك يعني أن لوحتك ليست مربوطة أو نظام التشغيل ليس مثبت أو أن منفذ التواصل المتسلسل خاطئ

إذا واجهتك هذه الرسالة، عد إلى الدرس السابق وتثبت من صحة تنصيبك للبرنامج.

عندما ينتهي التحميل، على لوحتك إعادة العمل والبدء في الوميض.

كيف يعمل الوميض؟

 

التالي هو برنامج مخطط الوميض


int led = 13;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
delay(1000);               // wait for a second
digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
delay(1000);               // wait for a second
}

 ستلاحظ سريعا أن أغلب هذا الكود تعليقات.  لا تؤثر التعليقات في سير البرنامج. فهي موجودة لتوفير شرح  لطريقة سير البرنامج بلغة أسهل.

كل شيء بين /*   و   */    في بداية المخطط هي مجموعة من التعليقات التي تشرح مضمون الكود.

هنالك أيضاً تعليقات عبارة عن سطر واحد فقط ،  تبدء بـ //

السطر الأول من الكود هو:

int led = 13;

 

 

كما ذكر في  التعليق ، هذا يعطي إسم لمنفذ الاردوينو المربوط بالـ LED غالباً ما يكون هذا المنفذ رقم 13 وهو موجود في الأردوينو UNO والاردوينو Leonardo

يليها  الدالة Setup  تعمل هذه الدالة عند الضغط على زر Reset كذلك تعمل عند تسغيل أو إعادة تشغيل اللوحة

void setup() {                
// initialize the digital pin as an output.
pinMode(led, OUTPUT);     
}

 

يتكون كل برنامج اردوينو من دالة Setup والتي تحتوي على سلسلة من التعليمات داخل{}

في هذه الحالة هنالك تعليمة واحدة، وهي كما تم شرحها  في التعليق، تقوم الاردوينو بتخصيص المنفذ رقم 13 لعملية منفذات ( إضاءة  LED).

يجب أن يتكون كل برنامج “مخطط” اردوينو من دالة  “Loop” والتي تعمل مباشرة بعد دالة “Setup”
تقوم دالة “Loop” بتنفيذ وتكرار سلسلة التعليمات الموجودة بداخلها طالما أن جهاز الاردوينو يعمل

void loop() {
digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
delay(1000);               // wait for a second
digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
delay(1000);               // wait for a second
}

 

الوميض بطريقة أسرع

 

سوف نجعل الآن الـLED تومض بطريقة أسرع وكما استنتجت،كل ما علينا فعله هو التخفيض في قيمة الإنتظار”delay”

increase blink speed

وحدة قيمة الإنتظار هي ملي ثانية ، فإذا أردت أن تومض الـLED بضعف السرعة الحالية، كل ما عليك فعله هو تغيير 1000 إلى 500  هكذا فإن مدة الإنتظار ستجبر البرنامج على الوقوف لمدة نصف ثانية عوض عن ثانية كاملة.

حمل برنامج المخطط مرة أخرى وستلاحظ أن الـ LEDتومض بسرعة.

أنشطة أخرى

 

قم بتغيير قيمة الإنتظار إلى 100 ملي ثانية لتجعل الوميض أسرع بكثير.