English version

Jednoduchý bezdrátový teploměr

    Úvod:
Zařízení slouží k bezdrátovému digitálnímu měření teploty v rozmezí -40 ... +70 °C s rozlišením na 0,1°C. Umí i zaznamenávat nejvyšší a nejnižší naměřenou hodnotu (maximum a minimum). K zobrazení slouží LED displej. Vytvořil jsem 1-kanálovou a pak také 2-kanálovou verzi.
    Metoda přenosu:
Signál je přenášen z čidla do zobrazovací jednotky pomocí komunikačních modulů na pásmu 433 MHz na frekvenci 433,92 MHz. Na tomto pásmu je možno vysílat datové přenosy s malým objemem dat a s výkonem až 10mW. Šlo by však bez dalších úprav použít i jiné pásmo, např. 868 MHz, kde je povoleno až 25mW. K přenosu lze použít hotové komunikační moduly - typy, které mají 3 vývody: napájecí napětí, zem a vstup (vysílač) či výstup (přijímač). Jejich použití je velmi jednoduché. Logické impulzy na vstupu vysílače se prostě objeví na výstupu přijímače, tedy alespoň pokud je v dosahu a není rušen jiným zařízením. Data jsou přenášena modulací délkou pulzu. V jednom snímku je přenášeno 24 bitů dat - hodnota naměřené teploty (11 bitů), ID senzoru (1 bit), paritní bit a kontrolní inverze údaje teploty. Logická 1 je představována pulzem délky 512us, 0 pulzem 128us, mezera mezi bity má vždy 256us, mezera mezi snímky 1024us. Rozdíl mezi krátkým a dlouhým pulzem a mezi krátkou a dlouhou mezerou je vždy čtyřnásobný, takže přenosový systém je odolný vůči velkým odchylkám taktovacích frekvencí vysílače a přijímače a není nutné používat krystaly. Průměrná přenosová rychlost je cca 1800 b/s.
    Vysílač:
Vysílač (bezdrátové čidlo teploty) je řízen Atmel AVR mikroprocesorem IO1 - ATTiny13A (ATTiny13, ATTiny13V), běžícím na frekvenci 1,2 MHz z interního RC oscilátoru. Data jsou přenášeny pomocí radiového signálu. Jako snímač teploty slouží integrovaný obvod IO2 typu MCP9700A. Ten poskytuje na výstupu napětí lineárně závislé na teplotě, s koeficientem 10mV/°C + 500mV. Díky přičtění konstanty 500mV umožňuje měření záporných teplot bez záporného výstupního napětí. Vlastní spotřeba MCP9700A je jen 5uA, což je pro bateriově napájené zařízení výhodné. Rozlišení AD převodníku obvodu IO1 je převzorkováním zvýšeno z 1024 na 1216 kroků a tím je dosaženo rozlišení měření na 0,1°C. Při každém obnovení je provedeno 38 AD konverzí, ty jsou sečteny a vyděleny 32. Tím je získán 11-bitový výsledek. Pro převzorkování by postačilo méně vzorků, ale jejich větší množství vede k lepší stabilitě a eliminuje náhodné chyby. K výsledku je přidáno 1-bitové ID vysílače, které umožňuje rozlišit 2 vysílače. Ze vzniklých 12 bitů je pro kontrolu vytvořen 13. paritní bit. Navíc je pro ještě spolehlivější ověření přenosu odesílán 11-bitový inverzní údaj teploty (vyměněny 0 a 1). Celý snímek tedy má 24 bitů. Vysílá se od MSB nejprve invertovaná teplota, pak paritní bit, pak kanál a nakonec neinvertovaná teplota. Snímek je odeslán vždy 3x za sebou a to každých 20s pomocí vysílacího komunikačního modulu. Čidlo se kalibruje pomocí trimru P1. Pro snadnější kalibraci lze zvýšit obnovovací frekvenci z 1/20Hz na 1,5Hz propojením vývodu PB0 se zemí. Poté nastavte P1 tak, aby přijímač ukazoval správnou hodnotu. Propojením PB1 se zemí lze aktivovat vysílání zkušebního signálu - vysílač vysílá postupně všechny hodnoty od -40 až do +70 °C. Pro běžný provoz jsou vstupy PB0 a PB1 nezapojené. Vstup PB3 volí kanál. Lze volit kanál 0 (vstup spojen se zemí - záporným pólem baterie) a nebo kanál 1 (spojen s kladným pólem baterie). Stejný kanál musí být zvolen i na přijímači (jednokanálová verze). Pro použití s dvoukanálovým přijímačem nastavte každý vysílač jinak. Kondenzátor C2 umístěte co nejblíže IO1. Kondenzátor C3 umístěte co nejblíže modulu vysílače Modul-1. Vysílač se napájí napětím 3V nebo 4,5V např. ze dvou či tří tužkových (AA) nebo mikrotužkových (AAA) baterií, podle toho, jaké napájecí napětí vyžaduje vysílací modul, případně podle požadovaného dosahu. Střední odběr je jen cca 25 - 30uA (FS1000A XD-FST, tři články 1,5V) a doba provozu s bateriemi 1000mAh (když není počítáno samovybíjení) je tedy cca 4 roky.
    Přijímač:
Přijímač dálkového ovládání je řízen IO3, ATmega8A (ATmega8, ATmega8L), taktovaným frekvencí 8 MHz z vnitřního RC oscilátoru. K zobrazení teplot slouží čtyřmístný LED displej. Displej je řízen multiplexně. Katody displeje jsou připojeny na port B, anody na vývody PD0, PD1, PD3, PD4 portu D. Frekvence multiplexu je cca 100Hz. Odpory R2...R9 určují proud displeje a tím jeho jas. Lze použít čtyřmístný displej např. CA56-12SRWA nebo dva dvoumístné např. LD-D056UR-C, LD-D036UR-C, LD-D036UPG-C, LD-D028UR-C či LD-D028UG-C. Šlo by použít i třímístný displej a obdélníkovou LED místo segmentu g levé cifry (symbol minus), protože se zde vlastně nic jiného nezobrazuje. Pravou cifru lze vynechat, stačí-li měření na celé stupně (a pak i odpor od PB7 k segmentu h, protože tečka není potřeba). K příjmu slouží Modul-2 (přijímací RF modul). Výstup je vyhodnocen mikroprocesorem IO3. Ten vyhodnocuje a zpracovává přijatý signál a pokud přijme kód ve správném tvaru - délka 24 bitů, souhlasí kanál (ID vysílače), paritní bit i inverzní hodnota - vyhodnotí příjem jako bezchybný a aktualizuje údaj na displeji. Přijímač také sleduje a zaznamenává maximální a minimální naměřené hodnoty. Ty lze zobrazit stiskem tlačítka MIN nebo MAX. Stiskem obou tlačítek současně je maximum a minimum resetováno. Vývod PC3 slouží jako indikátor příjmu signálu. Pokud byl v posledních 60s přijat signál, je ve stavu log.1 a svítí LED2. Jinak se překlopí do log.0 a svítí LED1. Teploměr se napájí ze zdroje 5V. Odběr proudu je cca 20 - 40mA (většina z toho je spotřeba LED displeje). Kondenzátor C5 umístěte co nejblíže IO3 a kondenzátor C6 co nejblíže přijímacího modulu Modul-2.
    Dvoukanálový přijímač:
Později jsem vytvořil ještě 2-kanálovou verzi přijímače (viz schéma na obr. 3). Ten umožňuje současně přijímat signály z dvou různých vysílačů (jeden vysílač nastaven na kanál 0 a jeden na kanál 1). Zobrazuje na dvou čtyřmístných displejích, sestavených např. ze čtyř dvoumístných LD-D036UPG-C. Každý kanál má vlastní indikátor signálu. Zobrazení a resetování minima a maxima je pro oba kanály společné. Jinak je vše podobné jako u jednokanálového přijímače.
    Dosah:
Přijímač softwarově opravuje různé chyby přenosu a rušení, zejména zákmity, pulzy a mezery nesprávné délky apod. Dosah závisí tedy hlavně na vysílacím a přijímacím modulu a také na překážkách a okolních zdrojích rušení. Na první testy jsem použil komunikační moduly FS1000A XD-FST (vysílač) a XY-MK-5V (přijímač), zde jsou jejich reverzně inženýrovaná schémata, a pak jsem zkusil také moduly BX-TM05-433 (vysílač) a BX-RM12-433 (přijímač). Obě dvojice využívají modulaci ASK. S první dvojicí však byl dosah jen asi 2 - 8m ve volném prostoru. Přijímač (XY-MK-5V) se ukázal jako reakční či superreakční typ, je to primitivní zapojení se dvěma tranzistory a OZ, má malou citlivost i selektivitu. Příliš to nezachránilo ani použití s poměrně výkonným vysílačem FS1000A XD-FST. Přijímač je na 5V a i malými odchylkami napětí se vše ještě zhoršuje. Přijímač už na pohled budí pochyby tím, že místo krystalu na něm najdete ladící cívku (!). U vysílače FS1000A XD-FST je uváděn max. výkon 10mW, rozmezí napájecího napětí je 3 - 12V . Vysílač je řízen SAW rezonátorem 433,92 MHz a měl by být tedy relativně přesný (tolerance rezonátoru dle datasheetu je +/- 75kHz). Obsahuje jen 2 tranzistory, žádné integrované obvody. Pak jsem zkoušel dvojici BX-TM05-433 a BX-RM12-433 a bylo to úplně jiné kafe. Dosah skrz podlaží a dvě či tři zdi na 15m není problém. Přijímač je superheterodyn (superhet) s kvalitním obvodem SYN470R, řízeným krystalem (6,7458MHz), napájení 3 - 5,5V. Vysílač s 6-nožičkovým SMD integrovaným obvodem značeným F113 je také řízen krystalem (13,56MHz) a pracuje zřejmě jako PLL. Přesnost frekvence krystalu je nejspíš o něco lepší, než SAW rezonátoru. Napájen je 1,8 - 3,6V. Ještě lepší dosah jsem získal zkombinováním vysílače z první dvojice (FS1000A XD-FST) a přijímače z druhé. FS1000A XD-FST umožňuje lepší dosah než BX-TM05-433 (obojí testováno při 3V), a navíc může pracovat s vyšším napájecím napětím, takže dosah lze ještě dále zvyšovat.
Celý program ke stažení:
zdrojový kód vysílače v assembleru (ASM)
zdrojový kód 1-kanálového přijímače v assembleru (ASM)
zdrojový kód 2-kanálového přijímače v assembleru (ASM)
přeložený program vysílače v HEX souboru (358 Bajtů)
přeložený program 1-kanálového přijímače v HEX souboru (810 Bajtů)
přeložený program 2-kanálového přijímače v HEX souboru (1204 Bajtů)
Zapisování programu do AVR se podrobněji věnuji zde.

Případným zájemcům mohu naprogramované mikroprocesory poslat. Více info zde.


Obr. 1 - Schéma jednoduchého bezdrátového teploměru - vysílač s ATtiny13(A/V).


Obr. 2 - Schéma jednoduchého bezdrátového teploměru - jednokanálový přijímač s ATmega8(A/L).


Obr. 3 - Schéma dvoukanálového přijímače s ATmega8(A/L).


Nastavení konfiguračních bitů vysílače.
Hexadecimální hodnoty jsou: Low 6A, High FF.


Nastavení konfiguračních bitů přijímače (stejné pro obě verze).
Hexadecimální hodnoty jsou: Low A4, High D9.


Testování vysílače (čidla teploty) v kontaktním poli


Testování přijímače v kontaktním poli (s displejem LD-D028UG-C)


Moduly FS1000A XD-FST (vysílač, vlevo) a XY-MK-5V (přijímač, vpravo).


Moduly BX-TM05-433 TX-5 (2ks nahoře, vysílač) a BX-RM12-433 (dole, přijímač).


Krabička na 4 tužkové (AA) baterie určená k zabudování vysílače (čidla).


Propojování destičky s ATtiny13A s destičkou vysílače.


Připojování modulu FS1000A XD-FST po oříznutí zbytečně velké desky :).


Vysílač zabudovaný v prostoru pro jednu AA baterii, obvod se napájí ze 3 AA baterií.


Hotový vysílač s anténou lambda/4 (17,3cm).


Dvoukanálový přijímač na desce.


Video - testování



Přidáno: 13. 3. 2014
zpět na úvodní stránku