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

goktug59

Üye
Katılım
17 Haz 2024
Mesajlar
11
Puanları
1
Yaş
18
Merhaba nodemcu ile röleyi 2 günde bir belirli saatte açıp belirli saatte kapatacak kod yazmak istiyorum ama pek bilgili değilim. Yardımcı olabilir misiniz? ds1302 rtc modülü kullanıyorum.
 
İnternet bağlantısı varsa, RTC modülüne gerek yok. NTP servisi ile saati güncelleyebilirsiniz.
Hatta micropython ile işiniz daha kolay olur.
 
@mehmet.bey'in dediği gibi ortamda internet varsa RTC'ye gerek yok. RTC kullanılacaksa bir interrupt/kesme ile olabileceği gibi bir döngüde/loop sürekli bir önceki zaman-saat kontrolü yapılarak bir sonraki 2 gün/48 saat sonunda röle açtırılabilir ve kapatılabilir. Bir yerden başlayın ki takıldığınız yerlerde yardım edebilelim.
 
İnternet bağlantısı varsa, RTC modülüne gerek yok. NTP servisi ile saati güncelleyebilirsiniz.
Hatta micropython ile işiniz daha kolay olur.
Beni hatırlarsınız, köyde bahçe sulama sistemi için röleyi açıp kapatacak projem için yardım istemiştim. Wi-Fi var ama köy yeri olduğu için ara sıra kopma sorunları olabiliyor.
loop kodu altında şöyle bir kod yükledim karta:
Kodu dün yükledim. Saati gelince açmadı röleyi bugünde açmadı yarın açarsa sıkıntı yok demektir galiba :)


Kod:
void loop() {
  
  myRTC.updateTime();

  if(myRTC.dayofmonth % 2 == 0) {
    
    if(myRTC.hours == 21 && myRTC.minutes == 0) {
      digitalWrite(RELAY_PIN, LOW);
      lcd.setCursor(0,1);
      lcd.print("SULAMA YAPILIYOR");
    }
    
    
    if(myRTC.hours == 21 && myRTC.minutes == 10) {
      digitalWrite(RELAY_PIN, HIGH);
      lcd.setCursor(0,1);
      lcd.print(" SULAMA YAPILDI ");
    }
  }
  
  delay(60000);
}
 
Son düzenleme:
Ben aynı şeyi nodeMCU ile internetten remotexy uygulaması üzerinden damlama sistemini elle açıp kapatıyorum. Her ihtimal röle bağlantılarına birer kablo bağlayıp sistemde bir sorun olursa elle/manuel selenoid vanayı açıp kapatabiliyorum. Önceki mesajlarımda kodu paylaşmıştım.
Kolunuzda şöyle bir sorun var. Loop sonundaki 60 saniye beklemede 21:00'ı ve 21:10'u tutturamayabilirsiniz. O yüzden işi garantiye almak için ufak bir değişiklik yapın.
Kod:
void loop() {
 
  myRTC.updateTime();

  if(myRTC.dayofmonth % 2 == 0) {
  
    if(myRTC.hours == 21 && myRTC.minutes >= 0 && myRTC.minutes <=1) {
      digitalWrite(RELAY_PIN, LOW);
      lcd.setCursor(0,1);
      lcd.print("SULAMA YAPILIYOR");
    }
  
    if(myRTC.hours == 21 && myRTC.minutes >= 10) {
      digitalWrite(RELAY_PIN, HIGH);
      lcd.setCursor(0,1);
      lcd.print(" SULAMA YAPILDI ");
    }
  }
 
  delay(60000);
}
 
Çok uzak mesafe ise, sizin yerinizde olsam;
RPi Zero ve Mikroe GSM2 Click ile sistemimi yapardım. En ucuz gsm data hattı alıp kullanılabilir.
Bu sisteme Telegram bot ilave edilir, ister manuel ister otomatik işlem yaptırabilirsiniz.
İlk maliyet ve işletme maliyeti bir miktar fazla olabilir. Ancak; takip, kontrol ve işletme konularında kolaylık sağlayacaktır.
 
