int valoreUmidita = 0; //variabile d'appoggio int pinUmidita = A3; //pin di collegamento sensore int tempoIrrigazione = 1000;//tempo in millisecondi int sogliaUmidita=450; int tempoRiposo = 10000; int pinDisplay = 4;//pin illuminazione lcd int stato = 1; //variabile di stato int degree;// variabile umidita % uint32_t media=0;//variabile d'appoggio #include "MyTimer.h" #include //libreria per collegamento lcd #include //libreria per collegamento lcd LiquidCrystal_I2C lcd(0x27,20,4);//istanza di LCD MyTimer t1 = MyTimer(); //istanza timer
leggiUmidita() routine che legge il sensore di umidit�. Rileva 1000 campioni e poi fare la media uint16_t leggiUmidita() { uint16_t x, samples; uint32_t value; value = 0; // init accumulatore; samples = 1000; // numero di campioni for(x = 0; x < samples; x++) { value += analogRead(pinUmidita); }// ciclo che ripete il campionamento "sample" volte. media = (value / samples); //valore accumulato diviso il numero di "sample" degree = (100-map(media, 0, 1023, 0, 100)); // il comando map trasforma un valore da 0 a 1023 a 0 a 100
aggiorna_display() lcd .clear(); lcd.setCursor(1,0); lcd.print("11/12/2022 15:00"); lcd.setCursor(0,1); if (stato==1) lcd.print(" Pianta idratata "); if (stato==2) lcd.print(" Sto annaffiando "); if (stato==3) lcd.print(" Umidificazione "); lcd.setCursor(0,3); lcd.print("Umidita' "); lcd.setCursor(9,3); lcd.print(degree); lcd.setCursor(12,3); lcd.print("%"); digitalWrite(pinDisplay,HIGH);
LOOP
Stato = 1
Leggi umidita
Stato = 2
Stato = 3
Switch(stato)
digitalWrite(pinPompa,HIGH);pompa spenta valoreUmidita = degree if (valoreUmidita >= sogliaUmidita) { stato = 2; se l'umidita � troppo bassa passo allo stato 2 aggiorna_display(); t1.set(tempoIrrigazione);
digitalWrite(pinPompa,LOW); accendo la pompa per il tepo stabilito if (t1.check()) { t1.set(tempoRiposo); regolo il timer per il tempo di riposo stato = 3; aggiorna_display(); digitalWrite(pinPompa,HIGH) poi spengo la pompa e passo allo stato 3
digitalWrite(pinPompa,HIGH); spengo la pompa if (t1.check()) { stato = 1; attendo il timer pou passo allo stato 1 aggiorna_display();
Stato 1: pianta ben idratata Stato 2: fase di annaffiature Stato 3 fase di attesa che la terra si inumidisca