Monitoraggio Ambientale Smart: Dati in Tempo Reale sul Cloud

Rileva i parametri ambientali e ne pubblica i dati su Cloud. Puรฒ funzionare per anni alimentato con due semplici batterie stilo, senza la necessitร  di prese di corrente.

Puรฒ capitare che sorga lโ€™esigenza di monitorare i principali dati ambientali di una stanza o di un luogo della propria casa o di qualsiasi altro genere di edificio.

Ad esempio, volete sapere se lโ€™ambiente dove stoccate il pellet per la vostra stufa rispetta le caratteristiche richieste di temperatura e umiditร , oppure se il ripostiglio dove mettete alcuni prodotti alimentari รจ veramente un โ€œluogo fresco e asciuttoโ€ oppure, ancora, se la cantina dei vostri vini ha la giusta temperatura e umiditร .

Ebbene in tutti questi casi potrebbe farvi comodo visualizzare sullo smartphone tutti i parametri necessari, anche quando siete fuori casa.

Il circuito proposto in questo articolo serve proprio a monitorare i principali parametri ambientali, lโ€™unica necessitร  รจ quella di disporre di un segnale WiFi con accesso a Internet, infatti i dati raccolti sul campo saranno inviati ad un cloud on-line in modo wireless.

Il cloud ha lo scopo di raccogliere e memorizzare i dati inviati e di rappresentarli in un formato facilmente analizzabile, come ad esempio un grafico.

Se il segnale della vostra rete WiFi รจ sufficientemente potente, potete collocare il circuito appena fuori casa ed utilizzarlo come una vera e propria stazione meteo.

Particolare attenzione รจ stata posta nel sistema di alimentazione del nostro circuito, perchรฉ consci del fatto che unโ€™altra apparecchiatura alimentata dalla rete domestica sarebbe stata poco gradita, abbiamo preferito una piรน conveniente alimentazione a batteria, come la gran parte dei dispositivi commerciali simili.

Questโ€™ultimo punto รจ stato il piรน gravoso dal punto di vista progettuale, perchรฉ serviva un circuito che consumasse cosรฌ poco da poter funzionare per anni con delle economiche batterie e ci ha fatto scartare le classiche schede di prototipazione disponibili in commercio.

La scelta invece del microcontrollore per la gestione del progetto รจ stata immediata anche perchรฉ occorre sempre tenere in considerazione i costi di realizzazione, pertanto un economico modulo ESP8266 รจ la scelta ideale.

Ricordiamo brevemente che questo dispositivo contiene un MCU (MicroController Unit) a 32 bit ed un modulo WiFi ad alte prestazioni, ma soprattutto รจ stato pensato per un uso a batterie, pertanto dispone di alcune funzionalitร  atte a ridurre il consumo di corrente.

Sfortunatamente questo modulo viene spesso commercializzato su schede di prototipazione che integrano altri componenti, con il risultato di peggiorare sensibilmente il consumo in corrente, tanto da dover pensare da zero una nuova scheda elettronica.

Invece di progettare una specifica scheda per questo progetto abbiamo pensato di realizzare una generica scheda basata su ESP8266 con i soli componenti essenziali, riutilizzabile in tutti i progetti di IoT che prevedano unโ€™alimentazione a batteria.

Chiameremo questa nuova scheda ESP-minimal, perchรฉ contiene solo il minimo numero di componenti per utilizzare agevolmente il modulo basato sullโ€™ESP8266.

SCHEMA ELETTRICO DELL’ESP MINIMAL

Dallโ€™analisi dello schema elettrico emerge la semplicitร  del circuito, essenzialmente alcune resistenze per disporre i vari pin al livello logico adeguato, ed alcuni condensatori di disaccoppiamento, nessun convertitore USB/Seriale che dovrร  necessariamente essere esterno.

Il resistore R1 รจ posto sulla linea del reset (pin CH-PD), che viene azionata manualmente dal pulsante S2 quando si desidera resettare il modulo ESP.