Çok uzak mesafe ise, sizin yerinizde olsam;
RPi Zero ve Mikroe GSM2 Click ile sistemimi yapardım. En ucuz gsm data hattı alıp kullanılabilir.
Bu sisteme Telegram bot ilave edilir, ister manuel ister otomatik işlem yaptırabilirsiniz.
İlk maliyet ve işletme maliyeti bir miktar fazla olabilir. Ancak; takip, kontrol ve işletme konularında kolaylık sağlayacaktır.
Elimde bunlar vardı daha fazla masraf yapmak istemedim. Acaba yazdığım kod 2 günde bir çalıştırır mı? Ay sonlarında bi sıkıntı çıkarmı 1 günde bir açma 3 günde bir açma gibi?
Ben aynı şeyi nodeMCU ile internetten remotexy uygulaması üzerinden damlama sistemini elle açıp kapatıyorum. Her ihtimal röle bağlantılarına birer kablo bağlayıp sistemde bir sorun olursa elle/manuel selenoid vanayı açıp kapatabiliyorum. Önceki mesajlarımda kodu paylaşmıştım.
Kolunuzda şöyle bir sorun var. Loop sonundaki 60 saniye beklemede 21:00'ı ve 21:10'u tutturamayabilirsiniz. O yüzden işi garantiye almak için ufak bir değişiklik yapın.
Kod:
void loop() {
 
  myRTC.updateTime();

  if(myRTC.dayofmonth % 2 == 0) {
 
    if(myRTC.hours == 21 && myRTC.minutes >= 0 && myRTC.minutes <=1) {
      digitalWrite(RELAY_PIN, LOW);
      lcd.setCursor(0,1);
      lcd.print("SULAMA YAPILIYOR");
    }
 
    if(myRTC.hours == 21 && myRTC.minutes >= 10) {
      digitalWrite(RELAY_PIN, HIGH);
      lcd.setCursor(0,1);
      lcd.print(" SULAMA YAPILDI ");
    }
  }
 
  delay(60000);
}
Dakikası saniyesine kadar doğru olmasına gerek yok, röleyi 1.5 saat falan açık tutup kapatsa yeter
 
Son düzenleme:
Elimde bunlar vardı daha fazla masraf yapmak istemedim. Acaba yazdığım kod 2 günde bir çalıştırır mı? Ay sonlarında bi sıkıntı çıkarmı 1 günde bir açma 3 günde bir açma gibi?

Dakikası saniyesine kadar doğru olmasına gerek yok, röleyi 1.5 saat falan açık tutup kapatsa yeter
60000 milisaniye yani 60 saniye beklemeden dolayı dakikayı tutturamayabilir. Ya beklemeyi 30 saniyenin altına azaltmak lazım ya da önerdiğim şekilde if'lerin değiştirilmesi gerekir. Diyelim 20:59:59 da koşul sağlanmadı olduğunda, 60 saniye sonra 21:01 olarak istenilen 21:00 geçilmiş olabilir. Her nekadar loop içinde hız daha fazla olsa da ben işi garantiye alırdım. Delay kısmı bir saniyeye alınarak çok daha kısa aralıklarda 5 veya 10 dakikada bu koşullar sağlanıyor mu test edilebilir.
 
Son düzenleme:
60000 milisaniye yani 60 saniye beklemeden dolayı dakikayı tutturamayabilir. Ya beklemeyi 30 saniyenin altına azaltmak lazım ya da önerdiğim şekilde if'lerin değiştirilmesi gerekir. Diyelim 20:59:59 da koşul sağlanmadı olduğunda, 60 saniye sonra 21:01 olarak istenilen 21:00 geçilmiş olabilir. Her nekadar loop içinde hız daha fazla olsa da ben işi garantiye alırdım. Delay kısmı bir saniyeye alınarak çok daha kısa aralıklarda 5 veya 10 dakikada bu koşullar sağlanıyor mu test edilebilir.
Yani 60 saniye beklemeden dolayı dakika atlarsa sulama zamanını atlayabilir ve röleyi açmayabilir diyorsunuz?

Önceki kodlarımda bu 2 günde bir olmayacak şekilde yazdığımda kodu delay 1000 yapmıştım sıkıntısız açıyordu röleyi 2 3 dk
 

Forum istatistikleri

Konular
128,872
Mesajlar
921,195
Kullanıcılar
450,994
Son üye
cma763

Yeni konular

Geri
Üst