كيفية استخدام شاشة LED ذات سبعةSegments مع الأردوينو
شاشات العرض LED ذات السبعة segmentos موجودة في كل مكان من حولنا - من الساعات الرقمية وأجهزة المطبخ إلى مؤشرات طوابق المصاعد ولوحات النتائج. إنها واحدة من أكثر الطرق بديهية لعرض المعلومات الرقمية، وتعلم التحكم بها باستخدام Arduino هو مهارة أساسية لأي هاوي للإلكترونيات. سيوجهك هذا الدليل لبناء سائق عرض بسيط ولكنه متعدد الاستخدامات يمكنه العد من 0 إلى 9، وهو مصمم للعمل مع كل من الشاشات ذات الأنود المشترك والكاثود المشترك. يمكنك استخدام هذا المشروع كأساس لبناء مجموعة متنوعة من الأجهزة العملية، مثل عداد رقمي لورشتك، أو قراءة حرارة لمحطة الطقس، أو مؤقت للعبة لوحية، أو مسجل نقاط بسيط لليلة الألعاب العائلية التالية.
مكونات الأجهزة
لمتابعة هذا المشروع، ستحتاج إلى المكونات التالية. الأسلاك بسيطة، وقائمة المكونات قليلة، مما يجعل هذا بناءً مثاليًا للمبتدئين.
- أردوينو أونو (أو أي لوحة متوافقة)
- شاشة LED بسعة 7 segmentos (كاثود مشترك أو قداسة مشتركة)
- 8 مقاومات 1 كيلو أوم (560 أوم إلى 1 كيلو أوم تعمل بشكل جيد)
- أسلاك التوصيل
- لوحة دوائر كهربائية
كيفية استخدام شاشة LED سباعية الأرقام مع أردوينو
دليل التوصيل
تتصل الأسلاك في هذا المشروع بكل جزء من العرض بمنفذ رقمي على الأردوينو، مع وجود مقاومة محددة للتيار متسلسلة لكل جزء. يعتمد الاختلاف الرئيسي في الأسلاك على ما إذا كان لديك عرض بموجب مشترك أو كاثود مشترك. في عرض الموجب المشترك، يتم توصيل جميع الأقطاب (الأرجل الإيجابية) لمصابيح LED الداخلية معًا ويجب توصيلها بمصدر 5 فولت. في عرض الكاثود المشترك، يتم توصيل جميع الأقطاب السالبة معًا ويجب توصيلها بالأرض. يدير الكود تلقائيًا عكس المنطق المطلوب لنوع العرض المحدد الخاص بك، لذا تحتاج فقط إلى التأكد من صحة الأسلاك الفعلية.

