Sommario:

Misurazione di umidità e temperatura utilizzando HTS221 e Arduino Nano: 4 passaggi
Misurazione di umidità e temperatura utilizzando HTS221 e Arduino Nano: 4 passaggi

Video: Misurazione di umidità e temperatura utilizzando HTS221 e Arduino Nano: 4 passaggi

Video: Misurazione di umidità e temperatura utilizzando HTS221 e Arduino Nano: 4 passaggi
Video: Arduino Nano - HTS221 Relative Humidity and Temperature Sensor Tutorial 2024, Luglio
Anonim
Image
Image

HTS221 è un sensore digitale capacitivo ultra compatto per umidità relativa e temperatura. Include un elemento di rilevamento e un circuito integrato specifico per applicazioni a segnale misto (ASIC) per fornire le informazioni di misurazione tramite interfacce seriali digitali. Integrato con così tante funzioni, questo è uno dei sensori più appropriati per misurazioni critiche di umidità e temperatura.

In questo tutorial è stato illustrato l'interfacciamento del modulo sensore HTS221 con arduino nano. Per leggere i valori di umidità e temperatura, abbiamo utilizzato arduino con un adattatore I2c. Questo adattatore I2C rende la connessione al modulo sensore facile e affidabile.

Passaggio 1: hardware richiesto:

Hardware richiesto
Hardware richiesto
Hardware richiesto
Hardware richiesto
Hardware richiesto
Hardware richiesto

I materiali di cui abbiamo bisogno per raggiungere il nostro obiettivo includono i seguenti componenti hardware:

1. HTS221

2. Arduino Nano

3. Cavo I2C

4. Scudo I2C per Arduino Nano

Passaggio 2: collegamento hardware:

Collegamento hardware
Collegamento hardware
Collegamento hardware
Collegamento hardware

La sezione di collegamento hardware spiega fondamentalmente le connessioni di cablaggio richieste tra il sensore e l'arduino nano. Garantire connessioni corrette è la necessità di base mentre si lavora su qualsiasi sistema per l'output desiderato. Quindi, i collegamenti necessari sono i seguenti:

L'HTS221 funzionerà su I2C. Ecco lo schema elettrico di esempio, che mostra come cablare ciascuna interfaccia del sensore.

Di default, la scheda è configurata per un'interfaccia I2C, quindi consigliamo di utilizzare questo collegamento se sei altrimenti agnostico.

Tutto ciò di cui hai bisogno sono quattro fili! Sono necessarie solo quattro connessioni pin Vcc, Gnd, SCL e SDA e questi sono collegati con l'aiuto del cavo I2C.

Queste connessioni sono mostrate nelle immagini sopra.

Passaggio 3: codice per la misurazione dell'umidità e della temperatura:

Codice per la misurazione dell'umidità e della temperatura
Codice per la misurazione dell'umidità e della temperatura

Iniziamo ora con il codice Arduino.

Durante l'utilizzo del modulo sensore con Arduino, includiamo la libreria Wire.h. La libreria "Wire" contiene le funzioni che facilitano la comunicazione i2c tra il sensore e la scheda Arduino.

L'intero codice Arduino è riportato di seguito per comodità dell'utente:

#includere

// L'indirizzo I2C dell'HTS221 è 0x5F

#define Addr 0x5F

configurazione nulla()

{

// Inizializza la comunicazione I2C come MASTER

Wire.begin();

// Inizializza la comunicazione seriale, imposta baud rate = 9600

Serial.begin(9600);

// Avvia la trasmissione I2C

Wire.beginTransmission(Addr);

// Seleziona il registro di configurazione medio

Wire.write(0x10);

// Campioni medi di temperatura = 256, Campioni medi di umidità = 512

Wire.write(0x1B);

// Interrompi trasmissione I2C

Wire.endTransmission();

// Avvia la trasmissione I2C

Wire.beginTransmission(Addr);

// Seleziona il registro di controllo1

Wire.write(0x20);

// Accensione, aggiornamento continuo, velocità di uscita dati = 1 Hz

Wire.write(0x85);

// Interrompi trasmissione I2C

Wire.endTransmission();

ritardo(300);

}

ciclo vuoto()

