Sensore temperatura e umidità SHT21 GY-21
zoom_out_map
chevron_left chevron_right

Le immagini dei prodotti sono solo a scopo informativo e potrebbero presentare piccole differenze, a seconda del lotto e del fornitore. Le specifiche e i prezzi dei prodotti potrebbero essere soggetti a modifiche senza preavviso. Facciamo del nostro meglio per aggiungere specifiche quanto più precise e corrette possibili alla pagina del prodotto, ma è possibile che non siano del tutto corrette. Se identifichi un caso del genere, ti preghiamo di segnalarcelo.

Il prodotto è destinato agli specialisti e richiede personale qualificato e autorizzato. Il prodotto non include istruzioni di montaggio/uso . La messa in funzione del prodotto da parte di persone non qualificate comporta la perdita della garanzia secondo i Termini e Condizioni presenti sul sito.

Le specifiche tecniche indicate (corrente, potenza, ecc.) rappresentano valori massimi consentiti in condizioni ideali di funzionamento. Per un utilizzo sicuro e una durata ottimale, si raccomanda di utilizzare il prodotto in regime continuo a non più del 50% dei valori massimi specificati.

Sensore di temperatura e umidità SHT21 GY-21, di precisione, interfaccia I2C, 3-5V, 0-100%RH

Ideale per il monitoraggio preciso di temperatura e umidità in progetti IoT e automazioni, questo modulo con SHT21 offre misure stabili e rapide, comunicazione I2C per una facile integrazione con Arduino e Raspberry Pi, consumo ridotto per il funzionamento a lungo termine e formato compatto tipo breakout adatto alla prototipazione e al montaggio in spazi ristretti.

46,52 RON Tasse incluse

38,45 RON Tasse escluse

(5/5) su un total di 1 valutazioni
Leggi le recensioni

Acquistando questo prodotto guadagni 2,33 RON in punti fedeltà.

Garanzia: 24 mesi per le persone fisiche
SPEDIZIONE INTERNAZIONALE
Spedizione veloce gratuita per ordini superiori a 100EUR nella maggior parte de paesi UE.
SPEDIZIONE VELOCE 24 ORE
Spediamo dal nostro magazzino entro 24 ore
PUNTI FEDELTÀ
Ricevi punti a ogni ordine, per un valore del 5%.

Il modulo GY-21 combina il sensore digitale SHT21 con uno stabilizzatore da 3.3 V e con convertitori di livello sulle linee I2C, in una piccola scheda per la misura della temperatura e dell'umidità relativa dell'aria. L'uscita è digitale e calibrata in fabbrica, quindi non richiede un convertitore analogico-digitale esterno né regolazioni, e il modulo è adatto a stazioni meteo da interno, termostati e igrostati, al monitoraggio di serre, magazzini e ambienti con umidificatore o deumidificatore.

Il sensore SHT21 misura l'umidità relativa nel campo 0 - 100 %RH, con precisione tipica di ±2 %RH e risoluzione fino a 12 bit, e la temperatura tra -40 e 125 °C, con precisione tipica di ±0.3 °C e risoluzione fino a 14 bit. La comunicazione avviene sul bus I2C, all'indirizzo fisso 0x40, con frequenza di clock fino a 400 kHz. Il tempo massimo di conversione è di 85 ms per la temperatura (14 bit) e di 29 ms per l'umidità (12 bit), e ogni valore letto è accompagnato da un checksum CRC-8. Il consumo del sensore è ridotto, pari a 0.15 µA in standby.

Tra le caratteristiche principali figurano lo stabilizzatore da 3.3 V contrassegnato 662K, i transistor di adattamento del livello logico sulle linee SDA e SCL, le resistenze di pull-up per I2C, il foro di fissaggio e i 4 pad per i pin VIN, GND, SCL e SDA, per i quali viene fornito un connettore a 4 pin da saldare a cura dell'utente. L'alimentazione avviene a 3 - 5 VDC tramite il pin VIN.

