Ieri la giornata di sole e caldo primaverile in Lombardia mi ha ispirato a terminare e testare la prima versione della 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:
la RTC shield per definire l’orario a cui far partire l’impianto:
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
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:
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 !!!
233 commenti
2 ping
Vai al modulo dei commenti
Dove posso trovare la shield rtc?
Autore
Ciao Daniele,
io l’ho acquistata da robot-domestici.
Mauro
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
Autore
Ciao Ludovico,
leggi i commenti sotto linea per linea, dopo averli compresi, ti sarà semplice eliminare i settori in più.
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?
Autore
Ciao Melo,
certo tutto è possibile con un po’ di buona pratica e conoscenza.
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
Autore
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
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
Autore
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
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!
Autore
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
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!
Autore
Ciao Alessandro,
ti ringrazio.
Interessante l’idea di controllo remoto magari per controllare i cicli di funzionamento ed i parametri.
Mauro
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.
Autore
Ciao Giuseppe,
il link non si apre 🙂
Mauro
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
Autore
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
ciao Mauro,
come mai consigli questa configurazione? che controindicazione ci sono?
grazie
Francesco
Autore
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.
chiarissimo come al solito! 🙂
grazie!!
Grazie Mauro!
Usate un logo Siemens pratico e veloce
Autore
Ciao Mario,
a cosa ti riferisci?
Mauro
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
Autore
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
forse questa fa al caso mio…
http://www.ebay.it/itm/8-Channels-5V-Relay-Module-Shield-for-Arduino-ARM-PIC-AVR-DSP-UK-SELLER-A-412-/221011536341?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item33755069d5
Autore
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
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
Autore
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
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
Autore
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
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
Autore
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
ciao mauro
ma se io volessi irrigare 2 volte lo stesso settore nell’arco di 24 ore come faccio ?
Autore
Ciao nicholas, aggiungi altri controlli di tipo if() facendo attenzione a non sovrapporre gli orari.
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 ?
Autore
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.
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
Autore
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.
ho fatto proprio cosi ma nulla la prima volta che utilizzo un relè che verrà riutilizzato non scatta
Autore
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.
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
Autore
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é.
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
Autore
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.
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à.
Autore
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 🙂
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
Autore
Ciao Massimo,
non conosco elettrovalvole funzionanti a 5v, in ogni caso avrai bisogno dei relè per evitare di compromettere il funzionamento di arduino.
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
Autore
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.
grande mauro! sono un … che non ci ho fatto caso 😀
Autore
Ciao Omar, sono qui anche per questo 🙂
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.
Autore
Ciao Paolo,
lascio il tuo commento attivo anche se non trovo nella cronologia l’Omar a cui chiedi di darti aiuto.
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
Autore
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.
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
Autore
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 🙂
Vorrei chiederti cosa cambiare se volessi usare un RTC DS1302.
Oltretutto ho dei relè da poter crearmi una shield come potrei fare?
Autore
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
Ho un modulo rtc con ds1302 potrebbe andare bene lo stesso?
Autore
Ciao Michele,
penso di averti già risposto quando hai scritto da un’altro indirizzo email.
Leggi nei commenti sopra.
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
Autore
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.
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
Autore
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.
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
Autore
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.
Ciao Mauro,
c’è un modo per impostare più precisamente e direttamente l’ora?
Autore
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.
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.
Autore
Ciao Davide,
non comprendo la domanda. Cosa intendi per link?
Ciao Mauro, intendevo dire, potresti darmi un riferimento per questo programma?
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
Autore
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.
Ti ringrazio della risposta, è stata molto utile.
Farò delle prove per trovare il miglior compromesso
buona giornata
Ciao
Davide
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
Autore
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.
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
Autore
Ottimo Attilio,
è proprio in questo modo che ho progettato la centralina, hai trovato il modo corretto per utilizzarla.
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
Autore
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.
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?
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
Autore
Ciao Filippo,
tra i commenti troverai il medesimo errore e la soluzione !!!
Salve, grazie per la risposta ma nonostante quest’ultima non riesco a capire l’errore… potrebbe specificare?
Grazie per la sua pazienza
Autore
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
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!
Autore
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.
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
Autore
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.
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!
Autore
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.
Autore
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.
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!!
Autore
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.
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?
Autore
Ciao Max,
ricordati di mettere una sezione di cavo adeguata alla tensione e la distanza che desideri coprire.
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?
Autore
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
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
Autore
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.
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…
Autore
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.
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?
Autore
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
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!
Autore
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.
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
Autore
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.
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.
Autore
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 🙂
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.
Autore
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à.
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
Autore
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.
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?
Autore
Ciao Gianni,
se leggi nei commenti vedrai che altri hanno segnalato errori simili ed ho già risposto.
ciao mauro,
mi puo’ indicare dove lo trovo quel commento
anche io ho questo problema
Autore
Ciao Cristian,
quale commento ?
che problema riscontri?
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?
Autore
Ciao Ale,
leggendo e comprendendo lo sketch, come descritto e spiegato linea per linea, potrai apportare le modifiche che ti servono.
Mauro
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
Autore
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.
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]).
Autore
Ciao Flavio,
stai utilizzando la libreria sbagliata, lo capisci anche dal fatto che si chiama RTCZero e non RCTlib.
No scusami ho sbagliato a scrivere nella domanda. Comunque mi da errore sia usando la libbreria RTClib e RTCZero.
Autore
Ciao Flavio ,
che errore ti da con la RTClib?
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”
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
Autore
Ciao Massimiliano,
mi indichi che errori ricevi ? Senza conoscerli é impossibile aiutarti.
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
Autore
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.
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….
Autore
Ciao Massimiliano,
grazie per il feedback
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
Autore
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
Ciao Mauro
ho controllato nella libreria che sto utilizzando… era già tutto predisposto…
dayOfWeek ….
quindi
int Day = now.dayOfWeek();
ecc… ecc….
Grazie della dritta….
Autore
Ottimo Massimiliano.
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
Autore
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.
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
Autore
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.
grazie Mauro,
ho risolto la centralina funziona perfettamente !! 🙂
Autore
Bene Marco, sono contento.
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
Autore
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 >=
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!
Autore
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
ho risolto! Comunque grazie, sei stato di aiuto. Un saluto!
Autore
Bene, sono contento.
Curiosità cos’era? magari ad altri potrebbe essere utile.
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…
Autore
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.
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 ); }
Autore
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.
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… 🙂
Autore
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.
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
Autore
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.
E se invece volessi fare questo progetto con il modulo rtc DS3231 cosa dovrei cambiare? Grazie
Autore
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.
Grazie, quindi dovrei cambiare la riga 25? e oltre a quella anche la libreria è diversa?
Autore
Ciao Andrea,
probabilmente anche i metodi delle due librerie non sono identici al 100% e dovrai adattarli.
Grazie Mauro, i tuoi suggerimenti sono d’oro.
Ho avuto anch’io questo problema e l’ho risolto disinstallando tutte le librerie RTC che avevo ad eccezione di RTClib
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.
Autore
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.
// 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 ); }
Mauro scusa ma quando invio lo sketch si modifica, non so so perchè…
in pratica ho solo aggiunto un >= tra settore1[1] e minute
Autore
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.
Autore
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.
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.
Autore
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()
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 ?
Autore
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.
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?
Autore
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.
grazie, hai qualche dritta da consigliarmi? Magari un tuo articolo che parla nello specifico di questo argomento?
Autore
Ciao Daniele,
qualsiasi articolo in cui ci sia un pulsante letto in digitale va bene.
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
Autore
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 🙂
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.
Autore
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
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
Autore
Ciao Gabriele,
se trovi delle elettrovalvole bistabili è fattibile.
sono disponibili in qualsiasi fornitore che vende materiale per irrigazione “no brico” e ci sono di varie marche
Autore
Ottimo Gabriele, grazie
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.
Autore
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.
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.
Autore
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.
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?
Inoltre, se dovessi utilizzare il bluetooth secondo te e meglio la hc05 oppure la hc06?
Grazie.
Autore
Ciao Vincenzo,
io preferisco l’HC-05
Autore
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.
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?
Autore
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.
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
Autore
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.
vedi che la logica non funziona , se metti dalla 12 00 alle 13 00 e sono le 11 30 non si verifica la condizone
Autore
Giusto Fabrizio.
devi attendere le 12.00 almeno.
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.
Autore
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.
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.
Autore
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 🙂
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.
Autore
Ottimo Diego
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!!!!
Autore
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
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
Autore
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
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?
Autore
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
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
Autore
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
Ciao. Inanzitutto bel progetto, ma io volevo chiederti se invece dei relè si potevano mettere dei servomotori per aprire direttamente una fontana.
Autore
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.
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
Autore
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.
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
Autore
Ciao Davidec,
non hai trovato un modulo relay per arduino ? Hai provato a cercare nel catalogo di Robotics-3d.com ?
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.
Autore
Ciao Michele,
concettualmente puoi farlo anche se l’ESP8266-01 mi sembra che non possieda 4 GPIO ma solo 2.
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.
Autore
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 )
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
Autore
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.
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!
Autore
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.
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
Autore
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 ?
[…] ha realizzato una sua personale versione della centralina di irrigazione arduino e lo ha fatto anche prima che io pubblicassi i miei […]
[…] Centralina irrigazione arduino […]