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í a jak odesílat data do cloudu. V dnešní lekci náš systém rozšíříme o to, co je u meteostanice to nejpodstatnější, tedy o měření atmosférických veličin. Konkrétně se bude jednat o dvě veličiny TEPLOTU VZDUCHU a jeho RELATIVNÍ VLHKOST. Cílem dnešní lekce je dále připravit náš systém na projekt meteostanice. Z minulých lekcí: Pochopení a orientace v datasheetu základní parametry, které není radno překračovat. Programování v IDE Arduino a jazyk wiring syntax, kompilace, nahrání do vývojové desky, sériový monitor. Práce s prvky uživatelského rozhraní tlačítka, LED, LCD displej. Připojení a práce se senzory přiblížení a osvětlení (PIR čidlo, fotorezistor).
1. Připojení analogových senzorů Z předchozí lekce víme, že analogové senzory převádějí měřenou (neelektrickou) veličinu na elektrickou veličinu. Tou může být odpor, napětí, proud atd. V předchozí lekci použitý fotorezistor je příkladem velmi jednoduchého analogového senzoru, který změnu měřené veličiny reflektuje změnou svého odporu. Obdobně pracují i například i tzv. termistory, tedy senzory, které mění svůj odpor v závislosti na teplotě. Pokud u takových senzorů ale vyžadujeme přesná měření, nestačí je pouze připojit k mikrokontroléru přes odporový dělič, jako jsme tak učinili v předchozí lekci. To proto, že odpor se s měřenou veličinou typicky nemění lineárně. Často je také velikost výstupní elektrické veličiny ovlivněna zahříváním senzoru procházejícím proudem. Naštěstí jsou k dispozici i pokročilejší senzory, které prvky potřebné pro přesná měření obsahují v sobě. Výhodou takových senzorů je to, že se typicky dají v základním zapojení přímo připojit na analogový vstup mikrokontroléru bez dodatečných prvků. Výstupní napětí takových senzorů pak přímo odpovídá hodnotě měřené veličiny. Pokud se senzor nachází dále od mikrokontrolérů, lze využít zapojení tzv. proudové smyčky, ve kterém je měřená veličina převáděna na proud o velikosti v rozsahu 4 ma až 20 ma. Zapojení proudové smyčky je velmi často využívané v průmyslovém prostředí. Dalším způsobem, jak připojit senzor na větší vzdálenost, je tzv. frekvenční převodník. V takovém zapojení je měřená veličina převáděna na střídavé napětí, kde velikost frekvence výstupního napětí odpovídá velikosti měřené veličiny. Výhodou tohoto zapojení je vyšší odolnost vůči rušení.
2. Měření teploty vzduchu Měření teploty je prakticky to nejzákladnější, co by každý od meteostanice očekával. 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. Pro naše účely (tj. projekt meteostanice) využijeme senzor TMP36 od Analog Devices. Senzor TMP36 je příkladem pokročilejšího analogového senzoru. Na rozdíl od fotorezistoru použitého v minulé lekci obsahuje pouzdro senzoru veškeré prvky potřebné pro přesná měření teploty. Z pouzdra senzoru jsou vyvedeny pouze tři piny. Napájecí pin (Vs), zemnící pin (GND) a analogový výstup (Vout). Jelikož se senzor bude nacházet přímo u našeho systému, vystačíme si se základním zapojením. Napěťový výstup senzoru (pin Vout) lze připojit přímo na analogový vstup Arduina a lze jej vyčítat pomocí z minulých lekcí známé funkce analogread(). Propojte senzor TMP36 s Arduinem dle obrázku a vyčtete hodnotu na jeho analogovém výstupu. Hodnotu vypište pomocí sériové konzole. POZOR!!! Pokud připojíte tento senzor obráceně, tak dojde k jeho velmi silnému zahřátí. V lepším případě roztavíte nepájivé pole, v horším případě se popálíte.
Po nahrání do Arduina byste na sériové konzoli měli vidět výpis naměřených hodnot v rozsahu 0 až 1024. To je samozřejmě způsobeno tím, že funkce analogread() nevrací přímo hodnotu napětí na vstupu, ale hodnotu v desetibitovém rozsahu (tj. 0 až 1024) získanou z A/D převodníku Arduina. Pokud budeme chtít z vyčtené hodnoty vypočítat teplotu vzduchu, budeme nejprve muset vyčtenou hodnotu převést na velikost výstupního napětí senzoru. Nyní můžeme hodnotu napětí na výstupu senzoru převést na teplotu ve stupních Celsia. K tomu budeme potřebovat znát údaje o citlivosti senzoru, tj. hodnotu určující, jak rychle se s teplotou mění výstupní napětí senzoru (tzv. scale factor v jednotkách mv/ C). Dále budeme potřebovat velikost posunutí nuly, tj. hodnotu výstupního napěti při nulové teplotě ve stupních Celsia (tzv. offset v jednotkách V). Posunutí nuly je na výstupu senzoru vytvářeno proto, aby senzor mohl měřit i záporné teploty.
Jakmile známe oba potřebné parametry, můžeme vypočítat teplotu z napětí následovně. Vout je výstupní napětí senzoru, Voff je hodnota posuvu nuly a ScaleFactor je citlivost senzoru. Pozor na to, že jednotky musí mít u všech parametrů stejné měřítko (např. V a V/ C nebo mv a mv/ C).
3. Komunikace s digitálními senzory 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. Příkladem digitálního senzoru s velmi jednoduchým rozhraním je v minulé lekci použité PIR čidlo. Senzor měl jediný výstup, jehož logická úroveň identifikovala stav senzoru (tj. zda senzor detekuje pohyb). Nicméně často je pro vyčtení dat ze senzoru nutné použít o něco komplikovanější rozhraní. 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. 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.
4. 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. Připojení senzoru k našemu systému je jednoduché. 1-Wire rozhraní vyžaduje pullup rezistor na datové lince. Interní pull-up rezistory Arduina jsou ale slabé a proto musíme použít vlastní. Propojte dle obrázku senzor, pull-up rezistor (použijte velikost odporu okolo 10 kω) a Arduino. Pro vyčítání dat ze senzoru přes 1-Wire rozhraní použijeme dostupnou knihovnu (soubory DHT.h a DHT.cpp)
Knihovna je určena i pro příbuzné senzory DHT11 a DHT22 a rovnou nám dává k dispozici funkci readhumidity(), kterou můžeme rovnou použít pro vyčtení relativní vlhkosti ze senzoru. Funkce vrátí hodnotu NaN (tedy Not-a-Number) v případě, že se vyčítání nezdaří a musíme tedy návratovou hodnotu funkce kontrolovat. Po nahrání do Arduina by měl program každé 2 sekundy do sériové konzole vypsat aktální hodnotu relativní vlhkosti vzduchu.
V dnešní lekci jsme se naučili pracovat s pokročilejšími analogovými a digitálními senzory. Konkrétně jsem se naučili základní práce s analogovým senzorem TEPLOTY VZDUCHU a digitálním senzorem RELATIVNÍ VLHKOSTI a umíme tak měřit základní atmosférické veličiny. Příště se podíváme na to, jak měřit vzdálenost a hmotnost. Pokud ti zbyl čas, pokračuj v následujících úkolech. Pokud ne, máš inspiraci na samostudium Doplňující materiály: Popis rozhraní SPI: https://en.wikipedia.org/wiki/serial_peripheral_interface_bus Popis rozhraní I2C: https://en.wikipedia.org/wiki/i²c Popis rozhraní 1-Wire: https://en.wikipedia.org/wiki/1-wire Co si zapamatovat? jaká existují možná připojení analogových senzorů. jak pracovat s analogovým senzorem teploty TMP36. jaká existují rozhraní pro digitální senzory. jak pracovat s digitálním senzorem DHT11.