Wireless Sensor Network
È una rete senza fili di dispositivi dotati di sensori, denominati WSN Nodes, distribuiti nell'ambiente per rilevare fenomeni fisici o monitorare condizioni ambientali.
Wireless Sensor Network
La control unit, ha il compito di raccogliere i dati e metterli a disposizione di una sistema di controllo locale, oppure trasmettere le informazioni su un Cloud attraverso cui è possibile accedere da remoto attraverso PC/tablet.
I WSN Nodes trasmettono i dati delle misure effettuate ad una control unit.
È possibile distinguere i Nodes in due tipologie:
Sorgente
Coordinatore
Wireless Sensor Network
I WSN Nodes trasmettono i dati delle misure effettuate ad una control unit.
È possibile distinguere i Nodes in due tipologie:
Sorgente
Coordinatore
Nodo sorgente: rileva i parametri dell’ambiente in cui è inserito e li trasmette ad un nodo coordinatore o direttamente alla control unit
Nodo coordinatore: raccoglie le informazioni rilevate dai nodi sensore e le ritrasmette verso un altro nodo coordinatore o alla control unit
Schema a blocchi di un generico nodo sensore
• Sensing Unit → Interfaccia del nodo sensore con il mondo fisico al fine di rilevare i parametri di interesse per la specifica applicazione.
• Processing Unit → Microcontrollore in cui risiede la capacità di elaborazione e memorizzazione dei dati acquisiti dalla sensing unit.
• Comunication Unit → Trasmette in modalità wireless i dati acquisiti verso il nodo centrale di elaborazione
• Power Unit → In una WSN non vi sono collegamenti via cavo pertanto è necessario fornire energia al nodo sensore utilizzando una classica batteria o un sistema di harvesting da fonte rinnovabile consentendo di estendere l’autonomia della batteria stessa.
Wireless Sensor Network in agricoltura
I dati raccolti dai sensori di una Wireless Sensor Network servono a fornire le informazioni necessarie ad un’opportuna unità di controllo che elabora tali informazioni e attua gli opportuni piani di intervento (irrigazioni, fertirrigazioni, apertura/chiusura delle serre, ecc.).
Vantaggi
Campo aperto
Serra
• Quantità di pioggia
• Velocità e direzione del vento
• Temperatura e
umidità del terreno
• Diametro del ramo o del frutto
• Temperatura e umidità dell’aria
• Economici → Risorse utilizzate nella quantità necessaria solo dove necessario
• Produttivi → Impiego non intensivo del terreno → il raccolto aumenta
• Ambientali → Risparmio delle risorse e riduzione dell’uso di pesticidi o fertilizzanti
Parametri
Sistema SMART di fertirrigazione integrato con una Wireless Sensor Network
Innovazioni del processo
• Wireless Sensor Network rilevazione dei parametri ambientali e del terreno
• Software di gestione elaborazione dei dati ricevuti dalla rete WSN - comando automatizzato del sistema di fertirrigazione - trasmissione/acquisizione dati su/da Cloud
• Database agronomico generale su Cloud raccolta dei dati agronomici provenienti da diverse colture – rielaborazione attraverso modelli agronomici
• Controllo remoto gestione del sistema da remoto attraverso Smartphone/Tablet/Pc interfacciato con sistema meteo per variazione dei piani di intervento da attuare
Schema a blocchi funzionale del nodo sensore realizzato
Power Unit
• Pannello fotovoltaico → 1.25 W – 5 VDC
• Step-up converter LTC3105 → Vin 0,2 V- 5 V
• Batteria a litio ricaricabile → 3,7 V - 800 mAh
• 2 Supercapacitori in serie → 2,5 V – 150 F
Sensing Unit
• Sensore analogico SEN0193 rilevazione umidità del terreno
• Sensore digitale DHT22 rilevazione temperatura e umidità ambientale
• Sensore digitale SHT11 rilevazione umidità e temperatura del terreno
Processing and Communication Unit
• Processing → CPU Tensilica Xtensa LX106
• Communication → Wireless module: stack TCP/IP compatibile con gli standard Wi-Fi 802.11 b/g/n
• GPIO pins accessibili dall’esterno
NodeMCU DevKit ESP8266
NodeMCU Devkit ESP8266
• Modem-sleep
• Light-sleep
• Deep-sleep
Sensore DHT22
Temperatura e umidità ambientale
Caratteristiche tecniche
Comunicazione one-wire con microcontrollore
Sensore digitale
Temperatura → Termistore: variazione della resistenza elettrica di un materiale con la temperatura.
Umidità → Igrometro Capacitivo: l’equilibrio igrometrico che si stabilisce tra l’isolante (polimero termoplastico) e
l’ambiente modifica la permittività relativa del dielettrico
Soil Moisture Sensor SKU: SEN0193
Caratteristiche tecniche
Sensore analogico capacitivo
Umidità del terreno → l’umidità del terreno influisce sulla sua costante dielettrica influenzando a sua volta la capacità del capacitore. Il valore di capacità, e quindi di umidità, è derivato dalla tensione ai capi del condensatore dopo un tempo di carica predefinito.
• Tensione di alimentazione: 3.3– 5.5 VDC
• Tensione d’uscita: 0- 3.0 VDC
• XC6206: regolatore di tensione
• TLC555C: circuito integrato configurato come astabile: amplificatore in cui l’uscita è riportata all’ingresso con una retroazione positiva
attraverso un filtro passa banda stretto
Caratteristiche tecniche
Sensore digitale
Umidità e temperatura del terreno → Il dispositivo è costituito da un elemento polimerico sensibile alle variazioni di umidità relativa e temperatura
Sensirion SHT11 Sensor Module
Temperatura e umidità del terreno
• Tensione di alimentazione: 2,4– 5,5 VDC
• Range temperatura: - 40 °C - + 123.8 °C
• Range umidità: 0 - 100% RH
• Interfaccia di comunicazione I2C
• Risoluzione temperatura 14 bit
• Risoluzione umidità 12 bit
• Tempo di risposta umidità 8 s
• Tempo di risposta temperatura 15 s
1800 s
mW 599
0,29 mW
25,28 DHT22 + SEN0193 + SHT11
Rilevamento grandezze fisiche e trasmissione dati
al nodo centrale
Deep sleep
Deep sleep Modalità Deep Sleep
DHT22 + SEN0193 +SHT11 Deep sleep DHT22 + SHT11
DHT22 + SEN0193 mW
mW 25,29
Consumi stimati nodo sensore
Tempo Deep Sleep [min] Tempo Deep sleep [s]
mW mW
596 574 30
DHT22 + SHT11
DHT22 + SEN0193
Stima dei consumi energetici del nodo sensore
Wake-up → Durata del processo di lettura-elaborazione-trasmissione
dati pari a 2 secondi
Deep-Sleep → Periodo di stand-by tra due Wake-up successivi pari a 30
minuti per un totale di 48 trasmissioni giornaliere
Scelta della tipologia di alimentazione
La caratteristica principale di una rete di sensori wireless è l’assenza di connessioni via cavo. Pertanto è stata scelta un’alimentazione per mezzo di pannello fotovoltaico opportunamente dimensionato.
Caratteristiche tecniche:
• Potenza pari a 1.25W e 5V di tensione in uscita.
Il pannello fotovoltaico alimenta una batteria a litio o un super-capacitore
Autonomia 4 giorni Voltaggio 3,7 V
DHT22 + SHT11
DHT22 + SEN0193 + SHT11 DHT22 + SEN0193
Deep sleep / Trasmissione dati
Deep sleep / Trasmissione dati
Deep sleep / Trasmissione dati
Dimensionamento batterie
24,1 mAh
mAh 672,4
mAh
672,7 134 F
DHT22 + SHT11
DHT22 + SEN0193
Capacità Supercapacitori
Deep sleep / Trasmissione dati
Deep sleep / Trasmissione dati
4,8
DHT22 + SEN0193 + SHT11
Deep sleep / Trasmissione dati
134,4
F
F
4 giorni = 96 ore
Convertitore step-up DC/DC LTC3105
Affinché possa essere effettuato un corretto ciclo di carica della batteria a litio o del
super capacitore, è necessario un dispositivo che stabilizzi la tensione in uscita dal pannello. Il dispositivo scelto per questa applicazione è il convertitore step-up basato sul circuito integrato LTC 3105 della Linear Technology.
Caratteristiche tecniche:
• Bassa tensione di Start-Up: 250mVolt
• Ampia gamma della tensione di ingresso Vin, da 0,25 V a 5V
• Maximum Power Control Point
Per configurare la tensione VOUT
(Vcc del nodo sensore) è necessario dimensionare le resistenze R1 ed R2
Batteria a litio ricaricabile [Vout=4,1V] R1 = 1020 kΩ ; R2
= 332 kΩ
Supercapacitore [Vout=5V]
R1 = 1000 kΩ ; R2 = 250 kΩ
Testing del sensore DHT22
Realizzato il circuito ed il firmware, per verificare il
corretto funzionamento del sensore DHT22 è stato eseguito un confronto tra i dati di umidità e temperatura ambientale rilevati dal sensore DHT22 con quelli forniti dall’aeronautica militare (distanza della staz. rilev. 200 m)
Firmware
One-wire MCU-sensor connection
Testing del sensore SEN0193
Collegamento modulo NodeMCU e sensore analogico di umidità del terreno SEN0193.
Firmware
Calibrazione del sensore
Sensore fuori dal terreno (0% umidità relativa) per determinare gharia
Sensore immerso in acqua (100% umidità
relativa) per determinare ghacqua Formula per ricavare l’umidità del terreno in % dal valore digitale in uscita dall’ADC (gh_digitalvalue)
A0
Input analogico
Dopo aver effettuato la calibrazione dei sensori analogici SEN0193, è stato verificato il loro corretto funzionamento.
Il test è stato eseguito variando la percentuale in volume di acqua a intervalli di 10 unità percentuali per volta e valutando quindi l’andamento della risposta del sensore SEN0193
Testing del sensore SHT11
Collegamento del sensore SHT11 con il modulo NodeMcu ESP8266
Firmware
Il test è stato eseguito variando la percentuale in volume di acqua a intervalli di 10 unità percentuali per volta e valutando quindi l’andamento della risposta del sensore SHT11
Anomalia di funzionamento del sensore SHT11 inserito nel terreno secco
Wireless Sensor Network → FIRMWARE
Logica di processo con cui operano il nodo sensore ed il nodo coordinatore
Nodo sensore
Nodo coordinatore Alimentazione
sensori
«Switch» firmware
È stato realizzato uno “switch firmware” che permette di interrompere l’alimentazione dei
dispositivi collegati al modulo NodeMcu. Ciò è stato possibile definendo i GPIO pins dell’ESP8266 come uscite digitali (valore tensione alto Vcc=3,3V) attraverso la funzione pinMode(pin,OUTPUT)
Definizione dei pin del modulo NodeMcu utilizzate come uscite "OUTPUT" per l'alimentazione dei dispositivi.
Attraverso la funzione DigitalWrite è possibile controllare il livello di tensione dei GPIO
A connessione avvenuta, viene richiamata la funzione readDHT_SEN0193Sensor_SHT11()
• digitalWrite(pin,HIGH) → Controlla l’accensione dei dispositivi collegati portando a livello logico alto (3.3V) i relativi pin di alimentazione
• AnalogRead (A0) - shtx1x.readTemperature() - shtx1x.readHumidity () - dht.readHumidity () - dht.readTemperature () → Acquisiscono i valori di umidità e temperatura ambientali e del terreno dai relativi sensori
• digitalWrite(pin,HIGH) → Controlla l’accensione dei dispositivi collegati portando a livello logico alto (3.3V) i relativi pin di alimentazione
• AnalogRead (A0) - shtx1x.readTemperature() - shtx1x.readHumidity () - dht.readHumidity () - dht.readTemperature () → Acquisiscono i valori di umidità e temperatura ambientali e del terreno dai relativi sensori
La funzione buildDataStream () provvederà a organizzarli all’interno di un pacchetto dati che sarà successivamente inviato al nodo coordinatore di pertinenza
Generazione delle stringhe contenenti i dati da inviare al nodo cooridianatore
Se la trasmissione del pacchetto dati è avvenuta con successo, viene richiamata la funzione hibernate()
digitalWrite(pin,LOW) → Spegnimento dei pin a cui i sensori sono connessi ESP.deepSleep (sleepInterval, WAKE_RFCAL) → entra in modalità deep-sleep attraverso per un periodo pari al valore definito dalla variabile sleepInterval Se la connessione non è avvenuta con successo
La connessione potrebbe non avvenire con successo
Le cause di tale condizione possono essere molteplici, come ad esempio nodo coordinatore impegnato in una trasmissione dati con un altro nodo sensore, nodo coordinatore che sta trasmettendo all’unità centrale, assenza di rete. Per ovviare a tale problematica è stato introdotto un «timer» firmware
timer firmware → istruzione condizionale if (counter > x), in cui x rappresenta il numero di iterazioni e dunque il tempo oltre il quale il nodo sensore non cerca più di stabilire una connessione con il nodo coordinatore
hibernateFailToConnect() → richiama la variabile failConnectRetryInterval, ovvero l’intervallo di tempo che il nodo sensore attende prima di riprovare a stabilire una connessione con il nodo coordinatore.
Firmware Nodo Coordinatore
Diagramma di flusso rappresentativo della logica eseguita dal nodo coordinatore.
La generazione della rete da parte del nodo coordinatore (configurato in modalità Server) avviene nel blocco “Access Point” attraverso la funzione setupAccessPoint()
Dopo che il nodo coordinatore ha generato la rete, il passo successivo riguarda la ricezione dei dati trasmessi dai nodi sensore.
handle_feed() → attraverso il comando server.arg vengono acquisiti i dati inviati dai nodi sensore
I dati ricevuti sono organizzati in un array di stringhe, denominato
«DatiNodiSensore[DATO][ID]», che dispone sulle righe il dato relativo all’informazione da immagazzinare e sulle colonne l’identificativo del nodo di appartenenza.
Per la compilazione della matrice è stata utilizzata una sequenza di istruzioni condizionali if
Il nodo coordinatore rimane in ascolto per un prefissato intervallo di tempo.
All’interno di questa finestra temporale, i nodi sensore hanno la possibilità di trasmettere il loro pacchetto dati.
Successivamente, il nodo coordinatore esce dalla modalità di ascolto e, dopo aver letto i valori presenti all’interno dell’array DatiNodoSensore[][] attraverso la funzione lettura_trasmissione_matrice(), disattiva la modalità Access Point e avvia la modalità SetupStMode(), ovvero la modalità station che permette al nodo coordinatore di assumere il ruolo di client della rete generata o dal nodo centrale o da un router remoto che consente ad esso l’accesso alla rete internet.
Il nodo coordinatore invia tramite connessione Wi-Fi all’unità centrale che a sua volta trasmetterà i dati su Cloud dove vengono rielaborati e rappresentati.
Prototipo Nodo Sensore
Prototipo del nodo sensore realizzato integrato con il sistema di alimentazione solare munito di supercapacitori ricaricati attraverso pannello fotovoltaico.
Circuito realizzato con l’LTC3105 per l'interfacciamento del pannello solare col sistema di accumulo.
Prototipo del nodo coordinatore
Prototipo Nodo Sensore
Prototipo del nodo sensore realizzato integrato con il sistema di alimentazione solare munito di supercapacitori ricaricati attraverso pannello fotovoltaico.
Circuito realizzato con l’LTC3105 per l'interfacciamento del pannello solare col sistema di accumulo.
Prototipo del nodo coordinatore
Caratterizzazione del regolatore di tensione
Set-up sperimentale per la caratterizzazione del regolatore di tensione (AMS117) integrato sul NodeMCU utilizzato per la generazione dei 3.3 V da utilizzare per l’alimentazione del circuito integrato ESP8266.
• Alimentatore da banco per fornire in ingresso al modulo NodeMCU l’opportuna tensione di alimentazione.
• Multimetro digitale per rilavare la tensione in uscita dal regolatore
Affinché in uscita dal regolatore di tensione si abbia una tensione stabilizzata a 3.3V, in ingresso sono necessari 4.5V. Sebbene una tensione di 3.3V sia il valore consigliato, il dispositivo presenta un comportamento corretto a partire da 3 V in uscita dal regolatore.
Stima dei consumi del nodo sensore
Set-up sperimentale per la determinazione dei consumi del nodo sensore nelle differenti modalità operative: ricerca nodo coordinatore – rilevazione e trasmissione dati – deep sleep
Oscilloscopio → Utilizzato per la misurazione della differenza di potenziale ai capi di una resistenza di sensing posta in serie alla linea dell’alimentazione del modulo NodeMcu e quindi della corrente assorbita dal circuito (Legge di Ohm)
Permette inoltre di determinare le durate temporali delle differenti fasi di funzionamento del nodo utilizzate per la stima dei consumi energetici del nodo sensore
Consumi nodo sensore alimentato con supercapacitori o batteria a litio
Supercapacitori
Batteria a litio
Rispetto alle valutazioni iniziali, i risultati ottenuti dai test sperimentali dimostrano un’autonomia energetica reale inferiore a quella ipotizzata. Ciò è giustificato dal maggior tempo necessario al nodo sensore per l’acquisizione e trasmissione dati (9s vs 2s) e dai maggiori livelli di corrente assorbiti dalla scheda NodeMCU nella modalità deep-sleep (3mA vs 20 μA) a causa del consumo (in precedenza non considerato) del regolatore di tensione pari a 2,6 mA.
Calcolo analitico e verifica sperimentale della riduzione della tensione ai capi del supercapacitore durante un ciclo completo