Vymyslel jsem, zhotovil a otestoval modul zhlaví 4-6 ; 6-4 pro řízení modelového nádraží. Spojení mechaniky a elektroniky do jednoho celku je úplně nové a jinak. Teda aspoň si to myslím. ;-)
Můj návrh není určený na vlakodromy, kde jezdí vlaky každých pár vteřin a konec vlaku je ještě v první stanici, když vjíždí do další stanice. Prostě to chce klid a pohodu, jako je obvyklá na modulech. Ale pro větší nebo klubové kolejiště, s více stanicemi, to může být velmi vhodné.
Kdysi jsem už zkusil, vyráběl, plánoval a skládat kostičky, kdy každý prvek kolejiště měl svůj protikus na panelu obsluhy. Problém byla komunikace, zobrazování a hlavně spolupráce mezi prvky. Každý prvek musel mít svoji velikost, procesor, adresu, zobrazování a komunikační připojení. Taky geometrie těch kostiček nebyla zrovna jednoduchá a počet druhů kostiček byl nakonec „ďábelsky odstrašující“. :-)
Na fóru modely.biz byla poměrně dost žhavá diskuze okolo ovládání kolejiště pomocí různých udělátek a dost se kritizoval Loconet, že je akademický a tak nějak uživatelsky uzavřený a nepřístupný. Ono je to dost pravda, protože vlastně existuje jen obvod LocoIo a přesto, že je celkem geniálně navrhnutý, není s ním jednoduchá práce navrhnout ovládací panel. Proto jsem se pokusil navrhnout ovládání kolejiště pro Loconet trochu jinak a uživatelsky příjemněji.
Jako je u mne obvyklé, někdy ráno, na pomezí spánku a bdění, mne napadlo, jak to udělat. Je potřebné navrhnout konečný automat, kterým obsloužíme zhlaví. Taky je důležité, že je už předdefinovaný tvar zhlaví, který není problém upravit podle potřeby. Navíc je to spojené s mechanickým provedením a to neskutečně ulehčí práci. Co je problém, že je nutné navrhnout maximalistické řešení, ze kterého lze potom ubírat podle reality.
Je použitý obvod ArduinoNano s Atmega328, který je opravdu laciný a snadno dostupný, takže není důvod se obmezovat. ArduinoNano je polotovar, kde je zabudováno USB rozhraní, stabilizátor +5V a +3V3 a krystal 16MHz. ArduinoNano má 30 vývodů, z kterých se dá použít 22 pinů na práci obvodu. Z toho musím odebrat TxD a RxD na příjem a vysílání USARTu Loconetu a teda zůstane 20 pinů na ovládání příslušenství (zhlaví). Je reálné ovládat 10 tlačítek a 10 duoled red/green. Následně je možné nastavovat vlakové a posunovací cesty ze čtyř vjezdových kolejí na šest staničních kolejí. Duoled jsou zapojené do děliče napětí 1k0-červená a 680-zelená, teda je možné indikovat čtyři stavy, červená, zelená, oranžová a nesvití nic a ještě různé blikání.. Odběr 10 děličů je celkem zanedbatelný, (1000 + 680) / 10 = 168 ohmů, při 5V je to 5 / 168 = celkem asi 30mA a to je celkem v normě. Celkově bere obvod asi 40mA a to při malém počtu těchto obvodů ničemu nevadí. Obvod Arduino se trošičku hřeje, ale nikdy nepřesáhne teplotu 40 stupňů Celsia.
Zapojení obvodu je určené pro menší nádraží se čtyřmi (anebo méně) vjezdovými (kusými) kolejemi a se šesti (anebo méně) staničními kolejemi. Další možnost je použití procesoru Atmega2560 a lepší, kde je přibližně trojnásobek použitelných pinů a teda možnosti jsou obrovské. Ale to je hudbou budoucnosti a chuti, kdo s tím něco udělá.
Jeden obvod dokáže obsloužit jedno zhlaví stanice se čtyřmi (a méně) vjezdovými a šesti (a méně) staničními kolejemi spolu s nastavováním vyhybek a návěstidel a se závislostmi od obsazení. Indikuje spojení vybraných kolejí a dovoluje nastavit jednu vlakovou cestu nebo posun v jednom zhlaví. Ve spolupráci s detekcí obsazení dokáže zablokovat vjezd na obsazenou kolej a shazovat do červené při najetí vlaku do zhlaví. Výhoda tohoto řešení je v tom, ze 4 na 6 je maximum, ze kterého se dá ubírat bez změny vlastností, použití nebo programu. Je to použitelné bez počítače nebo centrály DCC a může to být úplně nezávislé na ovládání lokomotiv.
Ono to bude asi víc článků, protože to není vůbec jednoduché. Další články budou o zdroji napájení, zdroji 15mA pro Loconet, sdruženého ovladače pro vyhybku, detekci a návěstidlo a samotných detekcí.
Schéma je jednoduché a přitom plně funkční, vzhledem na to, co to umí.
Obvod je rozdělený na vjezdovou část kolejí a začátky staničních kolejí jednoho zhlaví. Teda na řízení celého nádraží jsou potřebné dva kusy těchto obvodu. Je to celkem vhodné řešení, protože celkem málokdy jsou levé a pravé zhlaví totožné. Druhý obvod se teda musí otočit o 180 stupňů, aby to na sebe navazovalo.
Na obrázku nahoře je konektor RJ12 6/6, kterým se zabezpečuje komunikace přes Loconet. Taky je tam signál RailSyn na pinech 1 a 6, který se usměrní a použije se na napájení obvodu. Nebo tam může být +12V, kterému usměrnění nevadí. Obvod nepotřebuje DCC signál, ale potřebuje nějaké napájení.
Protože Arduino má hodně špatně vyřešený USART, kvůli USB, musí se použít komparátor LM311 na zabezpečení normy o vstupním odporu na Loconetu. Obvod není nutné opticky oddělovat, protože je připojený jen jednou a nehrozí přeslechy anebo jiné škodlivé zpětné vazby.
Každé tlačítko je logicky svázané s Duoled vedle sebe a ukazuje stav toho tlačítka a nastavenou cestu.
Při startu nebo resetu blikne jedna Duoled zeleno/červeno na důkaz funkčnosti a pak nesvítí nic. Mám dojem, že to je v pořádku, když při nečinnosti nic nesvítí. Uvažoval jsem nad tím dát nějakou Power led diodu, ale myslím, že by to jen mýlilo.
Při stisku jednoho z tlačítek se rozsvítí související Duoled na zeleno, a tím signalizuje počátek volené cesty. Stisknutí jiného tlačítka ve stejné skupině se už nic nezmění. Pokud byla zlá volba, opakovaným stisknutím toho samého tlačítka volbu zrušíte.
Volbou tlačítka v druhé skupině vyberete cestu a ta se rozsvítí na zeleno. Aby se dalo rozlišit, odkud-kam je cesta nastavená, tak začne první Duoled blikat zeleno.
V ten moment se začnou posílat pakety na stavění vlakové cesty. Jako první se posílá zhození návěstidla do červené a potom se nastavují jednotlivé vyhybky. Tady je možné nastavit variantu, kdy obvod čeká na potvrzení paketem B1h a až potom pošle další příkaz na následující vyhybku. Tato volba je nastavena v bit 0 na adrese 3 v EEPROM. Teda pokud je nenastavený, tak se posílají pakety B0h v balíku, pouze s rozestupem podle priorit Loconetu.
Pokud stisknete druhé tlačítko dvakrát za sebou, tak se rozsvítí posunová cesta a obě Duoled budou svítit oranžově.
Zrušení vlakové cesty nebo posunu se udělá stisknutím prvního tlačítka, které zároveň shodí příslušné návěstidlo do červené.
Druhá možnost shození do červené, je použití detekce obsazení, která je za návěstidlem, nejlépe na srdcovce první vyhybky a tak se zruší vlaková nebo posunová cesta, respektive přesněji se nahodí červená. Vyhybky se nemění do další volby nové cesty. Do každé cesty jsou tedy vždy zařazeny dvě Duoled, které označují začátek a konec té cesty, od první, po poslední vyhybku. Obě se dají ovládat přes detekci obsazení, kdy indikuji stav červenou LED.
Tady je vlastně schované celé kouzlo ovládání tohoto konečného automatu, kdy jsou vlastně všechny ovládací rutiny stejné a mění se jen vysílané pakety Loconetu. Teda mám vyhrazených 960 byte EEPROM na vlakové a posunové cesty a podle toho, která cesta je vybraná, tak se posílají potřebné pakety Loconetu. Protože je celkem 24 možných cest, tak je to 960 / 24 = 40 byte na každou cestu. Protože vlastně potřebujeme jen 2 byte, první a poslední jsou nadefinované anebo spočitatelné, tak máme k dispozici celkem 20 paketů Loconet s opcode B0h na obsluhu každé cesty. Protože některé byte v paketu B0h můžou obsahovat všechny bity v byte v stavu „0“, nelze použít jiné dělení. Mohlo by se to obejít s byte (bit.7) s hodnotou 128, ale nezdá se mi to potřebné. Je to vlastně lépe zpracovatelné přes pravidelné dělení než odpočítatávat všechny bit.7 (128) od začátku pole v EEPROM. Taky rekonfigurace a jakákoli změna by byla omnoho složitější a pracnější.
Každá cesta má svoje číslo a to je přiřazené počáteční adrese v EEPROM, odkud se pak vytahují a posílají pakety na ovládání příslušenství. Teda adresy (příkazy) v paketech můžou být v zásadě libovolné a klidně může být každá cesta jiná. Je tam prostě obrovská variabilita v obsluze příslušenství. Na obsluhu 5-znak návěstidla se musí posílat 5 paketu, proto se s tím musí počítat. Proto by bylo dobře zabudovat do ovládání příslušenství možnost, že červená automaticky maže ostatní světla na návěstidle. Teda vjetím do zhlaví se návěstidlo shazuje do červené a případná další volba cesty by vypnula červenou a nastavila požadovanou návěst. Červená návěst je vždycky jako první na začátku pole 40-byte v EEPROM, pokračuje nastavováním vyhybek a končí nastavením návěstidla pro jízdu.
Protože to je pro mne úplně nové, tak až postupem času si začínám uvědomovat možnosti tohoto obvodu.
Například pomocí 3 obvodů můžeme udělat zhlaví 6-vjezdových na 10-staničních kolejí. Nebo udělat uvnitř nádraží přejezdy, pro posun, ze 4 na 4 staniční koleje. Ale to hodně záleží na prostorových možnostech modeláře, protože rozvětvené zhlaví třeba z 1- na 6- kolejí potřebuje 3 a víc délku vyhybky a to je dost limitující na prostor..
Dost mne překvapilo, ze 32kB Flash je v tomto případě dost limitující a musel jsem optimalizovat program, aby se to tam vešlo. Každé rozšíření a doplnění o nějakou funkci opravdu dost bere programový prostor.
Zhlaví se dá obsluhovat bez detekce obsazení, kdy se ovládá všechno ručně a bez jakýchkoli závislostí. Teda je tam závislost jen jedné nastavené cesty, nedají se stavět vícenásobné cesty. Tím je poměrně dobře zabezpečená bezkoliznost v jednom zhlaví. Kontrola je jen vizuální, samotnou obsluhou.
Provoz je ale plánovaný s použitím detekce obsazení. Je zabudované, že pokud přijde paket B2h (detekce obsazení) pro dané návěstidlo, tak se rozsvítí příslušný prvek obsazení.. Je dost limitující, ale žádoucí, že se dá nastavit jen jedna vlaková nebo posunová cesta v jednom zhlaví. Ale pokud vjede vlak do zhlaví a zruší se cesta, tak je možné ihned stavět cestu další, pokud není v konfliktu s původní cestou. Pokud je v konfliktu, tak se musí počkat, až předchozí vlak opustí zhlaví. To si ale musí ohlídat obsluha přes detekci obsazení, nebo pohledem, aby nepostavila kolizní cestu anebo nepodhodila výměnu. Pokud jsou ošetřeny vagony pro detekci obsazení, tak bude vidět, pokud je vlak v zhlaví. Pokud ne, tak bude vidět jen obsazení přes loko a musí si to ohlídat obsluha.. Obvody obsazeni nejsou součástí článku a tohoto obvodu, ale jsou na tomto webu dostupné a popsané. Obsluha paketů B2h je už zabudovaná.
Je samozřejmé, že se dá kombinovat použití předdefinovaných tabulek s EEPROM. Teda je možné používat tabulky a přitom některé cesty řídit příkazy z EEPROM. Stačí si najít odpovídající pozici v EEPROM a tam nahrát příkazy, které potřebuji na nadefinování vlastní cesty.
Maximalistické řešení je následující a z toho se dá ubírat.
Varianta 1:
Příklad, zapojení vyžaduje 28 adres na vyhybky a 100 adres pro návěstidla.
Na nejdelší cestu ovšem potřebujeme zvolit jen 14 příkazů pro vyhybky a 6 příkazů pro dvě návěstidla.
Toto je jiná varianta, která ale vyžaduje jinou tabulku v programu, protože používá pro dvě různé vyhybky stejné adresy, teda závislé vyhybky pro odvratné / odstavné / posunové koleje, které se nastavují v závislosti na vyhybce, se kterou spolupracují.
Varianta 2:
Všimnete si, že závislé vyhybky mají stejné adresování, ale se musí pohybovat opačně. Kolejová spojka je taky zapojená pod jednu adresu.
Taky tato varianta se dá zmenšovat až na minimum, 1 vjezdová kolej, na 2 staniční koleje, bez změny základního programu, pouhým vynecháním tlačítek a Duoled. To je ale extrém, který asi nebude nikdy využitý.
Tyto adresy jsou zapojeny napevno a pokud je budete chtít používat, musíte stejné adresy použít v kolejišti.
Asi nejčastější konfigurace bude 1-3 ; 1-4 ; 1-5 ;1-6 ; vjezd / staniční koleje ; kdy se to dá navolit poměrně snadno. Jako ideální mi připadá použít sude a liché adresy na volbu pravého a levého zhlaví. Pokud bude další nádraží, tak se připočítá 128 (256, 384, 512 …) a taky se to bude dělit na liché a sudé.
Ovládání je jednoduché, zvolíte odkud-kam a vše se nastaví samo, včetně návěstidla.
Další varianta jsou odvratné koleje.
Tady je možné použít obě varianty ovládání, teda odvratné koleje se povazují za další vjezd anebo se ovládají jako závislé na spolupracující vyhybce. Obě varianty ovládání jsou si rovnocenné.
Další varianty, ale některé nejsou zabudované a musí se udělat přes EEPROM.
Tady je vidět, ze variabilita je obrovská a zaleží jen na tom, co si do EEPROM nahrajete.
Mechanické provedení:
Zatím budu popisovat jen varianty bez detekce obsazení, hádám to bude nejsnadnější na vysvětlení. Vrtací maska pro vršek panelu:
Koty pro nákres kolejového zhlaví.
Toto si vytlačíte na tvrdší papír a barevným Fix perem spojíte dvojici Duoled a tlačítko, podle skutečného zhlaví. Ti šikovnější si to udělají přímo v programu Eagle a vytlačí na tvrdší papír, vyrazí díry průbojníkem a přilepí na vršek krabičky. Pochopitelně, pro nepoužité tlačítka a Duoled se díry nevrtají.
Například takto:
Například toto je klasická mezilehlá stanička na jednokolejné trati se třemi dopravními a jednou vlečkovou kolejí. Jsou tam adresy vyhybek, levé = 9, 17, 25 a pravé = 10, 18, 26. Dále jsou tam vjezdová návěstidla, může být mechanické nebo světelné a podle toho se přidělí adresy na ovládání. Pokud se dají odjezdová návěstidla, taky není problém jim přiřadit adresy. No a takto se může vytvořit zhlaví až do maximální velikosti 4 na 6 kolejí z obou stran.
Nahrávání údajů do EEPROM:
Toto byl asi největší problém a dalo mi „kurnik“ práci to nějak vymyslet a zprovoznit. Vypadá to jednoduše, ale kdo pozná problematiku, tak asi chápe, co všechno jsem vyzkoušel. Dokonce i laikovi musí být jasné, že pokud bych toto nevyřešil tak nějak uživatelsky příjemně, tak bych mohl celý nápad hodit do smetí.
Jako nejvhodnější řešení mi připadá použití CV programování na servisní koleji, kdy se automaticky zabezpečí bezkoliznost s jinými dekodéry a komunikuje se jen s tímto obvodem.
Otevřeme si DekoderPro od JMRI a dáme programování na servisní koleji. Vybereme „NMRA“ a podsložku „Raw CVs 1-1024“. Klepneme na „Otevřít programátor“ a objeví se nám menu, kde si vybereme Tabulku CV.
Cesta je > DekoderPro > Nástroje > Programátory > Servisní režim programátoru > NMRA > Raw CVs 1-1024 > Tabulka CV. Pokud otevřete Tabulku CV, tak se objeví přehled CV od CV1 do CV1024.
Fajnšmekři budou frflat, že to je určené na programování CV přes DCC, ale nemají pravdu, protože to je určené na zápis do EEPROM a není teda v zásadě důležité, či je to opravdu dekodér DCC. Pokud se dodrží poměrně jednoduchá pravidla, tak to ničemu a nikomu nemůže vadit. Navíc to má jednu obrovskou výhodu a to je uložení zapsaného do archívu JMRI, kdy si nějak nedovedu představit, jak to jinak udělat. Takže jako první by se měla vyplnit podsložka „Záznam evidence“, aby se to dalo po naprogramování uložit.
Používáme programování přes slot 124 a pakety s opcode EFh a E7h.
Je možné používat OPS programování na širé trati, ale tu se musí dát opravdu pozor na konflikt s adresami pro loko dekodéry. Program JMRI to umožňuje, pokud máte nadefinovanou adresu a vyplněnou tabulku „Záznam evidence“. Ale opravdu asi nebude dobré to používat, respektive se to musí maximálně sledovat a kontrolovat.
Rozložení hodnot v EEPROM dekadicky:
01/ nedoporučuje se používat
02/ adresa LOW ve formátu Loconet na OPS programování ; „0“ je programovací kolej
03/ adresa HIGH ve formátu Loconet na OPS programování ; „0“ je programovací kolej
04/ systémový a stavový byte Eesys
Bit.0 = vyber varianty 1 - 7 ; 0 znamená výběr z EEPROM
Bit.1 = vyber varianty 1 - 7 ; 0 znamená výběr z EEPROM
Bit.2 = vyber varianty 1 - 7 ; 0 znamená výběr z EEPROM
Bit.3 = 1 adresa +128
Bit.4 = 1 adresa +256
Bit.5 = 1 adresa +512
Bit.6 = 1 adresa +1024
Bity se můžou skládat, teda je možná volba až 16 jednotlivých zhlaví od 1. do 2048. po 128 adres.
Bity .0 až .2 se sčítají a mají význam:
0 - výběr z EEPROM
1 - první varianta zleva
2 - první varianta zprava
3 - druhá varianta zleva
4 - druhá varianta zprava
5 - 7 neobsazené, respektive, už není místo ve FLASH
05/ zámek zápisu do EEPROM, zápisem hodnoty mimo „0“ se zamkne zápis do EEPROM
Odemkne se čtením tohoto byte.
06/ stavový byte Syses
Bit.0 = 1 posílá paket Extended ve tvaru IMM, pokud = 0, posílá 5 paketů B0h
Bit.1 = 1 povinné použití paketu B1h
07/ 13 DIY
08/ 90 „Z“
09/ NC
Adresy pro indikaci oznámení od detekce obsazení na Duoled:
Pokud se nepoužívají, tak na obsahu nezáleží.
10/ - 11/ adresa paketu B2h pro detekci obsazeni na Duoled 1
12/ - 13/ adresa paketu B2h pro detekci obsazeni na Duoled 2
14/ - 24/ adresa paketu B2h pro detekci obsazeni na Duoled 3
16/ - 17/ adresa paketu B2h pro detekci obsazeni na Duoled 4, konec levé strany
18/ - 19/ adresa paketu B2h pro detekci obsazeni na Duoled 5
20/ - 21/ adresa paketu B2h pro detekci obsazeni na Duoled 6
22/ - 23/ adresa paketu B2h pro detekci obsazeni na Duoled 7
24/ - 25/ adresa paketu B2h pro detekci obsazeni na Duoled 8
26/ - 27/ adresa paketu B2h pro detekci obsazeni na Duoled 9
28/ - 29/ adresa paketu B2h pro detekci obsazeni na Duoled 10, konec pravé strany
Adresa vždy první LED na návěstidle na každé koleji:
Je to tak myšlené, že adresy pro návěstidla by měly být za sebou v řadě, proto teda stačí jen první adresa.
Je nutné si dát pozor na překrývání adres a je celkem vhodné, aby byla vždy první adresa násobkem 8.
Pokud se použije Extended paket, tak tato adresa stačí samotná.
Tyto hodnoty musí být nadefinované, jinak to nefunguje.
30/ - 31/ návěstidlo, první horní vlevo, k tomu se připočítají postupně další 4 adresy , třeba 8, (9, 10, 11, 12)
32/ - 33/ návěstidlo, druhé vlevo, -//- , třeba 16, (17, 18, 19, 20)
34/ - 35/ návěstidlo, třetí vlevo, -//- , atd
36/ - 37/ návěstidlo, čtvrté vlevo, -//-
38/ - 39/ návěstidlo, první horní vpravo, -//-
40/ - 41/ návěstidlo, druhé vpravo, -//-
42/ - 43/ návěstidlo, třetí vpravo, -//-
44/ - 45/ návěstidlo, čtvrté vpravo, -//-
46/ - 47/ návěstidlo, páté vpravo, -//-
48/ - 49/ návěstidlo, šesté vpravo, -//-
50/ - 63/ NC, do budoucna
Příkazy v EEPROM, ale pokud se používají předdefinované tabulky, tak musí být všechny v hodnotě 255.
64/ - 103/ příkazy B0h po dva byte, celkem 40 byte pro cestu ; první vlevo na první vpravo
104/ - 143/ příkazy B0h po dva byte, celkem 40 byte pro cestu ; první vlevo na první vpravo
144/ - 183/ příkazy B0h po dva byte, celkem 40 byte pro cestu ; první vlevo na třetí vpravo
184/ - 223/ příkazy B0h po dva byte, celkem 40 byte pro cestu ; první vlevo na čtvrtou vpravo
224/ - 263/ příkazy B0h po dva byte, celkem 40 byte pro cestu ; první vlevo na pátou vpravo
304/ - 344/ příkazy B0h po dva byte, celkem 40 byte pro cestu ; první vlevo na šestou vpravo
Atd. ale na toto se asi bude muset použít Excel.
Volba a naťukání adres bude dost otročina, ale při jiném uspořádání a možnostech, na jiném panelu, je to vlastně úplně stejné a musí se to prostě udělat.
Ale je tu možnost předdefinování nejčastějších řešení a to bude zabudované. Takže pokud nepoužijete nějaké exotické zhlaví, tak si vystačíte s dvojicí předdefinovaných souborů adres podle nahoře vyobrazeného.
Protože už nemám kolejiště, tak jsem to testoval na TrainController, kde si mohu vytvořit, co potřebuji. Teda přesně kopii zhlaví a přiřadit adresy, detekci obsazení a návěstidla. Protože to spolu perfektně komunikuje a nedělá to problémy, lze to testovat jako ve skutečnosti. Otestované k mé plné spokojenosti, funguje to super.
Jsou možné dva režimy, bez podpory detekcí obsazeni, kdy se všechno řídí ručně a s pomocí detekce obsazeni, kdy se hlídá vjezd na obsazenou kolej a shazuje se cesta při najetí na první srdcovku. Pochopitelně musí být tyto detekce zapojené, být funkční a mít adresu, kterou modul zhlaví pozná. To jsou celkem tvrdé podmínky a musí být splněné všechny.
Používání bez detekce je podobné jako hra na pianku Piko anebo jiných klávesnic, ale tady je přesně vidět, odkud kam je postavená cesta. Dokonce se nemusí zapojovat návěstidla, moduly zhlaví se můžou použít úplně samostatně. Pokud se použije centrála, která umí překopat Loconet příkazy B0h do DCC, tak se můžou použít třeba Roco vyhybky, se zabudovaným dekodérem, na kobercové ježdění. Takové centrály poznám dvě, Centrbox a DR5000. Možná existují další, ale ty nemám otestované.
Těšte se na další pokračování.
pripadna diskuze je na http://diskuze.modely.biz/viewtopic.php?f=7&t=11562 a>
Omlouvam se za chybu v poipsu, kde adresy navestdel MUSI zacinat za adresami na vyhybky, teda od 32.
Je opravdu vhodne pouzivat nasobky 8.