Crea sito

Programmatore settimanale per innaffiare le piante da balcone o il giardino

Pollice verde automatico ed infallibile
Arduino Duemilanove

Arduino

Questo ed altri progetti sono stati realizzati impiegando un microcontrollore Atmel ATMega 328, programmato mediante la piattarforma di sviluppo Arduino.


Vi rimando al sito di Arduino per qualsiasi altra informazione, ma se non avete mai sentito parlare di questa piattaforma, in sintesi, si tratta di un microcontrollore Atmel ATMega 168 o 328, programmabile in linguaggio C via USB, che può gestire fino a 14 porte ditigali configurabili come ingresso o uscita e fino a 6 ingressi analogici, rendendo disponibili fino a 32KB di Flash Memory, 2KB di Ram e 1KB di Eeprom.


Non occorre utilizzare la piattaforma completa per ogni circuito realizzato, infatti, una volta programmato il microcontrollore, questi può funzionare in modo autonomo utilizzando solo un quarzo a 16MHz e due condensatori da 22-33pF.


Su diversi siti italiani sono disponibili microcontrollori Atmel ATMega 328 già programmati con il bootloader Arduino 2009 o Arduino Uno, adatti allo scopo, con un costo tra i 5 e gli 8 euro circa. Inoltre, in rete sono disponibili informazioni per la programmazione di ATMega 328 vergini (che hanno un costo inferiore) in modo che possano essere utilizzati con la piattaforma Arduino. I circuiti presentati funzionano perfettamente anche con la nuova piattaforma Arduino Uno. Per qualsiasi informazione non esitate a contattarmi.


Vista del circuito completo (versione definitiva)

Esploso del circuito

Schermata di avvio (prototipo)

Sensore livello acqua

Aggiornamenti e download

30.06.2012 : Versione 1.0 : Pubblicazione del progetto dopo la realizzazione ed il collaudo.

Schema Elettrico (PCB non previsto)
Schermate del Display LCD 20x4
Locazioni EEPROM Arduino utilizzate
Sorgente per Arduino (.PDE)

Preciso ed attento

Non sono riuscito a trovare un programmatore orario (a poco prezzo) che mi permettesse di innaffiare le piante del mio balcone usando tempi di attivazione brevi (anche di un solo minuto) e più orari di programmazione, diversi per ciascuno giorno della settimana e che mi permettesse di controllare il livello d'acqua del serbatoio utilizzato per innaffiare le piante, il tutto usando una pompa per acquario. Quindi, ho deciso di realizzare un circuito fatto ad hoc e, già che c'ero, ho inserito anche un rudimentale controllo dell'umidità delle piante, così da evitare di bagnarle eccessivamente, aggiungendo la possibilità di pilotare, eventualmente, anche una seconda pompa, così da poter dividere l'impianto di irrigazione in due sezioni separate e garantire così una pressione decente a tutti i microirrigatori o gocciolatori inseriti nei vasi delle piante.

Funzionamento del circuito

Dopo aver attivato il circuito, verrà visualizzata la schermata di avvio e, dopo pochi secondi, la maschera di funzionamento "normale". Nella documentazione di progetto potete trovare il dettaglio delle varie schermate che verranno visualizzate dal display LCD del circuito, anche se le stesse verranno spiegate di seguito.


Schermata di avvio

Nella schermata di funzionamento normale ed in tutte le altre schermate che verranno visualizzate, la riga più in basso evidenzia, se sono previste, le funzioni dei pulsanti corrispondenti, i quali assumono quindi una funzione dinamica a seconda della schermata visualizzata.


Schermata di funzionamento "normale"

La schermata di funzionamento normale è suddivisa in diverse sezioni che indicano:


Per modificare la modalità di funzionamento occorre premere il pulsante in corrispondenza della scritta [MODO]. Ad ogni pressione il circuito modificherà ciclicamente il proprio modo di funzionamento in una delle seguenti modalità:


