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 !!!

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/centralina-irrigazione-arduino.html

233 commenti

2 ping

Vai al modulo dei commenti

    • Daniele il 16 Giugno 2013 alle 12:18
    • Rispondi

    Dove posso trovare la shield rtc?

    1. Ciao Daniele,
      io l’ho acquistata da robot-domestici.

      Mauro

        • Ludovico il 22 Maggio 2017 alle 10:07
        • Rispondi

        Ciao mi piace il tuo articolo
        vorrei sapere una cosa
        io avrei bisogno di uno sketch solo per due settori mi puoi dare una dritta per come modificare quello tuo per le mie esigenze spero non ti dispiaccia
        cordiali saluti

        1. Ciao Ludovico,
          leggi i commenti sotto linea per linea, dopo averli compresi, ti sarà semplice eliminare i settori in più.

      • Melo il 27 Gennaio 2018 alle 09:31
      • Rispondi

      Ciao Bellissima applicazione , con relativamente poche linee di codice.
      Ho applicato la centralina alle consolle di gioco di mio figlio , per temporizzare l’utilizo che ne fà.
      Vorrei però apportare se necessario modifiche orarie da remoto .
      Pensi si possa implementare la gestione Ethernet del progetto?

      1. Ciao Melo,
        certo tutto è possibile con un po’ di buona pratica e conoscenza.

    • Maurizio il 18 Giugno 2013 alle 23:31
    • Rispondi

    Ciao, anzitutto i complimenti per tutti i tutorial esempi ecc. che sono spiegati e commentati sempre in modo comprensibile anche da noi “mortali”.
    La domanda, (magari scontata) che vorrei farti è il valore che inserisci nei vari settori all’ interno dell’array, ad es.
    settore1[0] o settore1[2] come funzionano ? immagino siano il riferimento all’ ora e ai minuti; ma non trovo la logica.
    Grazie
    Maurizio

    1. Ciao Maurizio,
      la descrizione di quello che mi chiedi è riportata subito sotto le linee dello sketch.
      trovi anche gli esempi e i limiti che puoi impostare.

      Mauro

  1. Ciao Mauro,
    Ho iniziato un paio di mesi fà a studiare i tuoi sketch e arduino in generale… sono alle primissime armi… ma il progetto che vorrei portare a termine è identico a questo che riporti. 4 linee da servire con 4 elettrovalvole (a 24volt nel mio caso). Il problema nel mio caso non è tanto portare corrente alle elettrovalvole quanto avere portata(l/h) sufficiente sulle linee da servire. quindi penso che molti avranno necessità di far partire in sequenza le linee!
    Ho sottomano un progetto ben realizzato da un ragazzo con l’ uso di un display LCD e i tasti per la programmazione. Solo era per arduino 2009 e non per arduino uno… e sembra che non tutto funzioni come dovrebbe! Se vuoi te lo passo che magari trovi il modo di sfruttarne parte del codice o di riadeguarlo a funzionare sull’ uno rev3! io non ci riesco sono troppo “povero” in materia. Avevo comunque iniziato la stesura di uno sketch da 0 e abbastanza basilare (simile al tuo). credo che lo prenderò in prestito cmq e proverò a usarlo con un LCD…. quantomeno per visualizzarne il funzionamento…
    Grazie per il gran contributo!
    Ciao

    1. Ciao Alessandro,
      la centralina che ho presentato mi sembra risponda alle tue esigenze a parte il display LCD, sempre che io abbia ben interpretato.
      Le 4 linee partono indipendentemente una dall’altra e seguendo la programmazione che tu gli dai.

      Mauro

      1. Infatti x Quello che devo fare è decisamente ok… ma il display credo sia indispensabile almeno per vedere l’ ora dell’ RTC e magari far visualizzare gli orari di programmazione (e per questo credo di essere in grado di arrangiarmi in quanto c’ ho già smanettato un pò…) e vedrò di integrarlo….
        Quello che però avevo in mano e di cui parlavo utilizza anche una keypad shield ed ha un menù e una gestione da tastiera molto avanzata(cambio ora, allarmi multipli su più uscite etc)… solo che non funziona bene sull’ uno r3! sarebbe da debuggare e rivedere…. La mia era solo una proposta se eri interessato a dargli un occhiata! ^_^
        Per il resto, ripeto… ottimo lavoro e settimana prossima comunque inizio gli scavi in giardino e cerco di far partire il tutto con il tuo sketch e le mie modifiche!!!
        Ciao e Grazie!

        1. Ciao Alessandro,
          la tua proposta é interessante, tuttavia spesso mi sopravvalutate pensando c’è io sia in grado di rivedere e correggere sketch fatti da appassionati più bravi di me 🙂

          Ho in mente di aggiungere al progetto alcune implementazioni tra cui:

          – Keypad LCD per visualizzare l’ora, impostare le zone, eseguire un avvio manuale
          – EEPROM per salvare le impostazioni orarie
          – Aggiungere i sensori per verificare lo stato del terreno
          – Aggiungere i sensori di umidità dell’aria

          E tanto altro ancora.
          Tutto questo richiede tempo e test sul campo, a presto spero di riuscire a pubblicare le nuove implementazioni.

          Mauro

          1. apprezzo l’ umiltà, ma tu non sottovalutarti troppo! 😛
            Interessanti le espansioni.future… un’ altra cosa interrssante potrebbe essere l’ avvio remoto manuale con un modulino rf, almeno per me!
            Ciao e grz ancora!

          2. Ciao Alessandro,
            ti ringrazio.
            Interessante l’idea di controllo remoto magari per controllare i cicli di funzionamento ed i parametri.

            Mauro

    • Giuseppe il 1 Luglio 2013 alle 18:53
    • Rispondi

    Ciao Mauro,
    prima di tutto ti ringrazio per il lavoro che svolgi e con cui mi stai facendo appassionare ad Arduino ogni giorno di più…
    Io ho questa relè shield: http://cgi.ebay.it/ws/eBayISAPI.dll?VISuperSize&item=261026911070. Posso utilizzarla con Arduino (Uno) e se si come la collego?
    Grazie.

    1. Ciao Giuseppe,
      il link non si apre 🙂

      Mauro

        • Giuseppe il 2 Luglio 2013 alle 14:44
        • Rispondi

        Scusa Mauro, ti posto il link dell’inserzione e-bay dove ho preso la scheda, spero funzioni:
        http://www.ebay.it/itm/1pcs-4-Channels-5V-Relay-Module-For-51-ARM-PIC-AVR-DSP-MSP430-/261026911070?pt=LH_DefaultDomain_0&hash=item3cc66a935e#ht_5581wt_1388
        Grazie ancora

        1. Ciao Giuseppe,
          ora il link funziona.
          A guardare lo schema mi sembra che tu possa utilizzarla collegando i pin IN1-4 ai rispettivi pin eccitati da Arduino con i 5v ed alimentando la scheda con i 5v e Gnd, ti consiglio però di non utilizzare i 5v provenienti da Arduino ma da una alimentazione esterna, mantenendo in comune SOLO il Gnd arduino e quello della scheda relay.

          Mauro

            • Francesco il 22 Agosto 2014 alle 14:53

            ciao Mauro,
            come mai consigli questa configurazione? che controindicazione ci sono?
            grazie
            Francesco

          1. Ciao Francesco,
            alimentare i 4 relay direttamente da Arduino può causare sovra richiesta di alimentazione al regolatore di tensione di arduino e nei casi meno complessi al malfunzionamento di qualche relay che si eccita e diseccita continuamente; in casi peggiori puoi incorrere nel danneggiamento del regolatore di tensione stesso.

            • Francesco il 22 Agosto 2014 alle 17:46

            chiarissimo come al solito! 🙂
            grazie!!

    • Giuseppe il 2 Luglio 2013 alle 20:06
    • Rispondi

    Grazie Mauro!

    • Mario il 3 Luglio 2013 alle 11:46
    • Rispondi

    Usate un logo Siemens pratico e veloce

    1. Ciao Mario,
      a cosa ti riferisci?

      Mauro

    • elvis il 5 Agosto 2013 alle 10:33
    • Rispondi

    Ciao complimenti per il sito!

    sono nuovo nel mondo di arduino.. l’ho acquistato qualche mese fa ed è rimasto in un cassetto..

    però ora che ho visto il tuo rogetto mi è venuta voglia di provare a realizzare l’impianto nuovo di irrigazione..

    volevo sapere alcune cose.. ho 8 elettrovalvole da 24V come modifico il circuito per realizzarlo?

    grazie per le info

    elvis

    1. Ciao Elvis,
      sicuramente avrai bisogno di una scheda relé da 8, quelle che io ho a disposizione sono da 4 relay al max.
      Non conosco shield già fatte con 8 relé che tu possa collegare “a panettone” su arduino, dovresti trovare un modulo esterno ad 8 relay da collegare con dei cavetti.

      Prova a cercare tra le shield in vendita su robot-domestici.it dovrebbe essercene qualcuna.
      Mauro

    1. Ciao Elvis,
      Questa può andar bene perché ha 8 relè, non ho trovato nella descrizione dei relè la potenza che possono sopportare, ma se usi elettrovalvole a 12 o 24v dovrebbe essere sufficiente.

      Mauro

    • Marco il 7 Agosto 2013 alle 22:43
    • Rispondi

    Ciao sto realizzando una centralina come la tua ma io ho il problema che la programmazione oraria è dalle 23:00 alle 01:30 mi potresti dare qualche indicazione di come fare? Grazie

    1. Ciao Marco,
      è una interessante problematica, il passaggio della mezzanotte rende vano il confronto fatto con il > e < ti invito a valutare una soluzione per spezzare la fascia oraria e condividerla. Anche io penserò ad una soluzione al problema ... Mauro

  2. Ciao Mauro,
    leggo con attenzione i tuoi tutorial che sono davvero eccellenti, ma in proposito a questa centralina per l’irrigazione ti chiedo un piccolo aiuto per un neofita come me.
    Premetto che la sto adattando per un altro tipo di automazione nel quale mi servirebbe poter gestire il tempo di attuazione dei relé in maniera un pochino più precisa, ovvero indicando oltre l’orario e il minuto di attivazione e disattivazione, anche il secondo.
    Puoi aiutarmi nella modifica dello sketch?
    Ti ringrazio anticipatamente.

    Paolo

    1. Ciao Paolo,
      gli articoli che scrivo sono progetti da me realizzati con lo scopo di fornire spunti e idee da cui farli evolvere.
      La tua esigenza é interessante e non troppo complessa per cui ti inviterei a provarci da solo leggendo le istruzioni dello sketch e sperimentando.

      Se proprio non riesci scrivimi dove ti sei bloccato o cosa non riesci a fare, in alternativa se mi scrivi il dettaglio del progetto posso provare a farti un preventivo per scriverti io il progetto.

      Mauro

    • manuel il 18 Novembre 2013 alle 11:37
    • Rispondi

    Ciao Mauro,
    ancora complimenti per i tuoi tutorial..
    domanda: se inserisco l’orario dalle 23.00 alle 01.00 come posso modificare questa riga??

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

    ti ringrazio anticipatamente,
    Manuel

    1. Ciao Manuel,
      ti suggerirei di ragionarci su qualche minuto e sono certo che troverai la soluzione.
      L’idea che mi viene subito in mente è di dividere in due linee una che valuti fino alle 23.59 ed una che verifichi dalle 00:01 in poi.

      Non ricordo immediatamente come la RTC Shield gestisca la mezzanotte se come 00:00 o come 24:00, la prima mi sembra più plausibile.

      Mauro

    • nicholas il 6 Aprile 2014 alle 16:49
    • Rispondi

    ciao mauro
    ma se io volessi irrigare 2 volte lo stesso settore nell’arco di 24 ore come faccio ?

    1. Ciao nicholas, aggiungi altri controlli di tipo if() facendo attenzione a non sovrapporre gli orari.

        • nicholas il 8 Aprile 2014 alle 18:00
        • Rispondi

        ti ringrazio per la risposta ma essendo inesperto, devo aggiungere gli orari per il settore 1 ma non me li accetta arduino oppure non me li esegue int settore1[] = {17,54,17,54,17,58,17,58};
        come faccio a comunicare che deve irrigare nei due seguenti orari ?

        1. Ciao Nicolas,
          devi modificare non solo il settore 1 ma anche altri parametri e modo di ragionare dello sketch.
          Forse il modo migliore è definirti un nuovo settore con i tuoi orari e dove trovi l’if dei settori presenti aggiungi un controllo anche per il nuovo settore al quale farai attivare nuovamente il primo relè.
          So che descritto così sembra difficile ma ti consiglio di leggere bene la descrizione del mio progetto e di ciò che fanno tutte le linee di codice dopo ti sarà tutto più chiaro.

    • nicholas il 10 Aprile 2014 alle 19:11
    • Rispondi

    ciao mauro ho fatto tutte le modifiche del caso #define,pinsettore ma nulla quando vado ad avviare il programma al primo orario di irrigazione il relè non scatta al secondo si scusami se sono così assillante ma voglio imparare ad utilizzarlo bene

    1. Ciao Nicolas,
      hai eseguito i suggerimenti che ti ho dato?
      Probabilmente hai definito male il settore, ti raccomando di non modificare i settori esistenti ma di creare nuovi settori per nuovi orari.

        • nicholas il 15 Aprile 2014 alle 18:27
        • Rispondi

        ho fatto proprio cosi ma nulla la prima volta che utilizzo un relè che verrà riutilizzato non scatta

        1. Ciao Nicolas, se un relè non scatta c’é di certo un errore nello sketch, riparti dallo sketch pubblicato, che funziona e poi applica le sole linee che ti ho suggerito di aggiungere. La prima parte deve funzionare senza problemi sia prima sia dopo la modifica.

    • Stefano il 20 Giugno 2014 alle 15:47
    • Rispondi

    Buon Pomeriggio,

    mi chiamo Stefano e seguo il suo Blog.
    Tempo fa ho comprato la Relay Shield (anche citata in un suo post) per un progetto di irrigazione di un orto.
    Adesso che ho un pò di tempo libero vorrei iniziare a lavorarci sopra.
    Vorrei usare la relay shield in questione per accendere una pompa da pozzo (prevalenza 5m).
    E’ possibile farlo o mi serve una shield I/O?

    Cordiali Saluti,

    Stefano

    1. Ciao Stefano,
      dipende dal tipo di pompa che vuoi utilizzare.
      Controlla la potenza ed il voltaggio di funzionamento della pompa e confrontali con il dato riportato dal produttore della shield sulla potenza dei relé.

    • Giacomo il 17 Agosto 2014 alle 02:32
    • Rispondi

    Salve.
    Premetto che per quanto riguarda Arduino sono un neofita.
    Ho acquistato un kit da poco,della serie Funduino.
    trovo molto interessante la centralina d’irrigazione e vorrei copiare il progetto per attuarlo nel mio piccolo orto.
    devo acquistare la scheda shield con i relè e la shield con l’orologio.
    Per quanto riguarda l’orologio nessun problema,ma per i relè la scheda che lei ha usato nel progetto non è più in vendita.
    Ne ho trovata una con 6 relè e con l’aggiunta di uscite digitali e analogiche.
    Secondo la sua esperienza che problemi andrei incontro?
    Riguardo alla parte hardware non penso,per quanto riguarda lo Sketch dovrei cambiare qualche dato?
    La ringrazio

    1. Ciao Giacomo, mi giunge nuova la messa fuori vendita della scheda, so che il sito http://www.robotics-3d.com le ha ancora in vendita insieme a tutto il mio kit.
      Non conosco il kit funduino ma se non differisce da arduino non devi modificare molto, ti consiglio di leggere tutto l’articolo se vuoi imparare ad usare arduino, io spiego linea per linea cosa faccio e capirai cosa modificare senza difficoltà.

      Per la scheda a 6 relay è necessario che verifichi i collegamenti dei pin, se sono fissi, che non vadano in conflitto con le altre schede presenti.

        • Giacomo il 18 Agosto 2014 alle 12:39
        • Rispondi

        Tutti mi dicono che l’articolo non è disponibile,neanche nel sito del link.
        Ho letto bene l’articolo,ma essendo un principiante non voglio buttar via soldi.
        Farò delle prove e poi le dirò come è andata.
        Grazie per la disponibilità.

        1. Ciao Giacomo,
          se ti riferisci al bollino rosso è solo perchè siamo in Agosto e sono fermi i magazzini, da settembre riprenderà tutto.
          Puoi comunque fare tutto con una scheda relay esterna, non cambia la difficoltà è solo meno compatto 🙂

    • Massimo il 17 Settembre 2014 alle 14:21
    • Rispondi

    ciao mauro,
    io vorrei realizzare un sistema simile ma alimentandolo a 5V e quindi anche le elettrovalvole. sapresti consigliarmi delle elettrovalvole a 5V?
    grazie
    massimo

    1. Ciao Massimo,
      non conosco elettrovalvole funzionanti a 5v, in ogni caso avrai bisogno dei relè per evitare di compromettere il funzionamento di arduino.

    • omar il 7 Ottobre 2014 alle 00:11
    • Rispondi

    ciao grandissimo!

    domanda, invece che dagli il tempo in minuti, c’è la possibilità di farlo in secondi???
    ho provato vari modi ( tipo aggiungere : a
    int settore1[] = {23,40:00,23,40:05}; ) ma ovviamente mi da errore

    vorrei ad esempio che parta alle 23,40:00 e alle 23,40:05 si fermi

    che devo fare??

    grazie mille

    1. Ciao Omar,
      dovrai modificare la logica di funzionamento nel controllo che esegui confrontando i secondi e non i minuti.
      Nella descrizione della centralina trovi riga per riga cosa fa e puoi comprendere ed intervenire sulle modifiche.

        • omar il 8 Ottobre 2014 alle 09:16
        • Rispondi

        grande mauro! sono un … che non ci ho fatto caso 😀

        1. Ciao Omar, sono qui anche per questo 🙂

        2. Ciao Omar, interesserebbe anche a me conoscere come hai risolto perché io non ci sono riuscito. Potresti darmi qualche suggerimento? (magari in pvt). Ciao e grazie.

          1. Ciao Paolo,
            lascio il tuo commento attivo anche se non trovo nella cronologia l’Omar a cui chiedi di darti aiuto.

    • alexdelli il 22 Ottobre 2014 alle 13:17
    • Rispondi

    Ciao Mauro e complimenti.
    Non sono molto pratico di Arduino, ma questo progetto è fattibile avendo 2 giardini separati?
    Cioè non posso arrivare con i fili dalla centralina ai due differenti giardini.
    E’ possibile ovviare il qualche modo?
    Tipo collegarli in wi-fi ad una unità centrale?
    Grazie

    1. Ciao Alex,
      se sono due giardini separati è necessario che comunichino in qualche modo?
      Probabilmente avranno fonti idriche separate e colture che vanno irrigate con tempi e modi differenti io ti consiglierei di realizzare due centraline separate.
      Ci sarebbe la possibilità di usare moduli XBee ma avresti bisogno comunque di due centraline ed aggiungere anche due moduli XBee che hanno un costo considerevole.

    • Massimo il 28 Ottobre 2014 alle 11:27
    • Rispondi

    ciao mauro,
    al posto della rct shield, che è un componente in più e un costo, non si poteva sfruttare l’rtc interno di arduino o il quarzo da 16MHz sulla board?
    grazie

    1. Ciao Massimo,
      l’arduino uno non ha un RTC interno. Il quarzo serve solo a dare il clock al microcontrollore.
      Inoltre se si resetta l’arduino ricominci daccapo 🙂

    • Michele il 24 Novembre 2014 alle 18:24
    • Rispondi

    Vorrei chiederti cosa cambiare se volessi usare un RTC DS1302.
    Oltretutto ho dei relè da poter crearmi una shield come potrei fare?

    1. Ciao Michele,
      il DS1302 probabilmente ha un suo datasheet e un suo sistema di collegamento.
      Puoi consultarlo per verificare le connessioni da modificare e il codice da utilizzare per interrogarlo.
      La shield puoi costruirtela con una basetta millefori se non vuoi costruirti un PCB

    • Michele il 25 Novembre 2014 alle 07:29
    • Rispondi

    Ho un modulo rtc con ds1302 potrebbe andare bene lo stesso?

    1. Ciao Michele,
      penso di averti già risposto quando hai scritto da un’altro indirizzo email.
      Leggi nei commenti sopra.

    • Michele il 8 Dicembre 2014 alle 18:17
    • Rispondi

    Ciao, scusa per sopra ho fatto confusione, tu che pin usi per il modulo rtc e il codice potrebbe andare bene lo stesso o devo cambiare collegamenti e codice?
    utilizzando il DS1302 ovviamente..
    grazie per qualsiasi risposta/consiglio.
    Buona serata

    1. Ciao Michele, io non uso il DS1302, come vedi nell’articolo.
      Immagino che la libreria sia differente e che tu debba ricercare quella adatta al tuo componente.

    • Mario il 27 Gennaio 2015 alle 18:41
    • Rispondi

    Ciao Mauro
    premetto che sono alle prime armi con Arduino, Avrei bisogno di fare un impianto di irrigazione quattro settori quindi con quattro elettrovalvole però vorrei avere la possibilità di attivazione e programmazione giornaliera e settimanale attraverso internet. Con Arduino è possibile?
    Grazie

    1. Ciao Mario,
      si penso sia possibile.
      Devi studiare un po di elettronica, informatica e sopratutto avere conoscenze di networking ed internet per le comunicazioni con la tua centralina.
      Penso che sarebbe un bel progetto se tu volessi pubblicarlo, dopo la realizzazione, io posso offrirti lo spazio per farlo sul blog.

    • andrea il 19 Febbraio 2015 alle 19:41
    • Rispondi

    ciao, vorrei chiederti se fosse possibile avviare e concludere il ciclo di ogni settore con una rampa di tensione.
    io devo accendere e spegnere dei led per un acquario ed il tuo sketch va benissimo per quello che devo fare, ma se riuscissi ad aggiungere questa modifica sarebbe perfetto.

    grazie mille

    1. Ciao Andrea,
      i miei sketch sono descritti riga per riga perché possiate comprenderli e modificarli a tuo piacimento.
      Se hai dubbi sullo sketch che ho scritto posso chiariteli se me li scrivi nei commenti.

    • Nembrini Davide il 18 Aprile 2015 alle 12:37
    • Rispondi

    Ciao Mauro,
    c’è un modo per impostare più precisamente e direttamente l’ora?

    1. Ciao Davide,
      ultimamente ho realizzato un progetto per l’arduino day 2015 in cui l’ora dell’orto idroponico verticale viene recuperata da un server ntp e memorizzata una volta al giorno nell’RTC.

        • Nembrini Davide il 24 Aprile 2015 alle 10:49
        • Rispondi

        C’è un link per questo programma? vorrei creare un acquario per il mio ufficio ma, stabilire tutti gli orari per i vari componenti, mi sembra molto complicato.

        1. Ciao Davide,
          non comprendo la domanda. Cosa intendi per link?

            • Nembrini Davide il 27 Aprile 2015 alle 11:51

            Ciao Mauro, intendevo dire, potresti darmi un riferimento per questo programma?

    • davide il 13 Maggio 2015 alle 15:47
    • Rispondi

    Ciao Mauro,

    complimenti sempre per i tuoi articoli;prendendo il tuo progetto come base,vorrei realizzare un sistema per bagnare in automatico le piante sul balcone che entri in funzione quando il terreno è secco (utilizzerei un sensore di umidità del terreno); secondo te è una cosa fattibile?
    l’unica cosa che mi lascia dubbioso e se riesco a fare in modo di bagnare le piante quando il terreno e secco e che contemporaneamente continui a leggere il valore letto dal sensore di umidità del terreno, per fare in modo che al raggingimento di una determinata soglia impostabile, si fermi in automatico l’irrigazione.
    Spero di essermi spiegato.

    Di programmazione ne capisco un po.

    Grazie

    Ciao
    Davide

    1. Ciao Davide,
      puoi farlo senza grandi difficoltà dal punto di vista elettronico o programmazione.
      Dalla mia esperienza la misurazione continua è possibile tuttavia inutile in quanto il terreno fisicamente impiega del tempo perché l’acqua risulti omogeneamente diffusa e questo comporta che le misurazioni sono falsate.
      Il mio consiglio è di irrigare per un tempo definito attendere qualche minuto ed eseguire la misurazione, se ancora secco puoi erogare nuovamente acqua, magari in modo proporzionale alla misura rilevata es:
      – rilevi che il terreno è completamente secco ( 0% umidità ) eroghi acqua per 5 min
      – attendi 5 min
      – rilevi umidità al 40%, eroghi acqua per 2 min
      – …
      – …

      considera che il 100% potrebbe voler dire che il terreno è saturo d’acqua, dipende dal sensore, e le piante navigano nell’acqua.

        • Davide il 14 Maggio 2015 alle 11:08
        • Rispondi

        Ti ringrazio della risposta, è stata molto utile.
        Farò delle prove per trovare il miglior compromesso

        buona giornata

        Ciao
        Davide

  3. Ciao Mauro. stavo sperimentando un po’ con questo tuo progetto e volevo chiederti una cosa. Ho notato che nelle seguenti istruzioni (ne cito solo 2 di esempio):

    int settore1[] = {12,50,12,52};
    int settore2[] = {12,53,12,55};

    in effetti, il primo relè si accende all’orario giusto (12,50), ma non termina alle 12:52, bensì passa direttamente all’accensione del secondo relè alle 12:53 (quindi non più 2 minuti di accensione, ma 3). Io pensavo che tra i due intervalli ci fosse una pausa (di 1 minuto per la successiva accensione ma non è così). Da che può dipendere secondo te?
    Grazie

    1. Ciao Attilio,
      spero di aver compreso quello che mi scrivi, in pratica il tuo primo relay si accende alle 12:50 e invece di spegnersi alle 12:52 si spegne alle 12:53 in concomitanza con l’accensione del secondo relay, giusto?
      In tal caso il comportamento è corretto, in quanto la condizione di verifica prevede dei <= ossia fino a che non raggiungi il minuto 52 e per tutto il minuto 52; al cambio del minuto 53 la prima condizione non è più vera e scatta l'else.

      1. Ciao Mauro,
        hai perfettamente capito. La mia osservazione era soltanto proiettata al fatto di dare almeno un minuto di “pausa” tra i vari relè. Comunque ho risolto in questo modo (un modo a dir poco banale e forse non molto professionale).
        In pratica, per il 2°,3° e 4° settore ho allungato di un minuto l’aggancio del relè, in modo che (nel caso dell’esempio), staccando praticamente al termine del minuto 52, quindi allo scoccare del minuto 53, stacca per poi riattaccare al minuto 54 del 2° settore, e così via.

        int settore1[] = {12,50,12,52};
        int settore2[] = {12,54,12,55};

        Grazie sempre e comunque dei tuoi preziosi consigli.
        Cordiali saluti

        Attilio

        1. Ottimo Attilio,
          è proprio in questo modo che ho progettato la centralina, hai trovato il modo corretto per utilizzarla.

          1. Grazie Mauro.
            Veniamo ora alle “dolenti note”. Le elettrovalvole che io ho, sono a 24VAC ed hanno 2 fili neri che escono dal solenoide (una massa e un segnale). La mia domanda sarà banale ma mi basta collegare questi due fili ai morsetti dei relè? L’alimentazione, a questo punto, per alimentare Arduino e i suoi shield, posso utilizzare un alimentatore 9 volt 1A?

            Grazie come sempre per la tua attenzione. Saluti.
            Attilio

          2. Ciao Attilio,
            le elettrovalvole che descrivi sono 24VAC dove AC sta per Alternating Current ( corrente alternata ).
            I relay devi considerarli come sei semplici interruttori tra i 24VAC e le elettrovalvole.
            Arduino lo puoi alimentare a 9v anche con 500mA.

  4. Ciao Mauro,
    quindi, se non ho capito male, a questo punto devo utilizzare 2 alimentazioni: 1 per alimentare Arduino, la rtc shield ed il modulo a 4 relay a 9 o 12 volt e la seconda utilizzando l’alimentatore 24vAC da mandare direttamente alle uscite dei relay?

    • Filippo il 2 Luglio 2015 alle 21:19
    • Rispondi

    Salve, io sto provando a compilare lo sketch dell’irrigazione ma l’IDE mi restituisce questi errori:
    In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:29:0,
    from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:26,
    from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26,
    from C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire/Wire.h:26,
    from C:\Users\Filippo\Documents\Arduino\libraries\RTClib\RTClib.cpp:4:
    C:\Users\Filippo\Documents\Arduino\libraries\RTClib\RTClib.cpp:17:31: error: variable ‘daysInMonth’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
    static uint8_t daysInMonth [] PROGMEM = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    ^
    Errore durante la compilazione

    Sto iniziando da poco ad usare Arduino la ringrazio in anticipo per il supporto

    1. Ciao Filippo,
      tra i commenti troverai il medesimo errore e la soluzione !!!

        • Filippo il 3 Luglio 2015 alle 17:14
        • Rispondi

        Salve, grazie per la risposta ma nonostante quest’ultima non riesco a capire l’errore… potrebbe specificare?
        Grazie per la sua pazienza

        1. Certo Filippo,
          la libreria che stai utilizzando non possiede una proprietà “daysInMonth” che è incompatibile con la tua versione dell’IDE.
          Nei commenti a questo articolo Luigi ha trovato la soluzione:

          https://www.mauroalfieri.it/elettronica/data-logging-con-arduino.html

    • giuseppe il 5 Luglio 2015 alle 18:54
    • Rispondi

    ciao mauro, grazie per il tuo articolo. stiamo provando a riprodurre il tuo schema e con i led ci siamo riusciti.
    il problema è che non riusciamo a far funzionare le valvole.
    volevo chiederti come hai collegato le valvole all’arduino, con che tipo di cavi e se hai usato un transistor ed un diodo. grazie mille!

    1. Ciao Giuseppe,
      se stai utilizzando i componenti descritti non dovresti avere problemi in quanto i relay di questa shield sono sufficienti a controllare anche delle elettrovalvole.
      Attenzione all’alimentazione delle valvole sia il voltaggio sia la corrente richiesta è superiore a quella che arduino può erogare.

    • Max il 14 Luglio 2015 alle 23:02
    • Rispondi

    Buonasera Mauro,
    vorrei realizzare il tuo progetto con alcune modifiche che poi ovviamente condividerei!!
    Il mio unico ma enorme problema è che non ho la possibilità di allacciarmi alla rete elettrica, è fattibile quindi usare una batteria 12v? Quanto potrebbe durare una carica ad esempio di un pacco di batterie AA 8×1,5v?
     
    Perdendomi nel tuo blog mi sono imbattuto anche nell’ “upgrade” del progetto, con pulsanti e display. Come sopra, come siamo a consumi?

    Grazie in anticipo,
    Max

    1. Ciao Max,
      il consumo è legato molto ai componenti che impieghi ed alle modalità di accensione e spegnimento delle elettrovalvole oltre che al loro assorbimento.
      La cosa migliore è realizzare il progetto ed eseguire una misurazione della corrente assorbita in fase di riposo e di attivazione dei relay e poi calcolarti il consumo in funzione dei tempi.

        • Max il 15 Luglio 2015 alle 23:37
        • Rispondi

        Si ma per caso conosci un metodo per calcolare i consumi, conoscendo nei dettagli i componenti dell’ impianto, per avere almeno idea della fattibilità del progetto?
        Sarebbe frustrante realizzarlo per poi non poterlo usare, anche a fronte del costo…
        Scusa ma sono ok con la programmazione ma a 0 con l’ elettronica!

        1. Ciao Max,
          puoi fare una stima di massima prendendo come riferimento i datasheet dei componenti e/o dei circuiti che usi .. sarebbe cmq una stima spannometrica. Per arduino trovi un mio articolo in cui ho eseguito qualche test.
          Quello che puoi chiarirti è quanto durerà con una data batteria, la fattibiltà è possibile indipendentemente dall’uso della batteria.

        2. Ciao Max,
          puoi fare una stima di massima prendendo come riferimento i datasheet dei componenti e/o dei circuiti che usi .. sarebbe cmq una stima spannometrica. Per arduino trovi un mio articolo in cui ho eseguito qualche test.
          Quello che puoi chiarirti è quanto durerà con una data batteria, la fattibilità è possibile indipendentemente dall’uso della batteria.

            • Max il 16 Luglio 2015 alle 23:08

            Buonasera Mauro,
            certamente l’unico problema è quanto durerà la batteria, mi sono espresso male io.
            Devo però fare una stima dei consumi nel preventivo, perché, faccio un esempio stupido, se con una batteria per auto tengo in funzione l’ impianto solo due giorni non alzo neanche un dito per realizzarlo hehe
            Tu sapresti aiutarmi a fare questo calcolo?
            Intanto mi cerco i test da te realizzati cosi mi faccio un’ idea!!

          1. Ciao Max,
            comprendo quello che dici ma le varianti a mio avviso sono molte e l’unica è usare il primo o il secondo metodo che ti ho indicato.

            • Max il 9 Agosto 2015 alle 11:23

            Ciao Mauro, scusa se ci ho messo un pò a rispondere, sono incasinato con il lavoro!

            Ho deciso di ordinare elettrovalvole e i componenti elettronici che mi mancano, e di provare comunque a costruire il tutto!
            Mi chiedevo, in alternativa all’alimentare il tutto con una batteria, quanto possono essere lunghi – in linea di massima – i cavi che alimentano le valvole? Posso per esempio far partire dai relé un cavo lungo 30m fino alle valvole?

          2. Ciao Max,
            ricordati di mettere una sezione di cavo adeguata alla tensione e la distanza che desideri coprire.

            • Max il 22 Agosto 2015 alle 12:18

            Ho fatto i calcoli “teorici” considerando il consumo dei componenti, e pare che fino a 50m basti il cavetto da 1,5mm…. male che vada a me basterebbe la metà 🙂

            Ho ordinato la stessa relay shield che hai usato tu, se non ho capito male devo alimentare prima l’arduino che alimenterà lo shield e poi dare una fonte 12v allo shield per azionare i relé. Posso “sdoppiare” il cavo di un comune alimentatore 12v (ovviamente “proporzionato” ai consumi dei miei componenti) per alimentare entrambi o rischio di friggere qualcosa?

          3. Ciao Max,
            nelle foto dell’articolo, se osservi con attenzione, vedrai che io ho fatto la medesima cosa, ho sdoppiato l’alimentazione a 12v inviandola sia alla relay shield sia all’arduino, ricordati che qualora decidessi di utilizzare i 24v, arduino non può essere alimentato oltre i 20v ed io sconsiglio di superare i 12v/14v

        • Max il 25 Agosto 2015 alle 09:35
        • Rispondi

        Si in effetti anche nella lista della spesa si parla di 1 alimentatore… abbi pazienza, più “progetto” e più faccio confusione, non vedo l’ora che arrivi tutto per togliermi i dubbi 🙂

        Grazie per le dritte! Appena decido dove pubblicare il progetto posto qui un link che magari tornerà più utile di 100 commenti per i tuoi lettori

        1. Ciao Max,
          mi farebbe piacere pubblicare un articolo sul tuo progetto se vuoi.
          Solitamente non accetto link a siti generalisti, blog, social o siti di aste e vendita on-line perché col tempo cancellano gli articoli e chi trova il progetto non può più seguirlo.

            • Max il 5 Settembre 2015 alle 08:28

            Perché no Mauro, basta che mi dici con che “modalità”, cioè se vuoi pubblicare passo-passo o a fine progetto.
            Nel secondo caso non so quanto ci vorrà, perché ho deciso di aggiungere sensore di umidità del terreno, termoresistenza per la luce e, avendo ordinato la relé shield che usi qui sopra, un modulo xbee (se ci sto nel budget).
            Il piano è di arrivare a primavera con l’atmega e tutta la parte elettronica su una millefori o addirittura uno stampato – visto che ho scoperto di avere un collega che li può fare – .

            Fammi sapere, magari anche via mail…

          1. Ciao Max,
            quando avrai pronto tutto il progetto puoi inviarmi all’email info del blog, quella da cui ti arriva anche questa mia risposta, tutto il materiale per la pubblicazione dell’articolo, intendo:

            – foto
            – video
            – schemi
            – testo di presentazione dell’autore
            – testo di presentazione del progetto
            – descrizione del progetto
            – sketch

            insomma tutto quello che vuoi sia pubblicato.

          • Max il 10 Ottobre 2015 alle 15:05
          • Rispondi

          Ciao Mauro, finalmente mi sono arrivati tutti i componenti (ci è voluta una vita!!!) e sto iniziando il progetto nella pratica. Appena sarà finito ti invierò tutto!
          Ho preso la tua stessa relay shield, per caso hai avuto modo di provare qualche modulo xbee?

          1. Ciao Max,
            bene, a volte i siti fanno penare un po per procurarti il materiale, io acquisto da un sito romano e di solito in 1/2gg, se il materiale è disponibile, mi arriva tutto a casa.
            Moduli XBee trovi dei tutorial nel blog

            • Max il 15 Ottobre 2015 alle 17:50

            Anch’io ho ordinato da un sito romano, ma se mi dici così sono sicuro che non è lo stesso 🙂

            I tutorial li avevo visti, mi chiedevo se avevi provato qualcosa sulla relay shield perché io con un modulo esp8266 (in formato compatibile xbee) non ne vengo a capo!

          2. Ciao Max,
            non so se ho compreso quello che mi chiedi, tuttavia non sapevo di moduli ESP8266 in formato XBee, devono essere interssanti.
            Io ho provato dei semplici ESP8266 con arduino e devo dire che ne sono entusiasto.

    • Fabio il 17 Luglio 2015 alle 09:27
    • Rispondi

    Ciao Mauro, complimenti per l’ottimo articolo.
    Sono alle primissime armi con Arduino e anche in campo elettrico/elettronico le mie conoscenze sono limitate.
    Da profano, mi sono chiesto se fosse possibile alimentare tutto il progetto da te descritto a batterie. Se si cosa servirebbe?

    Grazie

    Ciao

    1. Ciao Fabio,
      si puoi alimentare Arduino con una batteria adeguata al tipo di tensioni e correnti dei tuoi componenti.
      Arduino puoi alimentarlo a 12v se vuoi ( max 20v ma io lo sconsiglio ) le elettrovalvole dipende da quali possiedi, di solito funzionano a 12 o 24, se devi acquistarne su robotics-3D.com hanno tutti i componenti ed anche un modello a 12v che io ho testato, chiedi loro qual’è ti sapranno consigliare.

    • Antonio il 24 Luglio 2015 alle 10:08
    • Rispondi

    Ciao Mauro.
    Innanzitutto ti faccio i complimenti per il sito, ti seguo da un pio di anni e grazie a te ho un impianto di irrigazione “Fatto da me” che cerco di migliorare di anno in anno. Ti scrivo appunto per questo progetto che volevo ampliare. Io ho una scheda Arduino 1, sulla quale è montata la shield orologio e una shield “Display LCD con 5 pulsanti” ed esternamente una relay con 8 relè (al momento ne uso 4) per controllare le elettrovalvole del mio impianto.
    Attualmente la Relay con i relè è collegata ad arduino con dei cavetti lunghi circa 10cm., volevo sapere se cera una lunghezza massima oltre la quale arduino non riesce a comunicare con la relay in oggetto.
    Questo perché vorrei mettere le varie relay che andrò a piazzare (ovviamente cambierò arduino 1 con arduino mega ) vicino alle elttrovalvole e tenere arduino in garage.

    Spero di essermi spiegato, altrimenti dimmelo che ci riprovo.

    1. Ciao Antonio,
      solitamente i relay si mettono vicino ad arduino e solo i cavi di controllo delle elettrovalvole si portano lontano, questa soluzione ha i seguenti vantaggi:

      1. il cavo dell’elettrovalvola puoi farlo sufficentemente lungo ( 10-15m ) aumentando la sezione
      2. le elettrovalvole funzionano a 12v o 24v, queste ultime in alternata, proprio per essere posizionate distanti dalla centralina
      3. l’alimentazione ( 24v ) delle elettrovalvole è in un punto centralizzato
      4. l’alimentazione è in prossimità della centralina

      Ce ne sono altri ma mi sembra che quelli elencati siano più che sufficienti .. io posizionerei i relay vicino alla centralina 🙂

        • Antonio il 24 Luglio 2015 alle 17:27
        • Rispondi

        Ciao.

        Le elettrovalvole sono da 12V e come hai detto tu sono riuscito ad alimentarle aumentando la sezione del cavo.
        Attualmente dal quadro, per le prime 4 elettrovalvole, parte un cavo lungo 15mt 5×1,5. e la sezione del cavo totale capirai che nn è piccola.
        Dato che ho un giardino enorme dovrò piazzare altre elettrovalvole in vari pozzetti ed usare per tutte cavi così grossi diventa un problema perchè mi costringe ad eseguire opere murarie per allargare i fori che dal garage portano i cavi nei pozzetti del giardino.
        Ti chiedevo questo perchè l’intenzione era di mettere direttamente le Ralay con i relè nei vari pozzetti e magari collegarli con cavo (pensavo al cavo LAN che a 8 pin) ed alimentare le elettrovalvole direttamente nei pozzetti.
        Tutti qui.

        1. Ciao Antonio,
          puoi fare un test, tuttavia potrebbe risultare malfunzionante.
          In alternativa puoi mettere un solo comune a tutte le elettrovalvole che fai passare da pozzetto a pozzetto è solo il controlli di ciascuna elettrovalvola lo porti alla centralina.
          Il mio impianto é fatto così.
          In questo modo il numero di fili si riduce di quasi la metà.

    • Marco il 2 Ottobre 2015 alle 10:43
    • Rispondi

    Salve Mauro, lle faccio i complimenti per il suo sito e la sua competenza. Le espongo il mio problema, (premetto di non conoscere minimamente Ardino e la sua programmazione) vorrei realizzare un impianto di irrigazione domotica, in quanto gia’ posseggo un impianto tradizionale, ma la centralina e’ posizionata in un luogo alquanto scomoda. Il mio impianto e’ composto da 4 zone ed elettrovalvole Toro da 24volt, nel suo progetto noto l’utilizzo di quelle da 12 volt, come posso ovviare al problema? Inoltre, mi piacerebbe poter interfacciare la centralina in remoto, in modo di poterla regolare in qualsiasi luogo… Forse le chiedo troppo. Mi può aiutare? Grazie

    1. Ciao Marco,
      grazie per i complimenti. Il blog è nato per esporre i progetti fattibili con arduino e aiutare, con le conoscenze, chi desidera realizzare i propri progetti. Il progetto che desideri realizzare è semplice nella parte di interfaccia con i relay seguendo anche questo progetto; più complessa è la parte di interfaccia remota che potrebbe essere realizzata in tanti modi e necessita di conoscenze di rete, protocolli e linguaggi di programmazione differenti dal solo linguaggio usato per arduino.

    • gianni il 18 Novembre 2015 alle 13:02
    • Rispondi

    intanto complimenti per i tuoi lavori…ho iniziato ora con arduino e sto cercando di creare un impianto di irrigazione simile al tuo progetto…ma quando verifico lo sketch mi da errore Arduino:
    ‘class RTC_DS1307’ has no member named ‘sqw’

    RTC.sqw(0); //0 Led off – 1 Freq 1Hz – 2 Freq 4096kHz – 3 Freq 8192kHz – 4 Freq 32768kHz

    che soluzione posso trovare?

    1. Ciao Gianni,
      se leggi nei commenti vedrai che altri hanno segnalato errori simili ed ho già risposto.

        • cristian il 5 Marzo 2016 alle 23:32
        • Rispondi

        ciao mauro,
        mi puo’ indicare dove lo trovo quel commento
        anche io ho questo problema

        1. Ciao Cristian,
          quale commento ?
          che problema riscontri?

    • Ale il 3 Febbraio 2016 alle 13:24
    • Rispondi

    Carissimo Signor Mauro, bellissimi tutorial davvero!
    Per il progetto d’esame di maturitá vorrei portare la centralina di irrigazione con sensore di temperatura e umiditá
    Solo che vorrei controllare solo un canale di irrigazione per comoditá
    Com’è possibile?

    1. Ciao Ale,
      leggendo e comprendendo lo sketch, come descritto e spiegato linea per linea, potrai apportare le modifiche che ti servono.

      Mauro

    • Andrea il 11 Febbraio 2016 alle 18:25
    • Rispondi

    Buongiorno Mauro, mi affaccio ora al mondo arduino per realizzare due progetti che mi sono a cuore, il rpimo è quello di sostituire la mia centralina di irrigazione con una nuova che oltre a gestire le elettrovalvole utilizzi anche sensori di umidità del terreno e le previsioni del tempo., ma questo lo vedrò più avanti, il mio problema è che per iniziare ho acquistato una Arduino Zero che è alimentata a 3,3V, ora la questione che mi pongo è può lavorare con la relay shiled v2 e RTC shield con DS1307 che ho acquistao come da tuo progetto?

    Grazie

    1. Ciao Andrea,
      prima di comprare è sempre bene documentarsi sui prodotti e le caratteristiche per evitare di incorrere in incauti acquisti.
      In merito all’RTC ci sono molte shield che usano i 3,3v altri sono dotati di adattatori di segnale a 5v, verifica il tuo che tipo di tensioni supporta.
      Per la relay ho qualche dubbio in più dipende da come è costruita, se usa optoisolatori potrebbe funzionare in quanto questi lavorano con tensioni per i led, al massimo dovrai modificare le resistenze di protezione dei led contenuti negli opto. Se usa dei transistor per pilotare i relay è più complesso.

    • Flavio il 3 Marzo 2016 alle 11:44
    • Rispondi

    Ciao Mauro ho iniziato da qualche mese a studiare arduino e sto iniziando a realizzare qualche progetto.
    Essendo alle prime armi, non riesco a capire perchè mi da errore della libreria “RCTlib” per caricare questo progetto.
    Mi da questo errore (ATTENZIONE: la libreria RTCZero dichiara di funzionare sulle architetture [samd] e potrebbe non essere compatibile con la tua scheda che utilizza l’architettura [avr]).

    1. Ciao Flavio,
      stai utilizzando la libreria sbagliata, lo capisci anche dal fatto che si chiama RTCZero e non RCTlib.

        • Flavio il 4 Marzo 2016 alle 17:02
        • Rispondi

        No scusami ho sbagliato a scrivere nella domanda. Comunque mi da errore sia usando la libbreria RTClib e RTCZero.

        1. Ciao Flavio ,
          che errore ti da con la RTClib?

            • Flavio il 9 Marzo 2016 alle 11:51

            QUESTO E’ IL MESSAGGIO DI ERRORE:

            Arduino:1.6.7 (Windows 8.1), Scheda:”Arduino/Genuino Uno”

            In file included from C:\Users\Flavio\Desktop\Arduino\hardware\arduino\avr\cores\arduino/WString.h:29:0,

            from C:\Users\Flavio\Desktop\Arduino\hardware\arduino\avr\cores\arduino/Print.h:26,

            from C:\Users\Flavio\Desktop\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26,

            from C:\Users\Flavio\Desktop\Arduino\hardware\arduino\avr\libraries\Wire/Wire.h:26,

            from C:\Users\Flavio\Documents\Arduino\libraries\RTClib\RTClib.cpp:4:

            C:\Users\Flavio\Documents\Arduino\libraries\RTClib\RTClib.cpp:17:31: error: variable ‘daysInMonth’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’

            static uint8_t daysInMonth [] PROGMEM = { 31,28,31,30,31,30,31,31,30,31,30,31 };

            ^

            Più di una libreria trovata per “RTClib.h”
            Usata: C:\Users\Flavio\Documents\Arduino\libraries\RTClib
            Non usata: C:\Users\Flavio\Documents\Arduino\libraries\arduino_913704
            exit status 1
            Errore durante la compilazione

            Questo report potrebbe essere più ricco di informazioni con
            “Mostra un output dettagliato durante la compilazione”
            abilitato in “File > Impostazioni”

    • Massimiliano il 27 Luglio 2016 alle 14:27
    • Rispondi

    tempo fa ho utilizzato questo sketch per adattarlo ad una mia esigenza, ha sempre funzionato un modo eccellente… (windows XP e IDE1.1)… ho dovuto sostituire Arduino UNO per un guasto, e mi sono trovato a compilare lo sketch con windows 8 e IDE 1.6, ma purtroppo mi da degli errori come se fossero cambiati i percorsi delle librerie o non so cosa…
    reinstallando IDE1.1 ho risolto, mi sapete dire cosa devo modificare per poter utilizzare IDE1.6…
    Grazie

    1. Ciao Massimiliano,
      mi indichi che errori ricevi ? Senza conoscerli é impossibile aiutarti.

        • Massimiliano il 31 Luglio 2016 alle 20:04
        • Rispondi

        cia Mauro
        non so come mai ho problemi anche a rispondere nei commenti… detto questo il problema descritto sopra l’ho aggirato installando IDE.1.0, adesso ho problemi con la modifica che vorrei fare…
        riferendomi al tuo Sketch, se volessi far accendere due volte in fasce orarie diverse il settore1 come si fa ?
        mi puoi aiutare ?
        ho fatto tanti tentavi ma senza successo…
        la prima cosa che mi è venuta in mente è stata quella di rinominare cosi il settore 1

        int settore1A[] = {15,40,15,41};
        int settore1B[] = {15,42,15,42};
        successivamente inserirli nel loop

        if ( settore1A[0] <= _hour && _hour <= settore1A[2] && settore1A[1] <= _minute && _minute <= settore1A[3] ) {
        digitalWrite( pinSettore1,HIGH );
        } else {

        if ( settore1B[0] <= _hour && _hour <= settore1B[2] && settore1A[1] <= _minute && _minute <= settore1B[3] ) {
        digitalWrite( pinSettore1,HIGH );
        } else { digitalWrite( pinSettore1,LOW ); }

        Appena possibile reinstallo IDE1.6 e vedo se con il tuo prezioso aiuto riusciamo a capire dove è il problema…
        grazie

        1. Ciao Massimiliano,
          in merito ai commenti mi dici che browser e sistema operativo stai usando ? Cercherò di approfondire se c’è qualche anomalia che posso risolvere per agevolarti l’uso del blog. Posso dirti con certezza che ogni tuo commento mi arriva come nuovo e da approvare e che di solito questo è causato da cambi di nome o di email tra un commento ed il successivo.

          In merito al dubbio che mi hai scritto la soluzione mi sembra buona, puoi esterne DR un array tipo:

          settore1 = {15,40,15,41,16,30,16,40}

          O dividere l’area come hai fatto tu. La cosa importante é come lo gestisci nelle fasi di accensione e spegnimento.

            • Massimiliano il 22 Agosto 2016 alle 14:41

            Grazie Mauro…
            appena rimetto mano al progetto provo la soluzione che mi hai dato che mi sembra molto più semplice della strada da me intrapresa… per quanto riguarda i problemi con i commenti adesso sembrano risolti… comunque uso un PC portatile con windows 7 con crome ed Explorer; ed un fisso con windows 8 con crome ed Explorer… i9n questo momento visualizzo tutto correttamente…
            grazie di nuovo….

          1. Ciao Massimiliano,
            grazie per il feedback

    • Massimiliano il 21 Ottobre 2016 alle 07:54
    • Rispondi

    ciao Mauro,
    non smetterò mai di farti i complimenti per questo progetto, come ti avevo già detto , nei ritagli di tempo, lo sto adattando sempre di più alle mie esigenze… mi sono trovato di fronte ad un altro problema… se volessi identificare il numero del giorno (da 1 a 7 ), come posso fare ?
    void ReadDateTime(){
    Wire.beginTransmission(0x68);
    Wire.write(0);
    Wire.endTransmission();
    Wire.requestFrom(0x68, 7);
    day = Wire.read();
    ho provato con questa soluzione che sembri funzionare su altri progetti, ma non è il mio caso…
    Saluti
    Massimiliano

    1. Ciao Massimo,
      so che alcuni moduli RTC possiedono questa informazione, ed in passato u appassionato lo ho descritto in un commento ai miei articoli, si tratta di una info memorizzata in una posizione di dato dell’RTC stesso.
      Per recuperarla puoi cercare una libreria RTC che supporti il recupero di questa informazione o modificare la libreria RTClib che stai utilizzando

        • Massimiliano il 28 Ottobre 2016 alle 11:24
        • Rispondi

        Ciao Mauro
        ho controllato nella libreria che sto utilizzando… era già tutto predisposto…
        dayOfWeek ….
        quindi
        int Day = now.dayOfWeek();
        ecc… ecc….
        Grazie della dritta….

        1. Ottimo Massimiliano.

    • Michi il 18 Novembre 2016 alle 17:53
    • Rispondi

    ciao mauro sto realizzando lo stesso progetto su arduino mega, l’unico problema che incontro è nel sostituire DS3107 con i DS3231… potresti perfavore dirmi su quali righe devo intervenire? (non mi indendo di C/C++) so programmare solo in Java (abbastanza) ma con questo linguaggio capisco davvero poco, ti chiedo di essere il piu esaustio possibile.
    Grazie mille

    1. Ciao Michi,
      nel blog trovi alcuni articoli dedicati al DS3231, puoi verificare quali comandi modificare leggendo la spiegazione delle singole righe che trovi sia in questo articolo sia in quelli dedicati al DS3231.

    • Marco il 1 Gennaio 2017 alle 17:16
    • Rispondi

    Ciao Mauro,
    prima di tutto volevo dire che questo blog è stupendo, essendo un neofita ho imparato molte cose qui 🙂
    adesso stavo provando a adattare il progetto al DS3231, ho messo dei led apposto dei relè (dovrebbe essere uguale) il problema è che compilando non mi da nessun errore, però non fa quello che deve cioè accendere i led 🙁

    non so se posso postare il codice
    grazie in anticipo

    1. Ciao Marco,
      no il codice non è consentito postarlo, come hai letto in fondo ad ogni articolo.
      Procedi con il debug punto per punto per cercare l’errore è certamente un errore logico e non sintattico per questo l’IDE non te lo segnala.

        • Marco il 2 Gennaio 2017 alle 14:22
        • Rispondi

        grazie Mauro,
        ho risolto la centralina funziona perfettamente !! 🙂

        1. Bene Marco, sono contento.

    • Federico il 23 Gennaio 2017 alle 23:03
    • Rispondi

    Salve, c’é un modo per far partire il relè anche se accendo la centralina dopo l’orario di partenza che avevo impostato? Cioe, se programmo dalle 7:00 alle 17:00 ma collego arduino all’alimentazione ad esempio alle 9:00, arduino non fará azionare il relè. Non c’è un modo che questo avvenga? Grazie mille

    1. Ciao Federico,
      per ottenere ciò che desideri devi essere certo che l’RTC mantenga l’orario anche senza alimentazione. Poi devi imporre la selezione del l’orario come intervallo e non in modo univoco e preciso. Non un == ma un < = e >=

        • Federico il 25 Gennaio 2017 alle 20:54
        • Rispondi

        Ciao Mauro, grazie per la risposta. Si l’RTC ha una button battery ricaricabile quindi non dovrebbero esserci problemi. Però nello sketch che hai compilato è già stato inserito il valore <= nel condizionale if del settore ma nonostante non riesco a farlo partire… non riesco a venirne a capo.
        Grazie comunque sei molto gentile!

        1. Ciao Federico,
          ho riguardato adesso lo sketch, quando ti ho risposto ero impossibilitato a farlo, e dovrebbe già funzionare in questo modo. A meno che tu non abbia modificato qualcosa nello sketch e cambiato la logica di azione dei relay

        • Federico il 25 Gennaio 2017 alle 22:13
        • Rispondi

        ho risolto! Comunque grazie, sei stato di aiuto. Un saluto!

        1. Bene, sono contento.
          Curiosità cos’era? magari ad altri potrebbe essere utile.

            • Federico il 26 Gennaio 2017 alle 18:00

            ho aggiunto alcune stringhe nello sketch per altri sensori e led che monitorano l’acqua nella tanica con la pompa ma senza aggiungere un commento a lato, quindi sono andato in confusione e ho modificato stringhe che non centravano nulla. Ora ho fatto un po di ordine ma nonostante tutto non capisco perchè a volte funziona e altre no. L’orologio da sempre l’ora giusta quindi non è lui ad interferire sul malfunzionamento. Ieri partiva tutto regolarmente, oggi no. La cosa mi sta dando sui nervi. Poi non capisco perchè i relè si aziona in partenza quando il comando del setup è impostato su tutti come LOW. I collegamenti sono in ordine VCC, GND e PINs…

          1. Ciao Federico,
            sull’ordine mentale dello sketch da te modificato posso dirti poco o nulla.
            Sulla partenza dei relay in fase di start potrebbe dipendere da:
            1. qualche controllo da parte del bootloader prima della funzione setup(), devi verificare se quando scatta il relay è già stato chiamato il setup() oppure no.
            2. subito dopo il setup() che di solito dura pochi millesimi di secondi, si avvia la loop() e se il relay resta acceso potrebbe non dipendere dal setup() ma da qualche condizione che hai aggiounto nella loop().

            Ti consiglio di leggere sempre bene le descrizioni dei miei sketch e di comprenderli line a per linea prima di apportare delle modifiche, sopratutto su progetti complessi come la centralina di irrigazione che coinvolge più scenari e possibilità di modifica.
            Mi fa piacere che tu stia sperimentando e modificando il mio codice, sia chiaro, cerco solo di darti delle dritte perché tu possa farlo consapevolmente e non perda la voglia di sperimentare.

            • Federico il 28 Gennaio 2017 alle 19:26

            Ciao Mauro! Ho capito dov’è il problema. In pratica se imposti l’orario di fine con i minuti inferiore all’orario reale, arduino non farà partire il relè. Ad esempio: se imposti int settore1[] = {16,48,17,40}; ma l’orario reale è 16:50, arduino rivela che i minuti dell’orario reale sono maggiori dei minuti dell’orario di inizio e fine, quindi non farà azionare il relè.
            ecco spiegato perchè a volte funzionava ed altre no!
            Quindi per dare ad arduino le giuste partenze per ogni orario impostato, ho modificato lo sketch dei settori con un if else cambiando i valori di maggioranza e minoranza così:

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

          2. Ciao Federico,
            perdonami ma non ho compreso la tua modifica e non riesco a trovare come questa modifichi il funzionamento nel caso da te proposto.
            Ho provato a sostituire i valori per capire:

            if ( 16 <= 16 && 16 <= 17 && 48 <= 50 && 50 <= 40 ) { .. }
            else if ( 16 <= 16 && 16 <= 17 && 48 == 40 ) { .. }
            else { .. }

            Ho sostituito = con == nell'else if in quanto penso si tratti di un errore di copia e incolla.
            Un errore concettuale lo vedo, nel mio codice, e va corretto, riguarda la correlazione tra ora e minuti di start e di end in una condizione scritta senza sotto condizioni.
            Ragionerò su una soluzione che possa risolvere il problema che mi hai sottoposto e cercherò di pubblicare un articolo aggiornato.

            • Federico il 30 Gennaio 2017 alle 20:29

            ciao Mauro,
            no, ho sbagliato a copiare la mia sequenza. Scusa ma scrivo con un telefonino e a volte sbaglio.

            In pratica tutto dipende dagli orari che ti servono. Non sono riuscito a trovare un unica soluzione per qualsiasi orario. Nel mio caso mi serviva il primo settore dalle 7.00 alle 18.59 cosi ho programmato in questo modo:

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

            In questo modo funziona perfettamente! Testato e approvato… 🙂

          3. Perdonami Federico,
            gli “=” che vedo sono dei singoli “=” o dei “==” che nel copia e incolla si sono trasformati.
            Purtroppo nei commenti è difficile vedere bene il codice per questo una regola del blog è di non incollare codice nei commenti.

    • Andrea il 26 Gennaio 2017 alle 17:29
    • Rispondi

    Salve, quando compilo il tuo sketch senza modificare nulla mi da quest errore :

    error: variable ‘daysInMonth’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’

    cosa può essere

    1. Ciao Andrea,
      stai utilizzando una libreria che non supporta tutti i metodi usati da questo sketch; puoi:
      – cerchi una libreria RTC con tutti i metodi richiesti;
      – elimini i metodi, se superflui, dallo sketch;
      – integri nella tua libreria lo sviluppo del metodo che ti manca.

        • Andrea il 30 Gennaio 2017 alle 16:42
        • Rispondi

        E se invece volessi fare questo progetto con il modulo rtc DS3231 cosa dovrei cambiare? Grazie

        1. Ciao Andrea,
          solo la parte relativa alla libreria ed ai metodi necessari per interrogare il nuovo RTC3231.
          Ho dedicato un articolo all’RTC3231 da cui puoi prendere spunto.

            • Andrea il 2 Febbraio 2017 alle 11:32

            Grazie, quindi dovrei cambiare la riga 25? e oltre a quella anche la libreria è diversa?

          1. Ciao Andrea,
            probabilmente anche i metodi delle due librerie non sono identici al 100% e dovrai adattarli.

    • Federico il 28 Gennaio 2017 alle 01:24
    • Rispondi

    Grazie Mauro, i tuoi suggerimenti sono d’oro.

    • Federico il 28 Gennaio 2017 alle 01:27
    • Rispondi

    Ho avuto anch’io questo problema e l’ho risolto disinstallando tutte le librerie RTC che avevo ad eccezione di RTClib

    • Ganluca il 30 Gennaio 2017 alle 18:52
    • Rispondi

    ciao,complimenti per il progetto.
    Insieme ad un mio amico abbiamo iniziato ad appassionarci ad arduino e vorremmo fare un progetto nostro,una mini diga che ,tramite sensori,si svuota e si riempie con una pompa.
    Il problema é che il programma inizia giá a farsi piú complicato di quelli giá fatti visto che non abbiamo mai utilizzato un elettrovalvola infatti; é su quest’ultima che vorremmo chiedere delucidazioni.
    Che modello di elettrovalvola é e come la “comando” nel programma?
    Grazie comunque per il disturbo.

    1. Ciao Gianluca,
      l’elettrovalvola è di tipo comune a 12v, su come comandarla lo trovi descritto nello sketch linea per linea.
      Se qualche linea non ti fosse chiara puoi indicarmela nei commenti ed io cercherò di chiarirtela.

    • Federico il 30 Gennaio 2017 alle 20:39
    • Rispondi

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

      • Federico il 30 Gennaio 2017 alle 20:48
      • Rispondi

      Mauro scusa ma quando invio lo sketch si modifica, non so so perchè…

      in pratica ho solo aggiunto un >= tra settore1[1] e minute

      1. Ciao Federico,
        come scritto in fondo ad ogni articolo è vietato incollare codice nei commenti. Il motivo è il problema che hai incontrato.
        Ad oggi non ho trovato una soluzione ed ho dovuto vietarne la possibilità.

        Ciò che non mi torna nei tuoi esempi è il valore “=” nell’else if.

    1. Perdonami Federico,
      gli “=” che vedo sono dei singoli “=” o dei “==” che nel copia e incolla si sono trasformati.
      Purtroppo nei commenti è difficile vedere bene il codice per questo una regola del blog è di non incollare codice nei commenti.

    • alberto il 5 Febbraio 2017 alle 21:17
    • Rispondi

    Ciao Mauro ,innanzitutto complimenti per il progetto e per la dedizione che metti nella tua passione
    Ho realizzato con successo il tuo progetto ,devo dire che funziona tutto alla perfezione.
    lo scopo per cui è dedicata la mia realizzazione è la somministrazione di adittivi in un acquario,e per tale scopo (dato il basso e preciso dosaggio) avrei bisogno di affinare i tempi di on-off includendo anche i secondi.
    Ho provato infinite volte a modificare lo skech, ma essendo neofita non ho ottenuto nessun risultato…
    volevo chiederti gentilmente se puoi darmi qualche dritta in merito.

    1. Ciao Alberto,
      se vuoi poter impostare i secondi puoi aggiungere il valore dei secondi all’array settoreX[] dove la X indica il numero del settore che ti interessa e poi valutare nella fase di funzionamento anche il parametro aggiunto. Per valutare i secondi devi usare now.second()

    • cosimo dondini il 29 Marzo 2017 alle 22:21
    • Rispondi

    ciao mauro, io vorrei alimentare la nostra centralina con un pannello solare dal jack di potenza e inoltre collegare arduino con una batteria tampone che intervenga quando il pannello solare non è attivo per mancanza di sole e che si stacchi quando il pannello torni operativo.
    puoi darmi qualche consiglio ?

    1. Ciao Cosimo,
      so dell’esistenza di shield dotate di queste funzionalità.
      Una l’avevo censita io qualche anno fa, dovresti trovare un articolo cercandola come “solar shield” o simile.

    • Daniele il 10 Aprile 2017 alle 00:06
    • Rispondi

    Ciao Mauro e grazie per questo tuo impegno nel pubblicare sempre articoli interessantissimi e particolare. Sono nuovo e ho messo in pista il progetto dell’irrigazione. Intanto sul banco di lavoro funziona, fra poco lo installerò nel mio giardino. Mi piacerebbe però non fare intervenire l’irrigazione nelle giornate di pioggia.
    Ho pensato ad un pluviometro che se attivo inibisce la partenza della programmazione giornaliera. Hai già pensato ad un modifica del genere? Come posso inserire questo dettaglio?

    1. Ciao Daniele,
      puoi inserire un controllo su un pin digitale, similmente ad un pulsante, il pluviometro potrebbe dirti se partire o meno.
      Tu puoi verificare tale valore prima di eseguire il ciclo di irrigazione.

        • Daniele il 10 Aprile 2017 alle 17:55
        • Rispondi

        grazie, hai qualche dritta da consigliarmi? Magari un tuo articolo che parla nello specifico di questo argomento?

        1. Ciao Daniele,
          qualsiasi articolo in cui ci sia un pulsante letto in digitale va bene.

    • Alessandro il 18 Maggio 2017 alle 09:22
    • Rispondi

    Ciao Mauro,
    sono uno sviluppatore software che sta provando a cimentarsi con un pò di elettronica avanzata.

    Ho ripassato un pò di concetti base studiati all’università, e sto provando a realizzare il mio primo progettino, ovvero pilotare un’elettrovalvola per irrigare il mio terrazzo.

    Nello specifico, ho comprato un relè che funziona a 5VDC e un’elettrovalvola comandata con 24VAC.

    Vorrei “replicare” la tua soluzione per il mio prototipino. Sarebbe possibile condividere lo schema elettrico della tua soluzione?

    Grazie mille.

    Alessandro

    1. Ciao Alessadro,
      in questo articolo ho usato una shiedl 4 relè, lo schema è quello del produttore della shield.
      In altri articoli dedicati alle centraline trovi uno schema per collegare il relè.
      Io preferisco sempre un optoisolatore anche se vedrai che uso anche i transistor 🙂

        • Alessandro il 18 Maggio 2017 alle 12:24
        • Rispondi

        Ho provato a ricercare nel blog, ma non ho trovato nulla che fa al mio caso. Per caso mi potresti dare il link diretto (magari l’esempio con il transistor che ho sicuro nel kit per la rasberry pi :))?

        Grazie mille per l’aiuto e complimenti per i tuoi tutorial.

        Alessandro.

        1. Ciao Alessandro,
          l’ho ricercato come “elettrovalvola”, ecco il link al primo della serie di articoli dedicati a questo ambito: https://www.mauroalfieri.it/elettronica/tutorial-irrigare-con-arduino.html

    • Gabriele il 1 Giugno 2017 alle 10:38
    • Rispondi

    ciao Mauro,
    sono capitato su questo articolo perchè ero alla ricerca di idee per costruire una centralina e devo dire che l’ho trovo molto ben fatto. quindi ti espongo il mio problema, che può essere anche un suggerimento o una complicazione.
    ho l’impianto lontano da fonti di corrente e per cui devo alimentare tutto a batteria ma con questo sistema il consumo pile diventa costoso.
    ci sono in commercio elettrovalvole da 12v bistabili che si aprono con un impulso e si chiudono con un’altro impulso, di conseguenza consumano pochissimo perchè non anno bisogno di corrente per rimanere eccitate
    quindi il consumo delle batterie si limiterebbe al mantenimento della centralina.
    è fattibile come idea?
    grazie
    Gabriele

    1. Ciao Gabriele,
      se trovi delle elettrovalvole bistabili è fattibile.

        • Gabriele il 1 Giugno 2017 alle 12:54
        • Rispondi

        sono disponibili in qualsiasi fornitore che vende materiale per irrigazione “no brico” e ci sono di varie marche

        1. Ottimo Gabriele, grazie

    • vincenzo il 2 Giugno 2017 alle 21:43
    • Rispondi

    Buonasera, sono nuovo in questo ambiente e piano piano sto iniziando a capire qualche programma.
    Vorrei chiederti cosa significa questo errore e come posso risolvere, me lo porta nella riga 28:

    sketch_jun01a.ino: In function ‘void setup()’:
    sketch_jun01a:28: error: ‘class RTC_DS1307’ has no member named ‘sqw’

    Grazie mille.

    1. Ciao Vincenzo,
      alcune librerie RTC on dispongono di quel metodo “sqw” per cui puoi commentare quella linea o leggere nei commenti come altri hanno risolto.

    • Vincenzo il 12 Giugno 2017 alle 01:17
    • Rispondi

    Buonasera,
    vorrei aggiungere al progetto anche una scheda wifi così da azionare i rele oltre che all’orario prestabilito anche a mio piacimento
    Ho pensato a questa: ESP8266, secondo voi è una scelta giusta?
    fino a che distanza riuscirei a comandare i relè? io vorrei farlo a circa 25m e con due muri ti mezzo.
    per conferma, non ho bisogno di essere connesso ad internet per far funzionare il sitema , vero?
    Grazie.

    1. Ciao Vincenzo,
      la ESP8266 è molto interessante ed economica ma richiede una conoscenza di programmazione avanzata sopratutto per la programmazione di WiFi Ad-Hoc.
      E’ di certo più semplice e molto ben documentata la WiFi Shield ufficiale Arduino.

    • Vincenzo il 12 Giugno 2017 alle 15:19
    • Rispondi

    Buongiorno, grazie per la cortesia nel rispondere.
    Quella ufficiale di arduino però , l’ho solo vista in foto, per problemi di spazio e di pin occupati non posso usarla! Forse..
    Un modulo bluetooth riuscirei a comandare o a circa 20m dal dispositivo? Dovrebbe essere più semplice da introdurlo Vero??
    Con il modulo wifi fino a che distanza riuscirei a comandarlo?

      • Vincenzo il 12 Giugno 2017 alle 15:58
      • Rispondi

      Inoltre, se dovessi utilizzare il bluetooth secondo te e meglio la hc05 oppure la hc06?
      Grazie.

      1. Ciao Vincenzo,
        io preferisco l’HC-05

    1. Ciao Vincenzo,
      solitamente uso il WiFi delle shield Arduino per collegarlo ad una rete casalinga od office per cui non ho mai testato le distanze che possono essere coperte.

    • Vincenzo il 13 Giugno 2017 alle 00:48
    • Rispondi

    Buonasera, allora ho deciso:
    Domani compreró la hc05.
    Teoricamente dovrei aggiungere al programma della centralina anche quello della hc05.
    In tal modo potrei utilizzare la centralina per innaffiare la nottwè e la hc05 a mio piacimento con il cellulare, inoltre i pin per l’hc05 sono i 3.3v il GND e altri due che non sono utilizzati ne dall’LCD ne dai rele e ne dalla scheda per l’orario.
    Teoricamente dovrebbe andar bene vero?

    1. Ciao Vincenzo,
      ricorda che i segali verso l’HC-05 sono a 3,3v per cui devi ance adattare i segali con uno shift level.
      Se mi descrivi a quali pin collegherai l’hc-05 potremo dirti se vanno bene.

        • Vincenzo il 13 Giugno 2017 alle 12:14
        • Rispondi

        Grazie per la continua gentilezza.
        Allora io vorrei connEttere direttamente la sc05, visto che è la tua preferita suppongo sia la migliore, ai 3.3v di arduino ed al gnd.
        Poi per lo scambio dei dati sull’arduino la collegherà l tx è all’rx.
        Ho scelto questa predisposizione perché ho letto qualche tutorial.
        Comunque se non è corretto ti prego di dirmi la giusta procedura dei pin.
        Ti ricordo cHe il mio fine è quello di attivare le 4 stazioni tramite cellulare a mio piacimento oltre che farle accende ad un orario prestabilito.
        Grazie

        1. Ciao Vincenzo,
          i collegamenti possono essere giusti, ricorda lo shift level.
          Per capire a cosa serve e come collegarlo puoi consultare i siti dei produttori ed i loro datasheet.

    • fab il 14 Giugno 2017 alle 11:55
    • Rispondi

    vedi che la logica non funziona , se metti dalla 12 00 alle 13 00 e sono le 11 30 non si verifica la condizone

    1. Giusto Fabrizio.
      devi attendere le 12.00 almeno.

    • Diego Morelli il 14 Giugno 2017 alle 14:03
    • Rispondi

    Ciao,

    Sto provando lo Sketch ma non funziona. Non c’è cambio di stato se l’inizio e la fine di un settore di irrigazione sono a cavallo tra un’ora e un’altra. Mi spiego meglio, inizio 20:30 fine 20:40 ok, funziona ma se inizio 20:30 e fine 21:10 non va. Questo perchè i minuti dell’ora corrente sono fuori dall’intervallo dei minuti impostati, cioè 30 e 10 perchè la formula non considera il passaggio dalle 20 alle 21.

    Sto provando a cercare una soluzione ma per ora nulla.

    1. Ciao Diego,
      funzionerebbe se tu avessi come intervallo 20:10-21:30 ma solo per 20 minuti ogni ora 🙂
      Dovrai correlare le ore ed i minuti di start e di end e confrontarli singolarmente e non per intervalli.

    • Diego Morelli il 14 Giugno 2017 alle 15:19
    • Rispondi

    Penso di aver trovato una soluzione valida se potrebbe interessare.

    l’espressione dell’intervallo del settore diventa:

    int settore1[] = {2000,2040}; //partenza 20:00 fine 20:40
    int settore2[] = {541,620}; //in caso di partenza alle 5:00 e fine alle 6:20

    Poi aggiungo:

    int _now = now.Hour*100 + now.Minute;

    E la funzione diventa:

    if ((settore1[0] <= _now && _now < settore[1])
    {
    digitalWrite( pinSettore1,HIGH); }
    else { digitalWrite( pinSettore1,LOW ); }

    Non sono un esperto e probabilmente ci sono degli errori ma per ora a me sembra funzionare.

    1. Ciao Diego,
      la soluzione è valida anche se concettualmente migliorabile.
      Ho già pronta una soluzione che a breve pubblicherò sull’argomento 🙂
      Ti do una anticipazione come riconoscimento per la tua condivisione e passione puoi convertire in minuti le ore e sommarci i secondi, in questo modo hai un funzionamento dalle 00:01 alle 23:59 senza problemi 🙂

        • Diego Morelli il 7 Luglio 2017 alle 09:44
        • Rispondi

        Grazie per l’anticipazione, resto in attesa della soluzione. Ti informo che la centralina è attiva da tre settimane, alimenta 5 linee separate per tre cicli completi al giorno e funziona egregiamente. Tutto con una sola elettrovalvola che alimenta un commutatore idromeccanico.

        1. Ottimo Diego

    • vincenzo il 29 Giugno 2017 alle 15:13
    • Rispondi

    Buongiorno,
    vorrei fare 2 domande, magari qualcuno ha gia avuto esperienze a riguardo:
    1) Posso alimentare con lo stesso alimentatore (12v) Arduino, una elettrovalvola che resterà aperta circa 1h al giorno ed una ventola?
    2)se chiudo in una scatola tutto l’insieme della centralina, in più ho messo un lcd, in estate secondo me arriva circa a 40-45 °C, rischio di bruciare qualcosa?la ventola sopracitata serve a raffreddare un pò i vari componenti.
    Grazie!!!!

    1. Ciao Vincenzo,
      alla prima domanda: si puoi, devi calcolare l’assorbimento totale per dimensionare correttamente il tutto.
      Sulla temperatura consiglierei di non inserire tutto nella medesima scatola, tanto più che se ci metti la ventola dovrai bucarla annullando l’effetto ermetico per esterno, mantieni separato l’alimentatore ( l’unico che dovrebbe scaldare in modo significativo ) dal resto della centralina

    • leonardo il 15 Luglio 2017 alle 13:48
    • Rispondi

    salve, sto cercando di modificare questo sketch per bagnare il prato a giorni alterni, e fino a qui tutto funziona regolarmente.
    volevo aggiungere il sensore di umidita, in caso che piovesse o se il terreno fosse troppo umido, non parte l’irrigazione.

    if ((settore1[0] <= RTC.hour) && (RTC.hour <= settore1[2]) && (settore1[1] <= RTC.minute) && (RTC.minute <= settore1[3]) && (UMID <= soglia_critica) && (RTC.dow == 1) || (RTC.dow == 3) || (RTC.dow == 5) || (RTC.dow == 0))

    a logica dovrebbe funzionare, invece testandolo sia se il sensore è fuori dall'acqua o immerso nell'acqua non ho l'apertura e la chiusura dell'elettrovalvola

    1. Ciao Leonardo,
      controlla con il monitor seriale che UMID abbia un valore inferiore alla soglia_critica correttamente letto.
      La logica che applicherei al sensore dovrebbe essere precedente agli altri controlli: se il sensore rileva terreno umido evita di eseguire il ciclo di irrigazione

    • Andrea il 12 Agosto 2017 alle 12:20
    • Rispondi

    Ciao Mauro sto realizzando una centralina irrigazione e volevo integrare anche una funzione per staccare la pompa nel caso in cui finisse l’acqua della cisterna, ho un rain sensor che fornisce uscita analogica o digitale, come dovrei fare per dire ad arduino di non far partire la pompa all’orario scelto se il sensore non vede più acqua?

    1. Ciao Andrea,
      puoi mettere un controllo a monte del loop che evita di proseguire se legge un valore digitale HIGH, o LOW, in funzione del tipo di uscita del sensore.
      Se non ricordo male qualche altro utente ha inserito nei commenti la modifica eseguita per un caso simile.
      Mauro

    • Raffaele il 28 Dicembre 2017 alle 19:38
    • Rispondi

    Ciao Mauro
    Ho utilizzati parte del tuo sketch per realizzare una centralina di comando, purtroppo per quello che devo fare utilizzando il tuo programma ho delle difficoltà, mi spiego meglio; se utilizzo il tuo programma e regolo il timer dell’ OFF impostando l’ orario il giorno dopo, ovviamente il programma si impalla dato che vede il valore dell’ ora dell’ OFF inferiore rispetto l’ora dell’ ON esempio: ON H 12 M 00 e OFF H 08 M 00, mi potresti dare una dritta per risolvere il problema?
    Grazie

    1. Ciao Raffaele,
      è un comportamento previsto, mi sembra di averlo scritto come limite del progetto.
      Puoi aggiungere il riconoscimento del giorno in modo che lo sketch sappia che il momento di ON è precedente al momento di OFF

    • Edoardo il 21 Gennaio 2018 alle 08:03
    • Rispondi

    Ciao. Inanzitutto bel progetto, ma io volevo chiederti se invece dei relè si potevano mettere dei servomotori per aprire direttamente una fontana.

    1. Ciao Edoardo,
      tecnicamente si può fare, dovrai modificare lo sketch per adattarlo alle tue esigenze.
      Sappi che di solito non si usano i rubinetti per molte difficoltà tra cui:
      1. troppe parti meccaniche in gioco;
      2. accoppiamneto dei servo ai differenti rubinetti;
      3. difficoltà a conoscere se il rubinetto è aperto o chiuso senza sensori aggiuntivi;

      Sono solo i primi che mi sono venuti in mente. Si preferisce usare delle elettrovalvole che sono studiate per questo lavoro.

    • Melo il 27 Febbraio 2018 alle 20:02
    • Rispondi

    class RTC_DS1307’ has no member named ‘sqw’

    RTC.sqw(0); //0 Led off – 1 Freq 1Hz – 2 Freq 4096kHz – 3 Freq 8192kHz – 4 Freq 32768kHz

    Problema a quanto vedo piuttosto comune, qualcuno mi può indicare la libreria giusta?
    O come poter fare?
    Ho provato a scorrere i commenti ma non trovo nulla

    Grazie

    1. Ciao Melo,
      nel tempo la libreria che utilizzavo è stata modificata, probabilmente, e non supporta più il metodo sqw(), puoi commentarlo se non ti serve e compilare senza.
      Nelle mie spiegazioni c’è scritto a cosa serve, magari non in questo articolo ma in altri dedicati all’RTC lo trovi.

    • Davidec il 25 Marzo 2018 alle 22:37
    • Rispondi

    Ciao Mauro un paio di giorni fa ho guardato il tuo progetto e mi è piaciuto molto; volevo traformare il mio orto del balcone in qualcosa di più smart, ho tirato su un paio di idee ma la domanda che ti volevo fare era questa, dato che mi servirebbe una pompa a 12V per irrigare tutte le piante ho pensato di collegarla ad un modulo relay a 12V ma non trovo niente, ti chiedo aiuto

    1. Ciao Davidec,
      non hai trovato un modulo relay per arduino ? Hai provato a cercare nel catalogo di Robotics-3d.com ?

    • Michele il 23 Giugno 2018 alle 11:01
    • Rispondi

    Ciao Mauro, e complimenti per questa ottima guida. Anche se non mi occorre una centrale di irrigazione, trovo che sia comunque istruttivo capire come funziona e il codice che hai adottato. A tal proposito volevo chiederti aiuto circa l’impostazione di partenza dei pin di Arduino allo stato LOW. hai scritto infatti: “linee 45-48: imposta a LOW tutti i pin connessi ai relay, questo per evitare che in partenza vi siano settori che erogano acqua”, e sei stato chiarissimo, ora la mia domanda è: posso adottare questa parte di codice per fare lo stesso coi pin digitali di un ESP -01? Grazie per l’eventuale risposta.

    1. Ciao Michele,
      concettualmente puoi farlo anche se l’ESP8266-01 mi sembra che non possieda 4 GPIO ma solo 2.

    • Alberto il 20 Agosto 2018 alle 18:41
    • Rispondi

    Ciao Mauro, come mai compilando il tuo sketch arduino lavoro al contrario? Cioè parte cn il settore acceso e all orario di accensione si spegne per poi accendersi all orario di spegnimento.

    1. Ciao Alberto,
      hai la mia stessa scheda relé ?
      Te lo chiedo in quanto alcune shield relè lavorano con segnali inversi, eccitano i relay con valore 0 ( LOW ) e li diseccitano con valore 1 ( HIGH )

    • Gaetano il 15 Ottobre 2018 alle 14:24
    • Rispondi

    Ciao Mauro mi chiamo Gaetano e la prima volta che ti scrivo sono un appassionato di elettronica mi serve qualche diritta, in tutto questo complimenti per tuo lavoro.
    Vengo al punto devo costruire un alba e tramonto però devo impostare gli orari di accensione e spegnimento avendo sempre un arco di 8 ore in totale, impostazioni di accensione e spegnimento devono essere programmabile da display.
    Attualmente sto usando un timer luci se hai presente quello che si spostano le linguette di plastica verso destra o sinistra in fase di accensione da alimentazione arduino e parte alba e dura per 8 ore ciclo completo similmente su timer tengo 8 ore di lavoro
    il mio scopo e che voglio fare tutto con arduino grazie in anticipo aspetto una tua risposta

    1. Ciao Gaetano,
      hai provato a leggere il mio tutorial sulla centralina Alba e Tramonto con Arduino?
      Ho anche indicato come calcolare i tempi di accensione e durata delle singole fasi per adattarle alle esigenze del tuo presepio o progetto.

    • Leonardo il 11 Maggio 2019 alle 17:21
    • Rispondi

    Ciao a tutti!
    Bellissimo articolo che mi ha dato ispirazione (complimenti a sig. Mauro e tutti i commentatori che arricchiscono l’informazione e la sua divulgazione).
    Ho un quesito da porvi: leggendo quest’articolo mi è saltata in mente l’idea di trasformare l’impianto in questione da “irrigazione” ad “abbeveratoio”, ovvero;
    Ci sono:
    1) 3 pollai (3 recinti diversi)
    2) 1 abbeveratoio a serbatoio per ogni pollaio
    3) attualmente una persona (io) che tutti i giorni deve riempire a sbattimento gli abbeveratoi.

    L’idea era di risparmiare del tempo facendomi un mini impianto come questo quì sopra (Arduino, etc…).
    L’idea mia di impianto, per ora, è:
    – Pannello solare (se manca la corrente non muoiono di sete le galline)
    …collegato a…
    – Batteria recuperata (camion, auto, etc…)
    …che alimenta…
    – Arduino
    …il quale comanda…
    – Elettrovalvola
    …che apre o chiude il flusso dell’acqua attraverso…
    – Tubo di gomma / plastica
    …che porta l’acqua negli…
    – Abbeveratoi
    …che mandano un segnale ad Arduino se aprire o chiudere il flusso d’acqua tramite…
    – Interruttori a galleggiante

    Il punto è se sapreste dirmi (visto che conoscete più di me Arduino):

    1) quali moduli comprare per questo mini impianto
    2) Se basta un solo Arduino per 3 pollai o mi tocca fare 3 mini impianti

    Ed eventuali consigli in più, marginali che siano, ma non meno importanti.
    Grazie a tutti e spero che già ponendo questo quesito posso aver arricchito la community!
    A presto!

    1. Ciao Leonardo,
      grazie per i complimenti e per la tua voglia di condividere le idee come questa.
      Cerco di rispondere ai quesiti in fondo:
      1) quali moduli comprare per questo mini impianto: sicuramente i galleggianti e le elettrovalvole con una scheda a 3/4 relay.
      2) Se basta un solo Arduino per 3 pollai o mi tocca fare 3 mini impianti: dieri che con un o solo dovresti riuscire

      Terrei separata la problematica della carica della batteria e pannello solare che gestirei con un sistema professionale di controllo di carica.

      Infine, per parlare fuori dal coro, ti suggerirei, al posto di Arduino/pannelli/elettrovalvole/ecc mettere solo un impianto con galleggiante connesso alle tubature.
      Un sistema meccanico simile a quello dello sciacquone del bagno che apra e chiuda l’acqua al bisogno.

    • Mattia il 24 Novembre 2019 alle 18:14
    • Rispondi

    Salve sono alle prime armi e ho trovato il suo progetto veramente interessante.
    Lo vorrei sfruttare per andare a gestire dei relè, ma ho un problema se io volessi comandare la stessa uscita più volte in un giorno come posso fare??
    Grazie mille in anticipo

    1. Ciao Mattia,
      la medesima domanda è stata risolta, se non ricordo male da uno dei commenti a questo articolo od ad uno simile.
      Hai provato a leggere se qualcuno abbia già pubblicato la soluzione ?

  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

Il tuo indirizzo email non sarà pubblicato.

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