Grazie all'interfaccia I2C, il modulo si collega direttamente ad Arduino, ESP32, ESP8266, STM32, Raspberry Pi e ad altre piattaforme con bus I2C, sia con logica a 3.3 V sia con logica a 5 V.

 

Specifiche:

Tensione di alimentazione: 3 - 5 VDC (pin VIN)

Corrente sensore SHT21: 0.15 µA in standby, fino a 330 µA in misura

Sensore: SHT21

Interfaccia: I2C

Indirizzo I2C: 0x40 (fisso)

Frequenza clock I2C: fino a 400 kHz

Campo umidità: 0 - 100 %RH

Precisione umidità: ±2 %RH (tipica)

Risoluzione umidità: fino a 12 bit

Campo temperatura: -40 - 125 °C

Precisione temperatura: ±0.3 °C (tipica)

Risoluzione temperatura: fino a 14 bit

Tempo massimo di misura: 85 ms temperatura (14 bit), 29 ms umidità (12 bit)

Uscita: Digitale, calibrata, con checksum CRC-8

Dimensioni: 10 x 13 mm

 

Layout:

Elemento Funzione
Sensore SHT21 Misura la temperatura e l'umidità relativa e invia i valori in digitale, tramite I2C, all'indirizzo 0x40.
Stabilizzatore 662K Fornisce 3.3 V al sensore dalla tensione applicata al pin VIN.
Transistor di adattamento di livello Adattano il livello logico delle linee SDA e SCL tra il sensore e il microcontrollore collegato.
Resistenze di pull-up Mantengono le linee SDA e SCL a livello alto quando il bus è libero, quindi non sono necessarie resistenze esterne per un singolo modulo.
Pad VIN, GND, SCL, SDA Collegamento del modulo. Il connettore a 4 pin incluso si salda su questi pad.
Foro di fissaggio Fissaggio della scheda sul supporto.

 

Pinout:

Pinout del sensore di temperatura e umidità SHT21 GY-21

Connettore Pin Funzione
Header 4 pin VIN Alimentazione 3 - 5 VDC
Header 4 pin GND Massa
Header 4 pin SCL Linea di clock I2C
Header 4 pin SDA Linea dati I2C

 

Utilizzo:

Saldate il connettore a 4 pin incluso nei pad del modulo, poi verificate la serigrafia sulla scheda, perché su alcune varianti il pin di alimentazione è contrassegnato VCC invece di VIN, con lo stesso ruolo.

Collegate VIN al pin da 3.3 V o da 5 V del microcontrollore, in base alla sua tensione di lavoro, GND alla massa comune, SDA alla linea SDA e SCL alla linea SCL. Su Arduino Uno, le linee I2C sono i pin A4 (SDA) e A5 (SCL).

Non applicate su VIN una tensione superiore a 5 V e rispettate la polarità dell'alimentazione.

Non collegate due moduli identici sullo stesso bus I2C, perché l'indirizzo 0x40 è fisso.

Per una misura, inviate all'indirizzo 0x40 il comando 0xF3 per la temperatura oppure 0xF5 per l'umidità, in modalità senza blocco del clock, attendete almeno 85 ms per la temperatura e 29 ms per l'umidità, quindi leggete tre byte: due di dati e uno di CRC.

Verificate il checksum CRC-8 (polinomio 0x31, valore iniziale 0) e ignorate la lettura se non corrisponde. Azzerate gli ultimi due bit del valore a 16 bit, quindi calcolate la temperatura in °C con la formula -46.85 + 175.72 x S / 65536 e l'umidità in %RH con la formula -6 + 125 x S / 65536.

Per verificare che il modulo funzioni, toccate leggermente il sensore con il dito oppure soffiate delicatamente aria calda e umida su di esso, e i valori letti aumenteranno in un intervallo di tempo breve.

Per risultati stabili, montate il modulo lontano da fonti di calore, inclusa la scheda di sviluppo e i suoi stabilizzatori, usate fili corti su SDA e SCL ed evitate il contatto diretto del sensore con acqua, condensa o vapori aggressivi.

