در این آموزش قصد داریم راه اندازی سون سگمنت با آردوینو را آموزش دهیم. صفحه نمایش از 0 تا 9 شمرده و سپس خودش را به صفر باز می گرداند. اما قبل از اینکه به پیش برویم، اجازه دهید در مورد صفحه نمایش های سون سگمنت توضیحاتی ارائه دهیم.
نمایشگر سون سگمنت (سگمنت ب معنای بخش و سون به معنای 7 می باشد) نام خودش را از 7 بخش نورانی ای که دارد گرفته است. هر کدام از این بخش ها یک ال ای دی ( دیود نور گسیل ) داشته که موجب تولید نور می باشند. ال ای دی ها به صورتی تعبیه شده اند که نور دهی هر ال ای دی مختص به بخش مربوط به بخش خودش می باشد. مسئله قابل توجهی که می بایست اینجا به آن پرداخت این است که ال ای دی های موجود در هر سون سگمنتی در حالت آند مشترک ( مثبت مشترک ) و یا کاتد مشترک ( منفی مشترک )، مرتب شده اند.
مدار اتصالات ال ای دی ها در حالت کاتد مشترک و آند مشترک در شکل بالا نمایش داده شده است. در اینجا می توانید مشاهده کنید که، در کاتد مشترک، پایه های منفی همه ال ای دی ها بهم متصل شده و به عنوان پایه زمین (GND) به خروجی برده شده است. در آند مشترک، پایه های مثبت همه ال ای دی ها بهم متصل شده و به عنوان پایه تغذیه (VCC) به ورودی برده شده است. این کاتد مشترک و آند مشترک زمانی که چند نمایشگر را برای استفاده همگام بهم متصل می کنیم، بسیار کاربردی خواهند بود.
قطعات مورد نیاز برای راه اندازی سون سگمنت با آردوینو :
سخت افزار: برد آردوینو Nano
منبع تغذیه 5 ولت یا کابل آردوینو
یک قطعه نمایشگر سون سگمنت HDS5503 ( هر نوع نمایشگر کاتد مشترک دیگر نیز عمل خواهد کرد )
مقاومت
نرم افزار: IDE آردوینو
همچنین برای تهیه انواع پک آماده میتوانید از بخش فروشگاه و بخش پک رباتیک وسایل مورد نیاز خود را تهیه کنید.
دیاگرام مداری و نحوه عملکرد آن:
اتصالاتی که برای نمایشگر سون سگمنت انجام شده اند در زیر آورده شده است:
پین 9 (آردوینو) به پین A سون سگمنت
پین 8 به پین B
پین 7 به پین C
پین6 به پین D
پین 5 به پین E
پین 4 به پین F
پین 3 به پین G
پین GND آردوینو به common Cathode سون سگمنت به وسیله ی یک مقاومت 100 اهم یا 220 اهم
حال برای فهمیدن نحوه عملکرد راه اندازی سون سگمنت با آردوینو ، فرض کنید یک نمایشگر سون سگمنت به یک پورت وصل شده باشد، مثلا بگوییم که سگمنت A از صفحه نمایش را به پین 0، سگمنت B از صفحه نمایش را به پین 1، سگمنت A از صفحه نمایش را به پین 3، سگمنت A از صفحه نمایش را به پین 4، سگمنت A از صفحه نمایش را به پین 5، سگمنت A از صفحه نمایش را به پین 6، وصل کرده باشیم. و همانگونه که در تصویر زیر مشخص شده از نوع زمین مشترک باشد.
در اینجا پایه زمین مشترک برای اینکه صفحه نمایش به درستی کار کند می بایست به زمین متصل شود. شما می توانید سلامت هر سگمنت را به وسیله یک مولتی متر در حالت دیودی تست کنید. هر سگمنت نبایست ولتاژی بیشتر از 4 ولت را دریافت کند، اگر این اتفاق بیافتد، صفحه نمایش خراب خواهد شد. برای جلوگیری از این مقوله، یک مقاومت مشترک در گره مشترک ال ای دی ها همانگونه که در دیاگرام مداری نشان داده شده است متصل می شود.
حال اگر بخواهیم عدد صفر را همانگونه که در تصویر زیر نشان داده شده است نشان دهیم،
نیاز است که ال ای دی های سگمنت های A,B,C,D,E,F را روشن کنیم. بنابر این نیاز است به پین های 0، 1، 2، 3، 4 و 5 برق بدهیم. بنابرین هر زمان که به یک صفر نیاز داشتیم می بایست پایه های ذکر شده را یک کنیم.
حال اگر بخواهیم عدد یک بر روی صفحه نمایش نشان داده شود،
می بایست سگمنت های B و C را روشن کنیم. برای روشن شدن سگمنت های B و C می بایست پین های 1 و 2 را یک کنیم. با یک شدن هر دو پایه ما بر ریو صفحه نمایش عدد 1 را خواهیم داشت. بنابراین، همانطور که در بالا دیدید، برای نمایش دادن اعداد روی صفحه نمایش، می بایست پین های مربوط به هر سگمنت مرتبط به آن عدد را یک کنیم.
در اینجا ما می خواهیم برنامه ای بنویسیم که هر سگمنت را برای شمارش 0 تا 9 خاموش و روشن می کند. نحوه عملکرد شمارنده 0 تا 9 در کد زیر که به زبان C نوشته شده است، به نحو احسن توضیح داده شده است.
#define segA 2//connecting segment A to PIN2 #define segB 3// connecting segment B to PIN3 #define segC 4// connecting segment C to PIN4 #define segD 5// connecting segment D to PIN5 #define segE 6// connecting segment E to PIN6 #define segF 7// connecting segment F to PIN7 #define segG 8// connecting segment G to PIN8 int COUNT=0;//count integer for 0-9 increment void setup() { for (int i=2;i<9;i++) { pinMode(i, OUTPUT);// taking all pins from 2-8 as output } } void loop() { switch (COUNT) { case 0://when count value is zero show”0” on disp digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, HIGH); digitalWrite(segF, HIGH); digitalWrite(segG, LOW); break; case 1:// when count value is 1 show”1” on disp digitalWrite(segA, LOW); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, LOW); digitalWrite(segE, LOW); digitalWrite(segF, LOW); digitalWrite(segG, LOW); break; case 2:// when count value is 2 show”2” on disp digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, LOW); digitalWrite(segD, HIGH); digitalWrite(segE, HIGH); digitalWrite(segF, LOW); digitalWrite(segG, HIGH); break; case 3:// when count value is 3 show”3” on disp digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, LOW); digitalWrite(segF, LOW); digitalWrite(segG, HIGH); break; case 4:// when count value is 4 show”4” on disp digitalWrite(segA, LOW); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, LOW); digitalWrite(segE, LOW); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); break; case 5:// when count value is 5 show”5” on disp digitalWrite(segA, HIGH); digitalWrite(segB, LOW); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, LOW); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); break; case 6:// when count value is 6 show”6” on disp digitalWrite(segA, HIGH); digitalWrite(segB, LOW); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, HIGH); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); break; case 7:// when count value is 7 show”7” on disp digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, LOW); digitalWrite(segE, LOW); digitalWrite(segF, LOW); digitalWrite(segG, LOW); break; case 8:// when count value is 8 show”8” on disp digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, HIGH); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); break; case 9:// when count value is 9 show”9” on disp digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, LOW); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); break; break; } if (COUNT<10) { COUNT++; delay(1000);///increment count integer for every second } if (COUNT==10) { COUNT=0;// if count integer value is equal to 10, reset it to zero. delay(1000); } }