Railnet

Ovladač OTO-WiFi a základna–server, oboje s ESP01

Elektronika | Zdeno Janeček, 30. 07. 2022 (410 zhliadnutí)

Delší dobu jsem nic nedělal a doma se mi válelo víc kousků ESP01, které jsem si před časem objednal na Aliepress. Tak jsem se do toho pustil a zkusil vymyslet WiFi ovladač do klasické FREMO krabičky.

Nebudu klamat, dalo mi to dost zabrat, vytvořil jsem asi 8 prototypů, které z různých důvodů nevyhovovaly a putovaly do koše. Asi největší problém byl nedostatek informaci o provozu ESP01 a ta provozní omáčka okolo. Nikde se totiž nepíše o chybových hláškách a komentováni chyb, kterých se dopustíte. Jako vždycky je problém s tím, co každý ví, jen já ne. Postupně jsem se dostával do problematiky a s pomoci logického analyzátoru Saleae a osciloskopu jsem získával informace o tom, jak to funguje. Pro mne to byl projekt na zelené louce a bylo to poznat. Však i ten nejdelší maratón začíná tím prvním krokem.

Server

Začnu serverem, který dokáže řídit 4 ovladače a transformuje jazyk TCP do protokolu Loconetu. Použil jsem procesor Atmega 162, který má dva USART, které pracují na 16666 Baudu pro Loconet a 115200 Baudu pro ESP01. Bylo poměrně důležité logicky rozdělit programové vybavení pro server a ovladače. Do serveru jsem dal správu a ovládání slotů a do ovladačů sbírání a posílání požadavků obsluhy na provoz loko. Bylo velmi důležité se rozhodnout, jak to napájet, protože děti a lidská blbost jsou “geniální“. Rozhodl jsem se pro USB nabíječku 5V / 500mA, které se snad povalují každému doma. Je to výhodné taky proto, že se dají sehnat kabely v různých délkách, od 30cm do 5m. Tady opravdu nehrozí zničení špatným použitím jiného zdroje a požadavky na bezpečnost jsou taky striktně splněné. Pořídil jsem si 7x HUB USB, kterým se bude napájet server a kde se budou dobíjet ovladače, do kterých jsem zabudoval čtvercový USB-B konektor. Jiné, menší typy konektorů USB považuji za kurvítka, které se snadno kazí a vytrhávají se z plošného spoje. Sám mám doma asi 10 telefonů, kde jsou tyto konektory poškozené.

Největší výhoda mnou navrženého serveru je v tom, že se dá připojit kdekoliv na Loconet, teda nepotřebuje PC nebo program JMRI. Prostě ho připojíte do sítě X3 pomocí klasiky kabelu RJ12 6/6 a je hotovo. Server neodebírá proud na pinech 1 a 6 konektoru RJ12. Dokonce se to dá udělat vícenásobně a je možné mít víc serverů a násobky čtyř ovladačů.

Schéma serveru:

Jak je mým zvykem, zapojeni je jednoduché, složitost je ukrytá v programovém vybavení. Diody LED používám antiparalerní zapojeni dvojvývodových diod červena /zelená s přidaným ochranným odporem. LEDky indikuji připojený link (zelená) a ci se posílají pakety Uhlenbrock (red) nebo Digitrax (green).

Tento obvod je celkem nezávislý a dokáže se nastartovat a inicializovat samostatně. Nemá zabudované žádné adresy a tak nemusí volat centrálu a inicializovat sloty. Jen se nastartuje, inicializuje se ESP01 a čeká na data z ovladačů.

Data z ovladačů se skládají ze 14 byte v HEX formátu. To proto, ze HEX formát je vždycky 2-bajtový a nemůže nastat stav, kdy je bud jeden znak nebo i tři, třeba 1 a 100. V HEX formátu je to 01 a 64. Tím mám zabezpečeno, ze se vždy posílá 14 platných byte. První 4 byte určují adresu v Loconet formátu. Další dvojice určuje SPEED, DIRF, SND a SND1, F13 a F21. V DIRF.5 je uložen směr jízdy. Například „0 0 0 A 0 0 2 0 0 0 0 0 0 0“, to je adresa 10d a směr dopředu, všechno ostatní je prázdné. Hodnoty jednotlivých buněk obsahují hodnoty 0-9 až A-F v ASCII.

