Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #include <Timers.h>//informacje o użyciu biblioteki https://github.com/nettigo/Timers
  2.  
  3. #define pump 8//sterowanie zasilaniem pompy
  4. #define buzz 9//buzzer
  5. #define butt 10//przycisk
  6. #define zasilCzujnik 11//pin wykorzystywany do chwilowego zasilanie czujnika wilgotności (zamiast podłączenia do pinu 5V)
  7. #define gleba A0//pin analogowy czujnika wilgotnosci
  8. Timer klepsydra;//nowy obiekt timera
  9.  
  10. int cyklMonitorowania = 24;//wartość cyklu monitorowania wyrażona w godzinach
  11. int poziomWilgotnosci = 500;//granica wilgotności (z zakresu 0-1024) poniżej której uruchamiane jest podlewanie
  12.  
  13. void setup() {
  14.   pinMode(gleba, INPUT);//analogowy pin czujnika wilgotnosci jako wejscie
  15.   pinMode(zasilCzujnik, OUTPUT);//pin zasilGleba jako wyjście
  16.   pinMode(pump, OUTPUT);//pompa jako wyjście
  17.   pinMode(buzz, OUTPUT);//buzzer jako wyjście
  18.   pinMode(butt, INPUT_PULLUP);//przycisk jako wejście
  19.  
  20.   Serial.begin(9600);//komunikacja UART uruchomiona
  21.   klepsydra.begin(HOURS(cyklMonitorowania));//definicja czasu klepsydry - cyklu monitorowania wilgotności gleby
  22.   monitoring();//sprawdź czy potrzebne jest podlewanie
  23. }
  24.  
  25. void loop() {
  26.   Serial.println("Stan zegara: " + String(klepsydra.time()));
  27.   if (klepsydra.available()) {//jesli zdefinowany czas obiektu klepsydra upłynął wykonaj zawartosc if'a
  28.     klepsydra.restart();//restart cyklu nawadniania
  29.  
  30.     monitoring();//sprawdź czy potrzebne jest podlewanie
  31.   }
  32.  
  33.   if (digitalRead(butt) == LOW) {//jeśli wciśnięto przycisk
  34.     Serial.println("Stan zegara: " + String(klepsydra.time()) + " zresetowano");
  35.     klepsydra.restart();//zrestartowanie zegara
  36.     Serial.println("Nowy stan zegara: " + String(klepsydra.time()));
  37.  
  38.     pozytywka1();//sygnalizacja dźwiękowa potwierdzająca, że system "zauważył" wciśnięcie przycisku restartu
  39.     monitoring();//sprawdzenie czy potrzebne jest podlewanie
  40.   }
  41. }
  42.  
  43.  void monitoring() {//Sprawdzanie potrzeby uruchomienia pompy
  44.   digitalWrite(zasilCzujnik, HIGH);//chwilowe podanie napięcia (oszczędza energię) na pin zasilCzujnik
  45.   delay(10);//odczekanie na zadziałanie
  46.   int nawodnienie = 1023 - analogRead(gleba);
  47.   digitalWrite(zasilCzujnik, LOW);//wyłączenie zasilania czujnika (jest zbędne aż do kolejnego pomiaru)
  48.   Serial.println("Poziom wilgotnosci gleby wynosi " + String(nawodnienie));//odczyt analogowego czujnika wilgotnosci
  49.  
  50.   if (nawodnienie >= poziomWilgotnosci) {//jeśli wysoka wilgotność
  51.     pozytywka2();//sygnalizacja dźwiękowa potwierdzająca, że system działa pomimo braku uruchomienia pompy (jest mokro w doniczce)
  52.     Serial.println("Mokro w doniczce");
  53.   } else if (nawodnienie < poziomWilgotnosci) {//jeśli doniczka wymaga podlania - włącz pompę
  54.     Serial.println("Uruchamiam podlewanie");
  55.     digitalWrite(pump, HIGH);//włączenie pompy
  56.     delay(3000);
  57.     digitalWrite(pump, LOW);//wyłączenie pompy
  58.   }
  59.  
  60.   nawodnienie = 0;//reset stanu czujnika
  61. }
  62.  
  63.  
  64. void pozytywka1() {//sygnalizacja dźwiękowa potwierdzająca, że system "zauważył" wciśnięcie przycisku restartu
  65.   tone(buzz, 3000);
  66.   delay(200);
  67.   tone(buzz, 5000);
  68.   delay(200);
  69.   tone(buzz, 3000);
  70.   delay(200);
  71.   noTone(buzz);
  72. }
  73.  
  74. void pozytywka2() {//sygnalizacja dźwiękowa potwierdzająca, że system działa pomimo braku uruchomienia pompy (jest mokro w doniczce)
  75.     tone(buzz, 4300);
  76.     delay(200);
  77.     tone(buzz, 3500);
  78.     delay(200);
  79.     tone(buzz, 3000);
  80.     delay(200);
  81.     noTone(buzz);  
  82. }