Realizza il Tuo Sistema di Irrigazione Smart con Micro:bit: Guida Completa al Monitoraggio Intelligente delle Piante

Utilizziamo la flessibilità e potenza di micro:bit per realizzare un sistema di irrigazione intelligente delle piante, portabile ed interconnesso

In un mondo in completa evoluzione, in cui si fa sempre più attenzione al futuro del pianeta, si mixano tecnologie come l’IoT e l’intelligenza artificiale per cercare di ottimizzare i consumi di acqua a 360 gradi.

Si sviluppano sistemi per monitorare da vicino il modo in cui le piante rispondono a stress, lesioni, infezioni e alla luce, utilizzando sensori realizzati con nanotubi di carbonio.

In questo contesto ci sentiamo di dare il nostro piccolo contributo, proponendo un sistema di monitoraggio intelligente delle piante (per comodità di seguito utilizzeremo l’acronimo PSM dall’inglese Plant Smart Monitor – Monitoraggio Intelligente della Pianta) per fornire la possibilità all’utente di monitorare l’habitat della pianta in ambito domestico/lavorativo e permettergli una gestione automatica o manuale del sistema d’irrigazione.

In estrema sintesi, l’idea nasce dalla necessità di irrigare al meglio le piante in modo automatico, non solo per ridurre gli impegni a cui siamo chiamati nella vita “frenetica” di ogni giorno ma anche per consentire a qualsiasi utente di prendersi cura delle proprie piante ottimizzando l’acqua necessaria per il corretto sostentamento, grazie al supporto di svariati parametri a disposizione che affronteremo e mostreremo durante l’articolo.

Vi guideremo nella realizzazione del prototipo dal punto di vista hardware nella descrizione dei componenti e nella realizzazione del setup, ma anche dal punto di vista software nella scrittura del codice necessario per l’implementazione delle funzioni sopra elencate.

Oltre a questo, per rendere il tutto il più flessibile possibile è stata realizzata un’applicazione per Android che permette la configurazione del sistema inserendo la tipologia di pianta e il tipo di terriccio in cui è piantata, in modo tale da permettere una configurazione immediata anche ai meno esperti.

Perciò dopo la presentazione del dispositivo stand-alone, verrà presentata l’applicazione in linea con le richieste di mercato odierno, volte a garantire l’interconnessione tra i dispositivi con un occhio verso possibili e future applicazioni.

Descrizione dell’hardware

Andiamo per gradi, il PSM ha come cuore di tutto il sistema la scheda micro:bit, collegata opportunamente ad alcuni sensori per rilevare lo stato della pianta e permettere di intervenire per garantirne lo stato ottimale.

Com’è facile immaginare per poter controllare i parametri di una pianta, i sensori coinvolti devono essere almeno relativi a temperatura d’ambiente, umidità del suolo e radiazione solare per comprendere se l’irrigazione avviene di giorno o di notte. Per permettere un facile reperimento del materiale per l’implementazione di questo progetto ed evitare la realizzazione di board dedicate, in questo articolo mostreremo alcune soluzioni di schede elettroniche integrate “pronte all’uso” a costi contenuti che permettono la realizzazione delle funzioni d’interesse.

Visto che il progetto non è solo un monitor per il controllo dello stato dell’ambiente in cui si trova la pianta, alla sensoristica viene aggiunto un motore gestito attraverso un driver direttamente dal micro:bit che avrà il compito di implementare la funzione della pompa dell’acqua (qualora le condizioni lo dovessero richiedere) e quindi annaffiare la pianta per garantire una crescita continua e costante.

Per poter meglio comprendere il sistema, partiamo dall’architettura schematizzata mediante un diagramma a blocchi, per poi passare ai vari dettagli d’implementazione hardware/software.

Facendo riferimento alla Fig. 1, come sottolineato in precedenza, il compito principale è affidato alla scheda micro:bit, che come illustrato acquisisce le grandezze fornite dai sensori (in figura riportate per semplicità con delle frecce verdi uscenti dai sensori ed entranti nel micro:bit), pilota il driver del motore (in figura indicato con la freccia gialla verso il blocco “DC Motor”) e invia tutte le informazioni acquisite via Bluetooth (in Fig. 1 la freccia blu) su opportuna applicazione Android.

