Vaša IP adresa: 3.144.42.196
Počet návštev: 30501

Meranie teploty s DHT22

Meranie teploty a vlhkosti pomocou senzora s rozhraním one-wire

1. Teoretický úvod

Senzor DHT22 je veľmi populárny obvod určený na meranie teploty a relatívnej vlhkosti. Tento senzor je nástupcom senzora DHT11, ktorý má menšie bitové rozlíšenie a menšiu presnosť. V tabuľke Tab. 1 sú uvedené kľúčové parametre oboch senzorov.

Tab. 1 Parametre senzorov DHT11 a DHT22.
ParameterDHT11DHT22
Rozsah (Teplota)(0 ÷ 50) °C(-40 ÷ 80) °C
Presnosť (Teplota)± (1 ÷ 2) °C± 0,5 °C
Rozsah (Relatívna vlhkosť)(30 ÷ 90) %(30 ÷ 100) %
Presnosť (Relatívna vlhkosť)± (4 ÷ 5) %± (2 ÷ 5) %
Napájacie napätie(3,3 ÷ 5) V(3,3 ÷ 5) V
Rozlíšenie8-bit16-bit
Vzorkovacia perióda≥ 1 s≥ 2 s

Senzor DHT22 sa predáva aj pod označením AM2302. Senzor má plastové puzdro s otvormi a štyri vývody, z ktorých je jeden nezapojený (Obr. 1 a). Senzor je možné zakúpiť na rozširujúcej DPS s tromi vývodmi (Obr. 1 b), čo umožňuje jeho jednoduché pripojenie k iným zariadeniam.

Obr. 1   Samotný senzor DHT22/AM2302 (a), senzor na rozširujúcej DPS (b).
Obr. 1 Samotný senzor DHT22/AM2302 (a), senzor na rozširujúcej DPS (b).

1.1 Komunikačný protokol

Na komunikáciu senzor využíva iba jeden vývod (DATA). Komunikačné rozhranie, ktoré využíva iba jeden vodič sa označuje ako one-wire interface alebo one-wire bus. Senzor DHT22 využíva špecifický komunikačný protokol, ktorý je znázornený na Obr. 2. Komunikácia prebieha obojsmerne cez dátový vývod DATA a je pomerne jednoduchá. Pokojový stav (idle state) linky má úroveň HIGH. Z tohto dôvodu je vhodné na tento vývod pripojiť pull-up rezistor (4k7 alebo 10k), aby v prípade nečinnosti bol senzor uvedený do pokojového stavu. Inicializácia komunikácie prebieha zo strany MCU tak, že zmení stav linky na úroveň LOW na dobu 18 ms. Následne zmení stav linky na úroveň HIGH po dobu (20-40) µs. Táto postupnosť predstavuje pre senzor DHT takzvanú štartovaciu podmienku (Start condition). Na túto podmienku zareaguje senzor potvrdením (Acknowledge) v podobe úrovne LOW (80 µs) a nasledujúcou úrovňou HIGH (80 µs). Po potvrdení nasleduje odosielanie údajov (Data transfer) o nameranej vlhkosti a teplote. Senzor odošle celkovo 40 bitov (5 bajtov). Pred každým bitom sa linka nastaví na úroveň LOW po dobu 50 µs. Následne sa hodnota bitu kóduje trvaním úrovne HIGH. Ak úroveň HIGH trvá (26 - 28) µs, tak je hodnota bitu 0. Ak trvá 70 µs, tak je hodnota bitu 1. Komunikácia je ukončená nastavením úrovne HIGH a teda uvedením do pokojového stavu.

Obr. 2   Komunikačný protokol senzora DHT22 (DHT11).
Obr. 2 Komunikačný protokol senzora DHT22 (DHT11).
Komunikačný protokol zo strany MCU môžeme zhrnúť do 6 krokov:
  1. Nastavenie vývodu MCU ako výstupu.
  2. Podmienka štart:
    • Prechod z úrovne HIGH (idle state) na úroveň LOW (18 ms).
    • Zmena na úroveň HIGH po dobu (20-40) µs.
  3. Nastavenie vývodu MCU ako vstupu s interným pull-up rezistorom.
  4. Potvrdenie (Acknowledge) zo strany DHT. Na vstupe MCU očakávam:
    • Úroveň LOW (80 µs)
    • Úroveň HIGH (80 µs)
  5. Prenos údajov (40-bit) o vlhkosti a teplote:
    • Bit začína úrovňou LOW po dobu 50µs
    • Nasledujúca úroveň HIGH kóduje hodnotu bitu:
      • Trvanie (26 - 28) µs = bit '0' (úroveň LOW),
      • Trvanie 70 µs = bit '1' (úroveň HIGH).
  6. Komunikácia je ukončená uvedením do pokojového stavu nastavením úrovne HIGH. Nastavenie úrovne HIGH zabezpečí interný pull-up rezistor.

Postup uvedený vyššie môžeme opakovať, ak chceme získať nové informácie o relatívnej vlhkosti a teplote. Podľa špecifikácie nemôžeme získať nové dáta skôr ako po 2 sekundách, inak hrozí, že namerané údaje nebudú správne alebo ich nezískame vôbec.

1.2 Dátový formát

Ako už bolo spomenuté, senzor zasiela 40 bitov, ktoré obsahujú informácie o vlhkosti a teplote. Formát údajov zo senzora je uvedený na Obr. 3.

