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

مبتدئ

image_pdf

مقدمة

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

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

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

shift register

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

arduino-lesson-5

(5mm Red LED)

arduino-lesson-5

(270 Ω Resistor)

74HC595 shift register

رقاقة مسجل الإزاحة (74HC595 shift register)

Half-size Breadboard

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

Arduino Uno R3

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

Jumper wire pack

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

Arduino cable

سلك اردوينو

74HC595 shift register

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

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

shift register

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

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

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

بعد إستقبال الذبذبات الثمانية تعطى الإشارة لمنفذ “Latch” لتخرج الإشارة لجميع الـ LEDs الثمانية دفعة واحدة.

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

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

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

shift register

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

المنفذ رقم 1 للرقاقة على اليسار.

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

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

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

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

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

ضع الـ LED في لوح التجارب

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

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

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

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

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);
}

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

أول ما عليك فعله هو التعريف بالمنافذ الثلاث التي ستستعملها. هذه هي منافذ الاردوينو التي ستستعملها للتحكم في “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”.

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

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

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);
}

أنشطة أخرى

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

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

X
Product added to the cart