Per accedere alla prima delle quattro schermate di programmazione del disposivo premete il pulsante [PROG]. Dovrete premerlo due volte quando la retroilluminazione del display è disattivata (circa 30 secondi dopo l'ultima pressione di un tasto o dopo l'accensione del dispositivo). In quest'ultimo caso, infatti, la prima pressione del tasto indicato (o di un altro) servirà solo per attivare la retroilluminazione e rendere visibile lo stato del sistema.


Schermata di programmazione (1/4)

Schermata di programmazione (1/4)
dopo la pressione del tasto [ESCI]

In questa schermata sarà possibile impostare l'ora corrente, il giorno attuale ed il livello minimo del serbatoio al di sotto del quale l'innaffiatura verrà arrestata (e resterà acceso il led rosso NO ACQUA posto sul frontale del pannello) fino a quando non sarà ripristinato il livello d'acqua su valori superiori a tale soglia. In condizioni di normale funzionamento, il led rosso NO ACQUA lampeggerà, invece, in modo rapido ad intervalli regolari solo per indicare il corretto funzionamento del circuito, specialmente di notte, quando, con la retroilluminazione del display disattivata, sarà più difficile verificare "ad occhio" se il circuito funziona.

Per evitare continue attivazioni e disattivazioni della/e pompa/e quando il livello dell'acqua del serbatoio è esattamente sul livello impostato per l'allarme, è prevista una soglia d'isteresi pari al +/-2%. Quindi, per esempio, impostando una soglia del 10%, l'innaffiatura verrà fermata solo quando il livello dell'acqua scenderà al di sotto dell'8% e sarà riattivata quando salirà oltre il 12%. Se non si vuole utilizzare il monitoraggio del livello del serbatoio, tale soglia andrà impostata su 00%.

L'impostazione dei valori dei vari parametri avviene, come in tutte le schermate di configurazione visualizzate dai display, utilizzando i tasti [+] e [-] per modificare il valore evidenziato dal cursore lampeggiante, quindi premendo il tasto [OK] per confermarlo e passare al parametro (o alla schermata) seguente.

Per annullare le modifiche effettuate nella schermata occorre premere il tasto [ESCI]. Dopo averlo premuto la funzione dei pulsanti sarà modificata in [ANNULLA MOD] (dove MOD sta per MODIFICHE) e [SALVA], come visualizzato sull'ultima riga del display.

Premendo il tasto [ANNULLA MOD] (indifferentemente uno dei tre tasti da sinistra), tutte le modifiche effettuate nella schermata non verranno salvate, mentre premendo il tasto [SALVA] le modifiche saranno memorizzate e si ritornerà alla modalità di funzionamento normale.

Nella seconda delle quattro schermate di programmazione del disposivo sarà possibile attivare o disattivare il controllo dell'umidità del terreno ed impostare le soglie d'intervento di tale controllo. Anche in questo caso, la programmazione dei parametri deve avvenire usando i tasti [+] e [-] per modificare il valore evidenziato dal cursore lampeggiante, quindi premendo il tasto [OK] per confermarlo e passare al parametro (o alla schermata) seguente, utilizzando invece il tasto [ESCI] per annullare o salvare le modifiche effettuate.

Solo attivando il controllo dell'umidità, le soglie impostate appariranno nella maschera di funzionamento normale, in modo da rendere subito evidente se il controllo umidità è attivo o meno.

Da notare che dopo la pressione del tasto [ESCI] lo stesso si trasforma in tasto [SALVA] per facilitare le operazioni di configurazione che riguardano una sola schermata. In pratica, se è necessario modificare un certo parametro in una determinata schermata di programmazione, è sufficiente modificarlo e poi premere due volte lo stesso tasto [ESCI] / [SALVA]. Questo permetterà il salvataggio del parametro ed il passaggio alla schermata successiva, nella quale, premendo questa volta il tasto [ESCI] e poi [ANNULLA MOD] si potrà evitare di proseguire nella configurazione del dispositivo, ritornando subito allo stato di funzionamento normale.


Schermata di programmazione (2/4)

