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

مقدمة

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

LEDs

المواد والأدوات

LEDs

 1× (5mm Red LED)

اردوينو

1×  (270 Ω Resistor)

arduino-lesson-3

(470 Ω Resistor)

arduino-lesson-3

(2.2 kΩ Resistor)

arduino-lesson-3

(10 kΩ Resistor)

اردوينو

لوحة التجارب (Half-size Breadboard)

اردوينو

 1× اردوينو اونو

اردوينو

حزمة أسلاك توصيل (ذكر-ذكر)

Arduino cable

سلك اردوينو

 LED

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

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

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

LEDs

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

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

المقاومات (Resistors)

كما يظهر من الاسم، المقاومة تقاوم تدفق التيار الكهربائي، وكلما ارتفعت قيمة المقاومة كلما قاومت أكثر وقل تدفق التيار الكهربائي.

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

arduino-lesson-3

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

وحدة قياس المقاومة هي الأوهم، ويرمز لها الحرف اليوناني Ω
كما نستعمل قيمة مقاومة في حدود الـ  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 تمتلك المقاومة قطبين، يمكن لها ان توَصل من الجهتين.

توصيل الدائرة

وصل الدائرة مثل الصورة التالية:

LEDs

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

LEDs

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

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

يمكنك إطفاء الأضواء لمشاهدة أفضل.

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

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

LEDs

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

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

وميض الـ LED:

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

LEDs

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

 حمل برنامج  “Blink” من الدرس الثاني:

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
}

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

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

int led = 13 ;

:إلى

int led = 7 ;

.LED  حمل الكود، ستواصل الوميض الـ

.وسيتحكم بها الاردوينو D7 ولكن هذه المرة من خلال المنفذ




التحكم في مصفوفة ليدات (LED Matrix)

في هذا المشروع سنتعلم كيف يمكننا التحكم في تشغيل مصفوفة الليدات LED Matrix بإستخدام الاردوينو ولتقليل عدد المخارج المستخدمة سيتم إستخدام الدارة المتكاملة MAX7219 .

 

المكونات المطلوبة

 

arduino uno r3

Arduino Uno

 

8×8 LED Matrix

 

MAX7219

Potentiometer 10K Ω

Full size breadboard 830

Breadboard

Breadboard Jumper Wire 65 pcs

Wires

مصفوفة الليدات LED Matrix :

هي عبارة عن 64 LEDs موصلين معا على شكل مصفوفة مكونة من صفوف وأعمدة.

كل عامود يتصل بالـ cathode الخاص بمجموعة الـ LEDs لهذا العامود، وكل صف يتصل بالـ Anode الخاص بمجموعة الـ LEDs لهذا الصف.

كي نقوم بتشغيل LED معين، نضع الجهد الموجب على الصف الموجود به الـ LED والجهد السالب على العامود الموجود به. كما هو موضح بالصورة التالية: عند وضع جهد موجب على الصف A وأرضي على العامود 2 تعمل الـ LED رقم L2 وهكذا.

التحكم فى مصفوفة ليدات Led Matrix باستخدام الاردوينو

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

التحكم فى مصفوفة ليدات Led Matrix باستخدام الاردوينو

كي نتمكن من توصيل مصفوفة الليد (LED Matrix)، نحتاج إلى معرفة اين مواقع الصفوف والأعمدة، انظر الصورة أدناه :

التحكم فى مصفوفة ليدات Led Matrix باستخدام الاردوينو

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

التحكم فى مصفوفة ليدات Led Matrix باستخدام الاردوينو

MAX7219 :

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

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

توصيلها :

توصيلها مع الاردوينو و الLED Matrix من الداتا شيت

led-matrix

الجدول التالي يوضح كيفية التوصيل مع الأردوينو :

MAX7219 التوصيل
اى رجل تسمى SEG مع الصفوف
اى رجل تسمى DIG مع الاعمدة
24 Not Connected
19 Vcc
18 10K Ohm to VCC
13 Arduino Pin 9
12 Arduino Pin 10
9 Ground
4 Ground
1 Arduino Pin 8

الجدول أعلاه يوضح أن الأرجل ذو الإسم SEG توصل مع الصفوف، والأرجل ذو الإسم DIG يتم توصيلها مع الأعمدة. على سبيل المثال: SEG A يتم توصيلها مع الصف الأول و SEG B يتم توصيلها مع الصف الثاني، وهكذا. اما DIG0 يتم توصيلها مع العامود الأول، و DIG1 يتم توصيلها مع العامود الثاني وهكذا.. .