Obr. 3  Formát dát zo senzora DHT22.
Obr. 3 Formát dát zo senzora DHT22.

Z Obr. 3 je vidieť, že najprv sa zo senzora odosielajú 2 bajty obsahujúce informáciu o vlhkosti, následne 2 bajty obsahujúce údaje o teplote a nakoniec kontrolný bajt, ktorý umožňuje overiť správnosť prijatých bajtov.

Na nasledujúcom konkrétnom príklade si ukážeme ako prevedieme dvojbajtový údaj o teplote na teplotu v [°C]. Predpokladajme, že zo senzora DHT22 prečítame hodnoty bajtov na Obr. 4.

Obr. 4 Príklad prijatých bajtov zo senzora DHT22.
Obr. 4 Príklad prijatých bajtov zo senzora DHT22.

Pre najjednoduchšie vysvetlenie najprv prepočítame hodnoty bajtov z dekadickej sústavy do binárnej. Následne binárne čísla spojíme a potom prevedieme do dekadického tvaru. Aby sme získali hodnotu teploty v °C, tak musíme dekadickú hodnotu predeliť číslom 10. Postup je uvedený v Tab. 2.

Tab. 2 Prepočet hodnôt bajtov na teplotu.
Číselná sústavaTEPLOTA
HIGH byteLOW byte
Dekadicky124
Binárne0b000000010b00011000
Binárne (16-bit)0b00000001 00011000
Dekadicky (16-bit)280
/1028,0 °C

Podobným spôsobom ako pri prevode teploty postupujeme aj pri prevode relatívnej vlhkosti, ktorá je vyjadrená v [%].

Kontrolný bajt (5. bajt) je súčtom predchádzajúcich štyroch bajtov. Pomocou kontrolného bajtu môžeme overiť správnosť získavania údajov z DHT22 už na úrovni MCU. Netreba zabúdať, že kontrolný bajt môže nadobúdať hodnoty v rozsahu 0 až 255. To znamená, že ak súčet presiahne hodnotu 255, tak dochádza k pretečeniu kontrolného bajtu. Napríklad ak je aritmetický súčet štyroch bajtov 260, tak potom bude mať kontrolný bajt hodnotu 4.

2. Použité vybavenie

  1. Hardvér
    • Vývojová doska Mega Development Board 2 (MDB2)
    • Senzor teploty a vlhkosti DHT22
    • PC
  2. Softvér
    • MATLAB
    • Microchip Studio

3. Schéma zapojenia

Obr. 5 Pripojenie senzora DHT22 k vývojovej doske MDB2.
Obr. 5 Pripojenie senzora DHT22 k vývojovej doske MDB2.

4. Úlohy

  1. Podľa schémy zapojenia (Obr. 5) pripojte senzor DHT22 k vývojovej doske MDB2. Použite napájanie z USB. Pozície prepojok na MDB2 sú vyznačené červenou.
  2. V jazyku C vytvorte program pre MCU, ktorý bude získavať zo senzora DHT22 údaje o relatívnej vlhkosti a teplote. Následne budú získané údaje zasielané do PC cez rozhranie UART. V kóde implementujte nasledujúce parametre a funkcionality:
    • Údaje o vlhkosti a teplote získavajte zo senzora a posielajte do PC každé 2 s,
    • Na úrovni MCU kontrolujte správnosť údajov pomocou kontrolného bajtu,
    • Rýchlosť prenosu cez UART nastavte na 19 200 Baud,
    • Údaje začnite posielať do PC až po prijatí znaku 'S', posielanie zastavte po prijatí znaku 'X'. Na detekciu prijatia znaku využite prerušenie od UART,
    • Pri tvorbe programu postupujte podľa nasledujúceho vývojového diagramu:
    Obr. 6 Vývojový diagram programu pre MCU.
    Obr. 6 Vývojový diagram programu pre MCU.
    Meranie dát v bloku na Obr. 6 realizujte podľa postupu, ktorý je uvedený v časti 1.1. Proces merania a odosielania údajov je indikovaný rozsvietením LED0 na MDB2. V prípade chyby (nesprávneho kontrolného súčtu) sa rozsvieti LED1 na MDB2.
  3. V jazyku MATLAB pomocou prostredia AppDesigner vytvorte aplikáciu s grafickým užívateľským rozhraním, ktorá bude zobrazovať aktuálnu hodnotu relatívnej vlhkosti v [%] a teploty v [°C] (Obr. 7). Aplikácia musí obsahovať nasledujúce prvky:
    • Textové pole pre zobrazenie aktuálnej vlhkosti,
    • Textové pole pre zobrazenie aktuálnej teploty,
    • Tlačidlá: 'Otvor port', 'Štart' a 'Stop'.
    Obr. 7 Aplikácia pre zobrazenie aktuálnej hodnoty vlhkosti a teploty.
    Obr. 7 Aplikácia pre zobrazenie aktuálnej hodnoty vlhkosti a teploty.
  4. Zostavte podrobný vývojový diagram časti kódu pre MCU, ktorý bude zobrazovať získavanie údajov zo senzora DHT22 prostredníctvom jedného vodiča.
  5. Zhodnoťte priebeh laboratórneho cvičenia. Zamerajte sa na nasledujúce body:
    • Písanie kódu pre MCU, problematické časti.
    • Písanie kódu pre aplikáciu v MATLABe.