Le soglie minima e massima di controllo dell'umidità, stabiliscono il range entro cui vengono applicati i programmi d'innaffiatura. Se vengono inserite in modo che il valore minimo sia maggiore di quello massimo, ad esempio 90%-60% invece di 60%-90%, il programma provvederà a scambiare le soglie dopo il salvataggio dei dati della schermata.

Anche in questo caso, è prevista una soglia d'isteresi del 2% rispetto ai valori impostati dall'utente. Ad esempio, per un'impostazione min-max del controllo umidità pari a 30%-75%, l'innaffiatura verrà interrotta solo quando salirà oltre il 77% e riprenderà, secondo i programmi impostati, solo quando sarà scesa al di sotto del 28%.

Nella terza e quarta delle quattro schermate di programmazione sarà possibile impostare i programmi settimanali d'innaffiatura.


Schermata di programmazione (3/4)
dei programmi A1 e A2

Schermata di programmazione (4/4)
dei programmi B1 e B2

Le schermate sono identiche e differiscono solo per il programma, idenficato da Pr, a cui si riferisce la programmazione dell'innaffiatura. I programmi A1 e A2 sono associati all'attivazione della Pompa "A", mentre in modo equivalente, i programmi B1 e B2 sono associati all'attivazione della Pompa "B". Come si vedrà successivamente, nell'analisi dello schema elettrico e delle relative opzioni circuitali, nel caso il vostro impianto sia provvisto di una sola pompa, potrete utilizzare tutti e quattro i programmi per pilotarla.

La configurazione dei parametri riguarda l'ora d'innaffiatura (Innaf) e la durata in minuti della stessa (Dur) nonchè in quali giorni questa deve essere eseguita (Giorno). Ciascun programma s'intende attivo quando i relativi giorni sono evidenziati dalle rispettive lettere iniziali, al contrario non sarà attivo quando appare il simbolo del trattino.

Anche in questo caso, la programmazione dei parametri deve avvenire usando i tasti [+] e [-] per modificare il valore evidenziato dal cursore lampeggiante, quindi premendo il tasto [OK] per confermarlo e passare al parametro (o alla schermata) seguente, utilizzando invece il tasto [ESCI] per annullare o salvare le modifiche effettuate.

Terminata la fase di configurazione e programmazione del dispositivo lo stesso è pronto per l'uso.

Sensori per le misure di livello ed umidità

Per la misurazione del livello dell'acqua del serbatoio e dell'umidità del terreno, ho utilizzato due metodi molto semplici, quasi arcaici, che con buona approssimazione possono indicare al circuito qual è il valore delle due grandezze misurate.


Sensore livello acqua

Sensore di umidità

Per il sensore del livello d'acqua ho usato un potenziometro da 10Kohm installato dentro il serbatoio d'acqua per innaffiare le piante, il cui alberino è vincolato ad un'asta connessa, dalla parte opposta, ad un galleggiante. Viste le grandezze in gioco (si tratta di un serbatoio da 50 litri realizzato con un cesto portabiancheria) mi è bastato utilizzare un'asta di circa 30cm collegata ad un "ovetto" trovato dentro un uovo di Pasqua... che è un ottimo galleggiante.

Considerate che un sensore di questo tipo ha durata molto breve ed affidabilità scarsa, visto che è realizzato con un componente che non è stagno e che si trova ad operare in un ambiente umido ed esterno, spesso soggetto a notevoli escusioni termiche ed all'aggressione degli insetti. Questo, nel tempo, potrebbe alterare la misurazione del livello del serbatoio, rendendo necessaria la sostituzione del potenziometro.

Per la realizzazioen del sensore d'umidità ho usato un metodo altrettanto semplice ed economico. Effettuando diverse misurazioni empiriche all'interno di una vasca di terriccio umida o secca, ho rilevato che il valore della resistenza misurata tra due barrette d'acciaio distanzi circa 10-15cm, permette, in abbinamento ad un'altra resistenza fissa di riferimento montata sul circuito, di realizzare un partitore di tensione il cui valore in uscita è inversamente proporzionale all'umidità del terreno.