Il condensatore C3 รจ necessario per utilizzare la funzione Wake on from sleep, dettaglio che spiegheremo piรน oltre nellโ€™articolo. Il resistore R2 รจ connesso alla linea di programmazione (pin GPIO_0) che viene azionata dal pulsante S1 quando si desidera programmare il modulo ESP.

I resistori R3 e R4 sono necessari per porre rispettivamente il pin GPIO_2 a livello alto ed il pin GPIO_15 a livello basso in modo che il modulo ESP esegua allโ€™avvio il corretto boot con lโ€™esecuzione del programma in memoria.

Non abbiamo previsto neppure il classico stabilizzatore di tensione, assolutamente non necessario in quanto il circuito sarร  alimentato da due pile formato AA oppure AAA che forniranno giร  la corretta tensione di alimentazione di 3 volt, ovviando al problema della quiescent current (corrente assorbita dallo stabilizzatore in assenza di carico applicato).

Il modulo ESP accetta tensioni di alimentazione comprese tra 2,5V e 3,6V pertanto non รจ compatibile con una singola cella Li-Po che a piena carica che raggiunge i 4,2V.

REALIZZAZIONE PRATICA DELL’ESP MINIMAL

Per permettere a tutti una facile realizzazione lo stampato รจ a doppia faccia e non abbiamo usato componenti SMD, tranne il modulo ESP. Visto il loro numero esiguo questo non crea eccessivi problemi; potete vedere il circuito completato in Fig. 1.

รˆ possibile aggiungere la serigrafia sui pin dei due connettori J1 e J2 ed eventualmente due streep maschio in modo da poter utilizzare il circuito su di una breadboard per eventuali esperimenti, il formato รจ compatibile con le schede Arduino MKR.

Per la programmazione serve un convertitore USB-Seriale esterno pertanto abbiamo previsto un apposito connettore (J3) che risulta pin to pin compatibile con i prodotti commerciali Sparkfun FTDI e Cytron USB to UART converter, questโ€™ultimo รจ distribuito dalla Futura Elettronica (www.futurashop.it) con il codice 1686-USBTOUART.

In alternativa qualsiasi altro USB to UART converter (anche quelli a quattro pin) potrร  andare bene in quanto i pin DTR e CTS non vengono utilizzati.

Quando si desidera programmare il modulo utilizzando lโ€™IDE di Arduino รจ necessario abilitare il modulo alla programmazione tramite la seguente sequenza: premere e mantenere premuto il pulsante PRG, premere per un istante il pulsante RST, quindi rilasciare il pulsante PRG.

Questa procedura deve essere eseguita prima di caricare lo sketch per predisporre il modulo ESP alla ricezione del programma.

Se avviate la programmazione senza aver eseguito la procedura, il debug dellโ€™IDE di Arduino lo segnalerร  scrivendo una serie di puntini e lineette, ma รจ sufficiente predisporre il modulo ESP alla programmazione affinchรฉ questโ€™ultima venga avviata (Fig. 2).

Al termine basta premere brevemente il pulsante di reset. J3 รจ un connettore strip passo 2,54 mm, mentre i connettori J1 e J2 possono essere omessi se si pensa di saldare direttamente eventuali componenti aggiuntivi.

Fig. 1 Il circuito completato.

 

Fig. 2 Procedura di programmazione.

 

UTILIZZO DELL’ESP8266 CON SENSORE BME280

Inizialmente il progetto prevedeva lโ€™utilizzo di un semplice sensore DHT11 ma ben presto ci siamo resi conto dei sui limiti, primo fra tutti quello di non poter misurare temperature negative.

Ulteriori limiti sono dovuti alla minima tensione di alimentazione di 3V decisamente troppo elevata se si vuole sfruttare appieno la capacitร  di due pile alcaline poste in serie, inoltre ha una corrente in stand-by di ben 100 ฮผA decisamente troppo elevata.

Certo, avremmo potuto prevedere un circuito che togliesse alimentazione al sensore quando non utilizzato, ma in tal caso avremmo dovuto fare i conti con il tempo necessario al sensore per rilevare correttamente le grandezze dopo aver fornito alimentazione (warm-up).

