Teniamo sotto controllo la temperatura e l’umidità di un appartamento con Arduino M0 PRO

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.

Figura 1: Gli ingressi analogici di Arduino M0 PRO.

Figura 1: Gli ingressi analogici di Arduino M0 PRO.

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.

Figura 2: Schema a blocchi del sistema di monitoraggio.

Figura 2: Schema a blocchi del sistema di monitoraggio.

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.
Figura 3: Il sensore di temperatura TMP36GT9Z.

Figura 3: Il sensore di temperatura TMP36GT9Z.

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

Figura 4: Grafico della tensione vs. temperatura.

Figura 4: Grafico della tensione vs. temperatura.

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

 

Figura 5: Il sensore di umidità Honeywell HIH4000-001.

Figura 5: Il sensore di umidità Honeywell HIH4000-001.

La risposta del sensore è molto lineare, come visibile nel grafico di cui alla figura 6.

Figura 6: Tensione di uscita del sensore in base all'umidità rilevata, alla temperatura di 25°C e con alimentazione di 5V.

Figura 6: Tensione di uscita del sensore in base all'umidità rilevata, alla temperatura di 25°C e con alimentazione di 5V.

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.

Figura 7: Schema elettrico e cablaggio.

Figura 7: Schema elettrico e cablaggio.

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);  
}

 

Figura 8: Lo sketch di Arduino.

Figura 8: Lo sketch di Arduino.

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 PRO. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici MAKER e PRO inoltre potrai fare il download (PDF) dell'EOS-Book e di FIRMWARE del mese. ABBONATI ORA, è semplice e sicuro.

Abbonati alle riviste di elettronica

3 Commenti

  1. Giovanni Di Maria Giovanni Di Maria 24 gennaio 2019
  2. Maurizio Di Paolo Emilio Maurizio Di Paolo Emilio 24 gennaio 2019
  3. Adriano Gandolfo Adriano Gandolfo 14 febbraio 2019

Scrivi un commento

EOS-Academy