33145
Tensione di alimentazione
3-5 V DC
Dimensioni
10 x 13 mm
Interfaccia
I2C
Tipo di uscita
Digitale
Consumo
0.15 µA in standby, fino a 330 µA in misura
Sensore
SHT21
Indirizzo I2C
0x40
Campo di misura della temperatura
-40-125 °C

Produs destinat utilizarii in proiecte electronice, automatizari, prototipare, educatie si cercetare.

Produsul trebuie utilizat numai conform specificatiilor tehnice mentionate in descriere si/sau in documentatia produsului.

Avertismente generale de siguranta:

Nu utilizati produsul la tensiuni, curenti sau temperaturi peste valorile specificate.

Montajul si conectarea trebuie realizate de persoane cu cunostinte tehnice minime in domeniul electric/electronic.

Evitati scurtcircuitele, inversarea polaritatii si conectarea gresita a alimentarii.

Nu lasati produsul alimentat nesupravegheat in timpul testelor.

Produsul nu este jucarie si nu este destinat copiilor.

Pentru modulele electronice, se recomanda utilizarea in carcase, panouri sau montaje protejate, dupa caz.

Identificare produs:

Denumirea produsului, codul/SKU-ul si caracteristicile tehnice sunt mentionate in pagina produsului si/sau pe eticheta ambalajului.

Producator / Importator / Distribuitor:

Sigmanortec S.R.L.

Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania

E-mail: [email protected]

Website: www.sigmanortec.ro

Persoana responsabila in UE:

Sigmanortec S.R.L.

Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania

E-mail: [email protected]

Documentatie si siguranta:

Pentru informatii suplimentare, fise tehnice, declaratii de conformitate sau instructiuni, ne puteti contacta la [email protected].

/*
  SHT21 / GY-21 temperature and humidity test

  Board (Arduino IDE, Tools > Board): Arduino Uno
  Board package: Arduino AVR Boards (comes with the Arduino IDE)

  Libraries: none to install, only the built-in Wire library is used.

  Wiring (the GY-21 module has its own 3.3 V regulator, level shifters
  and pull-up resistors on the I2C lines):
    Module VIN -> Arduino 5V
    Module GND -> Arduino GND
    Module SDA -> Arduino A4
    Module SCL -> Arduino A5
*/

#include <Wire.h>

// I2C address of the sensor
const uint8_t SHT21_ADDRESS = 0x40;

// Sensor commands
const uint8_t CMD_TRIGGER_TEMP_NO_HOLD = 0xF3; // start temperature measurement
const uint8_t CMD_TRIGGER_HUM_NO_HOLD  = 0xF5; // start humidity measurement
const uint8_t CMD_SOFT_RESET           = 0xFE; // reset the sensor

// Waiting times in milliseconds, slightly above the maximum conversion time
const uint16_t TEMP_WAIT_MS = 100; // 14 bit temperature
const uint16_t HUM_WAIT_MS  = 40;  // 12 bit humidity

// CRC-8 with polynomial 0x31, start value 0
uint8_t crc8(const uint8_t *data, uint8_t length) {
  uint8_t crc = 0;
  for (uint8_t i = 0; i < length; i++) {
    crc ^= data[i];
    for (uint8_t bit = 0; bit < 8; bit++) {
      if (crc & 0x80) {
        crc = (crc << 1) ^ 0x31;
      } else {
        crc = crc << 1;
      }
    }
  }
  return crc;
}

// Send a measurement command, wait, read 3 bytes and check the CRC
bool readRaw(uint8_t command, uint16_t waitMs, uint16_t &raw) {
  Wire.beginTransmission(SHT21_ADDRESS);
  Wire.write(command);
  if (Wire.endTransmission() != 0) {
    return false; // sensor did not acknowledge
  }

  delay(waitMs); // wait for the conversion to finish

  if (Wire.requestFrom(SHT21_ADDRESS, (uint8_t)3) != 3) {
    return false; // fewer than 3 bytes received
  }

  uint8_t data[3];
  for (uint8_t i = 0; i < 3; i++) {
    data[i] = Wire.read();
  }

  if (crc8(data, 2) != data[2]) {
    return false; // checksum error
  }

  raw = ((uint16_t)data[0] << 8) | data[1];
  raw &= 0xFFFC; // clear the two status bits
  return true;
}

