Ovladač je v testování. Mohou proto následovat změny programu!

Arduino ovladač pro LocoNet

Nejprve musím upozornit, že ovladač je pouze zkušební vzorek. Protože jsem potřeboval odzkoušet většinu funkcí již postavené centrály Z21PG, tedy i sběrnici LocoNetu, pustil jsem se do stavby ovladače. Líbil se mi projekt s OLED displejem z japonských stránek. Tento ovladač měl být podle textu a zapojení multifunkční a zvládnout pracovat jako centrála, jako ovladač pro sběrnici LocoNet i jako analogový ovladač s PWM řízením. Funkci centrály ani analogové ježdění však ve videu na původní stránce neuvidíte, a v programu pro Arduino také není tato část zahrnuta. Driver použitý v původním zapojení, je proto v mé konstrukci také vynechán. 

Vlastnosti LocoNet / DCC ovladače 

・ podpora adres lokomotiv 1 až 2023 

・ podpora funkcí od F0 do F8 (podle autora do F16, to se mi však nepodařilo zprovoznit)

・ podpora adres příslušenství od 1 do 999. 

・ 0 až 127 rychlostních kroků 

 ■ Hardware

・CPU ATmega328 (Arduino Pro Mini 5V, Flash32kB, SRAM2kB, provozní frekvence 16MHz), 

・ OLED display 128x64, 1.3" s řadičem SH1106 (původně 0,96" SSD1306), SPI

・ rotační kodér s tlačítkem (jako ovladač rychlosti)

・ tlačítko SHIFT, SHIFT2, 5 tlačítek funkcí

・ TRACK LED, SHIFT LED

Video z původních stránek autora.

Na videu vypadalo vše vše pěkné a funkční, proto jsem se rozhodl vyzkoušet tento ovladač.

Zapojení

Mým cílem byl pouze ovladač pro sběrnici Loconet. Ze zapojení byl proto vynechán již zmíněný driver, konektor pro ladění, konektor ICSP, konektor pro rotační enkodér, resetovací tlačítko i převodník USB/UART. Po vynechání driveru byla pojistka již také zbytečná a bylo možné ji také vynechat. Signalizace napájení (POWER LED) byla vynechána také, protože stav, kdy je ovladač napájen, je pozorovatelný na OLED displeji. Místo samostatného procesoru ATMEGA328-A jsem se rozhodl použít 5V verzi Arduina Pro mini, proto jsem mohl vynechat i krystal a kondenzátory okolo něj. Ovládání podle mne nebylo intuitivní a proto jsem přidal další ovládací tlačítko nazvané SHIFT2. RESET displeje je připojen přes pull-up rezistor 10k, tím se oproti původnímu návrhu ušetří výstup Arduina. Místo tradičního stabilizátoru LM7805 je použit snižující měnič napětí s obvodem MP2315. Proudový odběr ovladače je opravdu nízký (v této konfiguraci jsem naměřil proud 15mA), takže je na místo měniče možno použít i obvod LM78L05 (piny IN,GND,OUT, mají stejné rozložení). Čtení hodnot na analogovém vstupu nepracovalo podle mých představ, proto bylo upraveno i zapojení tlačítek funkcí.

ve schématu jsou uvedeny vypočítané napěťové úrovně pro čtení hodnot na analogovém vstupu

Konstrukce

Nepředpokládám, že by někdo chtěl tento ovladač vyrábět (viz. známé chyby). Návrh byl proto proveden do vyřazeného ovladače polohovací postele výrobce Linak. Tento ovladač měl použitelné rozměry a hlavně kroucený 6-ti žilový kabel. Opět jsem se rozhodl pro použití jednostranné desky plošných spojů. Aby bylo možné desku do ovladače rozměrově umístit, byla navržena tak, že Arduino bylo umístěno pod displej. Toto umístění vyžaduje nákup Arduina neosazeného pinovými lištami. Arduino pak bylo umístěno přímo na desku ze strany součástek. Pro nahrávání programu jsou z Arduina vyvedeny piny TX, RX a DTR. Tyto piny jsou však výškově zkráceny, aby je bylo možné pod displej umístit. Všechny součástky na desce jsou umístěny tak, aby nepřevyšovaly výšku základny rotačního enkodéru cca. 6mm. Stabilizační kondenzátor C4 je použit nízkoprofilový, s výškou 5,5mm. Ve vnitřní struktuře tlačítek jsou piny 1, 2 a 3, 4 navzájem propojeny, v návrhu je toto propojení pinů využito pro vytvoření spojovacích můstků. Pokud proto nebudete osazovat tlačítko SHIFT2, je třeba místo něj osadit můstkovou propojku (mezi piny 1 a 2). Ovládací tlačítka velikosti 6x6 byla použita o výšce 10,5mm. Hmatníky tlačítek jsou o průměru 6,2mm a hmatník rotačního enkodéru má průměr 22mm. 

