در این مقاله هدف ما این است که راه اندازی سون سگمنت با آردوینو را به شما آموزش دهیم و شما را با نحوه عملکرد این نمایشگر آشنا کنیم. پس با ما همراه باشید.
تا به حال چند بار فیلمی را تماشا کردهاید که یک بمب ساعتی در آن خنثی شده است؟ حتما هزار بار! همیشه قهرمانی در این فیلمها وجود دارد که با گذشت هر ثانیه که البته ارزش زیادی دارد، مضطرب تر از قبل به صفحه نمایشگر بمب نگاه میکند. اما یک چیزی در تمامی این فیلمها مشترک است و آن صفحه نمایشگر سون سگمنت است. اما چرا؟ دلیل این موضوع این است که اگر این نمایشگر نباشد، چگونه قهرمان فیلم ما متوجه شود چقدر برای نجات خود و دیگران زمان دارد!
نمایشگر سون سگمنت، یکی از کارآمد ترین ابزارها برای نمایش اعداد است. با این نمایشگر ارزان قیمت بهسادگی میتوانید مقادیری را که بر روی آن نشان میدهید، حتی در نور کم یا نور بسیار زیاد مشاهده کنید.
ساعت معكوس پروژه آپولو ناسا در فلوريدا يک مثال واقعی است كه در آن از نمايشگر سون سگمنت استفاده شده است.
مرور سخت افزاری نمایشگر سون سگمنت
قبل از اینکه راه اندازی سون سگمنت با آردوینو را آغاز کنیم، بیایید ابتدا مشخصات و كارايی آن را بهصورت خلاصه با هم بررسی کنیم.
سون سگمنت، همانطور که از عدد سون (seven) در نام آن پیدا است، از هفت عدد ديود LED با چيدمان مشخصی تشكيل شده است.
الگوی اتصال اين LEDها به شكل عدد 8 است كه همه ما با آن آشنا هستيم. هر يک از اين هفت LED، يک سگمنت ناميده میشود و با حذف هر يک از آنها اعداد (هگز و يا دسيمال) شكل میگيرند. برخی اوقات از يک LED ديگر نيز برای نمايش نقطه اعشار استفاده میشود.
يكی از پایههای اين هفت LED از پكيج پلاستيكی مستطيلی شكل سون سگمنت بيرون آورده شده است. اين پایهها از a تا g برچسبگذاری شدهاند. پایه ديگر LEDها نیز، به یک پایه مشترک وصل شده است.
برای روشن يا خاموش كردن بخش خاصی از يک نمایشگر، كافی است يک سيگنال high يا low به پين مربوطه داده شود. با این کار برخی از LEDها روشن میشود و برخی دیگر خاموش باقی میماند. روشن كردن تعداد خاصی از اين هفت LED و خاموش نگه داشتن بقيه آنها سبب نمايش اعداد 0 تا 9 بر روی سون سگمنت خواهد شد.
پينهای نمايشگر سون سگمنت
در اینجا میخواهیم ساختار سون سگمنت را به شما نشان دهیم تا بتوانید بفهمید که هر يک از پينهای این نمایشگر كدام LED را روشن میكند. پينهای سون سگمنت به شکل زیر هستند:
a-g & DP : هشت پين a، b، c، d، e، f، g و DP به پينهای ديجيتال آردوينو وصل میشوند. با كنترل اين پينها میتوان اعداد مختلف را بر روی نمايشگر سون سگمنت نشان داد.
COM : دو پين شماره 3 و 8 با اتصالات داخلی به یکديگر متصل شدهاند تا یک پین مشترک را شکل دهند. با توجه به نوع LEDها، این پین مشترک را باید به زمين GND (كاتد مشترک) يا به 5 ولت (آند مشترک) متصل کرد.
كاتد مشترک (Common Cathode-CC) و آند مشترک (Common Anode-CA)
دو نوع نمايشگر سون سگمنت وجود دارد:
- كاتد مشترک (Common Cathode-CC)
- آند مشترک (Common Anode-CA)
ساختار داخلی این دو نوع نمایشگر تقريبا مشابه است. اما تنها تفاوت آنها پلاريته LEDها و پایه مشترک آنها است. همانطور که از نام آنها پیدا است، در كاتد مشترک، کاتد تمامی LEDها به يکديگر متصل شده است و در نمایشگر نوع آند مشترک، آند تمامی LEDها به يکديگر متصل هستند. در يک نمایشگر كاتد مشترک، تمامی پایههای کاتد LED به منطق 0 يا همان زمين متصلاند. بنابراين، اعمال سيگنال منطقی 1 به پایه آند مرتبط با هر يک از LEDها (پينهای a تا g) سبب روشن شدن آن خواهد شد.
در سون سگمنت آند مشترک، پایه آند همه LEDها به منطق 1 يا همان 5 ولت متصل شده است. اعمال منطق 0 به پایه كاتد هر يک از LEDها (يعنی پين a تا g) سبب روشن شدن LED مربوطه خواهد شد.
نکته:
بهطور كلی، استفاده از سون سگمنتهای آند مشترک متداولتر است، زيرا اكثرا مدارات منطقی بيشتر از آن كه بتوانند جريان الكتريكی را تامین کنند، مصرف کننده هستند. (در ادامه ما نيز از همين نوع سون سگمنت استفاده خواهيم كرد).
نکتهای که باید به یاد داشته باشید این است که یک سون سگمنت آند مشترک را به لحاظ سخت افزاری نمیتوانید مستقيما جایگزین سون سگمنت كاتد مشترک کنید. اين كار دقیقا مانند آن است كه يک LED را بهصورت معكوس در مدار قرار دهیم. با این کار مسلما LED روشن نخواهد شد!
نمايشگر سون سگمنت چگونه كار میكند؟
با توجه به عددی كه قرار است به نمايش در بيايد، تعداد خاصی از LEDهای سون سگمنت روشن خواهند شد. به عنوان مثال، برای اینکه بتوانید عدد 4 را نمایش دهید، لازم است چهار سگمنت b، c، f و g را روشن کنید. بنابراین، همانطور كه در شكل زير مشاهده میکنید، با استفاده از سون سگمنت میتوانید اعداد 0 تا 9 و نيز كاراكترهای A تا F را نمايش دهید.
در جدول زير میتوانید سگمنتهايی را مشاهده کنید كه روشن شدن آنها برای نمايش هر يک از اعداد و كاراكترهای يادشده ضروری است. اما به این نکته دقت کنید که مقادیر سون سگمنت کاتد مشترک دقیقا عکس مقادیر سون سگمنت آند مشترک است.
سيم كشی – راه اندازی سون سگمنت با آردوينو UNO
اكنون زمان راه اندازی سون سگمنت با آردوینو است. قطعات لازم برای این پروژه عبارت اند از:
برای این کار، ابتدا همانند تصویر زیر، سون سگمنت را به نحوی که هر سمت آن در يک طرف بردبورد باشد، بر روی بردبورد قرار دهید. اگر سون سگمنت را بهگونهای قرار دهيد كه نقطه اعشاری آن در سمت پايين باشد، پينهای 1 تا 5 در سمت پايين از چپ به راست خواهند بود و پينهای 10 تا 6 در سمت بالا از چپ به راست قرار خواهند گرفت.
اگر از یک سون سگمنت آند مشترک استفاده میکنید، یکی از پینهای مشترک 3 یا 8 را به پین 5V و اگر از سون سگمنت کاتد مشترک استفاده میکنید، یکی از این دو پین را به پین زمین آردوینو متصل کنید.
چهار پين باقیمانده بالايی سون سگمنت را به پينهای ديجيتال شماره 2 تا 5 آردوينو وصل كنيد. چهار پين پايينی ديگر سون سگمنت را نیز به پينهای ديجيتال شماره 6 تا 9 آردوينو متصل کنید.
نکته:
با وجود اینکه ممكن است سون سگمنت شما بدون وجود مقاومت محدود کننده جریان کار کند، اما همیشه بهتر است که برای جلوگيری از آسيب ديدن LEDهای سون سگمنت از تعدادی مقاومت الكتريكی در مسير اتصال پينهای آردوينو به سون سگمنت استفاده کنید.
معمولا برای یک سون سگمنت قرمز، هر LED حدود 15 ميلی آمپر جريان نیاز دارد تا بهطور کامل روشن شود. بنابراين در يک مدار منطقی 5 ولتی مقدار مقاومتهای محدود كننده جريان بايد در حدود 220 اهم (و يا اندكی بيشتر) در نظر گرفته شود.
زمانیکه اتصالات را بهطور کامل انجام دادید، نتیجه کار خود را با تصاویر زیر مقایسه کنید. اتصالات شما باید همانند تصاویر زیر شده باشد:
کد آردوینو
اكنون زمان آن رسیده است که نمایشگر خود را با نوشتن کد روشن کنید!
- پیش از اینکه بتوانید با استفاده از کد نمایشگر خود را کنترل کنید، ابتدا لازم است كتابخانه SevSeg را دانلود كنيد. اين كتابخانه را میتوانيد از GitHub repo دانلود كنيد. البته میتوانید با کلیک بر روی لینک زیر، مستقيما این کتابخانه را دانلود نمایید:
- برای نصب اين كتابخانه در نرم افزار آردوینو به قسمت Sketch > Include Library > Add .ZIP Library برويد و فايلی را كه دانلود كردهايد، انتخاب كنيد.
- پس از نصب كتابخانه، كد زير را در نرم افزار آردوینو كپی كنيد. اين كد باعث شمارش اعداد 0 تا 9 و نمايش آنها بر روی سون سگمنت خواهد شد.
در ادامه به جزئیات بیشتری خواهیم پرداخت.
#include "SevSeg.h"
SevSeg sevseg;
void setup()
{
//Set to 1 for single digit display
byte numDigits = 1;
//defines common pins while using multi-digit display. Left empty as we have a single digit display
byte digitPins[] = {};
//Defines arduino pin connections in order: A, B, C, D, E, F, G, DP
byte segmentPins[] = {3, 2, 8, 7, 6, 4, 5, 9};
bool resistorsOnSegments = true;
//Initialize sevseg object. Uncomment second line if you use common cathode 7 segment
sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);
//sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins, resistorsOnSegments);
sevseg.setBrightness(90);
}
void loop()
{
//Display numbers one by one with 2 seconds delay
for(int i = 0; i < 10; i++)
{
sevseg.setNumber(i);
sevseg.refreshDisplay();
delay(2000);
}
}
توضيح كد:
با اجرا کردن کد در بخش قبلی، ابتدا كتابخانه SevSeg كد فراخوانی میشود. این کتابخانه كنترل سون سگمنت را برای شما بسیار ساده خواهد کرد.
در گام بعدی، شی SevSeg را ایجاد کنید.
#include "SevSeg.h"
SevSeg myDisplay;
پس ایجاد شی، لازم است تعداد اعداد نمايشگر را مشخص کنید. از آنجاییكه در این پروژه، برای نمايش اعداد از يک رقم استفاده میکنیم، مقدار مورد نياز در كد را برابر 1 تنظيم کنید. اما اگر از یک نمايشگر چهار رقمی استفاده میکنید، باید این مقدار را بر روی 4 تنظیم کنید.
//Set to 1 for single digit display
byte numDigits = 1;
در نمایشگرهای چند رقمی، آرایه digitPins، پینهای مشترک را تعریف میکند. بنابراین اگر شما از یک نمایشگر چند رقمی استفاده میکنید، شماره پينهای آردوينو را كه پينهای مشترک به آنها وصل شده است، در این قسمت از چپ به راست قرار دهید. اما اگر یک نمايشگر تک رقمی دارید، آن را خالی رها کنید.
//defines common pins while using multi-digit display
//Left empty as we have a single digit display
byte digitPins[] = {};
آرايه دومی كه در کد مقدار دهی اولیه شده است، segmentPins نام دارد. اين آرايه حاوی شماره تمامی پينهايی از آردوينو است كه به پينهای نمايشگر LED برای كنترل سون سگمنت متصل شدهاند. البته در اينجا، این پینها مستقيما از بردبورد به آردوينو متصل شدهاند. این پینها را باید به ترتیب قرار دهید، زیرا كتابخانه آردوينو ترتيب پينها را بهصورت A، B، C، D، E، F، G و DP در نظر میگيرد.
//Defines arduino pin connections in order: A, B, C, D, E, F, G, DP
byte segmentPins[] = {3, 2, 8, 7, 6, 4, 5, 9};
بعد از ايجاد اين متغيرها، آنها را با استفاده از تابع ()begin در تابع SevSeg قرار بدهید.
//Initialize sevseg object
sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);
تابع loop، با استفاده از حلقه for و متغير i، شروع به شمارش اعداد از 0 تا 9 میكند. در واقع این تابع، هر بار از تابع ()setNumber و ()refreshDisplay کتابخانه SevSeg برای نشان دادن اعداد بر روی نمایشگر استفاده میکند. اما پیش از افزايش متغير i، یک تاخیر زمانی وجود دارد که پس از آن، عدد بعدی نمایش داده میشود.
for(int i = 0; i < 10; i++)
{
sevseg.setNumber(i);
sevseg.refreshDisplay();
delay(1000);
}
پروژه آردوینو: تاس ریختن
به عنوان يک پروژه مكمل، در اين جا پروژه ای را به شما ارائه میکنیم تا با استفاده از آن بتوانید تاس بریزید! با راه اندازی این پروژه شما میتوانید بازیهایی مانند یاتزی (Yahtzee)، لودو (ludo) و… را انجام دهید. بخش آردوینو این پروژه مشابه پروژه قبلی است، اما با اين تفاوت كه در این پروژه از يک سوئيچ لمسی برای افزايش سرعت تاس ریختن استفاده میکنیم. برای انجام این پروژه علاوه بر قطعاتی که در ابتدای مقاله ذکر شد، به دو قطعه دیگر نیاز خواهید داشت:
هدف از تاس ریختن این است که عددی بين 1 تا 6 بهصورت تصادفی نمایش داده شود. بهترین روش برای اینکه بتوانید یک عدد تصادفی دریافت کنید، استفاده از تابع random(min,max) است. اين تابع دو پارامتر نياز دارد، اولین پارامتر كوچكترين عدد (شامل کوچکترین عدد میشود) و دومین پارامتر بالاترین حد اعداد تصادفی (بالاترین عدد حساب نمیشود) مورد نظر شما را مشخص میکند. طبق این دو پارامتر، يک عدد تصادفی بين min و max-1 توليد خواهد شد.
#include "SevSeg.h"
SevSeg sevseg;
const int buttonPin = 10; // the number of the pushbutton pin
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
void setup(){
byte numDigits = 1;
byte digitPins[] = {};
byte segmentPins[] = {3, 2, 8, 7, 6, 4, 5, 9};
bool resistorsOnSegments = true;
sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);
sevseg.setBrightness(90);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void loop()
{
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH)
{
sevseg.setNumber(random(1,7));
sevseg.refreshDisplay();
}
}
در انیمیشن زیر میتوانید نتیجه نهایی این پروژه را مشاهده کنید:
راه اندازی سون سگمنت با آردوینو میتواند پروژهای جذاب برای شما باشد، زیرا نمایش اعداد بر روی نمایشگر فارغ از نیازی که دارید، همان طور که در ابتدای این مقاله گفتیم میتواند شما را به یاد یک بمب ساعتی بیندازد!
به هر حال امیدواریم بتوانید با استفاده از این مقاله این پروژه را جلو ببرید. اگر به راهنمایی یا مشورت نیاز داشتید، حتما از طریق بخش دیدگاه ما را مطلع کنید.
۱۴ دیدگاه. Leave new
سلام من میخوام همین پروژه رو با دو تا سون سگمنت انجام میدم میشه راجبش یکم راهنمایی کنید
سلام دوست عزیز، انتظار داری سون سگمنت دوم چه کاری انجام بده؟ لطفا سوال خودت را با جزئیات بیشتری توضیح بده تا بتونیم بهتر راهنماییت کنیم.
سلام این سوال منم هست. استفاده از دو تا سگمنت جدا برای نشون دادن اعداد ۰۰ تا ۹۹ چطور میشه؟
سلام و درود برشما مریم عزیز؛
پیش از هرچیز سال نو را به شما تبریک و شادباش میگوییم.
در پاسخ به سوال شما لازم بیان است که معمولاً برای بیش از یک سونسگمنت به خاطر محدودیت تعداد پایهها از مالتیپلکس کردن استفاده میشود که در مورد آن به طور کامل در مقاله راه اندازی سون سگمنت چهار رقمی با میکروکنترلر AVR توضیح دادیم. همچنین لازم به ذکر هست که دو سونسگمنت تکی رو هم میتونید مالتیپلکس کنید. کافیه پایه های A تا G رو به هم متصل کنید.
اما اگر که فرض کنیم مشکل تعداد پایه را ندارید و میخواهید حتماً جدا راه اندازی کنید، کافیه داخل کدتون هر کاری برای سون سگمنت اول کردیم رو برای دومی هم بکنید یعنی دو تا شیء ایجاد کنید، دو آرایه برای پینها ایجاد کنید و.. . در نهایت هم برای نشان دادن عدد دو رقمی دهگان روی یک سون سگمنت و یکان روی یک سون سگمنت نمایش داده میشه. برای استخراج یکان از یک عدد دو رقمی کافیه باقیمانده آن به ۱۰ رو به دست بیاورید و برای دهگان، ابتدا عدد رو به ۱۰ تقسیم کرده و سپس باقیمانده به ۱۰ رو به دست بیاورید. باز هم لازم به ذکر هست که اگر چالش رو دقیقتر با ما مطرح کنید بهتر میتوانیم راهنمایی کنیم مثلاً بفرمایید که اتصال سختافزاری براتون گنگ هست یا کد نویسی یا تغذیه یا..
با آرزوی سالی خوش برای شما:)
سلام خسته نباشید من یه پکیج سون سگمنت DVDدارم ولی نمیدونم چطور راه اندازیش کنم توی اینترنت دنبالش گشتم چند تا کد پیدا کردم ولی با این تراشه کار نکردن SM1682C ممنون میشم اگر راهنمایی کنید
سلام و درود مهدی عزیز، ممنون از شما،
نحوه راهاندازی سون سگمنت DVD رو هم با دنبال کردن همین آموزش میتونی یاد بگیری و کدش رو بنویسی. تنها تفاوتی که این سون سگمنت با مدلهای معمولی داره، داشتن چند LED بیشتر برای نشون دادن Play و Pause، دو نقطه و موارد دیگه ست. تشخیص پایههای هر ال ای دی و پایه مشترک هم با آزمون و خطا قابل انجامه.
سلام من میخواستم یک ساعت با سون سگمنت درست کنم میشه یکم کمک کنید
سلام و درود به شما،
برای نگهداری و خواندن زمان از ماژولهای DS3231 یا DS1307 میتونی استفاده کنی که آموزش کار باهاشون رو قرار دادیم:
https://roboeq.ir/blog/%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%D9%85%D8%A7%DA%98%D9%88%D9%84-%D8%B3%D8%A7%D8%B9%D8%AA-ds1307-%D8%A8%D8%A7-%D8%A2%D8%B1%D8%AF%D9%88%DB%8C%D9%86%D9%88/
https://roboeq.ir/blog/%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%D9%85%D8%A7%DA%98%D9%88%D9%84-%D8%B3%D8%A7%D8%B9%D8%AA-ds3231-%D8%A8%D8%A7-%D8%A2%D8%B1%D8%AF%D9%88%DB%8C%D9%86%D9%88/
برای نمایش ساعت هم از سون سگمنت چهار رقمی میتونی استفاده کنی که نحوه کار با اون در این مقاله توضیح داده شده:
https://roboeq.ir/blog/%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%D8%B3%D9%88%D9%86-%D8%B3%DA%AF%D9%85%D9%86%D8%AA-%D8%A8%D8%A7-%D9%85%DB%8C%DA%A9%D8%B1%D9%88-avr/
برای ساده تر شدن کارت، از ماژول نمایشگر سون سگمنت هم میتونی استفاده کنی که در مقاله زیر آموزش داده شده:
https://roboeq.ir/blog/%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%D9%85%D8%A7%DA%98%D9%88%D9%84-%D8%B3%D9%88%D9%86-%D8%B3%DA%AF%D9%85%D9%86%D8%AA-tm1637-%D8%A8%D8%A7-%D8%A2%D8%B1%D8%AF%D9%88%DB%8C%D9%86%D9%88/
سلام خسته نباشید من یک سون سگمنت دورقمی کاتد مشترک ۱۸ پایه دارم چطور می توانم با استفاده از تابع روی آن عدد نشون بدم
سلام و درود برشما دوست عزیز
خیلی ممنونیم ازتون
شما لازم است ابتدا با استفاده از حالت تست دیود مولتیمتر، پایه مربوط به هر سگمنت و پایههای مشترک رو پیدا کنید و بعد مثل کاری که ما در مقاله انجام دادیم به پینهای دیجیتال آردوینو متصل کنید و ترتیب اتصالتون رو در کد به segmentPins بدید.
من کپی کردم و توی برنامه ی آردوینو بردم وقتی Verify کردم از “include “SevSeg.h# اشکال می گیره این مشکلش چیه (آردوینو)uno R3
سلام امیرمحمد عزیز
لطفاً کتابخانه SevSeg را همانطور که داخل مقاله توضیح دادیم دانلود کرده و اضافه کنید.
متشکریم از همراهی شما
سلام ببخشید در فایل sevseg
NumDigits=4
digitPins=2.3.4.5
SegmentPins=6.7.8.9.10.11.12.13
من برای روشن کردن یک سون سگمنت باید که تغیری در این کد ایجاد کنم
درود بر شما دوست عزیز
دقیقاً مثل کدی که در مقاله آمده، numDigits را برابر ۱ قرار بدهید و digitalPins را مقداردهی نکنید:
NumDigits=1
digitPins[]={}