الدرس 22/31: استخدام شاشة العرض السباعية مع أردوينو والنرد الإلكتروني | صن فاوندير روبوجَکس
في هذا الدرس، نستكشف كيفية التحكم في شاشة عرض من سبعة أجزاء باستخدام أردوينو. بدلاً من استخدام عشرات أو أكثر من منافذ الإدخال/الإخراج لتشغيل كل جزء LED مباشرة، نستخدم حيلة ذكية: سجل الإزاحة. هذه الشريحة الصغيرة غير المكلفة تتيح لنا التحكم في جميع الأجزاء السبعة (بالإضافة إلى النقطة العشرية) باستخدام ثلاثة أسلاك فقط من الأردوينو. هذه تقنية أساسية في الإلكترونيات تسمح لك بتوسيع عدد المخرجات المتاحة على متحكمك الدقيق، مما يجعل من الممكن بناء مشاريع أكثر تعقيداً دون ترقية لوحتك.
إلى جانب العداد الأساسي، سنبني نرداً إلكترونياً. هذا المشروع لا يعزز التحكم في الشاشة فحسب، بل يقدم أيضاً إدخال المستخدم عبر زر ضغط ومفهوم المقاطعات، مما يخلق جهازاً تفاعلياً وسريع الاستجابة. يعتمد هذا الدليل على درس من دورة Robojax للأردوينو، والتي تستخدم مجموعة SunFounder 3-in-1 للأردوينو.
إليك بعض الأفكار العملية التي يمكنك بناؤها بهذه المعرفة:
- إنشاء لوحة نتائج بسيطة لألعاب مثل تنس الطاولة أو كرة السلة.
- بناء مؤقت رقمي لألعاب الطاولة أو مؤقت تنازلي للمطبخ.
- صنع مولد أرقام عشوائية للألعاب أو اتخاذ القرارات.
- بناء مقياس حرارة رقمي أساسي بإضافة مستشعر درجة حرارة.
المكونات والأجهزة
قبل أن نبدأ، دعنا نجمع المكونات اللازمة. جوهر هذا المشروع هو سجل الإزاحة 74HC595، وهو المفتاح لتقليل عدد المنافذ المطلوبة. بدلاً من توصيل كل جزء من الأجزاء السبعة مباشرة بالأردوينو، نقوم بتوصيلها بسجل الإزاحة. ثم يرسل الأردوينو بيانات الرقم تسلسلياً (بت واحد في كل مرة) إلى الشريحة، والتي تقوم بعد ذلك بإخراج النمط الصحيح لإضاءة الأجزاء.
- أردوينو أونو (أو لوحة متوافقة)
- شاشة عرض من سبعة أجزاء (طراز 5161AS، كاثود مشترك)
- شريحة سجل الإزاحة 74HC595
- زر ضغط
- مقاومات (220Ω - 330Ω)
- أسلاك توصيل
- لوحة تجارب
شاشة 5161AS هي من نوع الكاثود المشترك. هذا يعني أن جميع الكاثودات (الجوانب السالبة) لمصابيح LED الداخلية متصلة معاً بدبوس أرضي مشترك. لإضاءة جزء، توفر جهداً موجباً لدبوس الأنود الخاص به. يعمل 74HC595 كجسر، حيث يأخذ البيانات التسلسلية من الأردوينو ويخرج الإشارات المتوازية اللازمة لتشغيل هذه الأنودات.
دليل التوصيل
قد يبدو توصيل سجل الإزاحة والشاشة صعباً، لكن اتباع المخطط خطوة بخطوة أمر بالغ الأهمية. يوفر الفيديو (عند الدقيقة 04:48) شرحاً تفصيلياً لهذه العملية. تحتوي شريحة 74HC595 على فتحة في أحد الأطراف لتحديد الدبوس 1. يتم ترقيم الدبابيس عكس اتجاه عقارب الساعة من الفتحة (1-8 على جانب واحد، 9-16 على الجانب الآخر).
إليك ملخص التوصيل من الفيديو:
- الطاقة والأرضي: قم بتوصيل الدبوس 8 والدبوس 13 من 74HC595 بسكة الأرضي. قم بتوصيل الدبوس 10 والدبوس 16 بسكة 5V.
- خطوط البيانات: قم بتوصيل المنافذ الرقمية للأردوينو بمنافذ البيانات في سجل الإزاحة: المنفذ 12 (STcp) بدبوس الشريحة 12، والمنفذ 8 (SHcp) بدبوس الشريحة 11، والمنفذ 11 (DS) بدبوس الشريحة 14.
- الشاشة إلى سجل الإزاحة: هذا هو الجزء الأكثر تعقيداً. يوضح الفيديو (عند الدقيقة 07:18) كل اتصال بالتفصيل. على سبيل المثال، الجزء 'a' على الشاشة يتصل بدبوس الشريحة 6، والجزء 'b' بالدبوس 5، وهكذا. دبابيس الكاثود المشترك للشاشة متصلة بالأرضي من خلال مقاومة.
للحصول على دليل مرئي ودقيق، يرجى الرجوع إلى مخطط التوصيل الرسمي:
توصيلات الدبابيس الدقيقة ضرورية، ومن السهل ارتكاب خطأ. خذ وقتك وتحقق من كل سلك مقابل المخطط. الفيديو مورد ممتاز للمتابعة معه.
شرح الكود
يتم توفير مثالين للكود في هذا الدرس. الأول هو عداد بسيط، والثاني يبني عليه لإنشاء النرد الإلكتروني. كلاهما يشتركان في نفس المنطق الأساسي للتحكم في الشاشة.
إليك كود العداد الأساسي:
const int STcp = 12;//منفذ متصل بـ ST_CP من 74HC595
const int SHcp = 8;//منفذ متصل بـ SH_CP من 74HC595
const int DS = 11; //منفذ متصل بـ DS من 74HC595
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
في أعلى الكود، يمكنك تكوين المنافذ الثلاثة المتصلة بسجل الإزاحة. يتم تعيين STcp و SHcp و DS للمنافذ 12 و 8 و 11 من الأردوينو على التوالي. datArray[] جزء أساسي. إنه جدول بحث يحتوي على القيم السداسية العشرية للأرقام من 0 إلى 9. تمثل كل قيمة نمط الأجزاء التي يجب إضاءتها لهذا الرقم المحدد.
تقوم الدالة loop() بتشغيل العداد. تستخدم حلقة for للعد من 0 إلى 9. داخل الحلقة، يرسل الكود بيانات الرقم الحالي إلى سجل الإزاحة. يحدد delay(1000) في النهاية سرعة العداد بالمللي ثانية. غيّر هذه القيمة إلى 100 لعد أسرع، أو إلى 500 لعد أبطأ.
يقدم كود النرد الإلكتروني عنصرًا جديدًا: إدخال المستخدم عبر زر. التغييرات الرئيسية في الإعداد هي:
const int buttonPin = 2;
//...
pinMode(buttonPin, INPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin), rollDice, FALLING);
هنا، يتم ضبط buttonPin على الدبوس الرقمي 2. هذا الدبوس خاص لأنه يمكن استخدامه كمقاطعة. تسمح المقاطعة لـ Arduino بإيقاف ما يفعله فورًا عند الضغط على الزر، مما يضمن استجابة سريعة وموثوقة. وضع FALLING يطلق المقاطعة عند الضغط على الزر (تنتقل الإشارة من HIGH إلى LOW).
يتم استدعاء الدالة rollDice بواسطة المقاطعة. تقوم بتبديل المتغير state بين 0 و1. عندما يكون state هو 0، يكون النرد "يتدحرج"، وستقوم الحلقة الرئيسية loop() بعرض أرقام عشوائية. عند الضغط على الزر مرة أخرى، يتغير state إلى 1، مما يوقف الحلقة ويعرض النتيجة النهائية. الدالة showNumber() هي نفسها منطق العداد، لكنها تأخذ رقمًا كوسيطة لعرضه.
المشروع الحي والتوضيح
بمجرد رفع الكود، سيبدأ العداد في العمل، مع عرض الأرقام من 0 إلى 9 بتأخير ثانية واحدة (في الفيديو عند 15:04). يوضح الفيديو تغيير التأخير لجعل العداد يعمل بشكل أسرع بكثير.
توضيح النرد الإلكتروني (في الفيديو عند 20:15) يظهر الزر أثناء العمل. عند الضغط عليه مرة واحدة، تبدأ الشاشة في التبديل بسرعة بين الأرقام. الضغط عليه مرة أخرى يوقف التبديل، تاركًا رقمًا عشوائيًا بين 1 و6 معروضًا، تمامًا مثل النرد الحقيقي.
الفصول
- [00:00] مقدمة إلى مشروع شاشة العرض السباعية
- [01:25] فهم شاشة العرض السباعية
- [03:51] ورقة بيانات ومواصفات شاشة 5161AS
- [04:48] توصيل الشاشة وسجل الإزاحة
- [12:24] كود Arduino للعداد من 0 إلى 9
- [15:04] توضيح العداد وضبط السرعة
- [16:27] بناء مشروع النرد الإلكتروني
- [20:15] توضيح النرد الإلكتروني وإزالة الارتداد
/*
Lesson 23/31: Using Seven Segment Display
Get this code and watch video Download and resource page https://robojax.com/RJT605
YouTube video https://www.youtube.com/watch?v=3qoGAYh0lbc
*/
const int STcp = 12;//Pin connected to ST_CP of 74HC595
const int SHcp = 8;//Pin connected to SH_CP of 74HC595
const int DS = 11; //Pin connected to DS of 74HC595
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void setup ()
{
//set pins to output
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
void loop()
{
for(int num = 0; num <10; num++)
{
digitalWrite(STcp,LOW); //ground ST_CP and hold low for as long as you are transmitting
shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
digitalWrite(STcp,HIGH); //pull the ST_CPST_CP to save the data
delay(1000);
}
}
/*
Lesson 23/31: Electronic Dice
Get this code and watch video Download and resource page https://robojax.com/RJT605
YouTube video https://www.youtube.com/watch?v=3qoGAYh0lbc
*/
const int STcp = 12;//Pin connected to ST_CP of 74HC595
const int SHcp = 8;//Pin connected to SH_CP of 74HC595
const int DS = 11; //Pin connected to DS of 74HC595
const int buttonPin = 2;
int datArray[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
int number = 0;
int state = 0;
void setup ()
{
//set pins to output
pinMode(STcp, OUTPUT);
pinMode(SHcp, OUTPUT);
pinMode(DS, OUTPUT);
pinMode(buttonPin, INPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin), rollDice, FALLING);
}
void loop()
{
if (state == 0) {
showNumber((int)random(1, 7));
delay(50);
}
}
void showNumber(int num) {
digitalWrite(STcp, LOW); //ground ST_CP and hold low for as long as you are transmitting
shiftOut(DS, SHcp, MSBFIRST, datArray[num]);
//return the latch pin high to signal chip that it
//no longer needs to listen for information
digitalWrite(STcp, HIGH); //pull the ST_CPST_CP to save the data
}
void rollDice() {
state = !state;
}
Common Course Links
Common Course Files
الأشياء التي قد تحتاجها
-
أمازونSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
أمازون
-
أمازون
-
أمازون
-
أمازون
الموارد والمراجع
-
توثيقوثائق لمجموعة SunFounder 3 في 1 لإنترنت الأشياء/السيارات الذكية/التعلمdocs.sunfounder.com
-
خارجياشترِ مجموعة التعلم الذكية 3 في 1 من سن فاونديرsunfounder.com
ملفات📁
مكتبات أردوينو (ملف مضغوط)
-
شفرة المصدر لمجموعة تعلم السيارة الذكية 3 في 1 من صن فاوندر
3in1-kit-main-v2.zip12.80 MB