ARDUINO VE 7 SEGMENT GÖSTERGE

İLK UYGULAMA

İlk olarak 7 segment 1 digit gösterge ile SevenSeg kütüphanesini kullanmadan buton yardımıyla bir uygulama gerçekleştireceğiz. Uygulamada butona bastıkça kaç kere basıldığını göstergede gösterecektir. Fakat tek digit olduğundan dokuza kadar saydıktan sonra tekrar bire dönmektedir. Öncellikle 7 segment göstergeyi tanıyarak başlayalım.

7 segment göstergeler ortak anot ve katot olmak üzere ikiye ayrılırlar.  Benim elimde olan 5611AH gösterge ortak katotlu bir göstergedir(fakat elinizde 5611Bxx kodunda bir gösterge varsa bu da ortak anotludur. ) Eğer ortak katotlu bir göstergeye sahipteniz ortak uçlarını(3 ve 8) toprağa bağlamanız, ortak anotlu bir göstergeye sahipseniz ortak uçlarını(3 ve 8) beslemeye yani 5 volta bağlamanız gerekmektedir. Ortak katotlu göstergede ortak uçlar toprakta olduğunda ledlerin diğer uçları arduinodan gelen 5V ile birlikte yanmaktadır. Ortak anotlu göstergelerde ise bu tam tersidir. Bunu resimde ledlerin bağlanma şekillerinden kolaylıkla görebiliriz. Bu ufak bilgilendirmeden sonra artık ilk uygulamamıza başlayabiliriz.

 Devre şeması

Göstergenin ortak uçlarına takılmış olan dirençler ledlerin yüksek akım çekmesine karşı koruyucu olarak konmuşlardır ve 220 ohm'durlar.


Kod

/* Arduino -> Gösterge 2 -> A 3 -> B 4 -> C 5 -> D 6 -> E 7 -> F 8 -> G GND -> Ortak Uç */ int sayac=0; byte gosterge[10][7] = { { 1,1,1,1,1,1,0 }, // = 0 { 0,1,1,0,0,0,0 }, // = 1 { 1,1,0,1,1,0,1 }, // = 2 { 1,1,1,1,0,0,1 }, // = 3 { 0,1,1,0,0,1,1 }, // = 4 { 1,0,1,1,0,1,1 }, // = 5 { 1,0,1,1,1,1,1 }, // = 6 { 1,1,1,0,0,0,0 }, // = 7 { 1,1,1,1,1,1,1 }, // = 8 { 1,1,1,0,0,1,1 } // = 9 }; void setup() { for(int a=2;a<9;a++){ pinMode(a,OUTPUT); } pinMode(13,INPUT);} void sayiyiYaz(byte sayi) { byte pin = 2; for (int i = 0; i < 7; i++) { digitalWrite(pin, gosterge[sayi][i]); pin ++; } } void loop() { int buton = digitalRead(13); if(buton==1){ delay(10); sayac = sayac+1 ; sayiyiYaz(sayac); while(buton == HIGH){ /* Butona basili olduğu surece bekle */ buton = digitalRead(13); }/* Butonun durumunu kontrol et */ } delay(10); if(sayac>=9){ sayac=0;} } 

NOT: Eğer elinizde ortak anotlu bir gösterge varsa göstergedeki birleri sıfır, sıfırları bir yapmayı unutmayınız.


İKİNCİ UYGULAMA

    Bu uygulamamızda sıcaklık sensörünü kullanarak ortamın sıcaklığını 7 segment 4 digit göstergede gösteren basit bir termometre yapacağız. Bu sefer işlerimizi kolaylaştırması adına sevenseg kütüphanesinden yararlanacağız. Devre şemasına geçmeden önce gösterge ve sıcaklık sensörünün datasheetlerine bir göz atalım.


7 segment 4 digit gösterge:

Sıcaklık sensörü: Sıcaklık sensörü olarak Lm35 kullanmaktayım. 


Datasheetten görüldüğü üzere besleme gerilimi 4V ve 20V arası değişeceğinden arduiona bağlarken herhangi bir gerilim bölücü kullanmamız gerekmiyor. 

VOUT = 10 mv/°C × T Formülünden yararlanarak her derece değişiminde sensörden 10mv çıkış alacağımızı anlayabiliriz. Kod kısmını yazarken analogRead fonksiyonunla aldığımız 0-1023 arası değerin sıcaklık karşılığını bulmamız için önce volt cinsine dönüştürmemiz gerekmektedir. Aslında basit bir oran orantı ile dönüşümü çıkarabiliriz. 1023 değeri 5volta karşılık geliyorsa okunan değer kaç volta karşılık gelmektedir mantığı ile düşündüğümüzde kolayca mantığını görebiliriz. Sıcaklık formülü mV olduğundan burada 5 volt yerine 5000 yazıyoruz. Daha sonrasında formülü uygulayarak göstergede gösterilecek sicaklik değişkenini elde ediyoruz. 

Millis fonksiyonundan belli aralıklarla sıcaklığı ölçmek için yararlanılmıştır. Bunu yapmadığımızda ledler tabiri cayizse pır pır yanıp sönmekte ve kötü bir görüntü oluşturmaktadır. Bunu engellemek için sıcaklığın bir saniyede bir ölçülmesini sağlıyoruz(siz istediğiniz değerde ölçüm için kodla ufak oynamayarak yaparak bunu değiştirebilirsiniz). Millis fonksiyonu normalde Arduino'nun çalışma zamanını milisaniye cinsinden tutan bir fonksiyondur. Bunun için millis fonksiyonunu bir zaman değişkenine aktarıp bine bölerek saniye cinsine çevirip zaman2 değişkenine aktarıyoruz. Eğer zaman2 değişkeni bine tam bölünüyorsa kalanı sıfır olur ve bu şekilde if döngüsünün içine girerek sıcaklık ölçümünü gerçekleştirir.


Devre şeması

B

Kod

#include <SevenSeg.h> float sicaklik; float sicaklik_gerilim; int okunan_deger; SevenSeg gosterge(2,3,4,5,6,7,8); const int digit_sayisi=4; int digitPinleri[digit_sayisi]={9,10,11,12}; void setup() { gosterge.setDigitPins(digit_sayisi, digitPinleri); gosterge.setCommonCathode(); /*Ortak katotlu olduğu belirtilir*/ gosterge.setDPPin(13); /*noktanın pini belirtilir*/ } unsigned long zaman = 0; unsigned long zaman2 = 0; void loop() { zaman = millis(); zaman2 = zaman%1000; if (zaman2 == 0.0){ okunan_deger = analogRead(A0); sicaklik_gerilim=(5000.0/1023.0); sicaklik=sicaklik_gerilim /10.0; /*formül lm35 datasheetinden*/} gosterge.write(sicaklik); }


Yorumlar