Quale sensore di temperatura scegliere per il nostro Arduino? Quali vantaggio offre un modello piuttosto ad un altro? Scopriamolo in questo articolo!

Scegliere il sensore di temperatura adatto ai nostri progetti non è sempre facile. Alcuni fattori determinanti alla scelta possono essere l’accuratezza, il range di precisione, l’economicità del sensore, l’interfaccia di programmazione e la reperibilità delle librerie e della documentazione necessaria. Molto presso i sensori di temperatura che impariamo a programmare per primi sono quelli più economici e facenti parte di kit di apprendimento, facili da reperire online.

Cosa faremo

In questo articolo compareremo alcuni dei sensori più diffusi e in nostro possesso. Li lasceremo connessi ad Arduino UNO per un ciclo di circa 24 ore circa, rilevando ad intervalli regolari le misurazioni e memorizzandole su una micro-SD da 16GB. Abbiamo escluso a priori sensori analogici e sensori a numerazione intera, affidandoci, invece, a sensori digitali con valori a virgola mobile, così da avere un margine di comparazione più o meno evidente.

Non testeremo i limiti minimi e massimi di ogni sensore, poiché non disponiamo dei mezzi adeguati a raggiungere temperature estremamente basse o alte, ma ci limiteremo ad osservarne il comportamento all’interno di un ambiente quantomeno chiuso, con temperature nella media. Sappiamo bene che alcuni sensori perdono precisione proprio alle temperature limite, infatti prendere questo articolo come una guida rivolta ai meno esperti e ponderata su un utilizzo più tradizionale di questi sensori.

Quali sensori utilizzeremo

Come spiegato sopra, adopereremo solo sensori digitali a virgola mobile, pertanto partiamo dal sensore DHT22, un sensore digitale con un range compreso tra gli 0°C e i 50°C. Sicuramente tra i più economici e facili da programmare, è la versione più precisa del sensore DHT11, che a differenza del fratello maggiore è in grado di fornire valori interi. Per programmarlo utilizzeremo la libreria Adafruit DHT Sensor Library. Il modulo è dotato di 3 pin, due per la tensione (Vcc e GND) e uno per il segnale digitale.

Il secondo sensore adoperato è il sensore BMP280 (LINK libreria), dotato di chip Bosch e collegato ad Arduino tramite interfaccia I2C. Una versione meno completa del BME280, analizzato in questo ARTICOLO, che non ci fornisce il valore di umidità relativa. Considerando che il sensore temperatura è il medesimo, abbiamo quindi deciso solo per il BMP280. Per le stesse ragioni esposte per il DHT11, non adopereremo il BMP180, fratello minore del BMP280. Il BMP280 possiamo anche configurarlo con interfaccia SPI, ma per semplicità adopereremo quella I2C. Il range del BMP280 è compreso tra i -40°C  e gli 85 ℃, con una tolleranza di circa un grado. Possiamo alimentarlo sia a 3,3V che a 5V.

Basato anch’esso su interfaccia I2C, il sensore SHT31, visto in questo ARTICOLO, è il terzo sensore scelto. Basato su un chip Sensirion DI5BCD, il sensore digitale SHT31 lavora con un tensione di 3,3V, alimentandolo comunque con tensioni comprese tra i 2,4V e 5V. Analizzandone la precisione, il SHT31 ha un range compreso tra i -40°C e i 90°C, con una tolleranza di 0,2°C per la temperatura. Anche per questo sensore adopereremo una libreria Adafruit, nello specifico la libreria SHT3x-master. Una delle caratteristiche di questa libreria è poter ricavare la temperatura non solo in gradi Celsius, ma anche in Kelvin e Fahrenheit.

Assolutamente inedito sul nostro sito è il sensore MCP9808, che può rilevare temperature tra i -20°C ed i 100°C, con una tolleranza di circa mezzo grado centigrado. Programmabile tramite interfaccia I2C, lo possiamo alimentare con una tensione compresa tra i 2,7V ed i 5,5V.

L’ultimo sensore è anch’esso digitale e lo troviamo spesso nei kit 37-in-1: parliamo del sensore Dallas Temperature o KY-001. Il vero e proprio sensore è il chip single-bus DS18B20, alloggiato in un circuito stampato con un LED e una resistenza. Il modulo presenta 3 PIN: uno è il segnale (S), gli altri due il GND e il VCC, tramite cui possiamo fornire sia i 3,3V o i 5V, usando indifferentemente sia Arduino che le ESP8266. Il sensore è notevolmente preciso e il range di azione va dai -55°C ai 125°C con una tolleranza di circa 0,5°C. Per programmare questo sensore sarà necessario scaricare le librerie DallasTemperature OneWire.