Decisamente piรน performante รจ, invece, il sensore BME280 che oltre a misurare temperatura e umiditร  rileva anche la pressione atmosferica.

Viste le dimensioni davvero minuscole questo sensore viene normalmente commercializzato giร  saldato su di una breakout board, decisamente piรน facile da usare; a noi interessa la versione senza stabilizzatore di tensione e senza traslatori di livello.

Il collegamento con la scheda รจ davvero semplicissimo ed รจ riportato in Fig. 3.

Per pura comoditร  lโ€™alimentazione positiva รจ stata prelevata dal vicino pad del condensatore C1 e lโ€™alimentazione negativa dal pin 14, posizionato in stato di LOW via software.

Per questa applicazione รจ necessario cortocircuitare il pin 16 con il pin RST.

In un uso reale di questo circuito ipotizziamo di aggiornare i dati ad intervalli di unโ€™ora in quanto ventiquattro misure al giorno risultano essere piรน che sufficienti.

Visto che il circuito rimane inutilizzato per la maggior parte del tempo potremmo sfruttare la modalitร  deep sleep del microcontrollore ESP con wake up automatico dopo un certo tempo prefissato.

Lโ€™istruzione messa a disposizione nellโ€™IDE di Arduino si chiama ESP.deepSleep(TimeToSleep).

Durante la modalitร  di deep sleep tutti i circuiti interni sono disattivati tranne il modulo RTC, che rimane in funzione aggiornando un contatore interno ad intervalli regolari di 1ฮผsec, lโ€™assorbimento in corrente scende drasticamente a pochi microampere.

Il modulo RTC, allo scadere del tempo impostato dalla variabile TimeToSleep, porta il pin 16 a livello basso, che essendo connesso al pin RST del MCU, consente il reset del modulo ed il riavvio programma dallโ€™inizio. Il condensatore C3 ha lo scopo di prolungare la durata dellโ€™impulso di reset per il microcontrollore.

Una volta risvegliato, il modulo legge i valori forniti dal sensore BME280, attiva il WiFi e si connette alla rete per inviare i dati al cloud, operazione che impiega circa 6 secondi.

Siccome questa operazione verrร  compiuta ad intervalli di unโ€™ora avremmo un circuito che rimane attivo per 6 secondi ogni 3.600 secondi (ogni ora…) con una rilevante diminuzione dellโ€™energia assorbita. Il protocollo utilizzato per trasferire i dati dal modulo ESP al cloud รจ MQTT particolarmente apprezzato per la sua efficienza (vedere riquadro a parte).

Nel nostro primo prototipo, alimentato con due stilo formato AA di buona marca, siamo giunti a 15 mesi di funzionamento ininterrotto e anche se la tensione รจ scesa fino a 2,41V, sta ancora funzionando nel momento in cui scriviamo questo articolo.

Nella versione proposta abbiamo optato per due pile formato mini stilo ed il tutto risulta particolarmente compatto tanto da rientrare in una scatola di 9x5x1,5cm, come visibile in Fig. 4, ipotizziamo comunque una durata del sistema di quasi un anno.

Lโ€™effettiva durata dipende da diversi fattori, tra cui lโ€™intensitร  del segnale WiFi, la velocitร  del vostro router a negoziare la connessione del dispositivo e la qualitร  dellโ€™accesso ad Internet, fattori difficilmente valutabili a priori.

Vista la semplicitร  del circuito non sarร  possibile alimentare contemporaneamente la scheda da batteria e convertitore USB/Seriale pertanto dovrร  essere presente lโ€™una o lโ€™altra.

Fig. 3 Schema per il collegamento del sensore BME280.

Fig. 4 Circuito assemblato ed inserito nel contenitore.

CONFIGURAZIONE DEL CLOUD THINGSPEAK

Tra i vari cloud a disposizione abbiamo deciso di utilizzare Thingspeak perchรฉ, come vedremo, รจ quello che permette una maggiore personalizzazione dei dati raccolti offrendo la possibilitร  di una post analisi dei dati tramite appositi script.

