Teploměr a vlhkoměr DHT12

Teploměr a vlhkoměr DHT12 je vstupní modul pro Arduino. Tento modul obsahuje novější senzor DHT12, který je nástupce oblíbeného modulu DHT11. Tato novější verze komunikuje po sběrnici I2C a díky jejím vlastnostem ji můžeme zařadit někde mezi senzory DHT11 a DHT22.
Rozsah měření teploty je -20 až +60 °C s přesností ± 0,5°C. Vlhkost lze měřit v rozsahu 20-95 % RH (relativní vlhkost) s přesností ±5 % RH. A pro napájení je možné použít napětí v rozsahu 2,7-5,5 Voltu.

Pro úspěšné propojení modulu DHT12 a Arduino desky stačí zapojit celkem 4 vodiče. Propojíme „+“ s 5V Arduina, SDA s pinem A4, „-“ se zemí Arduina a SCL s pinem A5. Pro piny SDA a SCL musíme vybrat vždy vyhrazené I2C piny na námi vybrané desce, u Arduino UNO jsou to právě piny A4 a A5.

Pro úspěšné nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu DHT, návod, jak na to, je uveden zde. Ukázkový kód obsahuje na svém začátku připojení potřebných knihoven a inicializaci modulu z knihovny.
V podprogramu setup provedeme v prvním kroku zahájení komunikace po sériové lince a následně načteme stav připojeného senzoru do proměnné. Tento stav v dalším kroku zkontrolujeme, jestli je vše v pořádku. Pokud ano, vypíšeme informaci po sériové lince a pokračujeme dále. Pokud se objeví nějaká chyba, vypíšeme o ní detaily po sériové lince.
Nekonečná smyčka loop začíná vyčtením všech údajů ze senzoru. Tyto údaje můžeme poté načíst do samostatných proměnných, kdy údaje o teplotě a vlhkosti je ještě nutné podělit 10, abychom získali správné hodnoty. Po načtení údajů provedeme následně jejich vytištění po sériové lince a po pauze 5 sekund se smyčka loop opakuje.

// Teplotní senzor DHT12

// připojení potřebných knihoven
#include <Wire.h>
#include <dht.h>
// inicializace modulu z knihovny,
// 0x5c je I2C adresa modulu
dht12 DHT(0x5c);

void setup() {
  // zahájení komunikace po sériové lince
  // rychlostí 9600 baud
  Serial.begin(9600);
  // načtení stavu připojeného senzoru do proměnné
  dht::ReadStatus chk = DHT.read();
  // kontrola, jestli je senzor připojen v pořádku
  // a vytištění výsledku po sériové lince
  if (chk == dht::OK) {
    Serial.println("DHT12 OK.");
  } else {
    Serial.print("Chyba pripojeni senzoru DHT12: ");
    Serial.println(chk);
  }
}

void loop() {
  // vyčtení údajů ze senzoru
  DHT.read();
  // načtení všech údajů ze senzoru
  // do proměnných, teplotu a vlhkost
  // je nutné vydělit 10.0 pro
  // získání výsledku s desetinnými místy
  float teplota = DHT.getTemperature() / 10.0;
  float vlhkost = DHT.getHumidity() / 10.0;
  float rosnyBod = DHT.dewPoint();
  // vytištění údajů po sériové lince
  Serial.print("DHT12 Teplota: ");
  Serial.print(teplota);
  Serial.print("stC, vlhkost: ");
  Serial.print(vlhkost);
  Serial.print("%RH, rosny bod: ");
  Serial.print(rosnyBod);
  Serial.println("stC.");
  // pauza před novým měřením
  delay(5000);
}

Po nahrání ukázkového kódu do Arduino desky s připojeným modulem DHT12 dostaneme například tento výsledek:

DHT12 OK.
DHT12 Teplota: 23.60stC, vlhkost: 36.50%RH, rosny bod: 7.85stC.
DHT12 Teplota: 23.60stC, vlhkost: 36.50%RH, rosny bod: 7.85stC.
DHT12 Teplota: 23.50stC, vlhkost: 36.60%RH, rosny bod: 7.80stC.
DHT12 Teplota: 23.50stC, vlhkost: 36.70%RH, rosny bod: 7.84stC.
DHT12 Teplota: 23.50stC, vlhkost: 36.70%RH, rosny bod: 7.84stC.

Teploměr a vlhkoměr DHT12 je zajímavý vstupní modul pro Arduino. Je to nástupce starší generace DHT11 a DHT22, kdy ho díky jeho parametrům můžeme zařadit mezi dva zmíněné. Hodí se do všech projektů, kde potřebujeme měřit teplotu a vlhkost s rozumnou přesností, jako například domácí meteostanice, bezdrátová čidla a podobně. Jeho výhodou zůstává příznivá cena a díky ní dobrý poměr cena/výkon.

 

Seznam použitých komponent:
https://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
https://dratek.cz/arduino/1977-i2c-teplomer-a-vlhkomer-dht12-digitalni.html

Další podobné články