İ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.
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.
/* 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.
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.
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.
#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
Yorum Gönder