Dichiarazioni
variabili e librerie
Setup
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
Serial.begin(9600);//inizializzazione seriale
lcd.init();//inizializzazione LCD
lcd.backlight();//illuminazione LCD
lcd.clear();// pulizia LCD
pinMode(pinPompa, OUTPUT);// pin modalita uscita
digitalWrite(pinPompa,HIGH); //spegne pompa
pinMode(pinDisplay, OUTPUT);// pin modalita uscita
digitalWrite(pinDisplay,HIGH);//illuminazione LCD
t1.set(tempoIrrigazione);setto il timer per irrigazione
lcd.setCursor(0, 0);
lcd.print(" Pianta-Smart ");
lcd.setCursor(0,3);
lcd.print(" V. 1.0 ");
delay(3000);//attendo 3 secondi
leggiUmidita();
aggiorna_display();
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