Come creare un orto da balcone con irrigazione automatizzata con l’intelligenza artificiale

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

SOFTWARE:

MAIN SCHEMA

AIGarden: main schema

creazione dell’orto da balcone

  • assemblare le tavole di legno secondo questo schema
  • il risultato è rappresentato in figura
Built garden
  • 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

insert moisture sensor into vegetable garden

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.

rfx and trx 433mhz connection module

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)

node-red processflow for catching data sensor

script into node-red function


var url = "http://192.168.1.4:8088/json.htm?type=command&param=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:

  1. nuovo device per sensore umidità e temperatura del terreno
  2. nuovo device per gli interruttori wireless
  3. 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,

data sensor visualization from Domoticz
moisture and temperature sensor logs

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:

  1. 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%.
  2. 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.
  3. 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.

sample of training set (previous values) and the action predicted. Note at 22.00 pm the soil moisture humidity has 69%. For a determinated rule (under 70% of soil moisture) the action will be “water”. Instead, AI predict a “no water” action because the previous days values (training set)

“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.

Crescita dell’orto da balcone

vegetable growth with AI irrigation algorithm