استخدام شاشتي عرض LED من نوع TM1637 مكونتين من 4 أرقام مع أردوينو
هل احتجت يومًا إلى عرض قيمتين مختلفتين في نفس الوقت في مشروع Arduino الخاص بك؟ ربما تقوم ببناء محطة طقس تحتاج إلى عرض كل من درجة الحرارة والرطوبة، أو مراقب إمدادات الطاقة الذي يظهر الجهد والتيار في الوقت نفسه. استخدام شاشتين LED من نوع TM1637 مكونتين من 4 أرقام هو حل بسيط وموفر للتكاليف. ستظهر لك هذه الدليل كيفية توصيل وبرمجة اثنين من هذه الشاشات الشهيرة باستخدام لوحة Arduino واحدة، مما يمنحك القدرة على عرض معلومات مستقلة على كل شاشة. يمكنك استخدام هذه التقنية لمجموعة متنوعة من المشاريع، مثل:
- بناء مقياس جهد مزدوج القناة لمراقبة مسارين للطاقة منفصلين.
- إنشاء مؤقت تنازلي وعداد لفترات الزمن لمشروع سباقك التالي.
- عرض الوقت الحالي على شاشة واحدة ودرجة الحرارة المحيطة على الشاشة الأخرى.
- إنشاء لوحة نتائج للألعاب التي تتطلب لاعبين اثنين.
في هذا الدرس، سنقوم بتوصيل وحدتين من TM1637 إلى لوحة الأردوينو أونو وتشغيل مثال توضيحي يُظهر قيمًا مختلفة على كل شاشة. يستخدم TM1637 واجهة ثنائية الأسلاك (CLK و DIO)، مما يعني أن إضافة شاشة ثانية يتطلب فقط دبابيس رقمية إضافية على الأردوينو الخاص بك. لنبدأ! (في الفيديو عند 00:00)
المعدات المطلوبة
- أردوينو أونو (أو أي لوحة متوافقة)
- 2x وحدات عرض LED رقمية 7-قطعة TM1637 ذات 4 أرقام
- أسلاك التوصيل
- لوحة تجريبية (اختياري، لكنها مفيدة للبروتوتيب)
دليل الأسلاك
توصيل الشاشات بسيط. يحتوي نموذج TM1637 على أربعة أطراف: VCC و GND و DIO (البيانات) و CLK (الساعة). تشترك الشاشتان في توصيلات 5V و GND من الأردوينو، ولكن كل واحدة تحتاج إلى أطراف مخصصة خاصة بها لـ DIO و CLK. هذا يسمح للأردوينو بالتحكم فيهما بشكل مستقل. (في الفيديو عند 01:26)
إليك مخطط الأسلاك للمشروع:
بالنسبة للشاشة الأولى (الوحدة الزرقاء الأكبر في الفيديو)، قم بإجراء الاتصالات التالية:
- VCCإلى أردوينو5فولت
- GNDإلى أردوينوغند
- ديوإلى دبوس رقمي من أردوينو١١
- CLKإلى دبوس رقمي في أردوينو١٠
للعرض الثاني (الوحدة الأصغر)، قم بتوصيله كما يلي:
- VCCإلى أردوينو5فولت
- جادًّةإلى أردوينوجي ان دي
- ديوإلى دبوس رقمي من أردوينو٦
- CLKإلى دبابيس Arduino الرقمية٥
تذكر أن الكود والمكتبة تعملان بنفس الطريقة لكلا من وحدات TM1637 الأكبر والأصغر. (في الفيديو عند 01:00)
شرح الشيفرة
الكود يستخدم الـTM1637Displayالمكتبة، التي ستحتاج إلى تثبيتها. يمكنك القيام بذلك عن طريق الذهاب إلىرسم > تضمين المكتبة > إدارة المكتباتفي بيئة تطوير Arduino والبحث عن "TM1637". يقوم البرنامج بتعريف الأرجل لكل شاشة وينشئ كائنين للتحكم بها. دعونا نلقِ نظرة على الأجزاء الرئيسية التي ستحتاج إلى تكوينها لاستخدامك الخاص. (في الفيديو عند 02:31)
أولاً، تعريفات الدبابيس لكل وحدة عرض. ستحتاج إلى تغيير هذه لتتناسب مع التوصيلات الخاصة بك:
// Module 1 connection pins (Digital Pins)
#define CLK1 5
#define DIO1 6
// Module 2 connection pins (Digital Pins)
#define CLK2 10
#define DIO2 11التالي، الـTEST_DELAYتتحكم المتغيرات في مدة عرض كل تسلسل اختبار. يمكنك تعديل ذلك لتسريع أو إبطاء العرض.
// The amount of time (in milliseconds) between tests
#define TEST_DELAY 5000الجزء الرئيسي من الشيفرة يستخدم الـshowNumberDec()دالة. تحتوي هذه الدالة على أربعة معلمات: الرقم الذي سيتم عرضه، ما إذا كان يجب ملء الأرقام السابقة الفارغة بالأصفار، عدد الأرقام التي يجب استخدامها، ومكان بدء الرقم على العرض. على سبيل المثال،display1.showNumberDec(23, false, 2, 0)سوف يعرض الرقم "23" بدءًا من الموضع 0. من خلال تغيير الوسيطة الأخيرة إلى 1 أو 2 أو 3، يمكنك نقل الرقم عبر العرض. (في الفيديو عند 05:23)
لإضافة شاشة ثالثة، ستقوم ببساطة بنسخ كتلة الكود لشاشة ما، وتغيير جميع "2" إلى "3"، وتخصيص دبوسين جديدين لصلات CLK و DIO للوحدة الجديدة. (في الفيديو عند 03:58)
عرض المشروع الحي
بمجرد تحميل الكود، سترى الشاشتين تعملان وتقوم بحذف شاشاتها. ثم يقوم العرض بتشغيل سلسلة من الاختبارات لإظهار كيفية التحكم في كل شاشة بشكل مستقل. أولاً، سيظهر الأرقام "23" و "34" على الشاشتين. بعد ذلك، يتنقل الكود لوضع هذه الأرقام في مواقع مختلفة على الشاشة ذات الأربعة أرقام (الموقع 0 و 1 و 2 و 3). بعد ذلك، يتم عرض الأعداد الأكبر "741" و "1562". أخيراً، يقوم بتشغيل حلقة عد من 0 إلى 1273 على كلا الشاشتين في نفس الوقت. وهذا يُظهر الوظائف الكاملة لاستخدام شاشتين في مشروع واحد. (في الفيديو عند 05:01)
الفصول
- مقدمة لاستخدام شاشتين TM1637
- :26 توصيل الشاشات بالأردوينو
- [02:31] شرح الشيفرة
- [05:01] عرض لتشغيل الشاشات
/*
* Original code from https://github.com/avishorp/TM1637
* Modified for Robojax video on October 28, 2018 at 15:05
* This is an Arduino sketch to use two or more TM1637 seven-segment LED displays
*
* Watch video instruction for this code:https://youtu.be/27KjMfPH1dk
*
* by Ahmad Shamshiri, in Ajax, Ontario, Canada
*
* display2.showNumberDec(23, true, 2,1);
* showNumberDec(arg1, arg2, arg3, arg4);
* arg1 is the number to be displayed
* arg2 can be 'true' or 'false' and if true it fills empty spots with data[]
* arg4 position of starting number on the display can be either 0, 1, 2 or 3
*/
#include <Arduino.h>
#include <TM1637Display.h>
// Module 1 connection pins (Digital Pins)
#define CLK1 5
#define DIO1 6
// Module 2 connection pins (Digital Pins)
#define CLK2 10
#define DIO2 11
// The amount of time (in milliseconds) between tests
#define TEST_DELAY 5000
TM1637Display display1(CLK1, DIO1);// define display 1 object
TM1637Display display2(CLK2, DIO2);// define display 1 object
uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 }; // all segments clear
void setup()
{
// Robojax.com two or more TM1637 Display 20181029
display1.setBrightness(0x0f);// set brightness of display 1
display2.setBrightness(0x0f);// set brightness of display 1
display1.setSegments(data);// fill display 1 with whatever data[] array has
display2.setSegments(data);// // fill display 2 with whatever data[] array has
// Robojax.com two or more TM1637 Display 20181029
}
void loop()
{
// Robojax.com two or more TM1637 Display 20181029
/////////////////////////////////////////////////
display1.setSegments(data); // fill(clear) display with data[] array
display1.showNumberDec(23, false, 2,0);
display2.setSegments(data);// fill(clear) display with data[] array
display2.showNumberDec(34, false, 2,0);
delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
/////////////////////////////////////////////////
display1.setSegments(data); // fill(clear) display with data[] array
display1.showNumberDec(23, false, 2,1);
display2.setSegments(data);// fill(clear) display with data[] array
display2.showNumberDec(34, false, 2,1);
delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
/////////////////////////////////////////////////
display1.setSegments(data); // fill(clear) display with data[] array
display1.showNumberDec(23, false, 2,2);
display2.setSegments(data);// fill(clear) display with data[] array
display2.showNumberDec(34, false, 2,2);
delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
/////////////////////////////////////////////////
display1.setSegments(data); // fill(clear) display with data[] array
display1.showNumberDec(23, false, 2,3);
display2.setSegments(data);// fill(clear) display with data[] array
display2.showNumberDec(34, false, 2,3);
delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
/////////////////////////////////////////////////
display1.setSegments(data);// fill(clear) display with data[] array
display1.showNumberDec(741);// display 1
display2.setSegments(data);// fill(clear) display with data[] array
display2.showNumberDec(1562);// display 2
delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
// Robojax.com two or more TM1637 Display 20181029
/////////////////////////////////////////////////
display1.setSegments(data);// fill(clear) display 1 with data[] array
display2.setSegments(data);// fill(clear) display 2 with data[] array
for(int i=0; i<=1273; i++)
{
display1.showNumberDec(i);// display from 0 to 1273 to display 1
display2.showNumberDec(i);// display from 0 to 1273 to display 2
}
delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
// Robojax.com two or more TM1637 Display 20181029
}// loop end
الأشياء التي قد تحتاجها
-
أمازون
-
إي باي
-
علي إكسبريسTM1637 4-digit 7-segment display on AliExpresss.click.aliexpress.com
الموارد والمراجع
-
خارجيمكتبة TM1637 (من GitHub)github.com
ملفات📁
مكتبات أردوينو (ملف مضغوط)
-
مكتبة Arduino TM1637
TM1637_library.zip1.36 MB
Fritzing File
-
نموذج سبعةSegments TM1637
TM1637.fzpz0.01 MB -
شاشة سبعة أجزاء رباعية الأرقام TM1637
TM1637-1.fzpz0.01 MB
دليل المستخدم
-
دليل عرض TM1637
robojax-TM1637_display_manual.pdf0.31 MB