لاحظ:

بداية الاعمدة فى الدارة MAX7219 من DIG 0. لذلك اول عمود يتصل مع DIG 0 و ليس DIG 1

توصيل الدارة

قم بتوصيل الدارة كما هو موضح بالصورة التالية :

التحكم فى مصفوفة ليدات Led Matrix باستخدام الاردوينو

 

يقوم البرنامج بقراءة قيمة مقاومة متغيرة و على حسب القيمة يقوم برسم شكل وجه مبتسم على الLED Matrix

التحكم فى مصفوفة ليدات Led Matrix باستخدام الاردوينو

البرمجة :

يعتمد الكود على بعض المكتبات التى نحتاج الى اضافتها الى Arduino IDE يمكنك تحميلها من هنا

#include <binary.h>
#include <Sprite.h>
#include <Matrix.h>

#define POT 0 

Matrix Leds = Matrix(8, 9, 10);

Sprite smile[3] = {
  Sprite(8, 8,  B01000000, B01000110, B01000110, B01000000, B01000000, B01000110, B01000110, B01000000),
  Sprite(8, 8,  B00100000, B01000110, B01000110, B01000000, B01000000, B01000110, B01000110, B00100000),
  Sprite(8, 8,  B00010000, B00100110, B01000110, B01000000, B01000000, B01000110, B00100110, B00010000)
};

void setup() {
  Leds.clear(); // turn off all diodes
}

void loop() {
  
  int pot = analogRead(POT); 
  pot = min(2, map(potData, 0, 1023, 0, 3)); // which smile
  
  // display face
  Leds.write(0, 0, smile[pot]);

}

شرح الكود :

في البداية نقوم بإدراج المكتبات التي نحتاجها في المشروع. وهم عبارة عن مكتبات للتعامل مع الـ LED Matrix والدارة MAX7219 :

#include <binary.h>
#include <Sprite.h>
#include <Matrix.h>

نقوم بتسمية منافذ الأردوينو التي سنقوم بتوصيلها مع المقاومة المتغيرة :

#define POT 0

ثم نقوم بإنشاء متغير مسؤول عن الـ LED Matrix .  و يتم تعريف الارجل التي يتم توصيلها بين الاردوينو و الدارة MAX7219 في هذا المتغير

Matrix Leds = Matrix(8, 9, 10);

بعد ذلك نقوم بإنشاء متغير يحتوي على تفاصيل الأشكال التي سنقوم برسمها على الـ LED Matrix . في هذا المشروع سنقوم بعمل ثلاث أشكال وهي لوجه مبتسم بدرجة تتناسب مع قيمة المقاومة المتغيرة. يتغير الوجه بين ثلاث حالات ، لذلك المتغير الذي سنقوم بإنشاءه هو عبارة عن مصفوفة ذو ثلاث صفوف.
كل صف عبارة عن متغير يحتوي على عدد الصفوف والأعمدة للـ LED Matrix ، والشكل الذي يراد عمله بإستخدام الـ LEDs ممثل بعدد على الصورة الثنائية.

Sprite smile[3] = {
  Sprite(8, 8,  B01000000, B01000110, B01000110, B01000000, B01000000, B01000110, B01000110, B01000000),
  Sprite(8, 8,  B00100000, B01000110, B01000110, B01000000, B01000000, B01000110, B01000110, B00100000),
  Sprite(8, 8,  B00010000, B00100110, B01000110, B01000000, B01000000, B01000110, B00100110, B00010000)
};

فى الدالة ()setup نقوم بوضع الاعدادات اللازمة للمشروع مثل اطفاء جميع الليدات فى البداية .

void setup() {
  Leds.clear(); // turn off all diodes
}

و في الدالة ()loop نقوم بقراءة قيمة المقاومة المتغيرة و بإستخدام الدالة map نقوم بتحويل القيمة التي تمت قرائتها وتتراوح بين 0 الى 1023 الى رقم بين 0 الى 2
ونستخدم الرقم الناتج في تشغيل وعرض الشكل المقابل له في مصفوفة الأشكال على الـ LED Matrix

void loop() {
  
  int pot = analogRead(POT); 
  pot = min(2, map(potData, 0, 1023, 0, 3)); // which smile
  
  // display face
  Leds.write(0, 0, smile[pot]);

}