Uživatelské nástroje

Nástroje pro tento web


education:arduino_htu21d

HTU21D(F)

HTU21D

  • Senzor teploty a vlhkosti
  • Komunikace přes I2C
  • Napájení 1.5 - 3.6V
  • Nastavitelné rozlišení
  • Vestavěné vyhřívání pro diagnostiku
  • Snímání napájecího napětí
  • Nastavitelné rozlišení

SparkFun_HTU21D_Breakout_Arduino_Library
Data sheet

HTU21D ARDUINO ESP32
I2C SDA A4 GPIO21
SCL A5 GPIO22

Výrobce doporučuje senzor po každém spuštění restartovat. Aktuální verze knihovny tuto funkci nenabízí, nicméně definuje příkaz SOFT_RESET. Následující kus kódu lze pro tento účel používat.

Wire.beginTransmission(HTU21D_ADDRESS);
Wire.write(SOFT_RESET);
Wire.endTransmission();

Knihovna obsahuje:
begin(&wirePort); - wirePort - I2C sběrnice
readTemperature(); - vrátí naměřenou teplotu [°C] jako float
readHumidity(); - vrátí naměřenou vlhkost [%] jako float
setResolution(resBits); - Slouží k nastavení rozlišení pro teplotu a vlhkost
writeUserRegister(val); - Slouží pro nastavení senzoru, val - 8 bitů nastavení
readUserRegister(); - Slouží pro přečtení nastavení senzoru

První a poslední bit určuje nastavení rozlišení. Bit 6 indikuje napájecí napětí menší něž 2.25V (End of Battery). Bitem číslo 2 se zapíná nebo vypíná vestavěné vyhřívání. Pokud se senzor zahřeje, měl by měřit vyšší teplotu a nižší vlhkost. Díky tomu lze automaticky ověřit funkčnost senzoru. Více informací je v datasheetu na straně 13.

ROZLIŠENÍ
Teplota Vlhkost
14b 12b
12b 8b
13b 10b
11b 11b
HTU21D.ino
#include <Wire.h>
#include "SparkFunHTU21D.h" // Kód je psaný pro verzi knihovny 1.1.3
 
HTU21D htu;
 
void setup() {
  Serial.begin(9600);
  Serial.println("\nHTU21D test");
  htu.begin(); // Spuštění komunikace se senzorem
  htuReset();  // Knihovna tuto funkci neobsahuje
  printInfo();
  /* Zápis do registru: vypnutí OTP, změna rozlišení na 8bitů pro vlhkost a 12bitů pro teplotu */
  htu.writeUserRegister(USER_REGISTER_DISABLE_OTP_RELOAD | USER_REGISTER_RESOLUTION_RH8_TEMP12);
}
 
void loop() {
  printInfo();
  delay(1000);
}
 
void htuReset() {
  Wire.beginTransmission(HTU21D_ADDRESS);
  Wire.write(SOFT_RESET);
  Wire.endTransmission();
}
 
void printInfo() {
  float temp = htu.readTemperature();       // Měření teploty
  float humd = htu.readHumidity();          // Měření vlhkosti
  uint8_t userReg = htu.readUserRegister(); // Načtení registru
 
  Serial.println("\n\nteplota\t\tvlhkost\t\tbattery\t\theater\t\tOTP reload\trozliseni\tregistr");
  Serial.print(temp); Serial.print("°C\t\t");
  Serial.print(humd); Serial.print("%\t\t");
  Serial.print(userReg & USER_REGISTER_END_OF_BATTERY ? "low" : "ok");  Serial.print("\t\t");
  Serial.print(userReg & USER_REGISTER_HEATER_ENABLED ? "on" : "off");  Serial.print("\t\t");
  Serial.print(userReg & USER_REGISTER_DISABLE_OTP_RELOAD  ? "disable" : "enable"); Serial.print("\t\t");
  switch (userReg & USER_REGISTER_RESOLUTION_MASK) { // rozlišení [teplota + vlhkost]
    case USER_REGISTER_RESOLUTION_RH12_TEMP14: Serial.print("14 + 12\t\t"); break;
    case USER_REGISTER_RESOLUTION_RH8_TEMP12: Serial.print("12 +  8\t\t"); break;
    case USER_REGISTER_RESOLUTION_RH10_TEMP13: Serial.print("13 + 10\t\t"); break;
    case USER_REGISTER_RESOLUTION_RH11_TEMP11: Serial.print("11 + 11\t\t"); break;
  }
  for(int i = 7; i >= 0; i--) Serial.print(bitRead(userReg, i)); // Výpis registru
}
education/arduino_htu21d.txt · Poslední úprava: 2023/08/18 12:37 autor: 127.0.0.1