Arduino M0 PRO dispone di tanti ingressi analogici e tale possibilità estende il suo campo d'azione. Ad esso, infatti, si possono collegare tanti sensori di diverse tipologie, con lo scopo di monitorare qualsiasi andamento elettrico, nel tempo. Il progetto sfrutta proprio questa possibilità e, anche se l'idea non è del tutto nuova, implementa un valido sistema di monitoraggio di temperatura e di umidità, per ciascuna stanza di un appartamento. Il prototipo presentato in questo articolo, inoltre, visualizza al PC la piantina della casa e, per ogni stanza, presenta i dati della temperatura e dell'umidità, in tempo reale. Inoltre è possibile prevedere una sorta di avvertimento o di allarme nel caso in cui i valori misurati superino le tolleranze impostate.
Introduzione
Quando ho ricevuto Arduino M0 PRO la prima cosa che mi è venuta in mente è stata la realizzazione di un sistema che potesse monitorare i dati climatici di un appartamento, visto che la scheda è corredato di ben sei ingressi analogici. Con gli ADC, il progettista vede allargare infinitamente il suo campo d'azione permettendogli lo sviluppo di tantissimi sistemi di acquisizione di vario genere. I canali ADC hanno una risoluzione di 12 bit, proprietà che consente precisi campionamenti, nell'ordine dei millivolt. I sei ingressi presenti sono contrassegnati con A0-A5, come visibile in figura 1, e seguono lo stesso layout di Arduino UNO. Essendo l'ingresso analogico a 12 bit, può fornire ben 4096 valori digitali differenti. Il riferimento della misura della tensione analogici è di 3,3 volt rispetto a massa (GND), ma è possibile cambiarlo utilizzando il pin AREF e prevedendo, nei propri sketch, la funzione analogReference(). Questa esigenza è governata dal tipo di sensore utilizzato. Nelle prossime sezioni vedremo se è il caso di cambiare la tensione di riferimento o meno.
Caratteristiche del progetto
La caratteristica saliente del progetto che andiamo a presentare è sempre quella didattica. Si tratta, infatti, di un prototipo finale funzionante e funzionale che l'utente può utilizzare e personalizzare in qualsiasi sua parte, sia software che hardware, dal momento che tutte le sue componenti, specialmente quelle software, sono freeware. Di seguito sono elencati i compiti che il progetto prevede, monitorando continuamente la temperatura e l'umidità di un appartamento:
- Misura della temperatura in 3 stanze diverse;
- Misura dell'umidità in 3 stanze diverse;
- Presentazione dei dati al PC sulla piantina della casa;
- Colorazione diversa della piantina se i valori escono da un certo intervallo (opzionale).
Sono tutti compiti che possono essere ben assolti grazie all'utilizzo e alla cooperazione di tante parti organizzate tra loro, secondo lo schema di principio a blocchi di cui alla figura 2.
Le componenti del progetto
Andiamo adesso ad approfondire le caratteristiche dei singoli componenti che prendono parte del progetto in questione, partendo proprio dai sensori.
Il sensore di temperatura
Il TMP36GT9Z è un preciso sensore di temperatura (vedi relativo articolo applicativo) che funziona a bassa tensione (da 2.7 V to +5.5 V). Nell'intervallo della temperatura Celsius, la sua risposta è lineare. La figura 3 riporta la sua piedinatura. Queste sono le sue caratteristiche più importanti:
- Tensione di funzionamento (+2.7 V to +5.5 V);
- E' tarato per funzionare nella scala °C;
- Precisione ±2°C;
- Stabile con carichi capacitivi;
- Intervallo di temperatura di lavoro compreso tra -40 °C to +125 °C.
Dalle caratteristiche dinamiche della curva del grafico Volt/°C (figura 4), possiamo ricavare una funzione che trasformi il valore della tensione fornita dal sensore in temperatura, espresso in gradi Celsius. Una semplice formula che trasforma la tensione in temperatura è la seguente:
temperatura = (volt - 0.5) * 100
Il sensore di umidità
Quello utilizzato nel nostro progetto (vedi figura 5) è un sensore basato su un elemento di rilevamento capacitivo, modello Honeywell HIH4000-001, di tipo analogico a 3-Pin e in package SIP. La sua tensione di uscita è lineare e amplificata. E' utilizzato in vari settori quali meteorologia, essiccamento, agronomia, strumentazione, ecc. Di seguito alcune caratteristiche tecniche salienti:
Tensione di alimentazione | 5 Vc.c. |
Intervallo di misurazione | 0 - 100% RH |
Precisione dello strumento | +/- 2% |
Stabilità | +/- 1% RH (@50% per 5 anni) |
Tempo di risposta | 15s (aria calma), 50s (528-3171) |
Tensione di uscita | 0,8 - 3,9 Vc.c. |
Temperatura di funzionamento | –-40°C - +85°C |
La risposta del sensore è molto lineare, come visibile nel grafico di cui alla figura 6.
I punti di lavoro di tensione salienti del grafico, al fine di creare una equazione di interpolazione, sono i seguenti:
- Al 20% di umidità relativa: 1.38V;
- Al 40% di umidità relativa: 1.94V;
- Al 60% di umidità relativa: 2.53V;
- Al 80% di umidità relativa: 3.19V;
Bastano solo queste quattro informazioni per "tirare fuori" la seguente equazione con un best fitting (tra le tante che si possono generare):
umidità = 31.15509*volt - 19.20564
Si ricorda che il carico all'uscita del sensore deve avere una resistenza di almeno 80kOhm.
Arduino M0 PRO
E' inutile ripetere qui le caratteristiche di Arduino M0 PRO. Molto è stato, infatti, trattato in un nostro precedente articolo. Il fatto importante è quello di ribadire la risoluzione degli ingressi analogici a 12 bit (se programmato) ed il riferimento della tensione, per default, a 3.3V. Nei prossimi paragrafi proporremo lo sketch di acquisizione dati con tali caratteristiche.
Frontend e software
Il programma per il monitoraggio al PC dei dati di temperatura e di umidità è scritto in linguaggio HMG. Esso prevede un'ottima gestione delle GUI e una avanzata implementazione della comunicazione seriale con le porte COM, con le quali stabilisce il collegamento con Arduino. Nei prossimi paragrafi proporremo anche il listato del frontend per la rappresentazione e monitoraggio dei dati a video.
Schema elettrico
Grazie alla flessibilità di Arduino M0 PRO, realizzare uno schema elettrico è un'operazione quasi banale. La figura 7 mostra il cablaggio dei sensori, le cui uscite analogiche vanno collegati ai rispettivi ingressi analogici del sistema. Lo schema elettrico prevede l'adozione di tre sensori di temperatura e tre di umidità, dislocati anche in stanze diverse. Nulla vieta di cambiare tale programmazione e dedicare tutte le entrate alla misurazione di una sola grandezza. Per la distribuzione dei sensori nelle varie ubicazioni è necessario "portare" i relativi fili elettrici in loco e per questo motivo si consiglia l'utilizzo di un cavetto schermato stretto onde prevenire una tenue variazione del segnale analogico. Ovviamente è opportuno anche utilizzare apposite canaline di plastica per nascondere il cablaggio e rendere tutto più ordinato ed elegante, specialmente in previsione di una collocazione definitiva e duratura.
Lo schema, come si vede, è estremamente semplice. I sensori sono collegati ai rispettivi ingressi. Ogni dispositivo deve essere, ovviamente, alimentato da una fonte di tensione stabilizzata a 5V. Le masse devono essere anch'esse collegate alla massa comune di Arduino. Per informazioni più dettagliate si possono consultare i datasheet dei singoli componenti.
Lo Sketch per Arduino
Bene, dopo aver analizzato la parte hardware con il collegamento tra Arduino e i sensori, andiamo ad esaminare il relativo software. Esso risulta molto semplice e snello, in quanto l'unico suo compito è quello di acquisire le sei tensioni provenienti dai sensori ed inviarle, in forma digitale, al PC, tramite comunicazione seriale. Il seguente listato può essere copiato ed incollato direttamente all'interno dell'IDE di Arduino. Si ricorda che la 1.7 è la versione minima dell'ambiente di sviluppo per utilizzare Arduino M0 PRO.
void setup() { SerialUSB.begin(9600); analogReadResolution(12); } void loop() { int valueA0 = analogRead(A0); int valueA1 = analogRead(A1); int valueA2 = analogRead(A2); int valueA3 = analogRead(A3); int valueA4 = analogRead(A4); int valueA5 = analogRead(A5); SerialUSB.print(valueA0); SerialUSB.println(" Sensore0"); SerialUSB.print(valueA1); SerialUSB.println(" Sensore1"); SerialUSB.print(valueA2); SerialUSB.println(" Sensore2"); SerialUSB.print(valueA3); SerialUSB.println(" Sensore3"); SerialUSB.print(valueA4); SerialUSB.println(" Sensore4"); SerialUSB.print(valueA5); SerialUSB.println(" Sensore5"); delay(1000); }
Il programma è molto semplice ed è anche visualizzato in figura 8. La funzione "setup" definisce due sole inizializzazioni: quella relativa alla velocità della porta seriale per lo scambio dei dati col PC e, soprattutto, la risoluzione dell'ADC a 12 bit. Si ricorda che usando il connettore microusb facente capo all'etichetta Native USB occorre prevedere le funzioni "SerialUSB" al posto di "Serial". Quindi la funzione "loop" viene ripetuta ciclicamente, all'infinito, ogni secondo. In essa avvengono le sei letture delle tensioni provenienti dai sensori, grazie allo statement:
[...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2434 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.
Quando la potenza di una MCU si associa a quella del PC, il risultato che ne viene fuori è realmente professionale.
L’interfaccia puo’ essere estesa con dei visori per indicare un aumento o diminuzione della temperatura? Al progetto potrebbe essere implementato anche un display esterno per la visualizzazione dati. Vi segnalo un approfondimento https://it.emcelettronica.com/termometro-ed-igrometro-con-arduino-m0-pro-su-display-lcd-16×2
Ottima idea. Ho ancora la scheda Arduino M0 ricevuta proprio da Elettronica Open Source nel 2015. Per cui vedró di mettere in pratica la tua applicazione.?
ho un piccolo allevamento come startup!
mi piacerebbe installare arduino come sistema per monitorare temp e umidita nelle 15 stanze…. e possibile e soprattutto qualcuno lo potrebbe fare per me come “lavoretto” retribuito? sono a Pinerolo (to)