كما هو موضح في الفيديو، قم بتوصيل دبابيس сегменты العرض (A إلى G، ونقطة العشرية) بدبابيس الأردوينو 2 إلى 9 بالترتيب. يجب أن يحتوي كل دبوس сегмент على مقاومة بقيمة 1 كيلو أوم على التوالي. يجب توصيل الدبوس المشترك (أنود أو كاثود، حسب عرضك) إلى 5 فولت أو أرضي على التوالي. من المهم استخدام مقاومات فردية لكل сегмент بدلاً من مقاومة مشتركة واحدة. هذا يضمن اتساق السطوع عبر جميع сегменты، بغض النظر عن عددها المضاء في آن واحد. مع مقاومة واحدة، سيتم تقسيم التيار بشكل غير متساوٍ، مما يتسبب في ظهور بعض الأرقام بشكل أضعف من الأخرى.
شرح الكود
تم كتابة كود هذا المشروع من الصفر ولا يتطلب أي مكتبات خارجية. تم تصميمه ليكون بسيطًا في التهيئة والتكيف مع العرض الخاص بك. الأجزاء الرئيسية القابلة للتكوين بواسطة المستخدم موجودة في أعلى الملف.
#define type 1 // 0 for common cathode and 1 for common anode
const int displayPins[7] = {2,3,4,5,6,7,8}; // define pins
const int dicimalPoint = 9;// decimal pointالسطر الأول هو الإعداد الأكثر أهمية. يجب عليك ضبطtypeمتغير إلى1إذا كنت تستخدم شاشة ذات أنود مشترك و0إذا كنت تستخدم عرض الكاثود المشترك. هذه القيمة الفردية تخبر الشيفرة ما إذا كان يجب عكس إشارات المنطق، مما يضمن إضاءة القطاعات الصحيحة.
السطور التالية تحدد دبابيس Arduino المتصلة بالشاشة.displayPinsالمصفوفة تحتفظ بأرقام الدبابيس للقطاعات A إلى G، وdicimalPointيحدد السلك للنقطة العشرية. إذا كنت ترغب في استخدام أسلاك مختلفة، يمكنك تعديل هذه القيم، ولكن يُوصى بالحفاظ عليها بالترتيب التسلسلي من أجل البساطة.
يتضمن الكود دالة مخصصة،writeDigit(int digit)، والذي هو الطريقة الأساسية لعرض رقم. يمكنك استدعاء هذه الدالة من الشيفرة الخاصة بك لعرض أي رقم من 0 إلى 9. على سبيل المثال، لعرض الرقم 5، عليك ببساطة استدعاءwriteDigit(5);تتعامل الوظيفة مع مهمة معقدة تتمثل في البحث عن نمط المقطع الصحيح وتعيين الدبابيس وفقًا لذلك. وظيفة مساعد أخرى،convertHighLow(int v)يتولى تحويل المنطق بين الشاشات ذات الأنود الشائع والكاثود الشائع، لذا لا داعي للقلق بشأن المنطق الداخلي.
عرض المشروع المباشر
بمجرد الانتهاء من التوصيلات ورفع الشيفرة، سيبدأ الأردوينو عد الأرقام من 0 إلى 9، مع عرض كل رقم لمدة ثانية واحدة على شاشة العرض المكونة من سبع قطع. بعد الوصول إلى الرقم 9، ستضيء النقطة العشرية لمدة ثلاث ثوانٍ قبل أن يبدأ العد من جديد. كما هو موضح في الفيديو، فإن استخدام مقاومات فردية يضمن أن تبقى درجة سطوع الأرقام متسقة، سواء كانت تعرض قطعة واحدة (مثل الرقم 1) أو جميع القطع السبع (مثل الرقم 8). هذه تعتبر تحسينًا كبيرًا مقارنة باستخدام مقاومة واحدة، والتي ستتسبب في تباينات ملحوظة في السطوع.
فصول
- مقدمة في شاشة العرض ذات السبعة أجزاء
- :22 فهم الشاشات ذات السبعة أجزاء
- [01:09] توصيل الأنود المشترك مقابل توصيل الكاثود المشترك
- [03:25] توصيل خطوة بخطوة مع المقاومات
- [06:07] اعتبارات العرض والسطوع
- [08:26] شرح الكود والتكوين
- [14:25] إعداد ودوال الحلقة الرئيسية
- [16:33] الخاتمة والتطبيقات
/*
* Robojax Arduino Step-by-Step Course
* Lesson 21: Seven-Segment Display
* Display number on seven-segment display with Arduino
Please watch video instruction here: https://youtu.be/pxUjEsJQW2M
or watch this https://youtu.be/f3GqRMQ8jYs
* Written by Ahmad Shamshiri for Robojax (Robojax.com)
* on December 07, 2018 at 22:34 in Ajax, Ontario, Canada
*
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#define type 1 // 0 for common cathode and 1 for common anode
const int displayPins[7] = {2,3,4,5,6,7,8}; // define pins
const int dicimalPoint = 9;// decimal point
// array for seven-segment LED values. Do not change.
//This is used for both common anode and common cathode
byte displayLEDs[10][7] = {
{ 0,0,0,0,0,0,1 }, // = 0
{ 1,0,0,1,1,1,1 }, // = 1
{ 0,0,1,0,0,1,0 }, // = 2
{ 0,0,0,0,1,1,0 }, // = 3
{ 1,0,0,1,1,0,0 }, // = 4
{ 0,1,0,0,1,0,0 }, // = 5
{ 0,1,0,0,0,0,0 }, // = 6
{ 0,0,0,1,1,1,1 }, // = 7
{ 0,0,0,0,0,0,0 }, // = 8
{ 0,0,0,0,1,0,0 } // = 9
};
/*
*
* @brief Writes digit to display
* @param digit (integer)
* @return no return value
* Written by Ahmad Shamshiri on Friday, December 7, 2018 for Robojax.com
*/
void writeDigit(int digit) {
// Robojax Seven-Segment Display for Arduino
Serial.print(digit);
Serial.print(" ");
int digitValue;
for (int i=0; i < 7; i++)
{
digitalWrite(displayPins[i], convertHighLow(displayLEDs[digit][i]));// write the HIGH or LOW (depending on the type) to output pin
Serial.print(convertHighLow(displayLEDs[digit][i]));// print the result to the Serial monitor
}// for i
}//writeDigit ends here
/*
*
* @brief Converts HIGH and LOW based on the "type" variable value
* if type is 1, converts the "V" to LOW, or returns it as it is if type is 0 (zero)
* @param v (integer)
* @return the convertedValue
* Written by Ahmad Shamshiri (Robojax.com) on Friday, December 8, 2018 for Robojax.com
*/
int convertHighLow(int v)
{
int convertedValue;
if(type ==0)
{
convertedValue = 1 - v;// if common anode, change the HIGH to LOW and LOW to HIGH
}else{
convertedValue = v;// if common cathode, keep it the same
}
return convertedValue;
}
void setup() {
// Robojax Seven-Segment Display for Arduino
//Robojax Arduino Step-by-Step Course http://robojax.com/L/?id=338
for(int d=0; d<8; d++)
{
pinMode(displayPins[d], OUTPUT);// set pin as output
}
pinMode(dicimalPoint,OUTPUT);// define a pin for decimal point
digitalWrite(dicimalPoint,HIGH);// turn decimal point OFF. Set to LOW if common Anode and HIGH for common cathode
Serial.begin(9600);// initialize serial monitor with 9600 baud
}// setup ends here
void loop() {
// Robojax Seven-Segment Display for Arduino
//Robojax Arduino Step-by-Step Course http://robojax.com/L/?id=338
for (int i=0; i<=9 ; i++) {
writeDigit(i);
Serial.println("=====");
delay(1000);
}
digitalWrite(dicimalPoint,LOW);// turn decimal point ON
delay(3000);
// writeDigit(4);
// delay(3000);
}// loop ends here
الأشياء التي قد تحتاجها
-
أمازون
-
أمازون
-
علي إكسبريسPurchase seven segment display from AlixExpresss.click.aliexpress.com
الموارد والمراجع
ملفات📁
ملفات أخرى
-
كيفية استخدام شاشة LED سباعية segmentos مع أردوينو
robojax-ISD1890-SoundRecorder_manual.pdf0.29 MB