Monitoraggio della temperatura e umidità tramite Bluetooth con Arduino: Guida completa

Interfacciamo via Bluetooth Arduino con uno smartphone per effettuare acquisizione e visualizzazione dati di temperatura e umidità.

I molti articoli presentati in questo sito vi avranno ormai chiarito come sia facile, oggi, rilevare parametri ambientali e trasferirli sul web, grazie ad hardware dedicati e a basso costo, ma anche a servizi on-line che supportano la pubblicazione e l’elaborazione dei dati.

Tra i vari hardware ormai vi sarete abituati a vedere le schede basate sul chip ESP8266, che è un completo transceiver WiFi con il quale, passando da un hot-spot WiFi, si può andare in Internet e inviare i dati desiderati.

Probabilmente un po’ meno, tra voi, immagineranno che cose del genere possono essere svolte tranquillamente anche con hardware davvero essenziali, come dimostreremo, in questo articolo, con un esempio applicativo dove andremo a effettuare l’acquisizione di due parametri ambientali e la trasmissione dei relativi dati tra una scheda Arduino e uno smartphone.

In questo caso, però, pur avvalendoci di un link wireless non ci appoggeremo ad alcun servizio sul web, ma stabiliremo una connessione diretta con uno smartphone, sfruttando il protocollo Bluetooth implementato da uno specifico modulo.

Il software che gestisce questa applicazione deve, in particolare, consentire ad un utente:
• di richiedere, attraverso il suo smartphone, i dati di temperatura o umidità ambientale che la scheda Arduino acquisisce periodicamente attraverso un sensore;
• di vedere i dati richiesti visualizzati sullo schermo dello smartphone.

Il trasferimento di dati tra una scheda Arduino e uno smartphone può avvenire nelle due direzioni (smartphone-scheda e scheda-smartphone) grazie alla presenza di un modulo Bluetooth che, interposto tra di essi, trasforma una porta seriale in una connessione wireless Bluetooth, consentendo in pratica un controllo da remoto attraverso lo smartphone.

Con il termine Bluetooth si è soliti definire una tecnologia di scambio dati senza fili (via radio, tipicamente intorno ai 2,4 GHz di frequenza) utilizzata per il trasferimento di dati da punto a punto senza fili su breve distanza, che risulta particolarmente adatta per l’impiego con dispositivi mobili come smartphone e tablet. Peraltro con il link Bluetooth è possibile realizzare, oltre che comunicazioni punto-punto, anche reti WPAN (Personal Area Network in wireless).

Rispetto ad altre tecnologie di trasferimento dati come USB, LAN o WLAN, il Bluetooth è caratterizzato da velocità di trasmissione inferiori che lo rendono poco adatto per l’invio di pacchetti dati di notevoli dimensioni, ma ideale per applicazioni come la nostra. Peraltro le recenti versioni di Bluetooth, dalla 4.2 in poi, rendono possibili connessioni a basso consumo, sicuramente inferiori a quello del WiFi.

Il trasferimento di dati tramite tecnologia Bluetooth viene reso possibile da un software specifico di controllo del trasferimento dati e da un dispositivo hardware chiamato transceiver, dotato quindi di unità trasmittente e unità ricevente, che rappresenta il livello fisico dello stack Bluetooth.

Una connessione può essere avviata da un qualunque dispositivo che assume il ruolo di master rispetto a uno slave creando una rete piconet; lo slave rimane attivo fino a quando il master non disattiva la funzione Bluetooth; la connessione di due o più dispositivi tramite Bluetooth viene denominata pairing.

Lo schema circuitale (di cablaggio, se preferite) utilizzato per la realizzazione di questa semplice ma interessante esperienza viene rappresentato in Fig. 1. La scheda Arduino acquisisce i dati di temperatura e umidità ambientale utilizzando un sensore DHT11; la comunicazione tra scheda e smartphone nelle due direzioni è affidata al modulo bluetooth HC05.

Come si può notare i componenti necessari per la realizzazione di questa esperienza sono sostanzialmente pochi e tutti acquistabili direttamente su questo sito.
Di seguito riportiamo le specifiche dei prodotti interessati unitamente al codice:

– Arduino Uno REV3 (microcontrollore Atmega328) codice 7300-ARDUINOUNOREV3;
– Modulo Bluetooth Transceiver con Pin Strip HC05 (2846-HC05STRIP)
– scheda con sensore di temperatura e umidità DHT11 (2850-TEMPHUM);
– Breadboard 400 contatti con base autoadesiva dimensioni 82×55 mm (7300-BB400).

Serve poi, per realizzare le connessioni elettriche, una confezione con 65 jumper maschio-maschio 7300-JUMPER65.

Il modulo bluetooth HC05

Andiamo ora a fare una panoramica sui dispositivi utilizzati nel progetto, partendo dal Modulo bluetooth HC05: viene utilizzato quando si vuole far comunicare un microprocessore (e di conseguenza anche una scheda Arduino) con dispositivi forniti di connessione Bluetooth (Personal Computer, smartphone, tablet). Il modulo è basato su chipset CSR BlueCore4 e dispone di 8 Mbit di memoria Flash per l’archiviazione di software; supporta due modi di funzionamento: tramite comandi AT e in modalità trasparente.

Nella modalità trasparente può essere configurato come Master, Slave o Loopback, e può connettersi ad altri dispositivi che supportano il protocollo SPP.

Nella modalità di comando AT, si può configurare il modulo e inviare i comandi. In ogni momento si può scegliere tra la modalità di configurazione via comandi AT, oppure l’invio trasparente dei dati attraverso il pin EN.

I quattro contatti evidenziati nella Fig. 1 vengono rispettivamente utilizzati per l’alimentazione (VCC e GND) e per la comunicazione seriale con Arduino (RX per la ricezione, TX per la trasmissione).

Il pin VCC deve essere collegato ai 5 V della scheda, il pin GND al corrispondente della scheda.

Il pin di ricezione RX del modulo Bluetooth deve essere connesso al pin di trasmissione TX della scheda Arduino (viene di seguito scelto il pin 8); viceversa il pin di trasmissione TX deve essere collegato al pin di ricezione RX della scheda (viene di seguito scelto il pin 9).

Scheda con sensore DHT11

Viene utilizzata per effettuare misure di temperatura e umidità ambientale fornendo un segnale digitale che rappresenta i valori assunti da queste due grandezze fisiche.

La scheda in questione è una breakout board che ospita il popolare sensore DHT11, il quale contiene due elementi resistivi, uno sensibile all’umidità e l’altro (un NTC) alla temperatura.

l DHT11 è un sensore di temperatura (da 0°C a +50°C) e umidità relativa (da 20% a 90%) calibrato in modo estremamente preciso in fase di costruzione, i cui coefficienti di calibrazione sono memorizzati nella memoria OTP del microcontrollore interno e vengono richiamati durante il processo di rilevamento.

In questo modo non è necessario ricalibrare il sensore prima di ogni utilizzo.

La tensione generata dai due trasduttori viene convertita in formato digitale da un convertitore A/D a 8 bit e resa disponibile lungo una connessione seriale one-wire. La risoluzione della misura è di 1°C sulla temperatura (tolleranza ÷2 °C) e dell’1% sull’umidità relativa (tolleranza ±5%).

La scheda sulla quale viene montato il sensore dispone di tre pin (VCC per la tensione di alimentazione, GND per la massa e DATA per la trasmissione del segnale); il pin DATA viene di seguito collegato al pin 7 della scheda Arduino, come si vede nella Fig. 1.

Il componente può essere alimentato con tensioni comprese fra 3 V e 5,5 V; la corrente assorbita vale circa 1,5 mA se sta misurando il dato di temperatura o umidità, circa 120 µA se è in standby.

 

Fig. 1 Schema di principio della nostra applicazione.

Programmazione di Arduino

I dati forniti dal sensore possono essere visualizzati sullo schermo dello smartphone solo se è stata scaricata sul medesimo un’applicazione open source che consente di inviare delle stringhe via Bluetooth.

Facendo riferimento a dispositivi che utilizzano il sistema operativo Android si può ad esempio utilizzare l’applicazione Arduino bluetooth controller scaricabile sullo smartphone da Play Store (sul web sono comunque reperibili numerose applicazioni simili).

Segnaliamo che i normali moduli Bluetooth vengono bloccati da Apple e che pertanto i possessori di iPhone non possono realizzare questa esperienza con le modalità con cui è descritta in questo articolo.