void setup() {
  Serial.begin(9600);
  Wire.begin();
  Serial.println("SHT21 / GY-21 test started");

  // Check that the sensor answers at its address
  Wire.beginTransmission(SHT21_ADDRESS);
  if (Wire.endTransmission() != 0) {
    Serial.println("Sensor not found at address 0x40, check wiring");
    while (true) {
      delay(1000); // stop here
    }
  }
  Serial.println("Sensor found at address 0x40");

  // Soft reset, the sensor needs up to 15 ms to restart
  Wire.beginTransmission(SHT21_ADDRESS);
  Wire.write(CMD_SOFT_RESET);
  Wire.endTransmission();
  delay(20);
}

void loop() {
  uint16_t rawTemperature = 0;
  uint16_t rawHumidity = 0;

  if (readRaw(CMD_TRIGGER_TEMP_NO_HOLD, TEMP_WAIT_MS, rawTemperature) &&
      readRaw(CMD_TRIGGER_HUM_NO_HOLD, HUM_WAIT_MS, rawHumidity)) {

    // Convert raw values to physical values
    float temperatureC = -46.85 + 175.72 * (float)rawTemperature / 65536.0;
    float humidityRH = -6.0 + 125.0 * (float)rawHumidity / 65536.0;

    // Limit humidity to the physical range
    if (humidityRH < 0.0) humidityRH = 0.0;
    if (humidityRH > 100.0) humidityRH = 100.0;

    Serial.print("Temperature: ");
    Serial.print(temperatureC, 2);
    Serial.print(" C, Humidity: ");
    Serial.print(humidityRH, 1);
    Serial.println(" %RH");
  } else {
    Serial.println("Read error (no answer or CRC mismatch)");
  }

  delay(2000); // one reading every 2 seconds
}

Questo tutorial utilizza la scheda Arduino Uno, perché il modulo GY-21 è un sensore I2C che necessita obbligatoriamente di un microcontrollore che lo interroghi. Il modulo integra il sensore SHT21 e misura la temperatura e l'umidità relativa dell'aria, con un'uscita digitale già calibrata. Lo utilizzerete in stazioni meteo da interno, per il monitoraggio di una serra, di un magazzino o di un locale con umidificatore, in termostati e igrostati costruiti da soli.

A differenza di un sensore analogico, l'SHT21 non richiede calibrazione e non ha bisogno di un convertitore analogico-digitale esterno. Il microcontrollore invia un comando su due fili e riceve in risposta il valore misurato, accompagnato da una somma di controllo. Nei passaggi seguenti collegherete il modulo, leggerete i valori con una libreria minima (solo Wire) e vedrete come i numeri grezzi si trasformano in gradi Celsius e percentuali di umidità.

Sensore di temperatura e umidità di precisione SHT21, GY-21

Come funziona:

All'interno dell'SHT21 si trova un elemento capacitivo a polimero per l'umidità e un sensore di temperatura di tipo bandgap. Un convertitore analogico-digitale integrato trasforma entrambe le grandezze in numeri, mentre il circuito di elaborazione applica la calibrazione di fabbrica. Il risultato esce sul bus I2C, all'indirizzo fisso 0x40, con una frequenza di clock di al massimo 400 kHz.

Una misurazione ha quattro fasi. Il microcontrollore invia l'indirizzo 0x40 e un comando: 0xF3 avvia la misurazione della temperatura e 0xF5 avvia la misurazione dell'umidità, entrambe in modalità senza blocco del clock (no hold master). Poi attende il tempo della conversione, al massimo 85 ms per la temperatura a 14 bit e al massimo 29 ms per l'umidità a 12 bit. Successivamente legge tre byte: due byte di dati e un byte CRC. Infine calcola il valore reale a partire dal numero grezzo.

