|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Menu
Distributions (131)
bootable [55]
commercial [7] no-commercial [42] unclassified [20] [7]
Software (10844)
|
Arduino X. - měření teplotyDnes se podíváme, jak vytvořit uživatelsky definované funkce a jakými způsoby může Arduino měřit teplotu.
Při vymýšlení projektů typu "co mám dělat teď?" nás jistě někdy napadla zapojení, ve kterých je potřebné zjistit teplotu okolí. Mohly by to být: meteostanice, termostaty, teploměry a podobné. Elektronických součástek, které mohou měřit teplotu, je ale celá řada a proto nelze napsat článek, který by je obsáhl všechny. Pro ukázkové účely tedy vybereme zástupce každé z hlavních skupin. Prvním z nich jsou ty, které s čipem komunikují digitálně, druhé analogově s lineárním průběhem a třetí analogově s jiným průběhem. Poslední skupinou teploměrů jsou ty, které mají některé z čipů ATmega zabudované přímo v sobě. Také si ukážeme, jak se dají v jazyce Wiring vytvořit funkce. Vytváření uživatelských funkcíS funkcemi jsme se v průběhu seriálu již setkali, byly jimi například funkce analogRead(), serial.println() a další. Tyto funkce však obsahuje jazyk Wiring již v samotném základu, čili existují bez přičinění uživatele. V některých případech by se však hodila možnost vytvořit si vlastní funkce. Patří mezi ně například situace, kdy se některá část kódu má opakovat stále dokola, ale nevyhovuje nám použití cyklu. Pomocí funkce můžeme tento kód "zabalit" do jakéhosi softwarového balíčku a tím umožnit jeho vícenásobné používání. Příklad 1.Našim cílem bude vytvoření jednoduché funkce, která změří hodnotu na A0, počká sekundu a sečte ji s novou hodnotou A0. Poté vše vypíše pomocí Serial.println(). Naše funkce nebude vracet žádnou hodnotu, bude tedy mít datový typ void.
Nyní přidáme funkci její funkčnost.
Nyní příjde na řadu volání (provedení) funkce.
Příklad 2.Nyní si ukážeme, jak deklarovat funkci s parametry, která bude vracet určitou hodnotu. Parametr je vstupní informace, kterou předáváme funkci v závorkách. Názvy parametrů si můžeme zvolit a pomocí nich s daty v těle funkce pracovat stejně, jako s proměnnými. Pokud funkce dostává více parametrů, oddělují se čárkou. Nejjednodušším příkladem je součet dvou čísel typu int a vrácení jejich hodnoty (nevypíše, pouze vrátí hodnotu).
Následuje zavolání této funkce s parametry 20 a 50.
Teď už se můžeme podívat na způsoby měření teploty pomocí Arduina. Interní teploměry čipů
Hned na začátek je nutno upozornit, že přesnost těchto senzorů je značně nejistá. Jelikož jsou součástí pouzdra čipu, jsou snadno ovlivnitelné teplem, které při práci čipy produkují (výchylka 10 °C je zcela běžná). Někdy jsou však plně dostačující. K měření okolní teploty bez větších výchylek jsou vhodné jenom v případě, že bylo Arduino minimálně 10 minut nečinné. Hodí se ale k sledování teploty při náročných operacích (například když čipem protéká větší proud), kdy můžeme předejít poškození čipu včasným odstavením desky. Největší nevýhodou je, že ho neobsahují všechny čipy, které na Arduinu najdeme.
Výstupem jsou tisíciny °C. Výsledek pak tedy stačí vydělit 1000 a získáme naměřenou teplotu v °C. Digitální teploměry
Druhou skupinou teploměrů jsou ty, které nám zasílají naměřené hodnoty digitálně. Bývají často nejpřesnější a na jednu sběrnici je jich možné připojit i více (záleží na typu). Pro ukázkové účely jsem vybral senzor DALLAS 18B20 od firmy Maxim Integrated. Ten komunikuje pomocí 1-Wire sběrnice, nepotřebuje externí napájení, rozsah hodnot má -55 až +125°C a má nastavitelné rozlišení 9-12 bitů. Každý senzor má vlastní unikátní 64-bitové číslo, které slouží k jeho identifikaci (podobně jako IP adresa u PC). Díky tomu je možné připojit i více těchto teploměrů na jeden datový vodič. Největší výhodou je, že pro Arduino existuje knihovna určená k práci s tímto teploměrem. Na obrázku vidíte pinout teploměru a schéma zapojení více senzorů na jednu sběrnici.
Po upravení může výpis vypadat například takto:
Analogové teploměry s lineárním průběhem
Další skupinou jsou teplocitlivé součástky, které na změnu teploty reagují změnou odporu. U této skupiny má změna lineární charakter. Například vždy při zvýšení teploty o 1 °C se změní odpor součástky o 100 ohmů, a to v celém měřitelném rozsahu. Pokud bychom přenesli závislost odporu na teplotě do grafu, výsledný obrazec by byla přímka (linea -> lineární průběh).
Analogové teploměry s nelineárním průběhem
Když tyto součástky nazývám teploměry, trochu jim lichotím. Jde o termistory, což jsou součástky, které se změnou teploty mění svůj odpor. Dělí se na pozitivní a negativní. U pozitivních odpor s teplotou vzrůstá. Nárůst je zde skokový, proto najdou více než při měření teploty využití spíše v automatizaci, kde je potřeba například sepnout obvod při dané teplotě. U negativních termistorů je grafem křivka.
Když už máme vypočítaný odpor, můžeme se podívat na výpočet teploty. Tu z odporu vypočteme pomocí následujícího vztahu: Po vyvození T z předchozího vztahu získáme rovnost pro výpočet teploty. Kde T je výsledná teplota, T0 je tabulková hodnota (většinou 25°C = teplota, při které je měřeno R0), B je také tabulková hodnota, která je k nalezení v datasheetu daného termistoru (ta se sice mírně mění s měnící se teplotou, ale pro účely základního měření nám bude postačovat jen jedna konstantní hodnota) a R1 je naměřený odpor. Ještě je třeba zmínit, že při počítání je nutno dosazovat teploty v kelvinech (K) a že log() je zápis pro výpočet přirozeného logaritmu. Funkce pro výpočet logaritmu není přímo v základu jazyka, ale naštěstí existuje v knihovně, která je do celého balíku zahrnuta. Pomocí příkazu #include vložíme na samý začátek kódu knihovnu math.h. Poté již budeme funkci log() moci použít. Převodní vztah °C na K je následující: 0°C = +273,15K => 25°C = 298,15K Vložení knihovny do skriptu:
ZávěrPokud porovnáte hodnoty všech použitých měřících technik, mnohdy zjistíte, že se od sebe podstatně liší. Mělo by však platit, že při použití s Arduinem jsou nejpřesnější kalibrované digitální teploměry a poté kalibrované analogové teploměry (zde vznikají odchylky kvůli převodníku Arduina, který nemusí mít dostatečně přesnou stupnici). U termistorů a vnitřních teploměrů je přesnost různá a může se lišit typ od typu.
Related article
Arduino - programování v čistém C(++) Arduino - pulsně šířková modulace (PWM) v C(++) Arduino I. Arduino II. Arduino III. Arduino IV. Arduino V. Arduino VI. Arduino VII. Arduino VIII. Arduino IX. Previous Show category (serial)
|
Szukanie oprogramowania
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
©Pavel Kysilka - 2003-2024 | maillinuxsoft.cz | Design: www.megadesign.cz |