hard quite expensive 5 days
In questo tutorial spiegherò come creare un orto da balcone dall’assemblaggio dei materiali all’aggiunta dell’intelligenza artificiale per l’irrigazione automatizzata.
vantaggi irrigazione attraverso AI
- Si autoadatta al microclima esterno: se ci sono giornate di sole e/o ventilate, il sistema fa irrigazione con più frequenza. Altrimenti riduce la frequenza di irrigazione “autoimparando” dall’ambiente esterno.
- Riduzione sprechi d’acqua con irrigazione più efficiente.
- Si autoadatta alle apparacchiature elettroniche utilizzate riducendo gli errori legati alle approssimazioni dei sensori (chiunque può scegliere il sensore che meglio crede)
lista della spesa
MATERIALE
- 2 tavole di pino 100X30
- 2 tavole di pino 50X30
- 1 tavolo di pino 100X50
- 4 gambe da tavolo 40cm
- 1 vaschetta da circa 20lt (serbatoio per irrigazione)
- tubi e ugelli da giardino
- 1 impregnante
- 1 mensola e supporti tali da sostenere la vaschetta
- kit di assemblaggio: chiodi, viti, placche…
HARDWARE
- 1 raspberry Pi starter kit (in questo tutorial abbiamo usato due Rpi ma è possibile farlo direttamente con un solo RPi)
- 1 generic USB DVB-T & RTL-SDR
- 1 trx and rfx module for Rpi gpio e cavi di connessione
- 1 pompa d’acqua
- 1 remote switch socket 433,92 mhz
SOFTWARE:
- node-red
- rtl_433
- domoticz
- 433Utils
- wiringPi
- Mysql, apache, php
- water prediction web application: algoritmo di intelligenza artificiale
MAIN SCHEMA
creazione dell’orto da balcone
- assemblare le tavole di legno secondo questo schema
- il risultato è rappresentato in figura
- proteggere l’interno con un impregnante o una carta isolante
- rafforzare l’esterno con l’impregnante
- installare le gambe da tavolo
- inserire il terriccio (45lt + 45lt)
- piantare le piante da orto come pomodorini, zucchine, peperoncino, basilico e qualsiasi altra pianta
preparazione RaspberryPI
Preparazione del raspberry scaricando la versione dal seguente link: distribution from the repository. Sul tutorial utilizziamo Raspbian.
Una volta preparato Rpi inserite i seguenti comandi al riavvio per eseguire gli aggiornamenti.
sudo apt-get update
sudo apt-get upgrade
Come ricevere i segnali wireless 433,92 mhz da Rpi
per far in modo di captare i segnali 433,92 mhz da Rpi, inserire nella porta USB la chiavetta DVB-T e seguire il seguente tutorial per installare il software 433rtl
install the RTL_433 software for capturing the 433,92 signal from the sensors
una volta installato il software rtl433 eseguire i seguenti comandi
cd /home/pi/rtl433
rtl_433 -F json -r receive.json
Sensore umidità del terreno
inserire il sensore nel terreno moisture sensor e captare il segnale con il software rtl433
utilizzando il seguente comando
rtl_433 -G -F /home/pi/rtl433/receive.json
le informazioni del segnale captato vengono registrate all’interno del file receive.json
A questo punto possiamo elaborare il file attraverso nodered ed inviare le informazioni su domoticz per la visualizzazione
Sensore di temperatura e di umidità esterna
Per la misurazione della temperatura e dell’umidità esterna esistono tanti modelli diversi compatibili (see the devices protocol list).
Noi abbiamo usato il modello Acurite ma ne esistono tanti altri tipi. Su questo tutorial vi consigliamo di accedere al servizio pubblico Open Weather Map che è compatibile con domoticz.
Controllo interruttori wireless
Per controllare gli interruttori wireless ad una frequenza di 433,92 mhz abbiamo bisogno dei moduli ricezione e trasmissione da installare sulla GPIO del Rapsberry.
Il processo dovrebbe essere: leggere, dal modulo di ricezione, il segnale dal telecomando per comandare gli interruttori , copiare il codice ed inviare il codice attraverso il modulo di trasmissione.
Come notate dalla figura, ho applicato un’antenna sul modulo di trasmissione per far in modo di estendere la distanza del segnale.
installare i moduli di ricezione e trasmissione su RPBI
seguire questo schema per la connessione dei moduli sull’interfaccia del raspberry
installare 433utils for raspberry ed eseguire i seguenti comandi
sudo apt-get install git-core
sudo apt-get update
sudo apt-get upgrade
//CLONE WIRINGPI - 433Utils
git clone git://git.drogon.net/wiringPi && cd wiringPi &&./build
git clone https://github.com/ninjablocks/433Utils.git
//BUILD 433Utils
cd 433Utils/RPi_utils
make all
dopo l’installazione, leggere il segnale dal telecomando attraverso la funzione RFSniffer
cd 433Utils/RPi_utils sudo ./RFSniffer
copiare il codice ed inviarlo tramite la funzione codesend:
sudo ./codesend <copied code>
elaborazione dei dati dei sensori con Node-red
Installiamo node-red seguendo questo tutorial this tutorial
Con node-red preleviamo il file receive.json e lo elaboriamo in modo da acquisire i dati dei sensori esterni inviandoli direttamente sui rispettivi device creati su domoticz (vedere paragrafo successivo)
script into node-red function
var url = "http://192.168.1.4:8088/json.htm?type=command¶m=udevice";
var objOpus=[];
var obj={};
for (var z=2;z<msg.payload.length;z++)
//cycle into receive.json array file
{
obj = JSON.parse(msg.payload[msg.payload.length-z]);
if (typeof obj !== 'undefined') {
if (obj.model==="Opus-XT300" && obj.channel==2){
objOpus.push(obj);//populate only Opus-XT300 data array
}
}
}
if (objOpus[0].channel==2){
url=url+"&idx=39&nvalue=0&svalue="+objOpus[0].temperature_C+";"+objOpus[0].moisture+";3" ;//idx=39 is related to the index of virtual sensor into domoticz
}
msg = {payload: url};
return msg;
Visualizzazione dei dati con Domoticz
installare domoticz seguendo questo tutorial
su domoticz dobbiamo creare nuovi devices per ogni sensore o attuatore:
- nuovo device per sensore umidità e temperatura del terreno
- nuovo device per gli interruttori wireless
- nuovo device per il sensore pubblico di OpenWeatherMap (oppure un altro sensore d temperatura e umidità compatibile con RTL_433)
come installare nuovi device su domoticz in modo da ricevere informazioni da nodered.
Nella figura, un esempio dell’associazione del nuovo device al sensore di temperatura ed umidità del terreno “vegetable balcony”. Il device in questione ha ID 39,
Aggiunta dell’intelligenza artificiale
una volta terminate le installazioni ed i collegamenti tra attuatori e sensori, possimo passare al cervello di tutto il sistema, l’intelligenza artificiale per comandare l’irrigazione.
Implementando l’algoritmo NaiveBayes algorithm riusciamo a predire l’irrigazione sulla base dei seguenti parametri in ingresso (storicizzati nelle settimane precedenti):
- umidità e temperatura del terreno
- umidità e temperatura esterna
- vento esterno
L’algoritmo funziona in due fasi: fase di apprendimento e fase di predizione. Nella fase di apprendimento registra tutte le informazioni in un apposito database, elabora le informazioni e nella fase di predizione stabilisce quando far partire l’irrigazione. Questo permette, ad esempio, di ridurre la frequanza di irrigazione nel caso in cui il giorno prima ci sia stata forte pioggia, oppure al contrario, aumenta la frequenza di irrigazione se in passato ci sono state giornate molto soleggiate.
come funziona l’algoritmo di intelligenza artificiale:
- ogni ora il sistema registra i parametri nel database training set: umidità. temperatura e l’azione da predire: water or not water. Set “water” if soil moisture is under 60% and “no water” if is over 60%.
- ogni 2 ore (nelle fasce mattutine serali) il sistema registra nel database testing set le previsioni di temperatura e umidità. L’azioen da predire verrà stabilita in base ai calcoli del classificatore di NaiveBayes . Se la predizione è “water” allora parte l’rrigazione, altrimenti, “no water” non parte.
- ripete dal punto 1
web application: water prediction
Il sistema è provvisto di una webapplication in mysql, php, apache sulla quale viene esposta la predizione WATER, NO WATER
“NO WATER” ACTION PREDICTION : P(“NO WATER”|ext. temperature, ext humidity, soil moisture, wind speed)
Nell’esempio in figura, nonostante sia 69% l’umidità del terreno, l’irrigazione non parte (c’è una regola che prevede che sotto il 70% di umidità l’irrigazione parte in automatico ). Questo è spiegato dall’algoritmo di NaiveBayes: la probabilità condizionata dell’evento no water è la probabilità avvenga l’evento avendo come parametri in ingresso la temperatura, umidità esterna, umidità del terreno e velocità del vento.
“WATER” ACTION PREDICTION : P(“WATER”|ext. temperature, ext humidity, soil moisture, wind speed)
La probabilità dell’evento “water” è data dalla probabilità condizionata di “water” dati i parametri in ingresso: temperatura esterna, umidità esterna, umidità del terreno e vento.