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

15 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…)

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.