Dallo schema a blocchi è anche apprezzabile la tipologia di protocollo utilizzato per lo scambio di dati tra i vari blocchi o le grandezze da misurare per il sistema presentato, che a breve analizzeremo nel dettaglio man mano che affrontiamo le funzionalità delle schede d’interesse.

Fig. 1 Schema a blocchi PSM

La scheda di espansione per micro:bit

Il micro:bit è una board molto potente a livello computazionale, flessibile per i suoi protocolli di comunicazione e immediatamente utilizzabile grazie all’astrazione dall’hardware delle librerie di programmazione, tuttavia per un suo facile utilizzo è consigliabile l’utilizzo di una scheda d’espansione (in Fig. 1 riportata come blu scuro nello stesso riquadro del micro:bit), che permette una facile interconnessione tra la scheda e il “mondo esterno”.

Questo perché il suo connettore (riportato in Fig. 2 esplicitando anche le funzionalità dei vari pin), pur essendo molto compatto, non è standard come altre schede tipo Arduino, Raspberry Pi e simili, che facilmente si riescono a connettere con board aggiuntive mediante pin header (con passo 2,54mm e singolo pin da 1mm). Perciò prima di introdurre le varie periferiche del sistema, è doveroso parlare di una delle schede d’espansione per il micro:bit.

Fig. 2 Port Expander e pinout

 

Ci sono alcune soluzioni possibili sul mercato ma tra le varie proposte abbiamo scelto un “Port Expander” acquistabile sullo store futurashop.it con il codice MICROBITPROTO in grado di rendere di facile utilizzo tutte le porte di input/output della board.

Con riferimento alla Fig. 2, viene mostrato il lato TOP della scheda MICROBITPROTO e si può immediatamente apprezzare come il connettore del micro:bit (riportato in alto nella Fig. 2 ed identificato come “main board connector”) viene reso usabile e accessibile mediante pin header (con strip di colore rosso/giallo/blu) in modo simile a quanto avviene in Arduino, Raspberry Pi o altro.

Ulteriori dettagli sono visibili, ovvero la scheda ha la possibilità di essere alimentata tramite i due connettori rossi, con tensioni variabili fino a 24V o fino a 6V (a seconda del connettore scelto), per sfruttare uno dei due regolatori stabilizzati di tensione da 5V o 3.3V.

Altra possibilità è data dal fatto che la scheda può anche essere alimentata direttamente tramite la porta USB di micro:bit. Essendo puramente una scheda d’espansione non ha molte altre caratteristiche se non un LED di alimentazione e vari pin header con passo 2,54mm, con le seguenti funzionalità:
• colore giallo e blu per le porte di I/O e protocolli di comunicazione (I2C, SPI e Seriale)
• colore blu parzialmente per il riferimento GND
• colore rosso per le tensioni d’alimentazione

Ulteriore vantaggio è dato dalla disponibilità di un interruttore a due posizioni (on/off) che permette di accendere e spegnere direttamente la scheda.

È facile immaginare come l’utilizzo di questa board risulta essenziale quando si vogliono connettere immediatamente componenti esterni al connettore micro:bit, come possono essere schede di sensori che richiedono specifici collegamenti fisici magari complessi da collegare direttamente al micro:bit.

Il sensore BMP280

Con riferimento alla Fig. 1, avendo evidenziato l’utilizzo di differenti moduli sensore, passiamo all’analisi di ognuno di essi iniziando da uno dei più complessi, ovvero il BMP280, che verrà impiegato per rilevare la temperatura d’ambiente.

Questo è un sensore di pressione barometrica assoluta, particolarmente adatto per applicazioni mobili, le sue piccole dimensioni e il suo basso consumo energetico ne consentono l’implementazione in dispositivi alimentati a batteria come telefoni cellulari, moduli GPS o orologi. Si basa sulla comprovata tecnologia di sensori di pressione piezoresistivi di Bosch, caratterizzata da elevata precisione e linearità, nonché stabilità a lungo termine ed elevata robustezza EMC (Electromagnetic Compatibility o compatibilità elettromagnetica).

Perciò possiamo considerarlo come un nuovo sensore ambientale per temperatura e pressione barometrica che insieme al BME280, sono l’evoluzione della precedente serie BMP085/BMP180/BMP183.

