Impianto di irrigazione con Raspberry Pi: il sistema di rilevamento pioggia (terza parte)

pioggia

Eccoci arrivati alla terza parte di questa serie di post dove descrivo la realizzazione di un’impianto di irrigazione automatizzato dal un Raspberry PI.

Oggi cercherò di spiegare come ho implementato il sistema di rilevamento pioggia grazie al quale viene evitata l’irrigazione quando il terreno ha già ricevuto acqua a causa delle condizioni meteorologiche.

Per chi si è perso i precedenti due post potete recuperarli leggendo qui e qui.

Il sistema prevede due metodi di rilevazione meteorologica, tramite sensore fisico e mediante servizio online. Possono essere attivati l’uno o l’altro a nostro piacere oppure entrambi contemporaneamente.

In fase di avvio di irrigazione viene controllato se nelle 24 ore precedenti ha piovuto. Se così, viene evitata l’apertura delle elettrovalvole. Il tempo di 24 ore è solo a titolo di esempio, questo può essere variato e configurabile a piacimento.

Se invece inizia a piovere mentre è già in fase di esecuzione un processo di irrigazione, questo viene interrotto chiudendo tutte le elettrovalvole aperte.

Rilevamento tramite sensore

Per il sistema di rilevamento tramite sensore ho utilizzato questo componente venduto su RoboParts.it

Rilevatore Pioggia Raspberry Pi

Questo prevede un’alimentazione variabile da 3.3 a 5 Volts e due uscite, una digitale e l’altra analogica, che ci indicano lo stato meteorologico. E’ inoltre presente un trimmer con cui è possibile regolare la tolleranza di rilevamento.

Come si può notare nella foto qui sotto, ho collegato al pin VCC e GND rispettivamente l’alimentazione di 3.3V e la massa provenienti dal Raspberry Pi. Il pin OD (output digital) l’ho collegato in ingresso ad un porta gpio in modo da fare rilevare al raspberry la presenza di pioggia. Su questo pin viene emesso normalmente un segnale a 3.3V, in presenza di pioggia invece viene azzerato il voltaggio passando a 0V. Ne consegue quindi che la porta gpio a cui è collegato assumerà il valore 1 in assenza di pioggia e il valore 0 con pioggia.

Foto sensore pioggia

Schema sensore pioggia

Schema centralina di irrigazione (Raspberry PI)

Rilevamento senza sensore

La rilevazione meteorologica senza sensore avviene mediante l’interrogazione online di apposite api. Attualmente piGarden supporta le api di OpenWeatherMap (gratutita) e quelle di Wunderground (a pagamento).

Dopo avere scelto uno dei due servizi, dovrete recarvi sul relativo sito e registrarvi. Fatto questo potrete recuperare l’api key a voi assegnata, che vi servirà successivamente per essere inserita nel file di configurazione di piGarden.

Bene anche per questa volta ho terminato. Nel prossimo post darò alcune indicazioni sulle porte gpio utilizzate e mostrerò lo script che sta alla base del funzionamento della centralina.

Alla prossima !!!