Gli ultimi due bit del secondo byte sono bit di stato e devono essere azzerati prima del calcolo. Con il numero grezzo S, le formule sono: temperatura in °C = -46.85 + 175.72 x S / 65536 e umidità relativa in %RH = -6 + 125 x S / 65536. Il numero 65536 è 2 alla potenza 16, cioè il numero di valori che può assumere una parola di 16 bit. Esempio: per S = 26000 la temperatura risulta -46.85 + 175.72 x 26000 / 65536 = 22.86 °C, mentre per S = 31000 l'umidità risulta -6 + 125 x 31000 / 65536 = 53.13 %RH.

La somma di controllo CRC-8 usa il polinomio x all'8 + x al 5 + x al 4 + 1 (nel codice, la costante 0x31) e parte dal valore 0. Se il CRC calcolato differisce da quello ricevuto, la lettura è stata alterata dal rumore e deve essere ignorata.

Collegamento:

Il chip SHT21 funziona a 2.1 - 3.6 V, ma il modulo GY-21 ha sulla scheda uno stabilizzatore a 3.3 V (marcato 662K) e adattatori di livello con transistor sulle linee I2C. Per questo lo alimentate direttamente dal pin 5V della scheda Arduino Uno, mentre le linee SDA e SCL si collegano direttamente, senza convertitore esterno di livello logico. Il modulo ha anche resistenze di pull-up proprie, quindi per un singolo modulo non servono resistenze esterne. Saldate prima il connettore a 4 pin incluso sulla scheda del modulo. I pin del modulo sono, in ordine, VIN, GND, SCL e SDA.

Pin del prodotto Si collega a Ruolo
VIN Pin 5V Arduino Uno Alimentazione del modulo
GND GND Arduino Uno Massa comune
SDA Pin A4 Arduino Uno Linea dati I2C
SCL Pin A5 Arduino Uno Linea di clock I2C

Collegamento del sensore di temperatura e umidità SHT21 GY-21 ad Arduino Uno tramite I2C

Sulla Arduino Uno, i pin A4 e A5 sono le stesse linee dei pin SDA e SCL dell'intestazione superiore di destra, quindi potete usarne uno qualsiasi dei due. La scheda si alimenta tramite il cavo USB dal computer. Su alcune versioni del modulo il pin di alimentazione è marcato VCC invece di VIN, ma il ruolo è lo stesso. Verificate la serigrafia sulla scheda prima di saldare e collegare.

Scheda e librerie:

In Arduino IDE selezionate in Strumenti > Scheda la scheda Arduino Uno, dal pacchetto Arduino AVR Boards, che è installato insieme ad Arduino IDE. Se non compare nell'elenco, installatelo da Strumenti > Scheda > Gestore schede, cercando Arduino AVR Boards. In Strumenti > Porta scegliete la porta seriale della scheda.

Il programma usa solo la libreria Wire, che è inclusa in Arduino IDE, quindi non va installata nessuna libreria. La comunicazione con il sensore è scritta direttamente, il che permette di vedere ogni passaggio del protocollo.

Codice:

Il programma seguente legge temperatura e umidità ogni 2 secondi, verifica la somma di controllo e visualizza il risultato sul monitor seriale.

