

سون سگمنت چیست و چگونه کار می کند؟


مقدمه
سلام. یکی از متداول ترین و ساده ترین نمایشگر های موجود، سون سگمنت ها (7Segment) هستند. فقط کافیه یه نگاهی به وسایلی دور و برمون هست بندازیم تا یکی از این نمایشگر هارو ببینیم.
آنچه در این آموزش یاد می گیرید
- سون سگمنت چیست و چگونه کار می کند
- تفاوت 7segment کاتد مشترک و آند مشترک
- راه اندازی سون سگمنت با آردوینو
- ساخت تاس دیجیتال با 7segment
سون سگمنت چیست و چگونه کار می کند؟
همینجور که از اسمش مشخصه، 7segment قطعه ایه که 7 قسمت (7 تا ال ای دی) داره. این ال ای دی ها به شکل عدد 8 انگلیسی در کنار هم قرار گرفتن. با این 7 قسمت، میشه اعداد و برخی از حروف رو نشون داد. اگه دقیق تر بخوام بگم، با این 7 ال ای دی میشه اعداد هگز (مبنای 16) رو نشون دارد.
اعداد هگز یعنی:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
برای اینکه بشه کاربرد های 7segment رو افزایش بدن، یک ال ای دی دیگه هم به شکل “نقطه” (Decimal point) به سون سگمنت ها اضافه شد. اینجوری در اصل ما 8 تا قسمت داریم، ولی هنوز بهش میگیم 7segment!


برای سادگی کار با سون سگمنت ها، هر بخش با یک حرف نام گذاری شده است. (مثلا به ال ای دی خط افقی بالایی میگیم A)


سون سگمنت های کاتد مشترک و آند مشترک
برای کاهش تعداد پایه های مورد نیاز برای کنترل سون سگمنت ها، پایه های کاتد (منفی) ال ای دی هارو به هم وصل کردن و اسم اون پایه رو پایه ی “مشترک” (Common) گذاشتن.
پس برای راه اندازی این سون سگمنت ها کافیه پایه ی مشترک رو به زمین (GND) وصل کنیم و پایه ی آند (مثبت) ال ای دی ای مدنظر رو به ولتاژ مورد نیاز وصل کنیم تا اون ال ای دی روشن بشه.
در سون سگمنت های آند مشترک، قضیه کاملا برعکسه و تمام پایه های آند ال ای دی ها به هم وصل شده. پس برای راه اندازی آن ها باید پایه ی آند رو به ولتاژ تغذیه وصل کرد و پایه ی کاتد ال ای دی ای که میخایم روشن کنیم رو به زمین وصل کنیم.


ترتیب پایه های سون سگمنت
باتوجه به سایز و نوع سون سگمنت ها، ترتیب و شکل قرار گیری پایه ها ممکنه متفاوت باشه. متداول ترین شکل اون در این آموزش مطرح شده.


دو پایه Com که همون پایه های مشترک ال ای دی ها هستند در داخل سون سگمنت به هم وصل شدن. (یعنی میتونیم از یکیش استفاده کنیم)
سایزها و رنگ های مختلفی از سون سگمنت تو بازار وجود داره و ولتاژ و جریان کاری اونا با هم متفاوته. هنگام خرید باید دقت کنید که کدوم سایز رو می خرید. (سایز متداولی که در بازار موجوده، سون سگمنت 0.56 اینچه که ولتاژ کاریش حدود 2 ولته.) اینو میدونیم که اعمال ولتاژ خیلی بالاتر از حد توان یه LED اونو میسوزونه!
راه اندازی سون سگمنت با آردوینو
برای اینکار اول باید کتابخونه ی مورد نیازشو نصب کنیم. فایل کتابخونه رو می تونید از اینجا دانلود کنید و اونو به IDE آردوینو اضافه کنید.
برای نصب کتابخونه در نرم افزار IDE آردوینو، از منوی Sketch گزینه ی Include Library و سپس گزینه ی Add .ZIP Library را انتخاب کنید. فایل کتابخونه ای که دانلود کردید رو انتخاب کنید تا براتون نصیب شه.
اگه نصب کتابخونه براتون راحت نیست اول این آموزش رو بخونید.
برای نمایش اعداد و حروف مدنظرمون، کافیه بخش های مورد نیاز رو به ترتیبی که در عکس زیرنمایش داده شده روشن کنیم. (اگر این کار به نظرتون سخت یا طولانی میاد، نگران نباشید، کتابخونه خودش این کارو برامون می کنه!)