Pokud přijde paket s údaji, tak nastanou dvě možnosti. Bud je slot živý nebo ne. Pokud není, tak se pošle paket BF s adresou a proběhne normální inicializace slotu s účastí paketu BA. Pokud je slot živý, tak se posílají jen změny, teda se kontroluje poslední stav a podle toho se posílají pakety A0, A1, A2, ED nebo příslušné pakety Uhlenbrock.

Celkem jednoduché, jen to psát to 5x, bylo poněkud otravné. Dost mne zklamalo, že se všude píše o 5 kanálech, škoda, že funkční jsou a mohou být jen čtyři.

Server taky zabezpečuje posílání refresh paketu, aby se udržely sloty živé. Pokud přestane server posílat refresh pakety, tak se převede slot do stavu IDLE asi po 2 minutách. Je to svázané s ovladači dohromady, takže se nemůže stát, že je slot mrtvý a ovladač posílá data. Takže nejdříve zaspí ovladač a až potom se odstaví slot.

Tlačítko RESET nefunguje napřímo, ale zprostředkovaně, protože je nutné zastavit loko v pohybu, než se odstaví ovladače do režimu spánku. Celkem jsem uvažoval, že ho zruším, ale tradice ho tam mít, nepustí.

Ovladač

Původní myšlenka byla, že se AKU nechá venku a buď se přilepí suchým zipsem na spodek krabičky nebo to bude viset na krátkém kablíku. Tato verze byla první a dobře posloužila na hrubé testování a pochopení činnosti. Potom jsem objevil sáčkové LiPol AKU s tloušťkou 3mm a bylo vymalované. Tato AKU se vejde pod plošný spoj v krabičce.

Při použití enkodéru jsem musel zabezpečit informovanost obsluhy pomocí displeje 0,96 palce v rozlišeni 128x160 v barevné paletě 5-6-5 RGB. Tento displej je neskutečně pomalý a tak musí běžet v hlavní smyčce programu a všechno ostatní, kromě klávesnice, se musí zabezpečovat přes přerušení jako událost. Klávesnice je taky pomalá periferie a její programová obsluha musí vždy čekat na volný čas. Není to kritické, obsluha ani nezjistí, ze musí na klávesnici čekat. Přístup na klávesnici je 11x za vteřinu.

Největší zrada bylo časování USART a enkodéru, kdy enkodér sekal vysílání a příjem od ESP01. Obojí je obslouženo přes přerušení a dělalo to psí kusy. Stále jsem hledal chybu v zásobnících a nakonec stačil zákaz přerušeni pro enkodér v čase činnosti USART. Tím se úplně omezil vplyv enkodéru na činnost USART. Nejtěžší bylo najít, co vlastně způsobuje zaseknutí ovladače.

Po mechanické stránce byl problém navrstvit součástky na výšku, aby se to do krabičky vešlo. Každá desetinka byla kritická. Dokonce jsem musel zapustit objímku pro procesor do plošného spoje, jinak bych nezavřel krabičku.

Dále jsem musel zbrousit vývody na plošném spoji pod 0,5mm, aby mi to nepoškodilo (nepropíchlo) LiPol baterku. Tu jsem přilepil na obojstrannou lepicí pásku, aby to nelítalo a neulomily se přívody. Mechanická konstrukce je dost kritická a musí být člověk pečlivý a uvažovat dopředu.

Obvod ESP01 jsem umístil tak, že vyčnívá z krabičky. Tím se zvýšil dosah na stovky metrů oproti tomu, kdyby se to zavřelo do krabičky nebo dokonce, když se to schová v ruce. Bude dobré, aby to neupadlo na zem. Uvažuji o tom, jak to uvázat okolo krku , jako to mají některé chytré telefony. Mám to vymyšlené, ale zatím jsem se ku tomu nedostal. Chci použít čtvercový konektor USB typu B ze starého kabelu a vyvrtat do něj díru a prostrčit špagát na uvázáni okolo krku. Výhoda by byla v tom, ze by se špagát s konektorem dal vybrat a potom se ovladač připojí na nabíječku USB. Dokonce se vyrábějí kablíky o délce jen 30cm, takže by stačilo na ten kablík uvázat pěknou ozdobnou mašli.

