Il sensore SHT31 è un sensore molto semplice da adoperare ed in grado di rilevare temperatura, umidità relativa e umidità assoluta

Il sensore digitale SHT31 è una valida alternativa ai sensori digitali più diffusi per Arduino. Nonostante il costo irrisorio, questo è un sensore molto preciso ed accurato, in grado di rilevare la temperatura in Celsius, Fahrenheit e Kelvin, umidità relativa e l’umidità assoluta in Pascal, Torr e Libbre su pollice quadro. Come vedremo, anche i collegamenti sono piuttosto semplici, grazie all’interfaccia I2C.

Specifiche

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 e ±2% per l’umidità relativa. Il sensore è molto compatto e nondimeno troviamo 6 pin, due di alimentazione (Vin e GND), due per l’interfaccia I2C (SDA e SCL), il pin AD per il cambio indirizzo e il pin AL per l’attivazione dell’allarme. Spendendo due parole per questi due pin, il pin AD (ADDRESS) va collegato eventualmente ad un pin digitale di Arduino, dal quale emettendo un segnale di HIGH si va a cambiare l’indirizzo sull’interfaccia I2C, mentre il pin AL (ALERT) va programmato e attivato con un segnale di HIGH. Nella versione di Adafruit, troviamo anche il pin Reset con il quale resettare il sensore.

SHT31

Se volete acquistare questo sensore:



Collegamenti

I collegamenti sono molto semplici e coinvolgono i classici pin per l’interfaccia I2C. Collegheremo il pin Vin ai 3,3V di Arduino, ma vanno bene anche i 5V, il GND al Ground di Arduino, SDA e SCL ai pin SDA e SCL di Arduino. Se non fossero disponibili, ricordatevi che possiamo usare il pin analogico A4 per l’SDA e il pin analogico A5 per l’SCL.

SHT31

Codice

Per poter lavorare e comunicare con Arduino, il sensore SHT31 necessita della propria libreria SHT3x-master. Una volta caricata sulla IDE di Arduino, possiamo trovare alcuni sketch di prova per verificarne il funzionamento e rilevare temperatura, umidità relativa e umidità assoluta. Tra gli sketch di prova contenuti nella libreria, troviamo anche uno sketch per la calibrazione del sensore, qualora fosse necessario ricalibrarlo. Partiamo dal primo sketch di prova [LINK]. Iniziamo inserendo la libreria e creando l’oggetto Sensor per programmare il sensore SHT31 .


#include <SHT3x.h>
SHT3x Sensor;

Nel VOID SETUP inizializziamo il sensore ed il monitor seriale.


Serial.begin(9600);
Sensor.Begin();

Nel VOID LOOP facciamo effettuare la lettura al sensore, poi stampiamo la temperatura rilevata con la funzione GetTemperature() e l’umidità relativa con la funzione GetRelHumidity(). Impostiamo un delay di mezzo secondo.


Sensor.UpdateData();
Serial.print("Temperatura: ");
Serial.print(Sensor.GetTemperature());
Serial.println("C");
Serial.print("Umidità: ");
Serial.print(Sensor.GetRelHumidity());
Serial.println("%");

delay(500);

SHT31

Nel secondo sketch [LINK] rileviamo l’umidità assoluta, stampandola sia in Libbre per pollice quadro, sia in Pascal e sia in Torr. Partiamo come prima includendo la libreria, creando l’oggetto Sensor e avviando nel VOID SETUP il monitor seriale e il sensore.


#include <SHT3x.h>
SHT3x Sensor;
void setup() {

Serial.begin(9600);
Sensor.Begin();
}

Nel VOID LOOP rileviamo come prima temperatura e umidità relativa, mentre per l’umidità assoluta adoperiamo la funzione GetAbsHumidity() che verrà stampata in Torr come unità di misura di default. Possiamo gestire con la stessa funzione, il rilevamento dell’umidità assoluta con altre unità di misura, come psi (Libbre per pollice quadro) e Pa (Pascal), inserendo nella suddetta funzione le diciture SHT3x::psi o SHT3x::Pa. La tolleranza della rilevazione viene stampata in mH2O (metro di colonna d’acqua).


Sensor.UpdateData();

Serial.print(Sensor.GetTemperature()); //Celsius
Serial.print("C");
Serial.print(" | ");

Serial.print(Sensor.GetRelHumidity());
Serial.print("%");
Serial.print(" | ");

Serial.print(Sensor.GetAbsHumidity()); //Torr
Serial.print(" Torr");
Serial.print(" | ");

Serial.print(Sensor.GetAbsHumidity(SHT3x::psi)); //Libbre per pollice quadro
Serial.print(" psi");
Serial.print(" | ");

Serial.print(Sensor.GetAbsHumidity(SHT3x::Pa)); //Pascal
Serial.print(" Pa");

Serial.print(" Tolleranza: ±");
Serial.print(Sensor.GetAbsHumTolerance(SHT3x::mH2O));
Serial.print(" mH2O");

Serial.println();
delay(500);

SHT31



Nell’ultimo sketch [LINK] vediamo come variare la funzione GetTemperature() per misurare la temperatura in Celsuis (unità dei default), Fahrenheit e Kelvin. Come per gli sketch precedenti, inseriamo la libreria, creiamo l’oggetto Sensor, avviamo monitor seriale e sensore.


#include <SHT3x.h>
SHT3x Sensor;
void setup() {

Serial.begin(9600);
Sensor.Begin();
}

Nel VOID LOOP inseriremo nella funzione GetTemperature() SHT3x::Cel per la misurazione in Celsius, SHT3x::Far per i Fahrenheit e SHT3x::Kel per i Kelvin.


Sensor.UpdateData();

Serial.print(Sensor.GetTemperature()); //Celsius di default
Serial.print("C");
Serial.print(" | ");

Serial.print(Sensor.GetTemperature(SHT3x::Cel)); //Celsius
Serial.print("C");
Serial.print(" | ");

Serial.print(Sensor.GetTemperature(SHT3x::Far)); //Fahrenheit
Serial.print("F");
Serial.print(" | ");

Serial.print(Sensor.GetTemperature(SHT3x::Kel)); //Kelvin
Serial.print("K");

SHT31