Schema elettrico

Inizierò la spiegazione del circuito elettrico partendo da alcuni componenti che, a prima vista, sembrano del tutto inutili, ma che hanno un'importanza fondamentale per il corretto funzionamento del circuito. Si tratta delle reti snubber costituite dai componenti R3-C5 e R7-C9 poste sui terminali d'uscita dei relè RL1 e RL2, utilizzati per attivare le pompe A e B.

Le pompe sono costituite da componenti induttivi (motori) i quali necessitano di una corrente importante per il loro avvio, superiore a quella necessaria per il loro funzionamento. Questo eccesso di corrente può provocare una caduta di tensione rilevante ai capi del secondario del trasformatore d'uscita che alimenta il circuito, generando a cascata una caduta della tensione di riferimento di 5V (per un tempo brevissimo) in uscita dal regolatore U1.

Questo potrebbe generare (come sperimentato!) sporadiche situazioni di reset dell'intero circuito, provocandone un funzionamento non affidabile. Compito della rete snubber è proprio quello di smorzare questi picchi di extra-corrente richiesti dalle pompe in fase di avvio, mantenendo stabile la tensione in uscita su U1. Per questo, omettere l'installazione di questi componenti può provocare gravi malfunzionamenti all'intero circuito come, per esempio, la mancata attivazione delle pompe nei periodi impostati oppure la loro attivazione indefinita (con pericolo di allagamento).

Il circuito è alimentato da un alimentatore esterno con uscita stabilizzata a 12V/1A, oppure, come nel caso della mia realizzazione, può essere inserito un trasformatore da 220Vac a 12Vac direttamente all'interno del contenitore, utilizzando poi un raddrizzatore a doppia semionda da 1A ed un condensatore elettrolitico da 2200uF per la stabilizzazione della tensione che dovrà essere poi applicata all'ingresso di U1, mediante i contatti J1-1 e J1-2 del connettore d'ingresso.

Arduino risulta collegato nella classica configurazione per il funzionamento stand-alone e tutte le linee d'interfacciamento digitali vengono utilizzate per il pilotaggio del display LCD, del MOSFET che controlla la retroilluminazione dello stesso, dei pulsanti d'ingresso, del LED che segnala la mancanza d'acqua nel serbatoio o il corretto funzionamento del circuito, dei relè per l'attivazione delle pompe.

Il potenziometro POT1 per il livello d'acqua è collegato, come le barre d'acciaio per il rilevamento dell'umidità del terreno, agli ingressi analogici AN0 e AN1 di Arduino. Gli stessi sono protetti dai diodi D8-D9 e D12-D13 per bloccare eventuali sovratensioni, considerando che i sensori lavorano in un ambiente esterno al contenitore del circuito.

Le sezioni per l'attivazione delle Pompe A e B sono uguali e, come già accennato, è possibile utilizzare solo la pompa A in modo da avere fino a quattro programmazioni settimanali per l'innaffiatura. Lo schema elettrico riguarda, appunto, il caso in cui viene impiegata solo la pompa A. Nel caso si volesse utilizzare anche la Pompa B si dovranno applicare le modifiche indicate in rosso visibili nello schema elettrico.

In pratica, i due diodi D6 e D7 dovranno essere eliminati e bypassati, dovrà essere rimossa la resistenza R8 ed il punto di giunzione elettrico tra i catodi dei diodi D6 e D7, mentre la sezione di attivazione della Pompa B dovrà essere collegata direttamente alla linea PB di Arduino. Quando viene utilizzata solo la Pompa A la sezione D6-D7-R8 si comporta come un porta OR a diodi che attiva la Pompa A quando Arduino attiva il segnale di abilitazione della Pompa A o della Pompa B. Rimuovendo tali componenti e prevedendo invece la sezione circuitale opzionale relativa alla Pompa B, sarà possibile controllare le due diverse pompe.

Il progetto è distribuito in modo gratuito e sono sempre benvenuti suggerimenti e quesiti.

Statistiche