Centralina irrigazione arduino

Ieri la giornata di sole e caldo primaverile in Lombardia mi ha ispirato a terminare e testare la prima versione della centralina irrigazione arduino.

centralina irrigazione arduino

Parte del progetto l’ho ripreso da alcuni sketch che avevo già realizzato in passato.

Il mio giardino è costituito da 4 settori, ciascuno dotato di irrigatori ed elettrovalvole a 12v, ho deciso quindi di utilizzare la relay shield presentata in questo articolo:

Relay Shield

la RTC shield per definire l’orario a cui far partire l’impianto:

RTC shield

e ovviamente arduino.

Componenti della centralina irrigazione arduino

La lista della spesa per questo progetto:

  • n.1 Arduino uno
  • n.1 RTC shield con DS1307
  • n.1 Relay shield
  • n.1-4 elettrovalvole a 12v
  • n.1 alimentatore 12v sufficentemente potente da alimentare Arduino e le elettrovalvole
  • n.1 impianto di irrigazione a cui collegare la centralina
irrigazione arduino shield

Per il primo test ho usato 4 led collegati ai 5v di Arduino con una resistenza da 470ohm, ma puoi omettere questo test nel tuo progetto se sei certo del montaggio e delle impostazioni nello sketch:

irrigazione arduino collegamenti

puoi vedere nella foto che ciascun led ha il catodo ( gnd ) comune e connesso attraverso la resistenza da 470ohm al pin Gnd di Arduino, mentre i singoli pin positivi dei led sono collegati uno ad uno ai morsetti della relay shield.

Ogni volta che da sketch invii al pin corrispondente della scheda il segnale HIGH il relay va in conduzione chiudendo il contatto tra i suoi morsetti corrispondenti.

Lo sketch della centralina irrigazione arduino

Eccolo sketch che ho scritto come primo esempio di centralina per l’impianto di irrigazione Arduino:

/**********************************************************
 * Irrigazione rtc Arduino
 *
 * Data creazione 20 maggio 2013
 * Ultima modifica 27 maggio 2013
 *
 * autore: Mauro Alfieri
 * web:    mauroalfieri.it
 * tw:     @mauroalfieri
 *
/**********************************************************/
#include <Wire.h>
#include <RTClib.h>

#define pinSettore1 5
#define pinSettore2 6
#define pinSettore3 7
#define pinSettore4 8

int settore1[] = {15,40,15,41};
int settore2[] = {15,42,15,43};
int settore3[] = {15,44,15,45};
int settore4[] = {15,46,15,47};

RTC_DS1307 RTC;

void setup() {
  Serial.begin(9600);
  Serial.println( "START" );

  Wire.begin();
  RTC.begin();

  pinMode( pinSettore1,OUTPUT );
  pinMode( pinSettore2,OUTPUT );
  pinMode( pinSettore3,OUTPUT );
  pinMode( pinSettore4,OUTPUT );

  RTC.sqw(0);		//0 Led off - 1 Freq 1Hz - 2 Freq 4096kHz - 3 Freq 8192kHz - 4 Freq 32768kHz
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }

  digitalWrite( pinSettore1,LOW );
  digitalWrite( pinSettore2,LOW );
  digitalWrite( pinSettore3,LOW );
  digitalWrite( pinSettore4,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();

    // Settore Uno
    if ( settore1[0] <= _hour && _hour <= settore1[2] && settore1[1] <= _minute && _minute <= settore1[3] ) {
      digitalWrite( pinSettore1,HIGH );
    } else { digitalWrite( pinSettore1,LOW ); }

    // Settore Due
    if ( settore2[0] <= _hour && _hour <= settore2[2] && settore2[1] <= _minute && _minute <= settore2[3] ) {
      digitalWrite( pinSettore2,HIGH );
    } else { digitalWrite( pinSettore2,LOW ); }

    // Settore Tre
    if ( settore3[0] <= _hour && _hour <= settore3[2] && settore3[1] <= _minute && _minute <= settore3[3] ) {
      digitalWrite( pinSettore3,HIGH );
    } else { digitalWrite( pinSettore3,LOW ); }

    // Settore Quattro
    if ( settore4[0] <= _hour && _hour <= settore4[2] && settore4[1] <= _minute && _minute <= settore4[3] ) {
      digitalWrite( pinSettore4,HIGH );
    } else { digitalWrite( pinSettore4,LOW ); }

  }
}