Program

Popíšu zde úpravy, které byly provedeny proti originálu. 

První, co se mi nelíbilo, že se na displeji ovladače po připojení po úvodní obrazovce zobrazí obrazovka volby adresy. Proto bylo do programu přidáno ukládání poslední použité adresy do EPROM. Ovladač se nyní po připojení k centrále přihlásí k této adrese a obrazovka je přepnuta na ovládání rychlosti. Pokud je tedy ovladač za provozu odpojen a opět připojen k centrále, může bez nastavování adresy pokračovat v ovládání stejné lokomotivy, jako před odpojením ovladače. 

Dále jsem zjistil, že připojená SHIFT LED není v programu zahrnuta. Proto byla této LED přiřazena alespoň signalizace použití SHIFT tlačítek. 

Obrazovka ovládání rychlosti zobrazuje aktuální rychlostní stupeň (0-127). Autor původního projektu si trochu přisadil, když za tento údaj přidal zobrazení "km/h". Toto zobrazení zůstalo pro efekt (asi původní záměr) zachováno, nebude však odpovídat modelové rychlosti lokomotivy. Co mi však nevyhovovalo, bylo přidávání rychlosti při otáčení enkodéru po jednotlivých stupních, nebo po 5 stupních při současně stisknutém tlačítku SHIFT (jednou rukou neproveditelné). Po úpravě programu, probíhají změny rychlostních stupňů při jednom kroku enkodéru do 5 rychlostního stupně po 1 stupni, od 6 do 20 stupně po 2 stupních, od 21 do 50 stupně po 3 stupních a nad 50stupňů po 4 stupních

Oproti originálnímu displeji 0,96" s řadičem SSD1306 byl použit větší 1,3" displej s řadičem SH1106. Použitá knihovna u8glib umí pracovat s oběma typy displejů, v programu byl proto řadič displeje zaměněn.

Ovládání

Jak jsem již psal ovládání nebylo intuitivní, program byl proto následovně upraven:

Obrazovka pozice adresy - Otáčením enkodéru provádíme změnu pozice volby adresy. Tlačítkem enkodéru přepneme na obrazovku volby adresy. Dvojitým stiskem tlačítka enkodéru dojde k potvrzení adresy, uložení adresy do EPROM a přepnutí na obrazovku ovládání rychlosti.

Obrazovka volby adresy - Otáčením enkodéru provádíme změnu číslice na pozici adresy. Tlačítkem enkodéru přepneme na obrazovku volby pozice adresy. Dvojitým stiskem tlačítka enkodéru dojde k potvrzení adresy, uložení adresy do EPROM a přepnutí na obrazovku ovládání rychlosti.

Obrazovka ovládání rychlosti - Na obrazovce lze vidět adresu ovládané lokomotivy, rychlostní stupeň, ukazatel směru jízdy a aktuálně ovládané funkce. Otáčením enkodéru provádíme změnu rychlostního stupně. Stiskem tlačítka enkodéru provedeme bezpečnostní zastavení lokomotivy (nastavíme rychlost na 0). Pokud lokomotiva stojí (rychlost 0) dvojitým stiskem tlačítka enkodéru přepínáme směr jízdy lokomotivy. Stiskem funkčních kláves ovládáme funkce (funkci 0 lze ovládat vždy a funkce 1 až 4, nebo 5 až 8 podle poslední zvolené pozice). Stiskem tlačítka SHIFT1 přepneme mezi ovládáním funkcí F1 až F4 nebo F5 až F8. Stiskem tlačítka SHIFT2 přepneme na obrazovku ovládání příslušenství. Dlouhým stiskem tlačítka enkodéru přepneme na obrazovku volby adresy lokomotivy. Zobrazení na displeji jsem rozšířil o zobrazení aktuálně ovládaných funkcí, obrazovka volby funkcí proto byla vypuštěna.

Obrazovka volby funkcí - byla vypuštěna. Přepínání funkcí stiskem tlačítka SHIFT1 bylo přesunuto na obrazovku ovládání rychlosti.

