Programy zdarma, Arduino návody, tratě pro Open Rails a MSTS.
Celé toto "dílo" vzniklo, když moje mamka v již dost pokročilém věku projevila zájem o nové rádio s hodinami na noční stolek. Dosud používala
asi třicet let starý radiobudík, který byl už hodně vychozený, včetně praskajícího potenciometru. Na první pohled jednoduchá záležitost.
Jenže nastal problém. Žádný prodávaný přijímač nevyhovoval. Buď neměl hodiny, nebo je měl, ale s moc malým displejem, špatně podsvíceným a podobně.
Kapitola sama pro sebe bylo složité ovládání. Ono to asi jinak udělat nejde, ale pokud posloucháte jen jednu jedinou stanici, kupa věcí je zbytečných.
Takže jsem se rozhodl pokusit se něco postavit sám. Požadavky byly:
velký hodinový displej s časem aktualizovaným z RDS
velmi jednoduché ovládání a zároveň aby nebylo úplně snadné přeladit stanici.
V běžném použití se ovládá pouze hlasitost pomocí potenciometru s vypínačem u jedné "pevně" naladěné stanice (ladění je samozřejmě možné, viz dále).
Tedy něco, co připomíná bývalý rozhlas po drátě, jistěže mimo
hodin, ty dráťák neměl. V dobách minulých byl poměrně rozšířený, hlavně v různých veřejných provozovnách, například u holiče, v kancelářích, v dílnách a podobně.
Hrála tam stanice Praha (dnešní ČRO 2). Myšlenka dobrá, ale tehdejší obsah poněkud nezajímavý.
K naladění "pevné" stanice slouží tři tlačítka. Musí se držet T1 a pomocí T2/T3 se ladí vpřed/zpět (viz schéma) s krokem 0.1 MHz. Pokud T1 stisknuto
nebude, tak samotná T2/T3 ovládají jas hodinového displeje. Tedy nějaké náhodné zavadění o tlačítko přijímač nerozladí. Výsledek je toto:
Po prvním pospojování modulů jsem zjistil, že LCD hodinový displej pořádně ruší. Z reproduktoru se ozývalo nepříjemné pískání. Po vložení filtru do
napájení displeje, sestávající z tlumivky Tl1 a kondenzátoru C1, pískot zmizel.
Další problém nastal s časovou značkou z RDS. U slabších stanic, nebo při nějakém rušení, byl čas přečten chybně. Nevím, jestli existuje nějaký způsob,
jak ověřit správnost přes CRC, či něco podobného. Na nic jsem nepřišel, takže jsem to řešil postupným čtením několika časů, a pokud časy šly po
sobě v minutových intervalech, tak jsem jej považoval za správný a aktualizoval modul RTC. Po úspěšné aktualizaci se čas zase kontroluje až následující
den. Ono není třeba čas načítat pořád dokola.
Upozorňuji, že modul radiopřijímače VKV s RDA5807 vyžaduje napájení 3.3V. Pokud jej připojíte k 5V a více, riskujete jeho zničení. Zde je napájen z
vývodu 3V3 z Arduina.
Moduly a součástky:
Většina modulů, ani součástek není úplně kritická. Místo Arduino Nano můžete klidně použít UNO, nebo i Megu. Displej můžete dát i jiný a jinak barevný,
stejně tak i nf zesilovač. Tento může být libovolný, kterému vyhoví napájení 8-12V. Tato verze je mono, kde VKV modul má připojen pouze jeden kanál.
Zesilovač však můžete použít stereofonní, kdy připojíte oba kanály (v programu pak vymažte řádek rx.setMono(true)). Potenciometr nemusí být s vypínačem,
vypínač se namontuje zvlášť, atd, atd... Pokud moduly "pověsite" na jiné piny Arduina, nebo použijete modul jiný, musíte tyto změny zohlednit v programu.
Modul RTC DS1302-hodiny reálného času je napájený baterií CR2032, která se dá běžně koupit.
Univerzální plošný spoj jsem použil k připojení modulu přijímače RDA5807 (pozor, je titěrný), osazení odporů, filtru displeje a filtru napájení.
Vypínačem se vypíná pouze nf zesilovač. Hodiny i VKV tuner jsou zapnuty neustále, pokud je zdroj připojen. Zdroj můžete použít libovolný mezi 8V až 12V. Hlavně
dobře odrušený. Řada spínaných zdrojů (nabíječek), není z nejkvalitnějších. Pak se v reproduktoru ozývá brum a rušení příjmu dělá problémy aktualizaci času z RDS.
Jako anténu můžete použít kus izolovaného lanka dlouhého 60 - 80cm.
Popis a chování programu:
Program si samozřejmě můžete upravit podle libosti a k obrazu svému. Popíšu pouze pár nejzákladnějších věcí. Pro ovládání modulu radiopřijímače RDA5807, jsem použil
knihovnu RDA5807.h. Pro hodiny reálného času knihovnu
Ds1302.h ve verzi 1.1.0. Knihovna pro hodinový displej TM1637 je ke stažení
v návodu drátek.cz. Další použité knihovny Wire.h a
EEPROM.h jsou součástí instalačního balíčku Arduino IDE.
Naladěná stanice se uloží do EEPROM až po dvaceti sekundách po naladění, aby se EEPROM zbytečně nepřepisovala při přelaďování.
Vzhledem k tomu, že program pracuje pouze s časem (hodiny a minuty). Je dobré při prvním nahrání do Arduina doplnit kompletní datum, i když to není úplně nutné.
Hlavně je dúležité mít v modulu RTC vloženou baterii CR2032, jinak po odpojení zdroje čas "zapomene".
Pomocí definice #define DBG nastavíte testovací režim přes seriový monitor. Program pak bude v Arduino IDE do seriového monitoru vypisovat hlášky o jeho průběhu.
Konstanta CYKLUS_COUNT určuje, kolikrát se má načíst čas, než se potvrdí jeho správnost. Pokud se předešlý načtený čas liší o více jak dvě minuty, nebo je
větší, cyklus se zruší a začne nanovo. Zde je konstanta nastavená na osm. Možná je to zbytečně moc, ale takto mi to připada spolehlivější.
Konstanta MAX_TRY udává maximální počet pokusů o přečtení času. Ono je zbytečně neustále se pokoušet o čtení ze slabého signálu. Pak je ale vhodné naladit
nějakou silnější stanici. A jak zjistíte správnost čtení, aniž byste přijímač připojovali k PC s Arduino IDE? Je implementován jakýsi kontrolní režim, který se aktivuje i
ruší stiskem všech tří tlačítek najednou. Na hodinovém displeji přestane blikat dvojtečka a pak se po chvíli místo času začnou zobrazovat tato stavová slova:
první bajt
druhý bajt
D0 začátek cyklu čtení času
01
D1 až D6 průběžné čtení času
rozdíl proti předešlému v minutách (1, nebo 2)
DA probíhá cyklus čtení
kolikátý pokus
DB cyklus čtení času OK, čas aktualizován, další bude příští den
na kolikátý pokus
DC inicializace modulu RTC
den v měsíci
E1 až E6 čas byl přečten chybně
rozdíl proti předešlému v minutách
EF počet pokusů o čtení času byl vyčerpán
počet pokusů
Po přeladění na jinou stanici se probíhající cyklus i počet pokusů vynuluje. Čtení začíná nanovo, pokud čas dosud nebyl úspěšně přečten. Pokud již čas aktualizován
úspěšně byl (stavové slovo DBxx), čtení času se již ten den neprovádí.
Programy zdarma, Arduino návody, tratě pro Open Rails a MSTS.