Programové vybavení jsem převzal z grafického OTO ovladače a jen přidal komunikaci s ESP01. Jediná zvláštnost je posílání dat každých 10 vteřin, jinak by server odpojil ovladač a ten by přešel do DEEP SLEEP módu. Pokud je rychlost nulová, tak ovladač přejde do spánku za 30 vteřin, aby se šetřila baterka. Pak se musí stisknout enkodér, aby se ovladač vzbudil. Posílá se každá změna hodnot rychlosti nebo funkcí. Pokud je rychlost nenulová, tak běží ovladač trvale a nevypíná se. Na displeji je vidět napětí baterky a není dobré, když to spadne pod 3.1V. Normální napětí je 3,8V a víc a vydrží to asi 6 hodin. Ovladač má zabudovaný vypínač a je dobré ho používat. Opravdu není vhodné hodit zapnutý ovladač do šuplíku a nechat ho tam ¼ roku. Je skoro jisté, že už ho nevzbudíte. Pro LiPol baterku je zničující pokles napětí pod 3V. Taky je důležité, aby se měl ovladač kam přihlásit, teda server musí běžet popředu. Pokud server neběží, tak ovladač bere maximální proud asi 70 mA a baterka se rychle vybije. Pokud se vám to stane a ovladač se nepřihlásí na zapnutém serveru do 10 vteřin, zkuste ho připojit na nabíječku USB a pokud to nepomůže, je nutné ovladač rozebrat a vyjmout ESP01 z objímky a připojit ovladač na USB, na čas minimálně 30 minut. Je to proto, ze ESP01 bere naprázdno proud okolo 70mA a nedovolí baterce se zotavit, protože nabíjecí proud z USB je jen 40mA.

  • Je důležité mít LiPol připojenou vypínačem, jinak by se nenabíjela.
  • Provozní proud se pohybuje od 15mA do 40mA, podle vysílání WiFi.
  • Při startu to bere zmiňovaných 70mA na čas asi 8 vteřin, co trvá oživení ovladače, pak to spadne na polovičku.
  • Je zabudovaná obsluha v tom, že se nenašel server a ovladač se uloží do spánku a vypíše se na displej NO SERVER na rudém podkladu. Při připojení serveru buď vypnete a zapnete ovladač nebo se po 50 vteřinách vzbudí sám.
  • Procesor Atmega328 má zabudovaný snímač teploty a je funkční. Dosáhnutí teploty 80 stupňů na ADC(8) se oznámí pištěním. To je havarijní stav a LiPol bude asi mrtvá, ale bezpečnost má přednost.

Odpor 18 ohmů od USB je omezovací, sráží napětí 5V z USB na 4,2V a zároveň omezuje proud do LiPol na 40 mA. Tento odpor je i ochranný, protože jak roste napětí na LiPol, tak se lineárně zmenšuje i nabíjecí proud. Schottky dioda sráží napětí z 4,2V na 3,6V, vhodné na napájeni ESP01. Bylo nutné zařadit drop-out stabilizátor na 3V pro procesor a displej, protože ESP01 má velmi kolísavý odběr a displej náhodně blikal a to mi dost vadilo.

Dost velký problém je přebíjení, kdy hrozí poškození LiPol a dokonce snad i nafouknutí a vznícení. Proto jsem do programu zařadil ochranu v podobě plného podsvícení grafického displeje, který pak bere 40mA a tak podsekne napájení LiPol. Hodnota zapnutí podsvícení je při 4.1V a vypnuti 4.05V. Takže displej bliká v asi 20 vteřinových intervalech. Tím jsem zabezpečil bezpečnost jak LiPol, tak okolí. Je tam zapojené vřeštidlo, které upozorní na teplotu, přepětí i podpětí. Podpětí na sebe upozorní i tak, že displej silně bliká.

Mírným zkomplikováním zapojení klávesnice jsem ušetřil jeden ADC pin a to PORTC.0, který používám na měření napětí na AKU LiPol. Podle mne je LiPol nejdůležitější součástka a taky nejporuchovější a nejzrádnější. Proto jsem ji věnoval zvýšenou pozornost a tím i nutnost informovat obsluhu. LiPol, které jsem zakoupil mají “prý“ zabudovanou ochranu proti podpětí i přebíjení, ale nezaškodí to mít jištěné. Zabudoval jsem proto snímání napětí a to se zobrazuje na displeji. Opravdu to doporučuji sledovat.