اینجا باید یه نکته ای رو یادآوری کنم و اونم اینکه بعضی وقتا اگه ما از کتابخونه های آماده سافتاده نکنیم خیلی خیلی بهتره، جرا؟ چندتا دلیل داره: اول اینکه معمولا کتابخونه ها عمومی نوشته شده پس حجم کد زیادی ازتون میگیره و دوم اینکه وقتی خودتون کد رو میزنید کااااملا بهش مسلط هستید و هرجا که دوست داشتید تغییر ایجاد میکنید. شاید یکم سخت باشه ولی بیاید تلاش کنیم برای کارایی که سبک تره مثل همین سون سگمنت خودمون کدش رو 0 تا 100 بنویسیم.
سیم بندی
برای اتصال 7segment به آردوینو از نقشه ی زیر استفاده کنید. البته می تونید ترتیب پایه ها رو بسته به نیاز خودتون عوض کنید.
کاتد مشترک:


آند مشترک:


یه سول ! میدونید چرا بجای اینهمه مقاومت فقط یه مقاومت به پایه مشترک 7segment وصل نکردیم؟ جواب هارو برامون کامنت کنید.
کد
کد زیر اعداد 0 تا 9 رو به ترتیب روی سون سگمنت نمایش میده. اگه سیم بندی رو طبق عکس های بالا انجام دادید، نیازی به تغییر کد زیر نیست و میتونید همین کد رو روی آردوینو آپلود کنید. درغیر این صورت اول کد رو تغییر بدید و سپس اونو روی بردتون آپلود کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#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); } } |
توضیح بخش های مختلف کد
1 2 |
#include "SevSeg.h" SevSeg sevseg; |
اول کد طبق معمول، کتابخونه ی سون سگمنت رو به کد اضافه می کنیم و یک شئ (object) به نام sevseg از این کتابخونه می سازیم (اسمش هرچی میتونه باشه ها).
1 2 |
//Set to 1 for single digit display byte numDigits = 1; |
متغیر numDigits تعداد سون سگمنت های مارو مشخص میکنه. (مثلا اگه از 7segment دوتایی استفاده می کنید، مقدار اون رو 2 بذارید)
1 2 3 |
//defines common pins while using multi-digit display //Left empty as we have a single digit display byte digitPins[] = {}; |
آرایه ی digitPins برای تعریف شماره پایه های مشترک (Com) برای سون سگمنت های چندتاییه. اگر از سون سگمنت تکی استفاده می کنید، اونو خالی بگذارید.
1 2 |
//Defines arduino pin connections in order: A, B, C, D, E, F, G, DP byte segmentPins[] = {3, 2, 8, 7, 6, 4, 5, 9}; |
تو آرایه ی segmentPins باید شماره پایه های 7segment که به آردوینو متصل شدن رو مشخص کنیم. به ترتیب پایه ها دقت کنید.
1 2 |
//Initialize sevseg object sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments); |
بعد از تعریف متغیر های مورد نیاز، با دستور sevseg.begin متغیر ها را به شئ ساخته شده پاس می دهیم، حالا هکه چی آماده ست.
اگر 7segment شما کاتد مشترکه، تو کد به جای COMMON_ANODE باید از COMMON_CATHODE استفاده کنید.
1 2 3 4 5 6 |
for(int i = 0; i < 10; i++) { sevseg.setNumber(i); sevseg.refreshDisplay(); delay(1000); } |
در بخش loop هم، با استفاده از یک حلقه ی for اعداد 0 تا 9 را تولید می کنیم و به ترتیب نمایش میدیم.
1 2 3 |
//defines common pins while using multi-digit display //Left empty as we have a single digit display byte digitPins[] = {}; |
ساخت تاس دیجیتال با سون سگمنت و آردوینو
در این بخش میخایم یک تاس دیجیتال بسازیم. هدف پروژه اینه که هربار کلیدو فشار دادیم، به صورت خودکار یک عدد بین 1 تا 6 به صورت تصادفی تولید شه و روی 7segment نمایش داده شه.
سیم بندی
یک کلید را با استفاده از یک مقاومت Pull down به مدار خود اضافه کنید.
کاتد مشترک:


آند مشترک:


کد
تغییرات مورد نیاز خود را رو کد زیر اعمال کنید و اونو روی آردوینو خود آپلود کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#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(); } } |
با کد بالا، هربار که کلید فشرده می شود، با استفاده از تابع random یک عدد بین 1 تا 6 تولید میشه و بعد اون عدد روی 7segment نمایش داده میشه.
نتیجه گیری
برای پروژه هایی که میخوایم ارزون تموم شه یا حتی اطلاعات برای نمایش اونقدر زیاد و پیچیده نیست واقعا 7segment ایده بی نظیریه و الان شما براحتی می تونید باهاش کار کنید
راستی اون نکته ای که راجع به کتابخونه گفتم رو فراموش نکنید.