Questo prodotto è in grado di effettuare misurazioni molto “fini” con un’accuratezza assoluta di ±1 hPa per la pressione e di ±1.0°C per la temperatura, grazie alle quali può essere utilizzato anche come altimetro con un’accuratezza di 1m. Numerose opzioni di funzionamento del dispositivo garantiscono la massima flessibilità, in più è ottimizzato in termini di consumo energetico, risoluzione e prestazioni.

Per dare un’idea, il chip consente di effettuare letture con un campionamento selezionabile e una risoluzione che varia da 0,0050°C a 0,0003°C, con consumi dipendenti da una delle seguenti possibili modalità operative:
• Sleep mode : non vengono effettuate misure e i consumi sono ridotti al minimo
• Force mode : viene effettuata una singola misura con successiva transizione in sleep mode
• Normal mode : consiste in cicli di lettura continui interrotti da un periodo di inattività

Senza addentrarci troppo in tecnicismi, dovendolo utilizzare come sensore di temperatura ambientale, passiamo rapidamente al suo utilizzo ovvero alla possibilità di connetterlo con il micro:bit. In commercio esistono varie schede già realizzate e acquistabili con costi ridotti come quella in Fig. 3.

Fig. 3 Scheda BMP280

 

La scheda presenta un regolatore a 3.3V per l’alimentazione stabilizzata del sensore e un convertitore di livello per funzionare sia con logica a 3.3V che a 5V; è possibile effettuare letture di pressione e temperatura abilitabili individualmente, che vengono rese disponibili tramite opportuni registri al quale è possibile accedere mediante i protocolli di comunicazione SPI (Serial Peripheral Interface) oppure I2C (Inter Integrated Circuit).

Per questa implementazione viene scelta l’interfaccia I2C, abilitabile tramite il pin CS (Chip Select), grazie ad un opportuno collegamento alla tensione di alimentazione tramite una resistenza di 1KΩ.

Come in tutti i dispositivi con questa tecnologia di comunicazione, è possibile interrogare il dispositivo tramite un determinato indirizzo (indirizzo slave), l’indirizzo slave si compone di 7bit (111011x) di cui 6 statici e uno dinamico che varia in base al desiderato, ovvero collegando il pin SDO a GND si genera l’indirizzo 0x76(1110110) oppure collegandolo alla tensione di alimentazione (ad esempio tramite una resistenza di 1KΩ) si genera l’indirizzo 0x77(1110111). Nel nostro caso l’indirizzo scelto del dispositivo sarà 0x76.

Per completezza, le linee SCK (Serial Clock) ed SDI (Serial Data Input) dovranno essere collegate ai rispettivi pin lato micro:bit, con l’accortezza di connettere la linea SDI alla tensione di alimentazione tramite una resistenza (va bene anche un valore dell’ordine di 1KΩ).

I frame di lettura e scrittura tramite protocollo I2C sono illustrate in Fig. 4.

Fig. 4 Protocollo I2C

 

Vediamoli brevemente entrambi. L’operazione di scrittura consiste nell’inviare:
• l’indirizzo del dispositivo (slave) con il bit RW impostato a 0
• la coppia di registri denominati “Register address” che rappresenta il registro che si vuole scrivere e il registro “Register data” che dovrà contenere il dato che dovrà essere scritto nel “Register address”.

La procedura termina quando è intercettata la condizione di stop (P) caratterizzato da una transizione da basso ad alto del SDA mentre il SCL è alto. Mentre, per l’operazione di lettura:
• Si configura il bit RW a 0 e si invia il registro denominato “Register address” da leggere
• Con una nuova condizione di start “S”, si configura il bit RW a 1
• Successivamente il dispositivo invierà il dato del registro
• La procedura terminerà con un NOACKM ed una condizione di stop (P)

Le diciture ACKM, ACKS sono definite come Acknowledge lato master oppure lato slave che può indicare l’inizio di un’operazione indentificata da una forzatura bassa della linea dati durante l’impulso alto del clock (SCL). I registri interessati per la lettura temperatura sono 0xFA, 0xFB e 0xFC. Per i meno esperti, fortunatamente, come vedremo successivamente le librerie software utilizzate ci astrarranno da tutti questi dettagli e impostazioni, permettendoci di semplificare enormemente lo sviluppo software e rendendo la sua configurazione immediata, illustrando le funzioni più importanti per implementare la lettura dei dati d’interesse.

Il sensore luce