/*
  SHT21 / GY-21 temperature and humidity example
  Board (Arduino IDE, Tools > Board): Arduino Uno
  Board package: Arduino AVR Boards (comes with the Arduino IDE)
  Libraries: none to install, only the built-in Wire library is used.
  Wiring (the GY-21 module has its own 3.3 V regulator, level shifters
  and pull-up resistors on the I2C lines):
    Module VIN -> Arduino 5V
    Module GND -> Arduino GND
    Module SDA -> Arduino A4
    Module SCL -> Arduino A5
*/
#include <Wire.h>
// I2C address of the sensor
const uint8_t SHT21_ADDRESS = 0x40;
// Sensor commands
const uint8_t CMD_TRIGGER_TEMP_NO_HOLD = 0xF3; // start temperature measurement
const uint8_t CMD_TRIGGER_HUM_NO_HOLD  = 0xF5; // start humidity measurement
const uint8_t CMD_SOFT_RESET           = 0xFE; // reset the sensor
// Waiting times in milliseconds, slightly above the maximum conversion time
const uint16_t TEMP_WAIT_MS = 100; // 14 bit temperature
const uint16_t HUM_WAIT_MS  = 40;  // 12 bit humidity
// CRC-8 with polynomial 0x31, start value 0
uint8_t crc8(const uint8_t *data, uint8_t length) {
  uint8_t crc = 0;
  for (uint8_t i = 0; i < length; i++) {
    crc ^= data[i];
    for (uint8_t bit = 0; bit < 8; bit++) {
      if (crc & 0x80) {
        crc = (crc << 1) ^ 0x31;
      } else {
        crc = crc << 1;
      }
    }
  }
  return crc;
}
// Send a measurement command, wait, read 3 bytes and check the CRC
bool readRaw(uint8_t command, uint16_t waitMs, uint16_t &raw) {
  Wire.beginTransmission(SHT21_ADDRESS);
  Wire.write(command);
  if (Wire.endTransmission() != 0) {
    return false; // sensor did not acknowledge
  }
  delay(waitMs); // wait for the conversion to finish
  if (Wire.requestFrom(SHT21_ADDRESS, (uint8_t)3) != 3) {
    return false; // fewer than 3 bytes received
  }
  uint8_t data[3];
  for (uint8_t i = 0; i < 3; i++) {
    data[i] = Wire.read();
  }
  if (crc8(data, 2) != data[2]) {
    return false; // checksum error
  }
  raw = ((uint16_t)data[0] << 8) | data[1];
  raw &= 0xFFFC; // clear the two status bits
  return true;
}
void setup() {
  Serial.begin(9600);
  Wire.begin();
  Serial.println("SHT21 / GY-21 test started");
  // Check that the sensor answers at its address
  Wire.beginTransmission(SHT21_ADDRESS);
  if (Wire.endTransmission() != 0) {
    Serial.println("Sensor not found at address 0x40, check wiring");
    while (true) {
      delay(1000); // stop here
    }
  }
  Serial.println("Sensor found at address 0x40");
  // Soft reset, the sensor needs up to 15 ms to restart
  Wire.beginTransmission(SHT21_ADDRESS);
  Wire.write(CMD_SOFT_RESET);
  Wire.endTransmission();
  delay(20);
}
void loop() {
  uint16_t rawTemperature = 0;
  uint16_t rawHumidity = 0;
  if (readRaw(CMD_TRIGGER_TEMP_NO_HOLD, TEMP_WAIT_MS, rawTemperature) &&
      readRaw(CMD_TRIGGER_HUM_NO_HOLD, HUM_WAIT_MS, rawHumidity)) {
    // Convert raw values to physical values
    float temperatureC = -46.85 + 175.72 * (float)rawTemperature / 65536.0;
    float humidityRH = -6.0 + 125.0 * (float)rawHumidity / 65536.0;
    // Limit humidity to the physical range
    if (humidityRH < 0.0) humidityRH = 0.0;
    if (humidityRH > 100.0) humidityRH = 100.0;
    Serial.print("Temperature: ");
    Serial.print(temperatureC, 2);
    Serial.print(" C, Humidity: ");
    Serial.print(humidityRH, 1);
    Serial.println(" %RH");
  } else {
    Serial.println("Read error (no answer or CRC mismatch)");
  }
  delay(2000); // one reading every 2 seconds
}

Come funziona il codice:

All'inizio sono definiti l'indirizzo del sensore (SHT21_ADDRESS, 0x40), i comandi di misurazione (CMD_TRIGGER_TEMP_NO_HOLD e CMD_TRIGGER_HUM_NO_HOLD) e il comando di reset (CMD_SOFT_RESET). Le costanti TEMP_WAIT_MS e HUM_WAIT_MS stabiliscono quanto attende il programma dopo il comando, poco oltre i tempi massimi di conversione del sensore.

La funzione crc8 calcola la somma di controllo con il polinomio 0x31, partendo dal valore 0, sui due byte di dati ricevuti. La funzione readRaw invia il comando, attende la conversione, richiede tre byte con Wire.requestFrom, confronta il CRC calcolato con quello ricevuto e, se tutto è corretto, forma il numero grezzo dai due byte di dati e azzera con la maschera 0xFFFC i due bit di stato. La funzione restituisce false se il sensore non risponde, se arrivano meno di 3 byte o se la somma di controllo non corrisponde.

