Centralina irrigazione arduino v2

La Centralina irrigazione arduino v2 è l’evoluzione del progetto presentato su questo blog circa quattro anni fa.

Centralina irrigazione arduino

In questi anni le realizzazioni di questo progetto sono state tantissime e molti mi hanno scritto sia con i ringraziamenti sia con le richieste di modifiche.

Qualcuno mi ha scritto evidenziando qualche anomalia da correggere.

Ecco perché ho ripreso il progetto originale e ti propongo la versione 2, da non confondere con la versione 2.0, che necessiterebbe di un collegamento web e dell’interazione con un device mobile.

Magari ci ragiono e ne preparo una …

Il kit della Centralina irrigazione arduino v2

Sia le schede utilizzate sia i componenti scelti restano invariati.

Puoi quindi seguire le istruzioni presenti nell’articolo originale e montare le shield come mostrato in figura:

irrigazione arduino shield

questa configurazione ti permette di evitare saldature e puoi facilmente e velocemente realizzare la tua Centralina irrigazione arduino v2 semplicemente cambiando lo sketch.

La centralina irrigazione arduino v2 in kit

La centralina è disponibile in kit con 4 elettrovalvole e alimentatore da 12v 500mA ( sufficiente per attivare una elettrovalvola alla volta ) sul sito robotics-3d

Segnalazioni sulla Centralina irrigazione arduino v1

Tra i commenti più gettonati ci sono da sempre stati quelli relativi alla gestione del cambio ora e dell’irrigazione su intervalli che fossero maggiori di un ora.

Centralina irrigazione arduino v2 commento uno

Un aspetto a cui avevo concesso poca importanza in quanto ho sempre considerato il progetto adatto a piccoli giardini od orti casalinghi con sistema di irrigazione tale da non richiedere tempi lunghi.

Centralina irrigazione arduino v2 commento

Questo tipo di esigenza è più diffusa di quello che immaginavo ed ecco l’esigenza di realizzare la Centralina irrigazione arduino v2.

Sketch Centralina irrigazione arduino v2

Lo sketch di base è il medesimo presentato nel 2013 e che in tanti avete testato in questi anni.

Ho applicato alcune modifiche ed un sistema di verifica dell’orario e dei minuti correnti più semplice ed efficace.

/**********************************************************
 * Irrigazione rtc Arduino
 *
 * Data creazione 20 maggio 2013
 * Ultima modifica 20 giugno 2016
 *
 * 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[] = {20,30,21,15};
int settore2[] = {21,20,22,05};
int settore3[] = {22,10,22,55};
int settore4[] = {23,00,23,45};
  
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 );
  
  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 _current   = (now.hour() * 60) + now.minute();
  
    startArea(1, _current);  // Settore Uno
    startArea(2, _current);  // Settore Due
    startArea(3, _current);  // Settore Tre
    startArea(4, _current);  // Settore Quattro
  }
  delay( 30 );
}

void startArea(byte area, int current) {

    int  _currStart; 
	int  _currStop;
	byte _currPin;
	
    switch(area) {
		case 1:
		   _currStart = (settore1[0]*60) + settore1[1];
		   _currStop  = (settore1[2]*60) + settore1[3];
		   _currPin   = pinSettore1;
		break;
		
		case 2:
		   _currStart = (settore2[0]*60) + settore2[1];
		   _currStop  = (settore2[2]*60) + settore2[3];
		   _currPin   = pinSettore2;
		break;
		
		case 3:
		   _currStart = (settore3[0]*60) + settore3[1];
		   _currStop  = (settore3[2]*60) + settore3[3];
		   _currPin   = pinSettore3;
		break;
		
		case 4:
		   _currStart = (settore4[0]*60) + settore4[1];
		   _currStop  = (settore4[2]*60) + settore4[3];
		   _currPin   = pinSettore4;
		break;
	}
	
	if ((_currStart<=current) && (current<=_currStop)) {
		digitalWrite( _currPin,HIGH );
	} else {
		digitalWrite( _currPin,LOW );
	}
}

Descrizione linea per linea

commento le sole line avriate, invitandoti alla lettura del progetto originale per comprendere le scelte in merito alla Centralina irrigazione arduino v2:

linee 20-23: ho inserito degli intervalli orari che fossero a cavallo dell’ora per i primi due settori ed interni per i restanti due;

linee 67-72: sostituiscono tutte le linee dalla 70 alla 95 di fatto semplificando di molto lo sketch. In particolare alla linea 70 ricalcola il valore dell’orario corrente in minuti ossia moltiplica per 60minuti l’ora corrente e sommaci i minuti ( nota che il valore massimo che potrai ottenere è dato dalla moltiplicazione (23*60)+60 ).

Le linee 69-72: richiamano tutte la nuova funzione startArea();

linea 77: definisci la funzione startArea che accetta due parametri. Come primo parametro accetta il settore o area da irrigare ( 1-4 ) e come secondo parametro l’ora e minuto corrente ricalcolati;

linee 79-81: definisci 3 variabili in cui memorizzerai i valori di orario start ed end per ciascun settore e il pin a cui hai collegato il relè che attiva l’elettrovalvola;

linea 83: imposta lo switch che valuta la variabile “area” passata dalle line  69-72

linee 85-87: se sei nella condizione dell’area 1 imposta come variabile di partenza il valore in minuti calcolato con la formula:

(ore*60)+minuti

applicato all’orario di avvio. La linea 86 imposta l’orario di fine di irrigazione calcolato come il precedente orario di start. La linea 87 imposta il pin relativo al relè, useremo questi dati alla fine della funzione;

linee 90-106: sono fondamentalmente identiche alle linee 84-88 ma per i settori 2,3,4;

linea 109: verifica che l’orario corrente, arrivato come secondo parametro della funzione, sia incluso tra l’orario di avvio del settore e l’orario di fine programmato;

linea 110: se ti trovi nell’intervallo verificato alla linea 109 porta il pin _currPin definito alla linea 87 per il primo settore ed a seguire alle linee 93,99,105 per i successivi settori;

linea 112: ti permette di spegnere i settori non utilizzati o coinvolti nel minuto corrente.

La modifica, a parte le funzione, semplifica di molto il progetto e ti permette rapidamente di variare il funzionamento del tuo impianto di irrigazione.

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

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

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.