SensoreRangeAccuratezzaInterfacciaTensionePrezzo*
DHT220°C / 50°C±2,0°CDIGITALE3,3V - 5V±3€
BMP280-40°C / 85 ℃±1,0°CI2C - SPI3,3V - 5V±1,20€
SHT31-40°C / 90°C±0,2°CI2C3,3V - 5V±3€
MCP9808-20°C / 100°C±0,5°CI2C3,3V - 5V±1,50€
DS18B20-55°C / 125°C±0,5°CDIGITALE3,3V - 5V±1,40€

*Prezzi di riferimento su Aliexpress

Collegamenti

Dal punto di vista dei collegamenti, il lato sensori è particolarmente semplice. I sensori con interfaccia I2C vanno connessi tra di loro in parallelo ai pin SDA e SCL di Arduino UNO, mentre il DHT22 va connesso al pin digitale 5, mentre il Dallas al pin 4. Il lettore di Micro-SD sfrutterà l’interfaccia SPI per dialogare con Arduino UNO e memorizzare i dati sulla Micro-SD. Nello specifico collegheremo il pin 11 al MOSI, il 12 la MISO, il 13 al SCK e il 10 al CS. Badate bene che se vorrete utilizzare il card reader integrato nella Ethernet shield, il CS corrisponderà al pin 4 di Arduino.

temperature

Risultati

Allo scadere delle 24 ore abbiamo estrapolato le temperature calcolate dai sensori tramite il file CVS che abbiamo creato e memorizzato sulla Micro-SD. Non spiegheremo il codice, visto che in altre occasioni abbiamo visto come programmare singolarmente i sensori, tuttavia se volete provare anche voi a realizzare questo esperimento, potete scaricare lo sketch a questo LINK. Se invece volete sapere come abbiamo creato il file CSV sulla memoria andate a guardare il nostro articolo sul sismografo con Arduino MEGA.

temperature

Per leggere i dati sul foglio di calcolo, collegate la SD card al PC tramite un lettore di Card o un adattatore USB, poi aprite il file. Non temete se il file risulta creato il 01/01/2000 perché non adoperando un modulo RTC, Arduino di default imposta questa come data. Noterete che i dati sono sistemati in 5 colonne, una per asse. Tuttavia, i singoli valori sono stati memorizzati come stringhe e non come numeri. Ciò li rende inutilizzabili su un foglio di calcolo, anche perché i valori numerici qui collocati adoperano il punto come separatore decimale e non la virgola, come invece accade nel sistema italiano. La scelta migliore è modificare le impostazioni di Excel, cambiando i separatori di sistema. Andate su “File”, poi “Opzioni” e “Impostazioni Avanzate”, togliete la spunta dalla voce “Utilizza separatori di sistema”, date OK e chiudere e riaprite il file. I valori saranno identificati come numerici e adoperabili per essere inseriti in un grafico lineare. A seconda della versione di Office, potrebbe essere anche necessario cambiare manualmente il separatore numerico. Se invece utilizzate LibreOffice Calc, la conversione sarà semplificata all’apertura del file, infatti si aprirà la finestra di “Importazione testo” e basterà selezionare la voce Inglese US per ogni colonna nel campo “Tipo Colonna” e poi premere “OK” per confermare.

Non ci resta che riportare i dati su grafico lineare e leggerne le curve.

Premettendo che non abbiamo adoperato nessun strumento professionale per determinare quale sia la temperatura effettiva, possiamo lo stesso farci un’idea del comportamento di questi sensori. Il sensore che ha registrato temperature più alte è il sensore BMP280, giacché il suo chip tende a riscaldarsi e a rendere meno precise le rilevazioni. Il sensore DHT22 è partito maluccio, fornendoci valore nullo all’inizio e disegnando una curva a grafico molto squadrata e per tratti rigida sulle rilevazioni, che ci fanno temere una scarsa precisione. Un cammino quasi identico è stato percorso dal sensore SHT31 e dal DS18B20, salvo che il primo ha registrato picchi più alti del secondo. Più lineare e meno frammentano è stato il sensore MCP9808, rappresentato in giallo nel grafico.

Questo grafico, in conclusione, ci mostra come ogni sensore si comporti diversamente nello stesso ambiente e come possa essere adoperato nei diversi progetti che vogliamo realizzare sia con Arduino, ESP8266, ESP32 o STM32.