In setup si avvia la porta seriale a 9600 baud e il bus I2C con Wire.begin. Il programma verifica poi se il sensore risponde all'indirizzo 0x40 e, in caso contrario, si ferma con un messaggio che invita a controllare i collegamenti. In caso di successo, invia il comando di reset software e attende 20 ms, il tempo necessario al sensore per riavviarsi.

In loop vengono richieste in sequenza la temperatura (rawTemperature) e l'umidità (rawHumidity). I valori grezzi sono convertiti in temperatureC e humidityRH con le formule della sezione sul funzionamento, e l'umidità è limitata all'intervallo 0 - 100 %RH. Il risultato viene visualizzato sul monitor seriale e, in caso di lettura errata, compare un messaggio di errore. La pausa di 2 secondi tra le misurazioni è ottenuta con delay(2000).

Risultato:

Aprite il monitor seriale di Arduino IDE (Strumenti > Monitor seriale) e impostate la velocità a 9600 baud. Ogni 2 secondi compare una riga con la temperatura e l'umidità misurate, come nell'esempio seguente.

SHT21 / GY-21 test started
Sensor found at address 0x40
Temperature: 23.41 C, Humidity: 48.7 %RH
Temperature: 23.43 C, Humidity: 48.6 %RH
Temperature: 23.44 C, Humidity: 48.8 %RH
Temperature: 23.46 C, Humidity: 51.9 %RH
Temperature: 23.52 C, Humidity: 56.3 %RH
Temperature: 23.49 C, Humidity: 53.1 %RH
Temperature: 23.45 C, Humidity: 49.5 %RH

Problemi frequenti:

Compare il messaggio che il sensore non è stato trovato all'indirizzo 0x40. La causa più frequente è un collegamento sbagliato oppure la mancanza della massa comune. Verificate che SDA vada ad A4 e SCL ad A5, che non siano invertiti, che GND sia collegato e che i pin del connettore siano saldati correttamente sulla scheda del modulo.

Compare il messaggio di errore di lettura (nessuna risposta o CRC errato). La causa è di solito il rumore sui fili lunghi o contatti deboli. Accorciate i fili SDA e SCL, allontanateli dai cavi di potenza o dai motori e controllate le saldature.

La temperatura visualizzata è più alta di quella reale. Il sensore assorbe calore dalle schede vicine, ad esempio dallo stabilizzatore della scheda Arduino. Montate il modulo a distanza, preferibilmente su fili più lunghi, e lasciatelo stabilizzare per alcuni minuti.

L'umidità resta al 100 %RH oppure aumenta bruscamente. Il sensore è stato esposto a condensa o acqua. Lasciatelo asciugare in un luogo ventilato e, al montaggio, proteggetelo da spruzzi e dal contatto diretto con i liquidi.

Non compare nulla sul monitor seriale. Verificate di aver scelto la porta corretta in Strumenti > Porta, che la scheda selezionata sia Arduino Uno e che la velocità del monitor seriale sia 9600 baud.

Limiti e consigli:

La precisione tipica è di ±2 %RH per l'umidità e di ±0.3 °C per la temperatura, nei campi 0 - 100 %RH e -40 - 125 °C. Il sensore non è destinato alla misurazione nei liquidi o in presenza di condensa e non reagisce istantaneamente, perché l'umidità si stabilizza in pochi secondi. L'indirizzo 0x40 è fisso, quindi sullo stesso bus I2C può essere presente un solo modulo di questo tipo.

Una lettura ogni 2 secondi è sufficiente per la maggior parte delle applicazioni ambientali. In seguito potete visualizzare i valori su un display OLED o LCD, registrarli su una scheda SD oppure comandare un relè per un umidificatore o per una ventilazione in base alle soglie desiderate, con un'isteresi di alcuni punti percentuali per evitare commutazioni frequenti.