Salve a tutti. E' da un po che copio codici e progetti online e mi scoraggia molto non riuscire a creare da me piccoli progetti come per esempio quest'ultimo che ho in mente, cioè un irrigazione automatica.
Mi rendo conto che ci sono un sacco di progetti online e vi assicuro che li ho visionati quasi tutti ed ho provato a capirci qualcosa ma ognuno di essi è specifico per un certo utilizzo e quando provo a modificarlo per le mie esigenze mi perdo nel codice e non ci capisco nulla. Vi prego dunque di aiutarmi a capire cosa non capisco... grazie.
Vi espongo il mio progetto dunque:
Materiali:
- Arduino uno (o anche mega)
- TinyRTC
- Relay a 4 stadi
- Elettrovalvola (non ancora comprata)
- Pompa (non ancora comprata)
- Sonda troppopieno
- Driver Pololu per movimentare una pompa peristaltica (forse l'utilizzo di un motore stepper è esagerato)
Tralasciando il fatto che un domani vorrei aggiungere funzioni di rilevamento umidità, temperatura e pioggia, ma per ora preferisco non complicarmi la vita...
In pratica, con questo irrigatore vorrei evitare di annaffiare le piante con l'acqua di rete per evitare che il cloro danneggi i microorganismi presenti nella terra. Quindi ho previsto un bidone che verrà riempito alla fine di ogni annaffiatura e che contiene la pompa che porterà l'acqua alle piante.
In poche parole la logica sarebbe questa: dalle ore hh:mm alle ore hh:mm attivo la pompa (relay1) e innaffio dal bidone. Subito dopo aver innaffiato si apre l'elettrovalvola e il bidone viene riempito nuovamente. Un rilevatore di troppopieno arresterà l'elettrovalvola a bidone riempito.
Per complicarmi la vita vorrei inserire una pompa peristaltica che una volta al mese prima di innaffiare andrà ad aggiungere all'acqua un po concime liquido e lo mescolerà con un agitatore magnetico ricavato da una ventola. Tutto quì, semplice no?
Ora, il mio handicap:
/**********************************************************
* Prova irrigazione
/**********************************************************/
#include <Wire.h>
#include <RTClib.h>
#define pinPompa 5
int Pompa[] = {13,29,13,30};
RTC_DS1307 RTC;
void setup() {
Serial.begin(9600);
Serial.println( "START" );
Wire.begin();
RTC.begin();
/**********************************************************/
// RTC.adjust(DateTime(2019, 05, 23, 12, 53, 00));
/* togliere il commento dalla riga sopra quando si vuole impostare l'ora
nel modulo rtc, inserire data e ora attuale, formato: (yyyy,mm,dd,hh,mm,ss).
Una volta impostata l'ora ricommentare la riga e ricaricare lo sketch. */
/**********************************************************/
pinMode( pinPompa,OUTPUT );
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
RTC.adjust(DateTime(__DATE__, __TIME__));
}
digitalWrite( pinPompa,LOW );
}
void loop() {
if ( RTC.isrunning()) {
DateTime now = RTC.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
int _hour = now.hour();
int _minute = now.minute();
// Avvio Pompa
if ( Pompa[0] <= _hour && _hour <= Pompa[2] && Pompa[1] <= _minute && _minute <= Pompa[3] ) {
digitalWrite( pinPompa,HIGH );
} else { digitalWrite( pinPompa,LOW ); }
}
}
Ovviamente ho scopiazzato qua e la e tra l'altro non funziona neanche bene perchè funziona al contrario... in pratica dovrebbe accendersi alle 13,29 e spegnersi alle 13,30 mentre in questo lasso di tempo si spegne. Non a caso non sono riuscito a capire la variabile che si occupa dell'accensione:
if ( Pompa[0] <= _hour && _hour <= Pompa[2] && Pompa[1] <= _minute && _minute <= Pompa[3]
Ne uscirò?