Per rilevare l’intensità luminosa, tra i vari moduli disponibili sul mercato la scelta è ricaduta sulla scheda LIGHTSENSOR, visibile in Fig. 5.

Fig. 5 Modulo Sensore luce

 

Questa board ha una resistenza fotosensibile (la fotoresistenza o il fotoresistore è una resistenza composta da uno strato semiconduttore che reagisce alla radiazione luminosa, sia emessa dal sole che da altra fonte luminosa) che consente di rilevare la luminosità della luce ambientale.

Il funzionamento di una fotoresistenza, è molto semplice perché varia il valore da 0Ω alla sua resistenza massima 10, 50, 100KΩ, in base alla tipologia di fotoresistenza, quando passa da una condizione di illuminazione piena al buio.

In pratica se la luce è sufficientemente forte il suo valore in ohm è tendente a zero, mentre man mano che la luce diminuisce, il suo valore aumenta fino alla resistenza massima.

Quindi riassumendo è un componente elettronico la cui resistenza è inversamente proporzionale alla quantità di luce che lo colpisce e ciò comporta che la corrente elettrica che transita attraverso tale componente è proporzionale all’intensità di una sorgente luminosa. In tale maniera si realizza una sorta di potenziometro attuabile tramite la luce, anziché tramite forze meccaniche o segnali elettrici. Come apprezzabile dalla Fig. 5, la scheda ha un pin header da 3 pin, ovvero:
• VCC : alimentazione 3.3-5V
• GND : zero volt
• SIG : uscita del segnale da 0V (valore) a 5V (valore alto)

Tale segnale è possibile collegarlo direttamente al micro:bit per poter rilevare i cambiamenti dell’intensità della luce ambientale.
Questa scheda, come altre, ha anche dei comodi fori di fissaggio per una facile installazione mediante delle viti.

Il sensore umidità

Per rilevare il contenuto di umidità del terreno abbiamo utilizzato la scheda IGROSENS visibile in Fig. 6: si può osservare come il modulo si compone di una sonda (collegata alla scheda principale mediante un doppio connettore), che a contatto con il terreno rileva le informazioni d’interesse riguardo l’umidità e le trasferisce direttamente al modulo sensore a cui è collegata; tali informazioni vengono poi “gestite” dalla scheda e tradotte in un segnale analogico e digitale.

Fig. 6 Modulo Sensore umidità

 

La scheda, oltre ai due pin di ingresso della lettura del sensore, dalla parte opposta ha un pin header da 4 vie, con i seguenti segnali come da numerazione dell’immagine in Fig. 6:
1. VCC : tensione stabilizzate di funzionamento a 3.3V-5V
2. GND : zero volt
3. DO : uscita digitale (Digital Output), che può assumere un valore basso o alto (0 e 1)
4. AO : uscita analogica (Analog Output)

Entrambe le uscite possono essere collegate direttamente al microcontrollore per rilevare il segnale d’interesse dell’umidità ma com’è facile immaginare i due contenuti informativi sono differenti e quindi assumono scopi diversi; ad esempio nel caso del DO, essendo un valore discreto alto/basso, impostando una soglia mediante il potenziometro presente sulla scheda, si può scegliere un valore per abilitare/disabilitare direttamente un relè, magari in grado di pilotare un modulo buzzer a formare un sistema di allarme di umidità del suolo; oppure leggerlo direttamente da microcontrollore per altri scopi, certo è che una rilevazione di questo tipo è una “lettura di soglia”.

Nel nostro caso, volendo essere più “fini” nella lettura dell’umidità del suolo, abbiamo scelto l’utilizzo del segnale analogico sul pin AO, che permette di rilevare tutto il range di valori e non una singola soglia d’allarme. Come da Fig. 1, questa scheda viene collegata (mediante pin AO) direttamente al micro:bit che tramite un convertitore analogico digitale consente di ottenere tutti i valori d’interesse.

La pompa dell’acqua e il driver

Infine, l’ultimo modulo utilizzato è quello di attuazione della pompa. Dopo aver rilevato e analizzato lo stato dei sensori, micro:bit “decide” se irrigare il suolo o meno ma anche quanto irrigarlo.

Nella scelta di sistema tra le varie tipologie di motori, abbiamo deciso di utilizzare direttamente una pompa ad acqua, visto che abbiamo immaginato di irrigare più piante (pensando ad un giardino).

La mini pompa a immersione scelta (cod. DC12V3WPUMP) è acquistabile su sito futurashop.it, ed è in grado di far risalire un liquido in superficie con una portata di 200 litri/ora (circa 3,3 litri/minuto).

Realizzata in ABS, dotata di motore in corrente continua, albero motore in acciaio inossidabile, statore e circuito sigillati con resina epossidica. Nella parte frontale è presente un foro con apertura di aspirazione regolabile, mentre nella parte superiore è disponibile l’attacco per il tubo di uscita del liquido.

Tra le varie caratteristiche abbiamo, piccole dimensioni, alta efficienza, basso consumo e basso rumore (meno di 35 dB), eccellente durata: più di 30.000 ore.

A questo punto, con anche la pompa ad acqua a disposizione, l’unico elemento mancante è un circuito di pilotaggio della stessa, che per semplicità è stato scelto dalla componentistica comunemente utilizzata anche per il modellismo dinamico, ovvero un Driver basato su MOSFET (Metal Oxide Semiconductor Field Effect Transistor), nient’altro che un circuito elettronico integrato in grado di regolare la velocità del motore (nel nostro caso la pompa ad acqua) in base ad un segnale di pilotaggio (cod. MOSDRIVER), ma vediamo meglio come funziona.

Le interconnessioni possono essere schematizzate come nella Fig. 8, ovvero per semplicità possiamo dire che il blocco Driver ha a bordo l’elettronica che pilota mediante le due fasi il motore della pompa ad acqua e ne varia la velocità a seconda del segnale d’ingresso proveniente dal micro:bit, perciò sono previsti:
• un’alimentazione esterna proveniente generalmente da una batteria a 12V in grado di erogare fino a 1A, con la quale viene alimentato direttamente il motore;
• un connettore con un segnale di controllo e le alimentazioni per l’interfaccia digitale.

Fig. 8 Schema Controllo Motore Pompa Acqua

 

Il segnale di controllo è identificato come PWM (Pulse Width Modulation), una tecnica di modulazione che consente di variare la larghezza dell’impulso con periodo costante; perciò il driver acquisisce questo segnale e genera un segnale d’uscita destinato a regolare la velocità del motore che collegato alla pompa dell’acqua consentirà di irrigare le piante.

L’ingresso PWM del regolatore dovrà essere collegato al pin 9 del micro:bit che si occuperà del controllo e quindi della generazione del PWM come vedremo a breve nel setup di sistema.

Per completezza e per dare un’idea di quanto appena illustrato, si riporta in Fig. 9 il Driver di esempio.

Fig. 9 Principio di funzionamento del driver Mosfet

Setup

Dopo aver illustrato le caratteristiche di ogni componente del progetto, prima di passare all’implementazione software su micro:bit e alla presentazione dell’app Android, vediamo brevemente le interconnessioni fisiche presentate a livello logico nel diagramma a blocchi di Fig. 1 e il setup di sistema tra il micro:bit e le varie periferiche.

Riconsiderando il port expander, con riferimento all’immagine di Fig. 2, abbiamo scelto di utilizzare la tensione di alimentazione V1, il riferimento G ed i connettori gialli per le periferiche. Partendo dalle considerazioni sulle tensioni di alimentazione è importante impostare la linea V1 su 5V collegando i due jumper verdi come mostrato in figura.

Per semplicità i pin d’interesse destinati alle periferiche vengono riportati in Tabella 1 ed esplicitate le varie connessioni tra schede attraverso i loro pin header, ma vediamoli insieme. Partiamo dalla considerazione del sensore di temperatura che richiede un setup dedicato per la selezione e configurazione del protocollo di comunicazione I2C.

I pin utilizzati sono:
• Vin e GND : che rappresentano alimentazione e zero volt
• SDO : collegato al riferimento G per definire l’indirizzo dello slave nella comunicazione I2C
• CS : (chip select) collegato a V1 attraverso una resistenza di 1KΩ in configurazione pull-up
• SCK e SDI : necessari per la comunicazione (particolare attenzione per SDI che dovrà essere collegato in pull-up con una resistenza di 1KΩ)
• 3V : non collegato

Tabella 1 Connessioni fisiche tra i pin header delle varie schede

 

Riguardo il sensore di umidità, non richiede configurazioni particolari come mostrato in Fig. 6, infatti:
• Vin e GND : rappresentano le alimentazioni
• D0 : non verrà utilizzato
• A0 : deve essere collegato al pin 0 del micro:bit

Così come il sensore umidità, anche quello sensore solare richiede un pin (D0), che dovrà essere collegato al pin 1 del micro:bit con le rispettive alimentazioni Vcc e GND. Infine il Driver per il controllo motore avrà per la parte digitale di pilotaggio motore in PWM il pin 9 del micro:bit e due pin per le alimentazioni come mostrato in Fig. 8.

Il software

Ora che il nostro setup è completo, possiamo procedere con l’attività di sviluppo software così da “animare” il sistema. Come analizzato in precedenza la funzionalità principale è monitorare lo stato/ambiente in cui si trovano le piante ed eventualmente irrigarle, perciò pensando a questa funzionalità come un algoritmo, abbiamo che le funzionalità principali dovranno essere:
• Lettura temperatura ambiente
• Lettura umidità del terreno
• Lettura irradiazione luminosa
• Pilotaggio motore per la pompa dell’acqua
• Logiche di monitoraggio pianta
• Trasmissione informazioni via Bluetooth Low Energy (BLE) verso APP Android specifica del progetto

Come è immediato immaginare dall’ultimo punto, si avrà anche una funzione in remoto per il monitoraggio e l’irrigazione che vedremo a breve.

Per lo sviluppo del software verrà utilizzata la tool chain MakeCode della Microsoft, descritta nel precedente articolo, che tramite una programmazione a blocchi rende la piattaforma accessibile e semplice da utilizzare per tutti.

Prima di passare alla scrittura del codice è necessario importare tutte le librerie necessarie e in particolare tramite l’opzione estensioni presente in “Avanzati” è possibile cercare e aggiungere la libreria BMP280 come mostrato in Fig. 10 (a sinistra). Nel pannello delle librerie verranno messe a disposizione tutte le funzioni necessarie per la gestione del componente d’interesse come evidenziato nella Fig. 10 (a destra).

 

Fig. 10 Estensioni Sviluppo Software

 

Il primo passo da seguire per la scrittura del codice è la creazione e l’inizializzazione delle variabili necessarie per eseguire le funzioni sopra elencate e quindi con riferimento alla Fig. 11, abbiamo pensato di creare le seguenti variabili:
• “EnableBLETx” utilizzata per verificare se il dispositivo è connesso via BLE
• “BMP280_temp” per la lettura della temperatura
• “LandHum” per la lettura dell’umidità terreno
• “Pump_sts” per indicare lo stato della pompa dell’acqua
• “Sun_rad ” per la lettura dell’irradiazione solare
• “cmd_motor ” per definire la posizione dell’impulso del segnale PPM
• “time_50ms ” usata per temporizzare il sistema

Sempre in Fig. 11, dopo la creazione e l’inizializzazione delle variabili abbiamo impostato il registro indirizzo per il componente BMP280 (0x76 come definito precedentemente), tramite la funzione disponibile nell’apposita libreria.

Fig. 11 Inizializzazione Variabili

 

Successivamente è stato inizializzato il servizio di bluetooth disponibile nella sezione “Bluetooth – Altro” e definita Stringa “Hello” da visualizzare su matrice led disponibile nella sezione “Fondamentali”.

A questo punto, se le variabili sono state inizializzate correttamente, si può procedere con la verifica del dispositivo quando viene connesso via bluetooth, perciò dalla sezione Bluetooth si deve selezionare e aggiungere il blocchetto “quando bluetooth si connette” e infine impostare la variabile “EnableBLETx” al valore 1 utilizzando la sezione “Variabili” come in Fig. 12.

Fig. 12 Rilevazione Ble

 

Finita la parte di setup del micro:bit, procediamo con l’implementazione delle varie “routine”, cominciando con la lettura dei sensori e l’eventuale pilotaggio della pompa dell’acqua. Per avere una lettura temporizzata abbiamo impostato la variabile “time_50ms” al valore di 50 in modo tale che in tale tempo si può procedere con la gestione delle periferiche.

La funzione incremento è disponibile nella sezione Matematica mentre dalla sezione Logica è possibile trascinare ed aggiungere il blocco di condizione “if – else” (se – allora), all’interno della quale è necessario azzerare la variabile “time_50ms”.