Dopo aver scaricato l’applicazione l’icona corrispondente si trova sullo schermo dello smartphone.

Di seguito si deve procedere alimentando il circuito (collegandolo al PC tramite USB) e aprendo l’applicazione (facendo clic sull’icona).

Con l’applicazione aperta si deve infine:
• procedere alla connessione del dispositivo (in questo caso il modulo HC05) tra quelli che si trovano disponibili (Fig. 2);
• scegliere la modalità di connessione (Fig. 3) tra le quattro consentite (joystick, interruttore, dimmer o terminale).

Fig. 2 Connessione del dispositivo.

 

Fig. 3 Modalità di connessione Bluetooth.

 

In questo caso la scelta più idonea è la modalità terminale in quanto, selezionandola, compare una tastiera che consente l’introduzione di caratteri alfanumerici che vengono visualizzati sullo schermo dello smartphone insieme con i dati acquisiti dal sensore (Fig. 4).

Il programma (vedere listato 1) viene strutturato in modo tale che digitando il carattere u si legga sullo schermo dello smartphone il valore di umidità espresso in percentuale, digitando il carattere t si legga sullo schermo il valore di temperatura espresso in °C (Fig. 5). Le librerie richiamate nel programma sono la dht11.h (che gestisce il funzionamento del sensore) e la SoftwareSerial.h (che gestisce la trasmissione dei dati).

Entrambe le librerie prevedono la definizione di due oggetti ai quali deve essere assegnato un nome (si scelgono in questo caso gli oggetti denominati DHT e seriale).

Le istruzioni tipiche di queste librerie vengono ben evidenziate con dei commenti opportuni nel Listato 1, che riporta il firmware al completo.

Fig. 4 Dati rilevati dal sensore.

 

Fig. 5 Visualizzazione dei valori letti.

Listato 1

#include<SoftwareSerial.h> //si include la libreria SoftwareSerial

#include<dht11.h> //si include la libreria dht11.h

char dato; //dato=carattere digitato sulla tastiera dello smartphone 
int u, t; //u=umidità,t=temperatura 
dht11 DHT; //viene definito l’oggetto DHT
SoftwareSerial seriale(8, 9); //viene definito l’oggetto denominato seriale
// pin 8=RX deve essere collegato al pin TX del modulo 
// pin 9=TX deve essere collegato al pin RX del modulo
void setup() {
  serial.begin(9600); //velocità di comunicazione seriale 
}
void loop() {
  DHT.read(7); //i dati di umidità e temperatura vengono acquisiti dal pin 7 
  u = DHT.humidity;
  t = DHT.temperature;
  dato = seriale.read(); //lettura dato da smartphone
  if (dato == ’u’) { //digitando il carattere u sulla tastiera dello smartphone 
    seriale.println(“umidità % ”); //si legge “umidità %” sullo schermo dello smartphone
    seriale.println(u); //si legge il valore di umidità sullo schermo dello smartphone
  }
  if (dato == ’t’) { //digitando il carattere t sulla tastiera dello smartphone 
    seriale.println(“temperatura° C”); //si legge “temperatura °C” sullo schermo dello smartphone
    seriale.println(t); //si legge il valore di temperatura sullo schermo dello smartphone 
  }
}

Verifiche di funzionalità

Alimentando il circuito direttamente dal PC si possono controllare i valori di temperatura e umidità che si registrano nelle immediate vicinanze del PC stesso.

Invece per realizzare il controllo da remoto al quale si era in precedenza accennato si deve sostituire il PC con una batteria esterna, ad esempio un power bank, che alimenta la scheda Arduino UNO, il modulo Bluetooth e il sensore (Fig. 6).

Due esempi concreti vengono suggeriti in Fig. 7.

Fig. 6 Circuito per l’alimentazione a batteria.

 

Fig. 7 Esempio applicativo.

 

I valori di temperatura e umidità non sono più quelli misurati nelle vicinanze del PC ma quelli che si registrano ponendo il circuito con il sensore in pieno sole (ad esempio su un terrazzo) o all’interno di un frigorifero (tenendo presente che il sensore è in grado di rilevare soltanto temperature sopra lo zero e che quindi il freezer non è il luogo indicato).

Lasciamo a voi la possibilità di sperimentare questo circuito sostituendo, ad esempio, il DHT11 con un altro sensore.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Menu