Arduino 4 Digit 7 Segment DS1302 RTC Saat
Elimdeki 4 digit 7 segment display led'i değerlendireyim dedim. Ortaya iki proje çıktı:
--- Saat
--- Display parlaklık ayarlı saat (pot ile)
İnternette biraz araştırma yaptım. ornekyazilim.com linkinde uygun bir proje gördüm. Hemen malzemeleri hazırladım. Montaja geçtim. Kabloları bağladım. Kodları Arduino Uno'ya yükledim. Sonuç sıfır. Led gösterge saçmalıyor. 7-8 denemeden sonra çalıştırabildim. Problem breadbord bağlantılarında ve jumper kablolardaymış. Dikkat etmek lazım breadbordlar problem çıkarabiliyor. Devre kesinlikle çalışıyor.
Gerekli malzemeler:
Arduino Uno
DS1302 RTC modülü
4 digit 7 segment display
breadboard
jumper kablo
Elinizdeki Led ortak anotlu ise program kodlarını doğrudan kullanabilirsiniz.
Eğer ortak katotluysa
byte hardwareConfig = COMMON_ANODE; satırını
byte hardwareConfig = COMMON_CATHODE; şeklinde değiştirin.
Kütüphane dosyası içinde yazıyor. Kütüphane dosyalarının içini incelemek iyi oluyor.
DS1302'nin pinlerini Arduino Uno'nun A0, A1, A2 pinlerine; clk, dat, rst sırasına göre bağlayın.
Led göstergenin Arduino'ya olan bağlantılarını dikkatli gerçekleştirin. Hemen pes etmeyin. Özellikle elinizdeki displayin digit ve segment pinlerini araştırın. Elinizdeki model farklı olabilir. Çünkü internette verilen kodlarda segment ve digit pinler farklı farklı.
Eğer sizin de göstergeniz saçmalarsa mutlaka bağlantıları tekrar tekrar gözden geçirin.
Kütüphane dosyalarını eklemeyi unutmayın.
Saat ve tarih ayarının olduğu satırı ilk yüklemenizde aktif hale getirin. Sistem doğru çalıştıktan sonra bu iki satırı tekrar kapatın. Yoksa sisteme her enerji verdiğinizde saat ayar satırındaki ayarlarla yeniden başlar. DS1302'yi her seferinde yeniden set etmiş olursunuz.
ARDUINO IDE KODLARI:
#include <DS1302.h>
#include "SevSeg.h"
Time t;
DS1302 rtc(A2, A1, A0); //rst,dat,clk
SevSeg sevseg;
void setup()
{
rtc.halt(false);
rtc.writeProtect(false);
rtc.setDOW(MONDAY);
// ilk yüklemede alttaki ayar satırlarını aktive edin. Sistem doğru çalışıyorsa alttaki satırları kapatıp kodu tekrar yükleyin.
// yoksa her enerji verdiğinizde aşağıdaki ayarları yükleyecektir:
// rtc.setTime(16, 25, 30); //Saati ayarlıyoruz. saat,dakika,saniye
// rtc.setDate(13,04, 2020); //Tarihi ayarlıyoruz. gün,ay, yıl
byte numDigits = 4;
byte digitPins[] = {9, 10, 11, 12};
byte segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 13};
bool resistorsOnSegments = false;
byte hardwareConfig = COMMON_ANODE;
bool updateWithDelays = false;
bool leadingZeros = false; // başta sıfır göster >> true, gösterme >> false
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);
sevseg.setBrightness(90); // ekran parlaklık ayarı
Serial.begin(9600);
}
void loop()
{
t = rtc.getTime();
int saat = t.hour*100; //4 haneli olması için saati 100 le çarpıyoruz
int dakika = t.min; //dakikayı direk alıyoruz.
int yazdir = saat+dakika; //direk toplayarak saat ifadesini alıyoruz.
sevseg.setNumber(yazdir,2); //,2 nin anlamı . ifadesini nereye konulacağını belirtmek
sevseg.refreshDisplay(); //displayi yeniliyoruz..
// seriport ekranından doğruluğunu izlemek isterseniz aşağıdakisatırları aktive edin:
// Serial.print(t.hour);Serial.print(":");Serial.print(t.min);Serial.print(" ");
// Serial.print(t.date);Serial.print("/");Serial.print(t.mon);Serial.print("/");Serial.print(t.year);Serial.println();
}
--- Saat
--- Display parlaklık ayarlı saat (pot ile)
Gerekli malzemeler:
Arduino Uno
DS1302 RTC modülü
4 digit 7 segment display
breadboard
jumper kablo
Elinizdeki Led ortak anotlu ise program kodlarını doğrudan kullanabilirsiniz.
Eğer ortak katotluysa
byte hardwareConfig = COMMON_ANODE; satırını
byte hardwareConfig = COMMON_CATHODE; şeklinde değiştirin.
Kütüphane dosyası içinde yazıyor. Kütüphane dosyalarının içini incelemek iyi oluyor.
DS1302'nin pinlerini Arduino Uno'nun A0, A1, A2 pinlerine; clk, dat, rst sırasına göre bağlayın.
RTC VCC >> Arduino 5v pini
RTC GND >> Arduino GND pini
RTC CLK >> Arduino A0 pini
RTC DAT >> Arduino A1 pini
RTC RST >> Arduino A2 pini
RTC GND >> Arduino GND pini
RTC CLK >> Arduino A0 pini
RTC DAT >> Arduino A1 pini
RTC RST >> Arduino A2 pini
Eğer sizin de göstergeniz saçmalarsa mutlaka bağlantıları tekrar tekrar gözden geçirin.
Kütüphane dosyalarını eklemeyi unutmayın.
Saat ve tarih ayarının olduğu satırı ilk yüklemenizde aktif hale getirin. Sistem doğru çalıştıktan sonra bu iki satırı tekrar kapatın. Yoksa sisteme her enerji verdiğinizde saat ayar satırındaki ayarlarla yeniden başlar. DS1302'yi her seferinde yeniden set etmiş olursunuz.
saatin 00:00 şeklinde görünmesini isterseniz (03:45 gibi):
bool leadingZeros = false; satırını ( 3:45)
bool leadingZeros = true; şeklinde değiştirin. (03:45)
Display'in parlaklığını değiştirmek isterseniz:
sevseg.setBrightness(90); komutundaki değeri 0-100 arasında değiştirmelisiniz.
Fakat yaptığım denemelerde parlaklığın azalmadığını gözledim.
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);
satırı içindeki resistorsOnSegments ifadesini silince
sevseg.setBrightness(90); komutuna girdiğim değere göre parlaklığın değiştiğini gözledim.
ARDUINO IDE KODLARI:
#include <DS1302.h>
#include "SevSeg.h"
Time t;
DS1302 rtc(A2, A1, A0); //rst,dat,clk
SevSeg sevseg;
void setup()
{
rtc.halt(false);
rtc.writeProtect(false);
rtc.setDOW(MONDAY);
// ilk yüklemede alttaki ayar satırlarını aktive edin. Sistem doğru çalışıyorsa alttaki satırları kapatıp kodu tekrar yükleyin.
// yoksa her enerji verdiğinizde aşağıdaki ayarları yükleyecektir:
// rtc.setTime(16, 25, 30); //Saati ayarlıyoruz. saat,dakika,saniye
// rtc.setDate(13,04, 2020); //Tarihi ayarlıyoruz. gün,ay, yıl
byte numDigits = 4;
byte digitPins[] = {9, 10, 11, 12};
byte segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 13};
bool resistorsOnSegments = false;
byte hardwareConfig = COMMON_ANODE;
bool updateWithDelays = false;
bool leadingZeros = false; // başta sıfır göster >> true, gösterme >> false
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);
sevseg.setBrightness(90); // ekran parlaklık ayarı
Serial.begin(9600);
}
void loop()
{
t = rtc.getTime();
int saat = t.hour*100; //4 haneli olması için saati 100 le çarpıyoruz
int dakika = t.min; //dakikayı direk alıyoruz.
int yazdir = saat+dakika; //direk toplayarak saat ifadesini alıyoruz.
sevseg.setNumber(yazdir,2); //,2 nin anlamı . ifadesini nereye konulacağını belirtmek
sevseg.refreshDisplay(); //displayi yeniliyoruz..
// seriport ekranından doğruluğunu izlemek isterseniz aşağıdakisatırları aktive edin:
// Serial.print(t.hour);Serial.print(":");Serial.print(t.min);Serial.print(" ");
// Serial.print(t.date);Serial.print("/");Serial.print(t.mon);Serial.print("/");Serial.print(t.year);Serial.println();
}
Devreyi biraz daha kurcalamak istedim. Display parlaklığını potansiyometre ile değiştirmek istedim. Devreye yalnızca bir tane potansiyometre ekleyerek aşağıdaki program kodlarını oluşturdum. Yukarıda verdiğim kodlardan 5 satır fazla. sevseg.setBrightness(90); komutunu artık potansiyometre ile kontrol ediyoruz.
POT İLE PARLAKLIK KONTROLLÜ ARDUINO IDE KODLARI:
#include <DS1302.h>
#include "SevSeg.h"
Time t;
DS1302 rtc(A2, A1, A0); //rst,dat,clk
SevSeg sevseg;
#define potPin A5 // 5k potansiyometre 5v A5 GND şeklinde devreye eklenecek,orta bacağı A5'e
int potdeger=0;
void setup()
{
rtc.halt(false);
rtc.writeProtect(false);
rtc.setDOW(MONDAY); //haftanın günü(ingilizce girmelisiniz)
// ilk yüklemede alttaki ayar satırlarını aktive edin. Sistem doğru çalışıyorsa alttaki satırları kapatıp kodu tekrar yükleyin.
// yoksa her enerji verdiğinizde aşağıdaki ayarları yükleyecektir:
// rtc.setTime(11, 58, 00); //Saati ayarlıyoruz.
// rtc.setDate(13,04, 2020); //Tarihi ayarlıyoruz.
byte numDigits = 4;
byte digitPins[] = {9, 10, 11, 12};
byte segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 13};
bool resistorsOnSegments = false;
byte hardwareConfig = COMMON_ANODE;
bool updateWithDelays = false;
bool leadingZeros = true;
//sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);
//üst satırdaki resistorsOnSegments komutu silindi aşağıdaki gibi oldu
//silmemizdeki amaç alttaki sevseg.setBrightness(0); komutundaki değeri değiştirerek
// displayin parlaklığını ayarlamak için. Alacağı değerler 0-100 arası
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, updateWithDelays, leadingZeros);
sevseg.setBrightness(0);
Serial.begin(9600);
}
void loop()
{
potdeger=analogRead(potPin);
Serial.println(potdeger/10);
sevseg.setBrightness(potdeger/10); //potdeğerini parlaklığa aktarıyoruz.
t = rtc.getTime();
int saat = t.hour*100; //4 haneli olması için saati 100 le çarpıyoruz
int dakika = t.min; //dakikayı direk alıyoruz.
int yazdir = saat+dakika; //direk toplayarak saat ifadesini alıyoruz.
sevseg.setNumber(yazdir,2); //,2 nin anlamı . ifadesini nereye konulacağını belirtmek
sevseg.refreshDisplay(); //displayi yeniliyoruz..
// seriport ekranından doğruluğunu izlemek isterseniz aşağıdaki satırları aktive edin:
// Serial.print(t.hour);Serial.print(":");Serial.print(t.min);Serial.print(" ");
// Serial.print(t.date);Serial.print("/");Serial.print(t.mon);Serial.print("/");Serial.print(t.year);Serial.println();
}
Kaynak: ornekyazilim.com sitesine teşekkürler.
KULLANILAN PROGRAMLAYICI: Arduino 1.8.10
Yorumlar
Yorum Gönder