![]() ![]() |
|
||||||||||||||||||||||||||
![]() ![]() ![]() ![]() ![]() ![]() |
|
ATmega8 | Ne |
ATmega8L | Ne |
ATmega8A | Ne |
ATmega16 | Ne |
ATmega168A | Ano |
ATmega168P | Ano |
ATmega328 | Ano |
ATmega328P | Ano |
ATmega1280(Arduino Mega) | Ne |
ATmega2560(Arduino Mega 2560) | Ne |
ATmega32U4(Arduino Leonardo) | Ano |
long readTemp() {
long result;
// Read temperature sensor against 1.1V reference
ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(MUX3);
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = (result - 125) * 1075;
return result;
}
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println( readTemp(), DEC );
delay(1000);
}
Výstupem jsou tisíciny °C. Výsledek pak tedy stačí vydělit 1000 a získáme naměřenou teplotu v °C.
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.
Pokud máme vše zapojeno podle schématu, nezbývá nám, než zprovoznit teploměr i na straně softwaru. Pro komunikaci po 1-Wire sběrnici budeme potřebovat knihovnu OneWire. Její dokumentaci i odkaz ke stažení nalezneme na oficiálních stránkách Arduina. Tato knihovna obsahuje i příklad (v Examples) pro připojení tohoto teploměru. Po stažení stačí rozbalit obsah knihovny OneWire do složky libraries a zapnout Arduino IDE (popř. restartovat).
Poté v Examples rozklikneme OneWire a vybereme soubor DS18x20 Temperature. Ten nahrajeme do Arduina a otevřeme Serial monitor. Vypisovaný text by měl obsahovat nejenom naměřené hodnoty, ale i informace o teploměru (adresa atd.), což je pro běžné účely moc informací. Po prohlédnutí kódu a promazání výpisu zbytečných informací se ale dá výpis lehce přizpůsobit jen pro zobrazování teploty. Příklad výpisu vidíte níže:
ROM = 28 C9 9F BA 3 0 0 A1
Chip = DS18B20
Data = 1 94 1 4B 46 7F FF C 10 26 CRC=26
Temperature = 25.25 Celsius, 77.45 Fahrenheit
No more addresses.
Po upravení může výpis vypadat například takto:
Temperature = 27.62 Celsius, 81.72 Fahrenheit
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).
Pro prezentační účely jsem vybral teploměr LM35. Ten umí měřit teploty buďto v rozsahu +2 - +150 °C, nebo -55 - +150 °C (podle zapojení). V menším rozsahu výrobce uvádí přesnost 1/4 °C a ve větším přesnost 3/4 °C. Převod výstupního napětí je 10 mV/°C. Jeho popis nalezneme i na české wikipedii společně s doporučeným schématem pro zapojení. Pro demonstraci si vybereme lehčí zapojení s rozsahem hodnot nad 0 °C a jako zdroj použijeme 5V z Arduina. Výstup teploměru připojíme na A2. Pro získání výsledné hodnoty budeme potřebovat trochu matematiky: Arduino umí rozlišit 1024 analogových hodnot v rozsahu 0 až 5V. Nám tedy stačí převést naměřené hodnoty z rozsahu 0-1023 do rozsahu 0-500, abychom dostali skutečné napětí měřené v desítkách mV. To totiž odpovídá převodu 10 mV/°C. Tímto převodem získáme skutečnou teplotu ve °C.
Kód vypisující naměřenou teplotu vypadá takto:
void setup(void) {
Serial.begin(9600);
}
void loop(void) {
float temp = analogRead(A2);
temp = map(temp, 0, 1023, 0, 500);
Serial.print("Namereno: ");
Serial.println(temp);
delay(1000);
}
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.
Podívejme se ale na celý problém prakticky. Pro ukázku jsem vybral tento 10 kOhm termistor, jehož datasheet nalezneme zde. Ten zapojíme do děliče napětí společně s 10 kOhm rezistorem. Vývod připojíme na pin A0.
Napětí vycházející z děliče vypočteme následovně: Analogový vstup rozlišuje 1024 hodnot (0-1023). Vydělíme-li 5V/1024 získáme velikost jednoho "dílku" stupnice ve voltech. Naměřená hodnota na A0 je tedy počet těchto dílků. Když vynásobíme velikost jednoho dílku naměřenou hodnotou, získáme skutečné napětí na A0.
Pro výpočet odporu termistoru použijeme dělič napětí. Přesněji řečeno vzorec z anglické wikipedie.
Kde Vin je 5V (výstup Arduina), Vout je naměřená hodnota napětí na A0. R1 je odpor termistoru, R2 je odpor rezistoru (u nás 10 kOhm).
Funkce pro výpočet odporu termistoru by mohla vypadat takto:
float mereni(){
int aread = analogRead(A0);
float V2 = (V1/1023) * aread; //U2 obsahuje hodnotu napětí na A0
float R1 = ((R2*V1)/V2)-R2;
return R1;
}
#include <math.h> //zde se středník na konci řádku nepíše
float mereni(){
int aread = analogRead(A0);
float V2 = (V1/1024) * aread; //U2 obsahuje hodnotu napětí na A0
float R1 = ((R2*V1)/V2)-R2;
float T = 1/((1/T0)+((1/B)*log(R1/R0))); // výstupem je teplota v Kelvinech
float TC = T - 273.15;
return TC;
}
#include <math.h>
int R2 = 10000; //velikost odporu připojeného k děliči
float V1 = 5.0; //napětí z Arduina
float T0 = 298.15; //teplota v Kelvinech
float B = 4300; //tabulková hodnota
float R0 = 10000; //hodnota odporu termistoru při 25°C
float mereni(){
int aread = analogRead(A0);
float V2 = (V1/1024) * aread; //U2 obsahuje hodnotu napětí na A0
float R1 = ((R2*V1)/V2)-R2;
float T = 1/((1/T0)+((1/B)*log(R1/R0))); // výstupem je teplota v Kelvinech
float TC = T - 273.15; //převode teploty z K na °C
return TC;
}
void setup(){
Serial.begin(9600);
}
void loop() {
Serial.println(mereni());
delay(1000);
}
Pokud 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.
Příspívat do diskuze mohou pouze registrovaní uživatelé. |
17.4.2018 0:46 /František Kučera
Dubnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 4. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tématem tohoto srazu bude OpenStreetMap (OSM) aneb svobodné mapy.
Přidat komentář
16.3.2018 22:01 /František Kučera
Kulatý OpenAlt sraz v Praze oslavíme klasicky: u limonády a piva! Přijďte si posedět, dát si dobré jídlo a vybrat z mnoha piv do restaurace Kulový blesk, který najdete v centru Prahy nedaleko metra I. P. Pavlova na adrese Sokolská 13, Praha 2. Sraz se koná ve čtvrtek 22. března a začínáme v 18:00. Heslo: OpenAlt. Vezměte s sebou svoje hračky! Uvítáme, když si s sebou na sraz vezmete svoje oblíbené hračky. Jestli máte nějaký drobný projekt postavený na Arduinu, nějakou zajímavou elektronickou součástku, či třeba i pěkný úlovek z crowdfundingové akce, neváhejte. Oslníte ostatní a o zábavu bude postaráno.
Přidat komentář
13.2.2018 0:41 /František Kučera
Únorový pražský sraz OpenAltu se koná 15. 2. 2018 a tentokrát se vydáme na návštěvu do jednoho pražského datacentra. Sejdeme se v 17:50 v severovýchodní části nástupiště tramvajové zastávky Koh-I-Noor. Po exkurzi se přesuneme do restaurace U Pštrosa (Moskevská 49), kde probereme tradiční témata (svobodný software a hardware, DIY, CNC, SDR, 3D tisk…) a tentokrát bude k vidění i IoT brána od The Things Network.
Přidat komentář
11.2.2018 23:11 /Petr Ježek
Hledáte lehký a rychlý prolížeč PDF souborů? Pokud vás již omrzelo čekat na načítání stránek či jiné nešvary, zkuste xreader.
Přidat komentář
11.2.2018 20:35 /Redakce Linuxsoft.cz
Třetí ročník odborné IT konference na téma Cloud computing v praxi proběhne ve čtvrtek 1. března 2018 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 16 hod. odpoledne. Konference o trendech v oblasti cloud computingu nabídne i informace o konkrétních možnostech využívání cloudů a řešení vybraných otázek souvisejících s provozem IT infrastruktury.
Přidat komentář
15.1.2018 0:51 /František Kučera
První letošní pražský sraz se koná již tento čtvrtek 18. ledna od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Vítáni jsou všichni příznivci svobodného softwaru a hardwaru, ESP32, DIY, CNC, SDR nebo dobrého piva. Prvních deset účastníků srazu obdrží samolepku There Is No Cloud… just other people's computers. od Free Software Foundation.
Přidat komentář
14.11.2017 16:56 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tradičně první čtvrtek před třetím pátkem v měsíci: 16. listopadu od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář
12.11.2017 11:06 /Redakce Linuxsoft.cz
PR: 4. ročník odborné IT konference na téma Datová centra pro business proběhne již ve čtvrtek 23. listopadu 2017 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00. Konference o návrhu, budování, správě a efektivním využívání datových center nabídne odpovědi na aktuální a často řešené otázky, např Jaké jsou aktuální trendy v oblasti datových center a jak je využít pro vlastní prospěch? Jak zajistit pro firmu či jinou organizaci odpovídající služby datových center? Podle jakých kritérií vybrat dodavatele služeb? Jak volit součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně spravovat datové centrum? Jak eliminovat možná rizika? apod.
Přidat komentář
20.2.2018 18:48 /
Ivan Majer
portal
20.2.2018 15:57 /
Jan Havel
Jak využíváte služby cloudu v podnikání?
16.1.2018 1:08 /
Ivan Pittner
verejna ip od o2 ubuntu
15.1.2018 17:26 /
Mira Harvalik
Re: Jak udělat HTML/Javascript swiping gallery do mobilu?
30.12.2017 20:16 /
Michal Knoll
odmocnina