{

dati int senza segno[2];

unsigned int val[4];

unsigned int H0, H1, H2, H3, T0, T1, T2, T3, raw;

// Valori di calibrazione dell'umidità

for(int i = 0; i < 2; i++)

{

// Avvia la trasmissione I2C

Wire.beginTransmission(Addr);

// Invia registro dati

Wire.write((48 + i));

// Interrompi trasmissione I2C

Wire.endTransmission();

// Richiedi 1 byte di dati

Wire.requestFrom(Addr, 1);

// Legge 1 byte di dati

if(Filo.disponibile() == 1)

{

data = Wire.read();

}

}

// Converti i dati di umidità

H0 = dati[0] / 2;

H1 = dati[1] / 2;

for(int i = 0; i < 2; i++)

{

// Avvia la trasmissione I2C

Wire.beginTransmission(Addr);

// Invia registro dati

Wire.write((54 + i));

// Interrompi trasmissione I2C

Wire.endTransmission();

// Richiedi 1 byte di dati

Wire.requestFrom(Addr, 1);

// Legge 1 byte di dati

if(Filo.disponibile() == 1)

{

data = Wire.read();

}

}

// Converti i dati di umidità

H2 = (dati[1] * 256,0) + dati[0];

for(int i = 0; i < 2; i++)

{

// Avvia la trasmissione I2C

Wire.beginTransmission(Addr);

// Invia registro dati

Wire.write((58 + i));

// Interrompi trasmissione I2C

Wire.endTransmission();

// Richiedi 1 byte di dati

Wire.requestFrom(Addr, 1);

// Legge 1 byte di dati

if(Filo.disponibile() == 1)

{

data = Wire.read();

}

}

// Converti i dati di umidità

H3 = (dati[1] * 256,0) + dati[0];

// Valori di calibrazione della temperatura

// Avvia la trasmissione I2C

Wire.beginTransmission(Addr);

// Invia registro dati

Wire.write(0x32);

// Interrompi trasmissione I2C

Wire.endTransmission();

// Richiedi 1 byte di dati

Wire.requestFrom(Addr, 1);

// Legge 1 byte di dati

if(Filo.disponibile() == 1)

{

T0 = Filo.leggi();

}

// Avvia la trasmissione I2C

Wire.beginTransmission(Addr);

// Invia registro dati

Wire.write(0x33);

// Interrompi trasmissione I2C

Wire.endTransmission();

// Richiedi 1 byte di dati

Wire.requestFrom(Addr, 1);

// Legge 1 byte di dati

if(Filo.disponibile() == 1)

{

T1 = Filo.leggi();

}

// Avvia la trasmissione I2C

Wire.beginTransmission(Addr);

// Invia registro dati

Wire.write(0x35);

// Interrompi trasmissione I2C

Wire.endTransmission();

// Richiedi 1 byte di dati

Wire.requestFrom(Addr, 1);

// Legge 1 byte di dati

if(Filo.disponibile() == 1)

{

raw = Wire.read();

}

grezzo = grezzo & 0x0F;

// Converti i valori di calibrazione della temperatura a 10 bit

T0 = ((grezzo & 0x03) * 256) + T0;

T1 = ((grezzo & 0x0C) * 64) + T1;

for(int i = 0; i < 2; i++)

{

// Avvia la trasmissione I2C

Wire.beginTransmission(Addr);

// Invia registro dati

Wire.write((60 + i));

// Interrompi trasmissione I2C

Wire.endTransmission();

// Richiedi 1 byte di dati

Wire.requestFrom(Addr, 1);

// Legge 1 byte di dati

if(Filo.disponibile() == 1)

{

data = Wire.read();

}

}

// Converti i dati

T2 = (dati[1] * 256,0) + dati[0];

for(int i = 0; i < 2; i++)

{

// Avvia la trasmissione I2C

Wire.beginTransmission(Addr);

// Invia registro dati

Wire.write((62 + i));

// Interrompi trasmissione I2C

Wire.endTransmission();

// Richiedi 1 byte di dati

Wire.requestFrom(Addr, 1);

// Legge 1 byte di dati

if(Filo.disponibile() == 1)

{

data = Wire.read();

}

}

// Converti i dati

T3 = (dati[1] * 256,0) + dati[0];

// Avvia la trasmissione I2C

Wire.beginTransmission(Addr);

// Invia registro dati

Wire.write(0x28 | 0x80);

// Interrompi trasmissione I2C

Wire.endTransmission();

// Richiedi 4 byte di dati

Wire.requestFrom(Addr, 4);

// Legge 4 byte di dati

// umidità msb, umidità lsb, temp msb, temp lsb

if(Filo.disponibile() == 4)

{

val[0] = Wire.read();

val[1] = Wire.read();

val[2] = Wire.read();

val[3] = Wire.read();

}

// Converti i dati

umidità galleggiante = (val[1] * 256,0) + val[0];

umidità = ((1.0 * H1) - (1.0 * H0)) * (1.0 * umidità - 1.0 * H2) / (1.0 * H3 - 1.0 * H2) + (1.0 * H0);

int temp = (val[3] * 256) + val[2];

float cTemp = (((T1 - T0) / 8.0) * (temp - T2)) / (T3 - T2) + (T0 / 8.0);

float fTemp = (cTemp * 1.8) + 32;

// Invia i dati al monitor seriale

Serial.print("Umidità relativa: ");

Serial.print(umidità);

Serial.println("% UR");

Serial.print("Temperatura in gradi Celsius: ");

Serial.print(cTemp); Serial.println("C");

Serial.print("Temperatura in Fahrenheit: ");

Serial.print(fTemp);

Serial.println("F");

ritardo (500);

}

Nella libreria wire Wire.write() e Wire.read() viene utilizzato per scrivere i comandi e leggere l'output del sensore.

Serial.print() e Serial.println() vengono utilizzati per visualizzare l'output del sensore sul monitor seriale dell'IDE Arduino.

L'uscita del sensore è mostrata nell'immagine sopra.

Passaggio 4: applicazioni:

Applicazioni
Applicazioni

HTS221 può essere impiegato in vari prodotti di consumo come umidificatori d'aria e frigoriferi, ecc. Questo sensore trova anche la sua applicazione in un'arena più ampia tra cui l'automazione domestica intelligente, l'automazione industriale, le apparecchiature respiratorie, il monitoraggio di beni e beni.

Consigliato: