Search Code

Les 35: De HTU21D-temperatuursensor gebruiken met Arduino

Les 35: De HTU21D-temperatuursensor gebruiken met Arduino

Les 35: De HTU21D-temperatuursensor gebruiken met Arduino

In deze tutorial leren we hoe we de HTU21D-temperatuursensor met een Arduino kunnen verbinden. Deze sensor maakt een nauwkeurige meting van temperatuur en luchtvochtigheid mogelijk via I2C-communicatie, waardoor hij eenvoudig te integreren is in verschillende projecten. Aan het einde van deze les kun je temperatuur- en luchtvochtigheidswaarden van de sensor uitlezen en weergeven op de Seriële Monitor.

HTU21D module

Voor dit project gebruiken we de Adafruit-bibliotheek, die een eenvoudige manier biedt om met de HTU21D-sensor te communiceren. Je leert hoe je de bedrading opzet, de code schrijft en de belangrijkste identificatiecodes in het programma begrijpt. Als je verduidelijking nodig hebt over een deel van het proces, kun je de video raadplegen (in video op 0:00).

Hardware uitgelegd

De HTU21D is een digitale luchtvochtigheids- en temperatuursensor. Hij werkt op een spanningsbereik van 1,5V tot 3,6V, waardoor hij geschikt is voor zowel 3,3V- als 5V-systemen. De sensor communiceert via I2C en heeft slechts twee draden nodig voor gegevensoverdracht: Seriële Datalijn (SDA) en Seriële Kloklijn (SCL). De sensor heeft een zeer laag stroomverbruik, slechts 0,02 µA in rust en tot 450 µA tijdens metingen.

Naast de sensor heb je een Arduino-bord en wat jumperdraden nodig om alles aan te sluiten. De verbindingen zijn eenvoudig: voed de sensor, sluit de datalijnen aan en je bent klaar om te gaan. Zorg ervoor dat je verbindingen stevig zijn om communicatieproblemen te voorkomen.

Datasheet-details

Fabrikant TE Connectivity
Onderdeelnummer HTU21D-F
Logica/IO-spanning 1,5 - 3,6 V
Voedingsspanning 3,3 V
Uitgangsstroom (typisch) 0,02 µA (rust), 450 µA (actief)
Temperatuurbereik -40 tot +125 °C
Luchtvochtigheidsbereik 0 tot 100 % RV
Resolutie (temperatuur) 0,01 °C
Resolutie (luchtvochtigheid) 0,04 % RV
Behuizing DFN-8

 

  • Zorg voor een juiste voedingsspanning (1,5 - 3,6 V) om schade te voorkomen.
  • Gebruik indien nodig pull-up-weerstanden op de SDA- en SCL-lijnen.
  • Houd de bedrading kort om ruis in de I2C-communicatie te minimaliseren.
  • Controleer de verbindingen zorgvuldig om zwevende ingangen te voorkomen.
  • Gebruik een koellichaam als je dicht bij de maximale temperatuurlimieten werkt.

Bedradingsinstructies

Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor

Om de HTU21D-sensor op je Arduino aan te sluiten, begin je met het verbinden van de voedingspinnen. Sluit de linkerpin van de sensor aan op de 3,3V-uitgang van de Arduino. De tweede pin moet worden verbonden met de aarde (GND). Verbind vervolgens de SDA-pin van de sensor met de A4-pin van de Arduino, die fungeert als datalijn voor I2C-communicatie. Verbind ten slotte de SCL-pin van de sensor met de A5-pin op de Arduino, die fungeert als kloklijn. Zorg ervoor dat alle verbindingen stevig zijn om betrouwbare communicatie te behouden.

Als je een ander bord gebruikt, kunnen de SDA- en SCL-pinnen variëren, dus controleer de specificaties van je bord. In de video worden kort alternatieve bedradingsopties besproken (in video op 1:30).

Codevoorbeelden & uitleg

We bekijken nu de code die met de HTU21D-sensor communiceert. Eerst moeten we de benodigde bibliotheken voor I2C-communicatie en de HTU21D-sensor toevoegen. Het volgende fragment toont de setup-functie:

void setup() {
  Serial.begin(9600);
  if (!htu.begin()) {
    Serial.println("Kan de sensor niet vinden!");
    while (1);
  }
}

Hier initialiseren we de Seriële Monitor met een baudrate van 9600. Vervolgens proberen we de sensor te initialiseren met htu.begin(). Als de sensor niet wordt gevonden, print het programma een foutmelding en stopt het.

Vervolgens lezen we continu temperatuur- en luchtvochtigheidswaarden in de loop-functie:

void loop() {
    float temp = htu.readTemperature();
    float rel_hum = htu.readHumidity();
    Serial.print("Temperatuur: "); Serial.print(temp); Serial.println(" C");
    Serial.print("Luchtvochtigheid: "); Serial.print(rel_hum); Serial.println(" %");
    delay(500);
}

In deze loop lezen we de temperatuur met htu.readTemperature() en slaan deze op in de variabele temp. Op dezelfde manier lezen we de luchtvochtigheid met htu.readHumidity(). De waarden worden vervolgens elke 500 milliseconden naar de Seriële Monitor geprint.

Voor een meer gestructureerde aanpak kun je functies definiëren om de metingen af te handelen. De volledige code wordt onder dit artikel geladen en biedt je volledige toegang tot alle besproken functionaliteiten.

Demonstratie / Wat je kunt verwachten

Wanneer je de code uploadt naar je Arduino en de Seriële Monitor opent, zou je continue metingen van temperatuur en luchtvochtigheid moeten zien. De waarden worden elke halve seconde bijgewerkt. Als de sensor temperaturen boven de maximale limiet van 125 °C detecteert, kan hij nul of foutieve waarden weergeven. Dit is een veelvoorkomende valkuil om op te letten tijdens het testen (in video op 4:30).

Videotijdstempels

  • [00:00] Introductie
  • [00:22] Sensoroverzicht
  • [01:22] Datasheetbeoordeling
  • [02:28] Bedrading
  • [03:03] Bibliotheekinstallatie
  • [04:05] Code-uitleg (deel 1)
  • [08:33] Code-uitleg (deel 2)
  • [07:34] Live demonstratie

Afbeeldingen

thumb_robojax_HTU21DF_types-1756423961-8524
thumb_robojax_HTU21DF_types-1756423961-8524
Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
212-Arduino code using HTU21D-F Humidity & Temperature Sensor (basic)
Taal: C++
++
/***************************************************
  This is an example for the HTU21D-F Humidity & Temperature Sensor

  Designed specifically to work with the HTU21D-F sensor from Adafruit
  ----> https://www.adafruit.com/products/1899

  These module use I2C to communicate; 2 pins are required to
  interface
 ****************************************************/

#include <Wire.h>
#include "Adafruit_HTU21DF.h"

// Connect Vin to 3-5VDC
// Connect GND to ground
// Connect SCL to I2C clock pin (A5 on UNO)
// Connect SDA to I2C data pin (A4 on UNO)

Adafruit_HTU21DF htu1 = Adafruit_HTU21DF();//create object for first HTU21DF sensor
Adafruit_HTU21DF htu2 = Adafruit_HTU21DF();//create object for second HTU21DF sensor
//Adafruit_HTU21DF htu3 = Adafruit_HTU21DF();//create object for third HTU21DF sensor (disabled, remove // from begging of code)

void setup() {
  Serial.begin(9600);
  Serial.println("HTU21D-F test for two modules");

  if (!htu.begin()) {
    Serial.println("Couldn't find sensor!");
    while (1);
  }
}

void loop() {
	//get value for sensor 1
    float temp1 = htu1.readTemperature();
    float rel_hum1 = htu1.readHumidity();

	//get value for sensor 2
    float temp2 = htu2.readTemperature();
    float rel_hum2 = htu2.readHumidity();	

	//get value for sensor 3
    float temp3 = htu3.readTemperature();
    float rel_hum3 = htu3.readHumidity();	
	
	//print values for sensor 1
    Serial.print("Sensor 1 Temp : "); Serial.print(temp1); Serial.print(" C");
    Serial.print("\t\t");
    Serial.print("Sensor 1 Humidity: "); Serial.print(rel_hum1); Serial.println(" %");

	//print values for sensor 2
    Serial.print("Sensor 2 Temp : "); Serial.print(temp2); Serial.print(" C");
    Serial.print("\t\t");
    Serial.print("Sensor 2 Humidity: "); Serial.print(rel_hum2); Serial.println(" %");	
	
	//print values for sensor 3
    //Serial.print("Sensor 3 Temp : "); Serial.print(temp3); Serial.print(" C");
    //Serial.print("\t\t");
    //Serial.print("Sensor 3 Humidity: "); Serial.print(rel_hum3); Serial.println(" %");	
	
    delay(500);
}

Dingen die je misschien nodig hebt

Bestanden📁

Arduino-bibliotheken (zip)