Con riferimento alla Fig. 13, è stata impostata la gestione dei carichi come segue:
• Nella sezione Pin, aggiungere il blocco di scrittura del segnale analogico selezionando il pin P9 del micro:bit e collegare la variabile “cmd_motor” opportunamente scalata (la funzione mappa è disponibile nella sezione Matematica)
• Sempre nella sezione Pin configurare il segnale analogico in scrittura sul pin P9 per la generazione di un segnale periodico con frequenza 1KHz e duty cycle associato alla variabile “cmd_motor” che dipende dalle logiche di controllo.
• Impostare la variabile “LandHum” al valore acquisito dal segnale analogico P0
• Impostare la variabile “SunRad” al valore acquisito dal segnale digitale P1
• Impostare la variabile “BMP280_temp” al valore acquisito tramite la funzione “get temperature” della libreria BMP280

I blocchetti “chiamata plant_logics” e “chiamata BLE_write” sono due funzioni che consentono di definire rispettivamente le logiche di funzionamento del dispositivo e la trasmissione dei dati via Bluetooth LE, perciò si rimanda alla guida delle librerie per maggiori dettagli.

Fig. 13 Gestione Periferiche

 

Dato che non sempre sono presenti nelle librerie tutte le funzioni d’interesse, è possibile crearne di nuove partendo dalla sezione Funzioni che vi consentirà di aggiungere un nome, i parametri e se necessario di un valore di ritorno, tuttavia nel nostro codice le funzioni saranno di tipo void per cui non verrà restituito alcun valore.

Con tale funzionalità è stata creata la funzione “plants logics” assegnati tre parametri (identificati come numero); per semplicità di lettura codice faremo riferimento ai nomi assegnate in Fig. 14, ovvero: Temperature, Radiation e Humidity, che consentiranno di definire le logiche di funzionamento del dispositivo.

La logica implementata prevede che in base ai valori acquisti dai sensori se i limiti relativi ad umidità del terreno, esposizione solare e temperatura superano determinate soglie, allora è necessario che il comando del driver di pilotaggio pompa d’acqua venga aggiornato insieme allo stato della pompa.

Fig. 14 Logiche di Controllo

 

Se la funzione è stata realizzata correttamente sarà presente nella sezione Funzioni, pronta per essere selezionata e trascinata all’interno del ciclo d’interesse (si veda Fig. 14), per poi assegnare le variabili relative ai sensori acquisiti.

La seconda funzione da realizzare (come appena analizzato per la precedente funzione) riguarda la scrittura dati via Bluetooth che in questo caso richiede quattro parametri come si vede in Fig. 15.

Anche in quest’occasione conviene assegnare nomi legati alla funzionalità (Temp, Hum, Sun, Pum); successivamente conviene aggiornare lo stato della matrice di Led con “C” se il dispositivo si è accoppiato correttamente oppure in caso contrario con “D”, in base allo stato della variabile “EnableBLETx”.

Fig. 15 Trasmissione Dati via BLE

 

Se il pairing (accoppiamento) è andato a buon fine, allora effettuiamo la conversione dei dati in stringhe separate dal carattere underscore (“_”).

Se non vengono segnalati errori di coding allora è possibile collegare il micro:bit e procedere con l’aggiornamento del firmware appena realizzato. Per verificarne le funzionalità (lettura periferiche e invio BLE) è possibile utilizzare un’applicazione open source, ovvero Android Serial Bluetooth Terminal scaricabile dalla piattaforma Play Store. Perciò la prima cosa da fare è verificare che il dispositivo micro:bit sia accoppiato (paired) correttamente allo smartphone mediante il Bluetooth per poi avviare l’applicazione Android Serial Bluetooth Terminal. Il risultato è mostrato in Fig. 16:

Per quanto appena illustrato, il micro:bit trasmette via BLE i dati acquisiti dai sensori, perciò considerando la prima sequenza “_28_761_0_1_” il dispositivo legge una temperatura di 28 gradi, l’umidità del terreno è alta, è sottoposto a sorgente luminosa e la pompa è attiva.

Fig. 16 Verifica Funzionalità

L’app per micro:bit

L’ultimo passaggio del progetto Smart Monitoring Plant è un’applicazione Android dedicata che consente di guidare l’utente nella gestione delle varie piante configurate e visualizzarne lo stato mediante le informazioni acquisite. Nella Fig. 17, viene mostrata l’interfaccia dell’app che visualizza tutte le piante inserite e configurate dall’utente, centralizzando sul proprio smartphone il controllo attraverso un’unica app.

