DS1302 RTC modülünü kullanmak daha doğru olur.
ESP8266'nın gücü kesildiğinde bile zamanı doğru bir şekilde takip etmenizi sağlar.
NodeMCU'nun dahili RTC'si, güç kesildiğinde zaman bilgisini kaybeder,
DS1302 gibi harici RTC modülleri pil ile çalışar, zaman doğru şekide kullanılır.
Kodunuzun bazı küçük düzeltmelere ve kullanım kolaylığına ihtiyacı var.
Mesela:
1. Sistemi ilk açtığınıda suyu akıtmamak için, başlangıçta Röleyi devre dışı bırakma:
setup fonksiyonunda digitalWrite(RELAY_PIN, HIGH) komutu eklenerek rölenin başlangıçta (off) olması..
2. LCD Başlangıç Mesajı faydalı olur:
setup fonksiyonunda LCD'ye başlangıç mesajı yazsın ve 2 saniye beklesin.
3. LCD Satır Göstergesi: LCD mesajlarının doğru satırda göstersin.
4. Zaman Güncelleme: myRTC.updateTime() fonksiyonu kullanılarak RTC'den zaman bilgisi
güncellensin.
Setup ve (Ana) Loop fonksiyonları, kodun tamamı şöyle olabilir:
******************************************************************
#include <DS1302.h>
#include <LiquidCrystal.h>
// DS1302 RTC pinleri
const int DS1302_SCLK_PIN = 5; // SCLK pin
const int DS1302_IO_PIN = 6; // I/O pin
const int DS1302_CE_PIN = 7; // CE pin
// Röle pini
const int RELAY_PIN = 8; // Röle pinini uygun bir GPIO pinine bağlayın
// LCD ekran pini
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// RTC modülü
DS1302 myRTC(DS1302_SCLK_PIN, DS1302_IO_PIN, DS1302_CE_PIN);
void setup() {
// Röle pinini çıkış olarak ayarlayın
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // Röleyi başlangıçta "off" yapın
// LCD ekranı başlatın
lcd.begin(16, 2);
// RTC'yi başlatın
myRTC.halt(false);
myRTC.writeProtect(false);
// Başlangıç mesajı
lcd.setCursor(0, 0);
lcd.print("Saat Ayarlaniyor");
lcd.setCursor(0, 1);
lcd.print("Lutfen Bekleyin");
delay(2000); // 2 saniye bekleyin
lcd.clear();
}
void loop() {
myRTC.updateTime();
if(myRTC.dayofmonth % 2 == 0) { // Ayın çift günlerinde sulama yap
if(myRTC.hours == 21 && myRTC.minutes == 0) {
digitalWrite(RELAY_PIN, LOW); // Röleyi aç
lcd.setCursor(0, 1);
lcd.print("SULAMA YAPILIYOR");
}
if(myRTC.hours == 21 && myRTC.minutes == 10) {
digitalWrite(RELAY_PIN, HIGH); // Röleyi kapat
lcd.setCursor(0, 1);
lcd.print(" SULAMA YAPILDI ");
}
}
delay(60000); // 1 dakika bekleyin
}
******************************************************************
DS1302 RTC Kütüphanesi gerekli:
LiquidCrystal Kütüphanesi gerekli:
Bağlantıları unutmayın:
DS1302'nin SCLK, I/O ve CE pinlerini uygun GPIO pinlerine bağlayın.
Röleyi uygun bir GPIO pinine bağlayın.
LCD ekranını uygun pinlere bağlayın.