NodeMCU her 2 günde bir röleyi açıp kapatacak kod

Olayı zaman sakalası/timeline üzerine kurgularsanız belirlediğiniz saatte röleyi tetikler. İsterse 1 dakika kala nodeMCU' yu açmış olun. Eprom'a yazılacak bir durum yok bence. Belki en son tetikleme zamanı kaydedilebilir. En son sulama zamanı oradan okunarak belirlenen süre geçmişse nodeMCU açıldığında tekrar bir gün beklemek zorunda kalmadan tetikleme yaptırılabilir.
 
Olayı zaman sakalası/timeline üzerine kurgularsanız belirlediğiniz saatte röleyi tetikler. İsterse 1 dakika kala nodeMCU' yu açmış olun. Eprom'a yazılacak bir durum yok bence. Belki en son tetikleme zamanı kaydedilebilir. En son sulama zamanı oradan okunarak belirlenen süre geçmişse nodeMCU açıldığında tekrar bir gün beklemek zorunda kalmadan tetikleme yaptırılabilir.
Nodemcu röleyi açtığı zaman elektrik kesildi ve sulama yarıda diyelim. Elektrik geldiğinde rölenin açık olması gereken saatte röleyi açmıyor. O yüzden eeprom denedim.
 
EEPROM kullanarak rölenin durumunu kaydetmek ve RTC'den zamanı kontrol etmek, sistemin güvenilirliğini artıracaktır.

*****************************************************

#include <EEPROM.h>
#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

// 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();

// EEPROM'dan son durumu geri yükleyin
int relayState = EEPROM.read(0);
if (relayState == 0) {
digitalWrite(RELAY_PIN, LOW); // Röle On
} else {
digitalWrite(RELAY_PIN, HIGH); // Röle Off
}
}

void loop() {
myRTC.updateTime();

if(myRTC.dayofmonth % 2 == 0) {
if(myRTC.hours == 21 && myRTC.minutes == 0) {
digitalWrite(RELAY_PIN, LOW); // Röleyi On
lcd.setCursor(0, 1);
lcd.print("SULAMA YAPILIYOR");
EEPROM.write(0, 0); // Röle On durumunu kaydet
}

if(myRTC.hours == 21 && myRTC.minutes == 10) {
digitalWrite(RELAY_PIN, HIGH); // Röle off
lcd.setCursor(0, 1);
lcd.print(" SULAMA YAPILDI ");
EEPROM.write(0, 1); // Röle Off durumunu kaydet
}
}

delay(60000); // 1 dakika bekleyin
}

*******************************************************
 
Bendeki bahçe sulaması için 3 çeyrek selenoid valf ile 40'lık kolon boruya su veriyorum. 15-20 kol damlama borusunu besliyor. Uzaktan kamera ile görünecek şekilde amber renkli modul LED'i valfe paralel bağladım. Açık olduğunda LED yanıyor. Dolaysıyla LCD'ye gerek yok. Zaten uygulama üzerinden elle/manuel açıp kapatıyorum. LCD şöyle kullanılabilir, en son şu tarih-saatte sulama yapıldı, bir sonraki sulamaya şu kadar zaman var diye daha ayrıntılı hale getirilebilir. Valf yanında sularken selenoid'e bir LED modul paralel bağlanabilir.
Şuanda sistem sıkıntısız çalışıyor. Valfin oraya sizin gibi bir yeşil modül led taktım. Geriye kalan kablo tesisatını ledi güzelce izole edip işi bitirmek.
IMG_20240620_203112.jpg
IMG_20240620_203104.jpg
 

Forum istatistikleri

Konular
130,108
Mesajlar
933,184
Kullanıcılar
453,163
Son üye
gurkangunc

Yeni konular

Geri
Üst