Ukázka materiálů

5. Senzory - teplota a vlhkost

Z minulých lekcí víme, jak k našemu systému připojit základní prvky uživatelského rozhraní (tlačítka, LED, LCD displej, sériová linka), jak detekovat přiblížení uživatele, měřit úroveň osvětlení. V dnešní lekci náš systém rozšíříme o to, co můžete využít při sestavování vlastní meteostanice, tedy o měření atmosférických veličin. Konkrétně se bude jednat o dvě veličiny – TEPLOTU VZDUCHU a jeho RELATIVNÍ VLHKOST.

Měření teploty vzduchu digitálním senzorem

Pro měření teploty existuje velká spousta různých analogových i digitálních senzorů. Jednotlivé senzory se liší zejména citlivostí, rozsahy teplot, rozhraním atd.

Obdobně, jako v případě analogových senzorů, existuje i u digitálních senzorů řada rozhraní, přes která se data ze senzorů dají vyčítat. Mezi nejpopulárnější rozhraní patří například rozhraní SPI, I2C a 1-Wire. SPI (Serial Peripheral Interconnect) je synchronní sběrnice využívající čtyři vodiče. Sériový vstup a výstup jsou použity pro přenos dat, jeden vodič je pak použit k vedení hodinového signálu (a tedy k synchronizaci komunikace) a jeden vodič pak slouží k výběru prvku na sběrnici (tedy například konkrétního senzoru). I2C (Inter-Integrated Cicruit) je, obdobně jako SPI, synchronní sběrnice, která ale využívá pouze 2 vodiče. Jeden pro přenos dat a jeden k vedení hodinového signálu.

Poznámka: I2C je ochranná známka patřící firmě NXP Semiconductors. Řada výrobců čipů tento fakt obchází tím, že toto rozhraní pojmenovává jinak, jako například TwoWire Interface nebo SMBus. Nenechte se proto zmást názvem rozhraní a v datasheetu vždy koukejte na konkrétní popis komunikace se senzorem.

1-Wire je komunikační rozhraní založené na podobném principu, jako I2C, nicméně využívá pouze jediný vodič. Toto rozhraní se typicky používá u low-cost senzorů.

Bez ohledu na použité rozhraní se s digitálním senzorem pracuje většinou velmi podobně. Senzory často měří více veličin a ke zjištění přesné hodnoty je mnohdy potřeba vyčíst ze senzoru více údajů (např. kalibrační data). Veškeré informace bývají v senzoru uložené v tzv. registrech. V typickém případě je tedy nejprve nutné specifikovat, se kterým senzorem chceme komunikovat a poté určit, co (tedy jaký registr) chceme ze senzoru vyčíst. V jednodušších případech senzor při vyčítání vrátí všechna data najednou. V případě, že se senzor nachází ve větších vzdálenostech od měřícího systému, je třeba využít průmyslové sběrnice, jako například EIA485.

Měření relativní vlhkosti

K měření relativní vlhkosti využijeme senzor DHT11 (také označovaný jako AM2303). Jedná se o kombinovaný digitální senzor relativní vlhkosti a teploty vzduchu využívající 1-Wire rozhraní. Z pouzdra senzoru jsou vyvedeny čtyři kontakty. Napájecí pin (VDD), zemnící pin (GND) a datový pin (DATA) senzoru budeme potřebovat. Jeden z pinů (NULL) nemá žádný účel a můžeme ho tedy ignorovat.

Úkol Projděte datasheet senzoru DHT11. Identifikujte piny senzoru. Jaké hodnoty napájecího napětí lze použít? Jaký rozsah relativní vlhkosti je senzor schopný měřit?

Různé typy DHT senzoru

Zapojení senzoru

Připojení senzoru k našemu systému je jednoduché. 1-Wire rozhraní vyžaduje pull-up rezistor na datové lince (10 kΩ). Některé senzory mají již rezistor zabodovaný na desce. Lze tedy zapojit senzor třemi způsoby:

  1. Zapojit přes nepájivé pole, kde využiji 10 kΩ rezistor jako pull-up.

  2. Zapojit pomocí pull-up rezistoru zabudovaného na vybraných pinech mikrokontroleru.

  3. Využít senzor, který má již u sebe na desce zabudovaný rezistor.

Pro vyčítání dat ze senzoru přes 1-Wire rozhraní použijeme dostupnou knihovnu DHT (nainstalujte v Arduino IDE přes Spravovat knihovny/Library Manager). Knihovna je určena pro příbuzné senzory DHT11 a DHT22 a rovnou nám dává k dispozici funkci vyčtení teploty a vyčtení vlhkosti.

ÚKOL Zjistěte jak se tyto funkce volají a doplňte je do níže uvedeného kódu. Projděte si celý kód a doplňte ho tam, kde vidíte '???'. Nejlepší varianta, jak zjistit jaké funkce knihovna nabízí, je podívat se přímo do souboru knihovny (DHT.h).

#include <DHT.h>
#define dhtPin D3
#define dhtType DHT11

DHT myDHT(dhtPin, dhtType); //inicializace knihovny

void setup() {
    pinMode(dhtPin, ???); //nastavení pinu
    myDHT.begin(); //inicializace senzoru
    Serial.begin(9600);
    }

void loop() {
    ??? temp = myDHT.???;
    ??? humi = ???;
    Serial.print("Teplota(C): ");
    Serial.println(???); //vypsání teploty
    Serial.print("Vlhkost(%): ");
    Serial.println(???); //vypsání vlhkosti

    
    // Pridame overeni, ze se vycteni podarilo.
    if (isnan(temp)) {
        Serial.println(“Vycitani selhalo!”);
        return;
        }
    delay(2000);
    }
    

Po nahrání do mikrokontroleru by měl program každé 2 sekundy do sériové konzole vypsat aktuální hodnotu naměřené teploty a relativní vlhkosti vzduchu.

Úkol Znovu projděte datasheet senzoru. Proč vyčítáme senzor každé 2 sekundy?

Co jsme zvládli?

  • umíme zapojit digitální čidlo teploty a vlhkosti

  • víme o 3 nejpopulárnějších rozhraní pro digitální čidla

  • umíme si z knihovny vyčíst potřebné funkce

  • zlepšujeme se v debuggování kódu 😎

Last updated