22 pensieri su “Impianto di irrigazione con Raspberry Pi: il sistema di rilevamento pioggia (terza parte)

  1. Ciao
    anche io sto cominciando a pensare di sperimentare un impianto di irrigazione con raspberry, mi piacerebbe confrontarmi e condividere le esperienze fatte.
    Attendo tue

  2. Ciao Michelangelo fra qualche giorno dovrei pubblicare l’ultima parte di questa serie di post.
    Se vuoi confrontarti e condividere l’esperienza puoi scrivere qui senza problemi.

  3. Ciao @francesco,
    basandomi sullo schema che hai indicato ho ricostruito questa tabella contenente i collegamenti per il tuo OrangePi.
    Mettila a confronto con quella riportata sul progetto originale qui.

    Spero di avere azzeccato tutte le connessioni 🙂

    Physical | Descrizione                                     | BCM
    ---------+-------------------------------------------------+-----
    2        | 5V   - Alimentazione modulo switch 1 (MSW1 VCC) | 
    29       | IO7  - Deviatore 1 alimentazione (MSW1 IN1)     | 5
    4        | 5V   - Alimentazione modulo switch 2 (MSW2 VCC) |
    31       | IO8  - Deviatore 2 alimentazione (MSW1 IN2)     | 6
    6        | GND  - Massa modulo switch 1 (MSW1 GND)         | 
    9        | GND  - Massa sensore pioggia                    |
    32       | IO9  - Elettrovalvola 1 (MSW1 IN3)              | 12
    12       | IO1  - Elettrovalvola 4 (MSW2 IN2)              | 18
    36       | IO13 - Elettrovalvola 2 (MSW1 IN4)              | 16
    38       | IO15 - Elettrovalvola 3 (MSW2 IN1)              | 20
    16       | IO4  - Elettrovalvola 5 (MSW2 IN3)              | 23
    18       | IO5  - Elettrovalvola 6 (MSW2 IN4)              | 24
    40       | IO16 - Digital Output (DO) sensore pioggia      | 21
    25       | GND  - Massa modulo switch 2 (MSW2 GND)         | 
    

  4. Ciao!
    il gingillo va che è una meraviglia durante le prove su banco. Appena smette di piovere lo collego ai solenoidi.
    Domandone: il sensore della pioggia. Io ne ho uno della Hunter collegato al precedente impianto di irrigazione che ho sostituito.
    Questi aggeggi funzionano come interruttore, ovvero quando piove il materiale spugnoso che contengono si espande fino a interrompere il contatto del circuito.

    Secondo te, come sarebbe possibile utilizzare questo aggeggio? a me verrebbe da dire di mettere in loop 2 pin, uno impostato su write e l’altro su read: se quando eseguo la read la corrente c’è allora non piove, in caso contrario sta piovendo e vieta/interrompe l’irrigazione.

    Può essere una strada percorribile?

    Grazie,
    Marco

  5. Ciao @Marco,
    secondo me da come me lo hai descritto ti basta prendere un uscita a 3.3V dal Raspberry collegarla ad uno dei due contatti del sensore. All’altro contatto ci collegi un gpio di input. In questo caso quando il sensore chiude il contatto fa arrivare 3.3V al gpio di input impostando ad 1 il suo stato. Contrariamente quando il contatto non sarà chiuso lo stato sarà a zero.
    Supponendo che tu abbia un Raspberry Pi ver. B come quello indicato in questa serie di post, l’uscita a 3.3V la puoi prendere dal pin 1 mentre per il gpio di input dal pin n.22 (che corrisponde al gpio 25).
    Nel file di configurazione è già impostato il sensore sul gpio 25.
    Eventualmente puoi verificare lo stato dei vari gpio impartendo il seguente comando da shell:
    gpio read all
    così puoi verificare che assuma lo stato giusto in caso di pioggia.
    Nel caso in cui lo stato sia invertito, puoi aggiustare il tiro impostando il valore corretto nella variabile RAIN_GPIO_STATE presente nel file di configurazione.

    Fammi sapere se funziona.

  6. Ciao,
    Ho provato: esattamente come dicevamo. Normalmente 0, quando piove, i cuscinetti si gonfiano ed chiudono il circuito quindi successivamente il pin rileva 1.

    Ho una domanda: non si rischia di rovinare il Pi collegando i 2 pin senza resistenze? Ho letto che il processore del GPIO non è protetto e non sopporta picchi di tensione, e che quindi si dovrebbe aggiungere una resistenza; puoi confermare o smentire?

    Grazie ancora.

  7. @Marco,
    effettivamente per precauzione potresti inserire una resistenza tra i 3.3V e il gpio di input, aggiungendo inoltre un collegamento a massa.
    Ti riporto qui sotto link ad uno schema da utilizzare: http://www.raspibo.org/wiki/index.php?title=Leggere_un_pulsante_su_GPIO_con_antirimbalzo_software
    Naturalmente il pulsante che vine menzionato nel tuo caso è il sensore di pioggia.

    Tieni presente che non ho grandi conoscenze di elettronica, quindi prendi con le molle quello che ti ho detto.

  8. Ciao David, da tempo ho una centralina su raspberry che come motore sfrutta il tuo piGarden, l’ho customizzata e ottimizzata fino a farla girare su un pi zero.
    Sto utilizzando anche io le api per il meteo e utilizzo Wunderground e conoscere il tuo parere tra quest’ultimo e OpenWeatherMap. Grazie.

  9. Ciao @Carlo,
    la mia opinione su i due servizi non si discosta di molto (purtroppo recentemente in entrambi i casi ho avuto dei falsi rilevamenti di pioggia). Se non che su OpenWeatherMap abbiamo meno informazioni, infatti mancano la temperatura percepita, temperatura del punto di rugiada e velocità di eventuali raffiche di vento, in oltre in alcuni casi non viene percepita la direzione del vento.
    Secondo me se hai un account wunderground funzionante vale la pena tenere quello.

  10. Ciao a tutti
    David, evito di ringraziarti per l’ottimo progetto! 🙂
    Man mano che mi arrivano i pezzi dalla Cina, aggiungo i nuovi componenti al raspy in test sul banco.
    Ho preso un sensore pioggia similiare a quello che hai riportato in questa pagina.
    E ho collegato l’uscita DO (digital output) per segnalare la pioggia, o meglio l’acqua che bagna la piastra del sensore.
    Come possiamo, senza aggiungere nuovi sensori, determinare che la quantità d’acqua piovuta sia sufficiente per non far partire l’irrigazione?
    Vedo un trimmer, vedo l’uscita analogica (che non può essere gestita dal raspy se non con un convertitore Analogico/Digitale), immagino un posizionamento in orizzontale magari con un piccolo serbatoio (alto 5 mm?) nel quale immergere il sensore (opportunamente siliconato/isolato per i contatti) e aspettare che la pioggia lo riempia e solo dopo evaporazione si porti sullo stato fine pioggia (no_rain = asciutto)…
    Cosa ne dite?
    Qualcuno ha fatto un’implementazione efficace?
    Grazie
    ciao
    A

  11. @Andrea, con il trimmer regoli la sensibilità del sensore e quindi anche la quantità dell’acqua/umidità grazie al quale si attiverà.
    Per controlli più evoluti personalmente non ho approfondito. Personalmente nell’andare avanti del tempo ho dato priorità al controllo meteo tramite servizio online piuttosto che con il sensore fisico.

  12. ciao @david
    sto pensando di cambiare il sensore pioggia in quanto quello riportato in questo articolo misura la prima pioggia (e con il trimmer è possibile variare la sensibilità), ma non effettivamente l’intensità delle precipitazioni. Quello che vorrei controllare è lo stop dell’irrigazione del prato solo se l’acqua della pioggia sia della quantità minima per far saltare il ciclo.
    Ho trovato questo componente https://www.aliexpress.com/item/Spare-part-for-weather-station-to-measure-the-rain-volume-for-rain-meter-for-rain-gauge/2027467349.html
    che ad ogni riempimento della vaschetta (misurando quindi una certa quantità d’acqua che possiamo ricondurre ad un XX mm di pioggia) invia un impulso al raspy. Ho trovato il comando (gpio falling) che attende il cambio di stato (da 1 normale a 0 – falling – al riempimento della vaschetta e poi ritorna a 1 -rising – in attesa di passare di nuovo a 0 – falling – e così via) e quindi con un loop di questo tipo posso misurare la quantità di acqua:

    counter=0
    while true
    do
    before=`date +%s`
    gpio -g wfi 25 falling
    counter=$(( counter+=1 ))
    gpio -g wfi 25 rising # magari basta uno sleep 1, da verificare
    done

    L’obiettivo è quindi quello di sostituire la funzione check_rain_sensor con quella in via di modifica al fine di rilevare la pioggia solo dopo un certo numero di vaschette riempite.
    Vi tengo aggiornati.
    ciao
    A

  13. Ciao @Andrea,
    interessante la gestione pioggia che proponi.
    Giusto un paio di suggerimenti:
    – tieni presente che la funzione check_rain_sensor viene invocata ogni minuto dal crontab, quindi se nella nuova versione della tua funzione il ciclo di attesa di riempimento dura più di un minuto andrà a causarsi una sovrapposizione di chiamate. Per bypassare questo problema, in entrata della funzione potresti controllare se si sta verificando una sovrapposizione e in questo caso uscire senza fare niente.
    – la tua nuova gestione del sensore è possibile implementarla in “driver” appositamente scritto in modo da non andare a intaccare il funzionamento originale di piGarden. In questo modo, a discrezione dell’utente finale, sarà possibile usare le due modalità (quella originale e quella nuova).

    Per eventuali modifiche o discussioni ti suggerisco di utilizzare gli strumenti di github (issue, pr, ecc…)

  14. Ciao,
    interessantissimo quest’ultimo sviluppo della vaschetta di raccolta; con questo strumento si risolverebbero ffettivamente le anomalie che si potrebbero verificare con l’utilizzo del meteo WEB (che potrebbe dare falsi positivi) e del sensore di pioggia in valore assoluto (che potrebbe causare una sottoirrigazione a causa di precipitazioni irrisorie).

    Se fosse possibile (leggendo velocemente la pagina non l’ho capito) ricavare la quantità di pioggia caduta, sarebbe anche possibile definire un coefficiente moltiplicatore per aumentare/diminuire il tempo di stop successivo, del tipo:
    – Piove 1 cm -> stop di 1/2 gg
    – Piove 5 cm -> stop di 1 gg
    – Piove 10 cm -> stop di 2 gg
    e sarebbe ancora più efficiente, incrociare questi valori in una matrice in base ai mesi dell’anno per definire dei tempi di stop più coerenti in base al potenziale di evaporazione dovuto al “calore” caratteristico del mese.

  15. Ciao Marco
    ho acquistato l’oggetto indicato https://www.aliexpress.com/item/Spare-part-for-weather-station-to-measure-the-rain-volume-for-rain-meter-for-rain-gauge/2027467349.html
    e la scheda di controllo che mi deve ancora arrivare
    https://www.aliexpress.com/item/KY-025-4pin-BETR-Magnetic-Dry-Reed-Pipe-Switch-Magnetron-Sensor-Module-DIY-KY-25/32845081365.html
    insieme a David abbiamo buttato giù il codice e sono in attesa di avere il tutto per testare e documentare.
    Per ora l’interfacciamento del nuovo driver rainsensorqty – che utilizzerà quanto indicato – segnala a piGarden la sola pioggia definita tale solo dopo una certa quantità di acqua minima, non permette di valutare diverse situazioni piovose come da te suggerito.
    Il tuo suggerimento è interessante, ma per comportamenti diversi da quello previsto (piove -> interruzione irrigazione) dobbiamo chiedere a David.
    A me, per esempio, piacerebbe non avere una schedulazione basata su cron cioè giorni della settimana/ora, ma l’irrigazione ogni tot giorni alla stessa ora (per il mio prato di estate faccio mezz’ora una volta ogni 3 giorni – 1 giorno sì e due no). Se poi arriva la quantità 1 di pioggia, ritarda di un giorno, quantità_2 ritarda di due giorni, quantità_3 quella normale di irrigazione, ritarda di tre giorni e salta praticamente un ciclo di irrigazione.
    Altra miglioria che mi piacerebbe avere è una super zona controllabile e schedulabile, magari con diverse durate per le varie zone. Ad esempio, il mio prato è costituito da 4 zone che, dall’attuale sistema di irrigazione Orbit, vengono attivate sequenzialmente.
    Poi la zona 4 a nord, normalmente dura 10 minuti meno delle altre.
    David, se mi dai qualche dritta su come modificare la web gui… magari posso darti una mano per le modifiche.
    ciao
    A

  16. Ciao @Andrea,
    nessun problema, se vuoi info sul codice di piGardenWeb io sono qui.
    Ricordo però una cosa, piGardenWeb è solo il front-end per piGarden.
    Qualsiasi funzionalità deve essere implementata nello script piGarden dopo di che potrà essere implementata anche l’interfaccia web su piGarden.
    Da parte mia attualmente, per mancanza di tempo, sono abbastanza fermo con lo sviluppo, ma se qualcuno ha delle buone idee e volontà per implementarle, queste sono bene accette. Quello che chiedo è di mantenere la retro-compatibilità con quello attualmente esistente e di utilizzare gli strumenti di github per portare avanti lo sviluppo.

  17. Ciao, per quanto riguarda il sensore pioggia, come lo installi all’estero? C’è un supporto adatto? Lo metti in punti specifici (sopra il tettino della capannetta delle valvole.. oppure?) Tieni conto che ho acquistato quello che hai indicato nella guida.

    Ciao e grazie.
    Tommaso.

  18. Ciao @Tommaso,
    personalmente a suo tempo ho posizionato il sensore sopra il tettino dell’armadietto che contiene le elettrovalvole in modo che l’acqua piovana possa caderci liberamente sopra.

    Va anche detto che negli ultimi tempi non risponde molto più bene, attualmente sto viaggiando con il solo sensore online.

  19. ciao a tutti
    circuito il circuito pull-up funziona. sono riuscito a gestire il reed switch della vaschetta.
    diciamo che siamo usciti dalla fase di test. versione alfa in rilascio …
    ciao
    A

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

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