Accediamo alla pagina principale e clicchiamo su Get start for free per accedere alla pagina di registrazione che, come dice il nome stesso, รจ del tutto gratuita.

La pagina iniziale รจ fatta veramente bene e comprende una serie di aiuti visualizzati sulla destra, compresi degli esempi specifici suddivisi per board di sviluppo.

A noi interessa creare un nuovo canale (New Channel) come visibile in Fig. 5.

Cliccando su setting avremo la possibilitร  di configurare il nostro cloud inserendo i nomi del progetto e dei campi che conterranno i dati inviati dal nostro circuito; prendete spunto dalla Fig. 6.

Da questo tab dovete trascrivervi il valore ID Canale che servirร  ad identificare questโ€™area dati.

 

Fig. 5 Creazione nuovo canale.

 

Fig. 6 Configurazione di un nuovo canale.

 

Successivamente cliccate sul tab Chiavi API e trascrivetevi il valore della Chiave API di scrittura (Fig. 7), che sarร  la password per accedere al cloud da parte della nostra scheda.

Cliccando sulla tab Private View vedrete una preview dellโ€™aspetto finale della dashboard con inseriti per default i grafici relativi ai campi specificati, cliccando sullโ€™icona a forma di matita potrete anche configurare la relativa visualizzazione, come visibile in Fig. 8 e Fig. 9. Con gli ultimi aggiornamenti apportati al sito avrete la possibilitร  di inserire anche indicatori numerici ed a lancetta (gauge).

A questo punto il cloud รจ pronto a ricevere i vostri dati e a visualizzarli. Sul tab Sharing potete impostare la condivisione in tre modalitร : solo visualizzazione privata, pubblica (visibile a tutti) oppure visibile alle sole persone indicate.

Decisamente semplice ed immediato anche se graficamente non molto accattivante rispetto ad altri cloud, ma la vera forza di thingspeak รจ la completa integrazione con Matlab, che permette di aggiungere degli script per personalizzare lโ€™analisi dei dati raccolti, aprendo diverse ed interessanti possibilitร  che scopriremo piรน avanti nellโ€™articolo.

 

Fig. 7 Generazione chiave API.

 

Fig. 8 Tab private view.

 

Fig. 9 Configurazione dei grafici.

PROGRAMMAZIONE DELL’ESP MINIMAL

Per la programmazione occorre tenere in considerazioni i consumi del modulo ESP nelle varie fasi di funzionamento; in Fig. 10 viene rappresentato un grafico temporale semplificato (non in scala) con i principali stati di funzionamento ed i relativi assorbimenti in corrente.

Dopo ogni risveglio il modulo ESP interroga il sensore BME280 acquisendo i valori di temperatura, umiditร  e pressione.

Il sensore รจ configurato per rimanere sempre in uno stato a basso consumo (ma non spento) per cui รจ in grado di fornire i valori dei parametri ambientali in modo molto veloce senza la necessitร  di un warm-up.

Questa modalitร  รจ chiamata weather monitoring e la lettura avviene forzatamente da parte del modulo ESP, terminata la quale il modulo รจ di nuovo in stand-by.

In questa fase la sezione WiFi del modulo ESP รจ spenta e lโ€™assorbimento รจ di pochi milliampere, il sensore BME280 assorbe solo una manciata di microampere e solo nel momento in cui avviene la lettura dei dati.

Successivamente viene accesa la sezione radio e si provvede alla connessione alla rete WiFi operazione che nel nostro caso si conclude in pochi secondi; nel caso la connessione non avvenisse nellโ€™arco di un tempo massimo di 10 secondi il modulo ritornerebbe in deep sleep e riproverebbe la connessione al prossimo risveglio.

Appena connessa alla rete la scheda contatta il broker MQTT di Thingspeak per inviargli tutti i dati, compresi quello della tensione ai capi della batteria, dopodichรฉ spegne il WiFi ed entra nuovamente nello stato di deep sleep.

Come potete osservare il massimo assorbimento, che si aggira intorno agli 80 mA, dura solo per pochissimi secondi, a tutto vantaggio del risparmio energetico.