Come si può notare nell’esempio di Fig. 17, sono state configurate due tipologie di piante che vengono rilevate mediante la periferica bluetooth low energy (BLE), distinte attraverso il MAC del micro:bit e scambiano tutte le varie informazioni configurate precedentemente.

Fig. 17 Sistema Plant Smart Monitor

 

Passiamo ore alla descrizione dell’applicazione ma senza scendere nel dettaglio implementativo perché non scopo di quest’articolo.

Avviando l’app viene mostrata la Fig. 18a, ovvero una schermata iniziale dalla quale è possibile accedere alla seconda schermata (Fig. 18b) che presenta un’area (evidenziata in rosso) dedicata alle schede delle piante. In aggiunta è presente un tasto per rintracciare il dispositivo micro:bit (SMART MONITOR PLANT), un indicatore relativo allo stato della connessione (“Status”) e un tasto, identificato come floating button, per aggiungere la scheda pianta (“+”). In questo caso non è presente ancora nessuna pianta configurata perciò si avrà una schermata vuota, ma passiamo all’inserimento di una pianta in particolare.

Per aggiungere una pianta remiamo sul tasto “+” che ci porta alla schermata Fig. 18c, in cui vengono richieste tutte una serie di informazioni relative alla propria pianta da inserire, come ad esempio il nome, la tipologia, il terreno (questo permette di fare un controllo più fine dello stato della pianta a partire anche dalla tipologia di terriccio) e l’indirizzo MAC del dispositivo associato.

Dopo aver salvato i dati della pianta, questa verrà memorizzata e monitorata, reiterando la procedura per altre piante si arriva ad ottenere quanto mostrato come esempio in Fig. 18d.

Fig. 18 Le schermate principali dell’APP

 

Per completare la procedura d’inserimento e collegare il particolare sistema PSM alla pianta appena configurata, mediante il tasto “SMART MONITOR PLANT” viene visualizzata un’altra schermata e mostrati tutti i dispositivi bluetooth attivi, tra questi dispositivi va individuato il “BBC Micro:bit” (come da Fig. 19a) della particolare pianta d’interesse che con il suo indirizzo MAC risulta allineato a quanto appena inserito nei dettagli della stessa.

Quindi cliccando sul nome del dispositivo (BBC Micro:bit), si ritorna alla schermata di Fig. 19b e se il dispositivo risulta presente in termini di indirizzo MAC, allora sulla scheda della pianta comparirà il testo “FOUND” e lo stato della connessione aggiornato, altrimenti bisogna rifare la procedura del passo precedente.

Fatto ciò, possiamo monitorare la pianta cliccando sulla scheda che riporterà le informazioni relative a temperatura, umidità, radiazione solare, stato della pompa dell’acqua ed eventuali suggerimenti per l’utente come mostrato nella Fig. 19c.

Fig. 19 App Sistema Monitoraggio Intelligente Piante

Download

 

Conclusioni

Arriviamo a termine del progetto “Plant Smart Monitor” illustrato a tutti i livelli, partendo dal punto di vista hardware e quindi nella configurazione del micro:bit, alla scelta dei sensori utili all’acquisizione di temperatura, umidità del suolo e radiazione solare, alla scelta del driver per il pilotaggio della pompa dell’acqua, all’implementazione del software per acquisire le informazioni, definire le logiche di controllo e trasmettere i dati via Bluetooth ed infine alla configurazione dell’app Android dedicata, grazie alla quale si è in grado di monitorare lo stato della pianta e di informare prontamente l’utente.

Questa può essere considerata come una prima implementazione di un sistema intelligente per il monitoraggio piante in completa ottica “green” ma ovviamente è espandibile a tutti i livelli, per esempio considerando di poter fornire all’utente la possibilità di condividere con altri utenti la propria scheda pianta; oppure arricchendo i database con più informazioni in base alle tipologie di piante e terreno utilizzato per rendere ancora più verticale il controllo dello stato del sistema.

4 Commenti

  1. Buongiorno Boris, sarei interessato a questo progetto. Ma dove posso trovare l'applicazione Android dedicata? Grazie, Paolo.

Lascia un commento

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

Menu