Schéma ovladače:

Hodně používám polotovary, teda skládám už hotové věci dohromady. Už třeba nevyrábím klávesnici, ale používám hotovou. Nejen, že to vypadá pěkně, ale je to i spolehlivější.

Toto je jedna z prvých verzí, napájená externě.

Před montáží dohromady. Zase jiná, podobná verze.

Jak to funguje a co to umí

Ovladač je určený na modulovku, teda nemá zabudované ovládání vyhybek a stavění cest. Už jen proto, že každá stanice na modulovke je jiná a nedalo by se to spojit a ovládat. Je to podobné, jako jiné moje ovladače OTO, jen je tam vyšší komfort v zabudovaném grafickém displeji. Nepovazuji za vhodné přepínat víc loko, na modulovke je to nepřijatelné. Už jen volba adresy je proti standardům FREMO.

Co je jiné, je teda možnost volby adresy pro loko, kterou budeme používat. Na volbu adresy slouží dvojstisk +20 a enkodéru v tomto pořadí.

Vypíše se na žlutém podkladu:

  • volba adr
  • +10 = znova (zrušeni volby a zadávaní znova)
  • +20 = hotovo (potvrzeni volby zvolené adresy)
  • Tady zvolíte novou adresu numerickými tlačítky.
  • Když stisknete +20, tak se vypíše:
  • Old adr = stará adresa
  • New adr = nová adresa
  • PUSH enkodér,

Stisknutím enkodéru potvrdíte novou adresu a ta se zapíše do paměti ovladače, paměti serveru a vytvoří se nový slot v centrále. Je to trošku složitější, aby se zamezilo nechtěné a náhodné volbě adresy. Ještě podotknu, že rychlost loko musí být nulová. Na loko v pohybu se nesmi dát změnit adresa !!

Zrušil jsem volbu centrály na ovladačích a přesunul jsem ji na server. Tam se dá zvolit buď Digitrax nebo Uhlenbrock. Centrála je jen jedna a je nesmysl mít každý ovladač na jiný typ centrály. Asi by to ani dobře nefungovalo.

Volba podsvícení se voli stisknutím numerického tlačítka a enkodéru. Změna svitu se projeví okamžitě. Každý stupeň zvýší spotřebu asi o 4mA, teda na „0“ je to asi 4mA a na „9“ asi 40mA. Vyšší svit používejte s rozvahou, dost to vyčerpává LiPol. Protože se zároveň zapne příslušná funkce, je nutné ji vzápětí vypnout.

Ovládání

Pod ESP01 je schovaný vypínač, který zapnete. Blikne jak displej, tak ESP01. Po čase asi 6 až 10 vteřin se rozsvítí displej a vypíše se na něj adresa, nulová rychlost a stavy funkcí F0 – F8 před vypnutím. Stav funkcí se označuje černě (vypnutá) nebo červeně (zapnutá). Volba funkcí se provádí stiskem 0 až 9 napřímo a funkce F10-F28 po stisku prefixu +10 nebo +20. Funkce 29 je určena na vypnutí všech funkcí.

Pokud není zapnutý server, tak se displej rozsvítí rudo a vypíše se NO SERVER. Je nutné připojit a zapnout server a znova vypnout a zapnout ovladače. Pokud to neuděláte, tak se bude ovladač zkoušet připojit každých 50 vteřin.

Rychlost se ovládá enkodérem otáčením. Tlačítko na enkodéru funguje tak, že první stisknuti zastaví loko podle zabudované křivky rychlosti a druhé stisknutí zapne okamžitý stop a otočí směr jízdy. Kdo má moje ovladače, tak to dobře pozná.

Po čase asi 30 vteřin bez rychlosti, přejde ovladač do hibernace a pak bere jen asi 6mA. Je to nutné z důvodu šetření LiPol baterky. Vzbudí se stiskem enkodéru. Pokud není rychlost nulová, tak se ovladač nevypíná.

Foto celé sestavy čtyř funkčních kusů

[Akt. známka: 5,00 / Počet hlasov: 1] -      + 

K tomuto článku nebol doposiaľ priradený žiadny komentár!

Pridať nový komentár