Obrazovka ovládání příslušenství - Na této obrazovce je na prvním řádku adresa ovládaného příslušenství a rychlostní stupeň aktuálně ovládané lokomotivy, na dalších řádcích je pak seznam adres příslušenství, které lze ovládat klávesami funkcí. Enkodérem nelze ovládat rychlost jízdy lokomotivy, stiskem tlačítka enkodéru však lze provést bezpečnostní zastavení lokomotivy (nastavit rychlost na 0). Ovládat příslušenství je pak možné dvěma způsoby:

 1) Otáčením enkodéru provádíme změnu adresy příslušenství. Tato adresa je zobrazena na prvním řádku obrazovky. Stiskem tlačítka SHIFT2 pak přepínáme příslušenství na zadané adrese. 

2) Stiskem tlačítka SHIFT1 přepínáme pozici řádku ovládaných adres příslušenství (adresy 1 až 20). Stiskem tlačítka SHIFT1 posuneme kurzor o řádek dolů, tlačítky funkcí pak přepínáme příslušenství podle zvoleného řádku. 

Dvojitým stiskem tlačítka SHIFT1 přepneme na obrazovku ovládání rychlosti.

obrazovka ovládání rychlosti

obrazovka ovládání příslušenství

Známé chyby

Jsem programátor samouk (lama), takže pokud by mi chtěl někdo pomoci s níže uvedenými chybami, budu rád. Když mne nakopnete, možná se chytnu. Kontaktní formulář je na úvodní stránce.

Jak píše sám autor, použití dlouhého stisku tlačítka nemusí fungovat dobře a je nutno jej zvážit. U enkodéru je proto ponecháno pouze pro uvolnění slotu a přechod na obrazovku změny adresy lokomotivy.

Vyhodnocování stisků kláves na analogovém vstupu nefunguje korektně. Patrné je to u vyšších tlačítek (F3, F4), kdy je hodnota na analogovém vstupu vyhodnocena chybně a je přepnuta jiná funkce (adresa příslušenství). Byla provedena úprava zapojení tlačítek a upraven program pro násobné čtení analogových hodnot. V další verzi ovladače bylo od analogového čtení upuštěno a tlačítka jsou čteny digitálně.

Ukládání adresy lokomotivy někdy neproběhne korektně. I když je v programu omezeno zadání adresy lokomotivy vyšší než 2023, je vyšší adresa přijata a přidělen slot.

Rutina pro ovládání příslušenství si "nepamatuje" poslední stav a přepíná náhodně. Program by jej měl vyčítat (funkce LocoNet knihovny "reportSwitch"), ale nepracuje správně. K ovládání příslušenství nebyl tento ovladač primárně zamýšlen, tak mi to až tolik nevadí. 

Ovládání funkcí je funkční pokud je proveden překlad programu s knihovnou LocoNet v.1.0.2. Pokud byl překlad proveden s knihovnou vyšší verze, ovládání funkcí nebylo funkční.

Upozornění: Návrhy jsou určeny pro ruční výrobu desky plošných spojů. Otvory všech součástek jsou zmenšeny pro snadné ruční vrtání !!! Nepoužívejte návrhy vytvořené v programu Eagle pro generování dat pro strojní výrobu!!! 

Verze s digitálním čtením tlačítek

Protože čtení hodnot na analogovém vstupu neprobíhalo korektně, bylo upraveno zapojení tlačítek ovladače pro digitální čtení.

Zapojení bylo sestaveno pouze na nepájivém kontaktním poli, a program byl i takto testován. V programu je nutno pro tuto verzi zakomentovat makro #define ANALOG. Ostatní makra mohou zůstat beze změny.

Soubory návrhu desky programu Eagle pro tuto verzi zapojení byly kresleny se základními knihovnami programu, proto nejsou zveřejněny soubory pro ruční výrobu desek. Zato je však možné generovat soubory ve formátu Gerber pro tovární výrobu. Pokud by jste s vytvářením souborů měli problémy, mohu zveřejnit základní potřebné soubory. Tato verze zatím nebyla vyrobena, takže vše je samozřejmě bez jakékoli záruky. 

Protože jsem již neměl v zásobě 1.3" displej s rozhraním SPI, použil jsem k ladění programu displej s rozhraním I2C a v programu je tento displej zahrnut pouze pro testování. Pokud by jste měli zájem, ovladač dále vyvíjet, mohu zveřejnit návrhy zapojení a desek i pro testovací verzi s rozhraním I2C.