Lo sketch si appoggia alla libreria PubSubClient reperibile allโ€™indirizzo https://github.com/knolleary/pubsubclient che fornisce la funzionalitร  di client per pubblicare messaggi verso un server che supporta il protocollo MQTT.

Fig. 10 Grafico temporale delle operazioni svolte con i relativi consumi.

 

Prima di caricare lo sketch รจ necessario configurare alcune righe di programma in quanto alcune funzionalitร  sono ad accesso protetto.

Nel listato principale la variabile DEBUG se impostata su true permette di abilitare i messaggi su Serial Monitor di Arduino, utile nei primi test per verificare che tutto funzioni correttamente come evidenziato in Fig. 11.

Se su Serial Monitor attivate la funzione โ€œvisualizza orarioโ€ avrete la possibilitร  di analizzare con estrema attenzione i tempi delle varie operazioni.

Le credenziali di accesso sono tutte raccolte nel file secrets.h (Listato 1) esse dovranno essere modificate con le credenziali di accesso alla vostra rete WiFi e con i codici di accesso forniti da Thingspeak, come indicato precedentemente.

Fig. 11 Messaggi di debug su Serial Monitor.

Listato 1

#define SECRET_SSID โ€œMySSIDโ€ // replace MySSID with your WiFi network name
#define SECRET_PASS โ€œMyPasswordโ€ // replace MyPassword with your WiFi password
#define channelID 123456 // Thingspeak channel number
#define writeAPIKey โ€œABCDEFGHILMNOPQRโ€ // Thingspeak API Key

 

Per evitare di dover attendere tempi troppo lunghi, in fase di debug potete modificare anche il parametro UPDATE_INTERVAL_SECONDS per ridurre il tempo di invio a solo un minuto.

Completata la programmazione il circuito รจ giร  operativo ed inizia lโ€™invio dei dati che saranno disponibili sul portale di Thingspeak, ad esempio il grafico della pressione apparirร  come quello visibile in Fig. 12.

Concludiamo la trattazione descrivendo alcune feature messe a disposizione da Matlab e che sono integrate con il portale di Thingspeak e permettono di aggiungere delle analisi dei dati personalizzate, anche molto sofisticate; in alto a destra sono disponibili due opzioni: una denominata MATLAB Analysis e lโ€™altra MATLAB Visualization.

La prima permette di elaborare ulteriormente i dati ricevuti, mentre la seconda permette di visualizzare sulla dashboard nuovi dati ricavati analizzando i dati ricevuti, in entrambi i casi sono disponibili svariati esempi da cui partire.

Per la nostra applicazione abbiamo sfruttato la seconda opzione per visualizzare i dati attuali (gli ultimi ricevuti) ed anche il valore minimo e massimo rilevato nella giornata (Fig. 13).

Cliccando sullโ€™icona a forma di ovale in alto a destra di un grafico (Field Chart IFrame) potete vedere il relativo codice html che puรฒ essere copiato ed inserito in una pagina web qualora la si volesse integrare con la visualizzazione del grafico.

Sul nostro sito web potrete trovare i file gerber per realizzare il PCB (anche in formato PDF) ed il software di programmazione; รจ disponibile anche una versione adatta al sensore DHT11.

Fig. 12 Esempio di grafico della pressione.

 

Fig. 13 Esempio dei dati elaborati e visualizzati.

 

Download

5 Commenti

  1. Salve, a quale indirizzo del sito si possono trovare "i file gerber per realizzare il PCB (anche in formato PDF) ed il software di programmazione"? Grazie.
  2. Buongiorno, รฉ possile che nella creazione del canale su Thingspeak, sia necessario configurare un device MQTT? Perchรฉ nello sketch, la richiesta fallisce continuamente (void recconect() con codice di errore -4). Suppongo sia da inserire nel codice il clientID e la password del device MQTT, creato da thingspeak. La ringrazio per la disponibiltรก, e le chiedo se ci fosse un modo per ovviare a questo errore. Buona giornata

Lascia un commento

Il tuo indirizzo email non sarร  pubblicato.

Menu