ci sono alcuni parametri su cui voglio soffermare la tua attenzione:

#define pinSettore1 5
#define pinSettore2 6
#define pinSettore3 7
#define pinSettore4 8

int settore1[] = {15,40,15,41};
int settore2[] = {15,42,15,43};
int settore3[] = {15,44,15,45};
int settore4[] = {15,46,15,47};

le prime 4 linee mostrate ( 15-18 ) definiscono i pin a cui sono collegati i relay ed attraverso i quali controlli uno dei quattro relay presenti sulla shield.

le linee successive ( 20-23 ) ti permettono di impostare in fase di caricamento dello sketch l’ora e i minuti di partenza e di fine di ciascun settore.

Per ogni settore della centralina irrigazione arduino a cui fornire acqua definisci un array numerico di 4 valori seguendo la formula:

int settore1[] = {ora_inizio,minuto_inizio,ora_fine,minuto_fine};

quindi osservando l’impostazione delle quattro linee puoi subito dire che:

  • il primo settore ( 1 ) parte alle 15:40 e termina di irrigare alle 15:41;
  • il secondo settore ( 2 ) parte alle 15:42 e termina alle 15:43;
  • il terzo settore ( 3 ) parte alle 15:44 e termina alle 15:54;
  • il quarto settore ( 4 ) parte alle 15:46 e termina alle 15:47

Avrai notato che tutti i settori hanno una durata di solo 2 min, ti serve come test, che si susseguono tutti in modo da eseguire un test della centralina irrigazione arduino in soli 8 min, e non si sovrappongono, quest’ultima impostazione puoi cambiarla se possiedi un alimentatore in grado di fornire corrente sufficiente a più elettrovalvole contemporaneamente, il mio non è dotato di tale potenza per cui farò partire un settore alla volta.

Continuando a leggere lo sketch trovi la funzione setup() in cui definisci le impostazioni di partenza:

linee 28-32: inizializzi prima la comunicazione seriale e poi la classe Wire ed RTC per comunicare con la shield RTC;

linee 34-37: definisci i 4 pin connessi ai relé come OUTPUT per Arduino;

linee 39-43: se la RTC è nuova probabilmente non possiede ancora alcuna impostazione di ora, queste linee si occupano di trasferire alla shield RTC le informazioni sull’ora al momento del caricamento dello sketch e lo fanno solo la prima volta;

linee 45-48: imposta a LOW tutti i pin connessi ai relay, questo per evitare che in partenza vi siano settori che erogano acqua;

linea 53: verifica che la RTC stia funzionando e che sia in grado di fornirti un’ora, se questo non è possibile non esegui nulla di tutto quello che segue, quindi se non funziona potrebbe essere questo un motivo;

linea 54: assegna alla variabile now il valore di data letto sulla RTC, anche se quello che ci interessa è solo l’ora, almeno in questo primo esempio in cui l’irrigazione parte tutti i giorni alla stessa ora per ogni settore;

linee 56-67: stampa su monitor seriale tutti i valori di data ed ora ricevuti dalla Rtc Shield;

linee 69-70: assegna alle variabili _hour e _minute il valore di ora e minuto correntre letto dalla RTC;

linee 73-74: controlla il valore dell’orario e dei minuti inseriti per il settore uno e confrontali con l’ora e minuti attuali , se il valore di ora corrente ( letto dall’RTC ) è incluso nell’intervallo ora_inizio – ora_fine e il minuto corrente è incluso nell’intervallo minuto_inizio – minuto_fine allora parte la centralina irrigazione arduino del settore uno portando ad HIGH il valore del pinSettore1 collegato al primo relay, in caso contrario porta a ILOWI tale piedino;

linee 78-90: esegui le medesime operazioni di controllo per gli altri 3 settori.

Il video del test della centralina irrigazione Arduino

Nel video che ho realizzato ho ripreso sia il test a banco con i 4 led che simulano l’apertura dell’impianto per ciascun settore sia la partenza di due dei settori a cui ho collegato la centralina irrigazione arduino:

Buona irrigazione !!!

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/centralina-irrigazione-arduino.html

235 pings

Skip to comment form

  1. […] ha realizzato una sua personale versione della centralina di irrigazione arduino e lo ha fatto anche prima che io pubblicassi i miei […]

  2. […] Centralina irrigazione arduino […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.