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

  • Konbuyu başlatan Konbuyu başlatan goktug59
  • Başlangıç tarihi Başlangıç tarihi
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
 
Konu çözüme ulaşmış olsa da herhangi bir kod yazmadan kolay ve farklı bir çözüm daha var. Daha önce MQTT ile biraz ilgilenmiş ve TASMOTA (Theo Arends Sonoff MQTT OTA) firmware'ını NodeMCU'ya yüklemiştim. O zaman MQTT (nesnelerin interneti/endüstri 4.0) kısmını fark edemeyip sadece yerel ağda çalıştığını sanmıştım ve iyice bakmamıştım. Tekrar bir merakla bakınca aslında internete çıkınca içerisinde bir sürü kolaylıklar olduğunu fark ettim. Bunların biri de zamanlama/planlama ile çalıştırma becerisi. TASMOTA sadece yerel ağda çalışsa da ki, kendi uygulaması da sadece yerelde çalışıyor (en azından bende öyle), MQTT sunucuları (broker) üzerinden dışarıdan kontrolü mümkün hale geliyor. Aşağıdaki görselden anlaşılacağı gibi, hangi pin'in haftalık hangi gün ve saatte açılıp kapatılacağı ayarlanabiliyor.
1740088060145.png

1740088103137.png

1740087452868.png

1740088376459.png

1740088420336.png


Bu da android uygulaması;
1740088545991.png

Bu arada v14.5.0 sürüm yayınlanmış.
 

Forum istatistikleri

Konular
133,438
Mesajlar
971,561
Kullanıcılar
459,454
Son üye
ali13581979

Yeni konular

Geri
Üst