Kabinski krmilnik PiThrottle

Vse okoli izdelovanja maket in elementov na njej.
Odgovori
Uporabniški avatar
grizeldi
Strojevodja I
Strojevodja I
Prispevkov: 305
Pridružen: 30.01.2013, 13:20
Kraj: Ljubljana

Kabinski krmilnik PiThrottle

Odgovor Napisal/-a grizeldi »

Že pred nekaj časa sem dobil idejo da bi si naredil kabinski krmilnik. Kaj je to? Model prave kabine vlaka, ki se uporablja za nadzor modelne železnice. Ker je bila moja softwerska knjižnica za komunikacijo s centralo z21 končana ravno okoli tistega časa, pa še profesor za informatiko je zahteval projektno nalogo, sem se odločil združiti prijetno s koristnim in narediti kabinski krmilnik. Zadeva je sicer v moji glavi nastajala že precej prej, ampak takrat sem se pa odločil za končen dizajn.

Tega so se lotili tudi že nekateri proizvajalci modelne železnice, ampak sem se odločil da zadevo naredim sam.
Tomixova verzija:
Slika
(vzeto z https://raicho.home.xs4all.nl/model/control/tmx5512.jpg)
Moja "končna" verzija:
Slika

Izbor komponent je bil nekako tak:
- za glavno krmilno enoto sem vzel Raspberry Pi B+, ker je sposoben priklopa senzorjev in uporabe programskega jezika Java; in ker je bil pač ravno doma 8)
- za display, grafični vmesnik in merilce hitrosti neka random Android tablica, ki je pač bila doma
- za komunikacijo Maline z ostalo mrežno opremo wifi ključek Wi-Pi
- za priklop senzorjev na Malino doma narejeno breakout vezje
- doma narejeno ohišje
- razna stikala, tipke in potenciometri kot senzorji

Potek sem razdelil na več faz ki so na nekaterih delih potekale paralelno:
1. nabava elektronike
2. izdelava in testiranje vezij
3. ugotavljanje mer
4. izdelava ohišja
5. vgradnja in priklop senzorjev
6. programiranje
7. razno

Posamezne faze bodo predstavljene v prihodnjih dneh oziroma ko bom imel čas. Krmilnik trenutno stoji v moji omari, delujoč ampak z manjkajočim softwarom za display manjka tudi faza razno in čaka na čas in voljo da ga dokončam.
matejmm
Strojevodja I
Strojevodja I
Prispevkov: 448
Pridružen: 08.12.2012, 0:32
Kraj: Ljubljana

Re: Kabinski krmilnik PiThrottle

Odgovor Napisal/-a matejmm »

Zanimiv projekt. Se že veselim kakšnega bolj podrobnega pogleda v "črevesje" te zadeve.
Kaj si uporabil na drugem koncu tistih ročic?

Off topic: Ohišje me je spomnilo na en moj srednješolski elektro projekt, ko sem vezja zapakiral v podobno leseno škatlo. Mentor je nato komentiral, da zadeva izgleda kot čebelnjak :D
NacMan
Pom. strojevodje
Pom. strojevodje
Prispevkov: 58
Pridružen: 23.02.2016, 13:39

Re: Kabinski krmilnik PiThrottle

Odgovor Napisal/-a NacMan »

Veliko ljudi ki si izdela razne letalske simulatorje uporablje tole: https://www.poscope.com/products/pokeys-devices/
http://blog.poscope.com/pokeys-as-fligh ... interface/
Uporabniški avatar
grizeldi
Strojevodja I
Strojevodja I
Prispevkov: 305
Pridružen: 30.01.2013, 13:20
Kraj: Ljubljana

Re: Kabinski krmilnik PiThrottle

Odgovor Napisal/-a grizeldi »

NacMan napisal/-a:Veliko ljudi ki si izdela razne letalske simulatorje uporablje tole: https://www.poscope.com/products/pokeys-devices/
http://blog.poscope.com/pokeys-as-fligh ... interface/
Ali pa Arduino. V mojem primeru je bilo potrebno da stvarca zna laufat Javo.
Uporabniški avatar
grizeldi
Strojevodja I
Strojevodja I
Prispevkov: 305
Pridružen: 30.01.2013, 13:20
Kraj: Ljubljana

Re: Kabinski krmilnik PiThrottle

Odgovor Napisal/-a grizeldi »

Elektronika 1.: Splošno in Breakout vezje
Najprej je bilo treba ugotoviti kako bom zaznaval premike ročic in pritiske na gumbe. Raspberry Pi se je spet izkazal za idealnega, saj ima 40 GPIO pinov, ki se jih lahko uporablja za komunikacijo z drugo elektroniko.
Za same ročice sem izbral običajne rotacijske potenciometre, bolj konkretno 1 kOhmske. Nekaj sem razmišljal, da bi na njih dodal zobnike za povečanje obrata potenciometra v primerjavi z obratom ročice, ampak sem se kasneje odločil, da bi bila to nepotrebna komplikacija. Tipke in stikala sem pač vzel, kar so imeli v trgovini z elektroniko. Zamislil sem si 4 potenciometre (vlečna sila, avtopilot, zavore in "reverser" - kako se temu reče po slovensko?), 4 stikala za vklapljanje luči in drugih funkcij, eno stikalo za ključavnico (ker je nujno treba zaklepat modelno železnico :mrgreen:) in dve tipki (troblja in SIFA).

Takoj se je pojavil en problem: Raspberry Pi nima analognih vhodov, ki so potrebni za potenciometre. Za rešitev tega sem našel na internetu neko stran o uporabi čipa MCP3008, ki je pretvornik analognega v digitalni signal, v točno ta namen. Podpira priklop 8 senzorjev, česar v bistvu nisem rabil. Šele kasneje sem ugotovil, da obstaja tudi MCP3004, ki je isti, samo da ima 4 vhode... #-o
Ker je bilo treba ta čip nekam priklopit, sem se odločil, da naredim kar celo vezje, ki bo namenjeno da lahko nanj piklopim samo PATA kabel iz Maline, vanj pa všraufam kable iz senzorjev v "screw terminale", khm, vrstne sponke. Na to vezje sem spravil pine za priklop PATA kabla, en kup vrstnih sponk, MCP3008 in cel kup pull-up uporov. Žal sem šele kasneje izvedel, da ima Malina svoje notranje pull-up in pull-down upore, in sem po nepotrebnem porabil cel kup uporov... Zadeva je v načrtu izgledala nekako tako:
Slika
Izkazalo se je, da so moje vrstne sponke enkrat večje in je bilo potem tudi vezje precej večje... Tista vrstna sponka na sredini je bila mišljena za LEDico za sporočanje stanja z utripanjem, ampak sem na to kasneje nekako pozabil.

Dejanska izdelava vezja je potekala na perfboardu, ker doma nimam dovoljenja za jedkanje. Trajalo je kar nekaj časa, ker nisem ravno profesionalec s spajkalnikom, vendar pa je uspelo zelo lepo in tudi prvi testi z Malino so bili pozitivni.
Žal slik dejanskega vezja nimam, ker takrat to še ni bila projektna naloga za šolo :oops:
Nisem pa prepričan, da bi res kazal svoje prvo resno vezje...

:arrow: :arrow:
Uporabniški avatar
grizeldi
Strojevodja I
Strojevodja I
Prispevkov: 305
Pridružen: 30.01.2013, 13:20
Kraj: Ljubljana

Re: Kabinski krmilnik PiThrottle

Odgovor Napisal/-a grizeldi »

:arrow: :arrow:
Elektronika 2.: Ojačevalec zvoka
Ker sem si zamislil, da naj bi bila moja "kišta" sposobna predvajati tudi zvoke iz prave kabine ("tempomat!", "vlakovna varnostna naprava!", "zavora v sili" ipd.), je bilo treba vgradit nek zvočnik. Si rečem, hja ni problem, saj ima Malina izhod za slušalke. Ampak ni bilo tako enostavno. Izhod za slušalke res je, ampak je pač glasnost primerna za, zaaa... slušalke. Torej je bilo treba narediti ojačevalec.
Zadevo sem si spet najprej sestavil v Fritzingu:
Slika

Spet je prišel v igro en čip, tokrat LM386, ki je točno to kar potrebujem: ojačevalec signala. Treba je bilo tudi secirat ene prastare slušalke, da sem dobil kabel z audio jackom in pa dokupit nekaj kondenzatorjev. V končni fazi sem med zvočnik in GND dodal še stikalo s katerim lahko zvok izklopim ali vklopim. Potenciometer na levi je namenjen regulaciji glasnosti. Napajanje za dejansko ojačanje sem dobil kar iz USB vtiča na Malini. Zvočnik sem pa uplenil kar iz enega starega hišnega zvonca. Neverjetno kaj vse zmore en tako simpel zvočnik kot je tale, testno je predvajal tudi Mozarta :P

Vse je bilo seveda najprej stestirano na protoboardu:
Slika
Slika

Na tem vezju sem tudi prvič spajkal SMD konektorje (na miniUSB priključku) in moram reči da mi je kar dobro uspelo saj zadeva deluje kot mora.
Naslenja stvar je bila, da najdem primerne zvoke, pri čemer pa sem dobil pomoč prav tu na forumu. Še vedno nisem našel zvoka za tempomat, ampak kaj bož z zvokom, če ti pa še tempomat ne dela... :mrgreen:
Uporabniški avatar
grizeldi
Strojevodja I
Strojevodja I
Prispevkov: 305
Pridružen: 30.01.2013, 13:20
Kraj: Ljubljana

Re: Kabinski krmilnik PiThrottle

Odgovor Napisal/-a grizeldi »

Izdelava ohišja
Za ohišje sem se odločil, da bo uporabil les, saj je to material s katerim imam največ (kar je še vedno bolj malo) izkušenj. Izbral sem 8mm vezano ploščo, ki so mi jo nekaj nažagali na mere že v Slovenijalesu, nekaj pa je bilo nažagane kasneje.
Ko sem prinesel plošče domov, sem najprej za boljšo predstavo zadevo "sestavil" v približno obliko kot naj bi bila na koncu:
Slika
Na tej sliki se sicer ne vidi najbolje sama velikost bodočega krmilnika, ampak daljša stranica je dolga 60cm.

Zatem je sledila sama izdelava. Potekala je s pomočjo in orodjem mojega dedka, ker je bil to moj prvi večji projekt z lesom. Za rezanje dalših ravnih rezov je bila uporabljena cirkularka, za ostalo pa je bila planirana tračna žaga, ki pa je žal sredi dela izdihnila in morala oditi na servis. Zato je bil preostanek dela opravljen z vibracijsko žago ("štihžago"), pri čemer pa rezi niso bili nujno najbolj ravni. Največji izziv je bil izdelava nagnjenih robov delov ob tablici, saj je bilo treba natančno izračunati kot, da sta se ujemala z podlago. Sledilo je sestavljanje, spoje sva izvedla z količki v kotih in vijaki, kjer pa to ni bilo mogoče oz. je možnost razstavljanja nepomembna pa je prišlo v poštev mekol lepilo.
Nekaj slik polizdelka:
Slika
Slika
Slika

Na drugi sliki se lepo vidi, da zadnja plošča ni iz enega kosa. V bistvu je sestavljena iz treh kosov, eden je viden na sliki, dva pa se odpirata kot dvokrilna omara. Del volumna krmilnika ima namen omare za vlakce. Ta ideja se je porodila, ker ima sam krmilnik tako velik volumen, ki pa večinoma ni izkoriščen. Zato sem vso elektroniko splaniral v spredji del, zadnji del pa je dobil namembnost omare.
Na slikah so tudi že vidne luknje za stikala in tipke. S samo montažo le-teh sem pa imel nekaj problemov, saj je 8mm plošča predebela za navoj, ki je prisoten na stikalih. Zato je bilo treba na mestih, kjer so zdaj stikala, ploščo lokalno stanjšati. Ker ni bilo na razpolago ničesar boljšega, je bilo to izvedeno z vrtalnikom in svedrom z enakim premerom kot luknja, s katerim sem večkrat zavrtal v ploščo do polovice okoli obstoječe luknje.
Uporabniški avatar
grizeldi
Strojevodja I
Strojevodja I
Prispevkov: 305
Pridružen: 30.01.2013, 13:20
Kraj: Ljubljana

Re: Kabinski krmilnik PiThrottle

Odgovor Napisal/-a grizeldi »

Ta tema je perfekten primer kako nikoli ničesar ne dokončam. *vzdih*

Torej, potreben software je bil večinoma spisan že ob moji zadnji objavi v tej temi, vendar je bil daleč od vse želene funkcionalnosti. In ko sem pred približno pol leta podrl teppichbahn na pisalni mizi, je vse v zvezi z modelno železnico romalo v škatlo.
Med poletnimi počitnicami pa imam preveč časa, zato sem spet postavil teppichbahn in nadaljeval s softwarom za piThrottle. Tako je v zadnjih dneh dobil sposobnost vožnje vzvratno (zaenkrat s kopico bugov) in začetke android displaya. Imam pa dve vprašanje za kateri bi bil vesel če bi mi lahko kdo pomagal.

1. Fizika
Imam težave pri računanju pospeška lokomotive. Zadeva deluje, vendar so pospeški precej premajhni. Trenutno formula za izračun izgleda nekako tako: pospešek = (vlečna sila - zavorna sila - trenje) / masa, pri čemer vlečno in zavorno silo računam glede na položaj ročic linearno glede na maksimalno vlečno/zavorno silo lokomotive (ki sem jo našel na internetu, za es64u4 v tem primeru). Pospeški se mi zdijo premajhni, zaviranje pa lahko traja celo pol mojega krogca na mizi. Sem spregledal kakšno silo? Je cel pristop preveč poenostavljen?

2. Glavni display na Živi
Govorim o displayu, na katerem se kažejo hitrost, vlečna sila in kup drugih stvari v kvadratkih. Ta display poskušam vsaj približno simulirati na android tablici. Kaj natančno vse je prikazano v teh kvadratkih?

Detajlen post o softwaru pride ko bo le-ta končan. Že vnaprej hvala za pomoč.
strimini
Vajenec
Vajenec
Prispevkov: 25
Pridružen: 05.09.2016, 18:02

Re: Kabinski krmilnik PiThrottle

Odgovor Napisal/-a strimini »

Čist hudo, zaključi tale lepi projekt !
Gorchi
Kontrolni
Kontrolni
Prispevkov: 6518
Pridružen: 23.10.2006, 12:25
Kraj: Cerklje na Gorenjskem

Re: Kabinski krmilnik PiThrottle

Odgovor Napisal/-a Gorchi »

Grizeldi, daj napiši zasebno sporočilo @cokla ali @Igor72, bi znala najbolje vedet...
Goran
Uporabniški avatar
grizeldi
Strojevodja I
Strojevodja I
Prispevkov: 305
Pridružen: 30.01.2013, 13:20
Kraj: Ljubljana

Re: Kabinski krmilnik PiThrottle

Odgovor Napisal/-a grizeldi »

Kaj je zdaj to? Suša na forumu? A noben nič ne dela na železniških zadevah :?: :P Da malo prekinem sušo:

Software 1.:
Tole bo precej programersko. You have been warned.
Srce mojega krmilnika je kartični računalnik Raspberry Pi, model B+.
Slika
Zanj sem se odločil (namesto Arduina), ker lahko poganja programe spisane v meni domačemu programskemu jeziku Java ter zaradi že vgrajenega avdio izhoda. Že vsaj eno leto prej sem se zezal s pisanjem knjižnice za komunikacijo z z21 v Javi, tako da osnovo sem imel. Treba je bilo spisati kodo ki bere s senzorjev in to nekako preračuna v hitrost lokomotive in dodatne funkcije.
Začel sem s fiziko. Katere sile delujejo na lokomotivo, katere podatke potrebujemo da lahko izračunamo pospešek itd. Pri tem sem se očitno nekoliko uštel, saj se pospeški še vedno zdijo premajhni, sploh pri zaviranju. Programu pred zagonom podamo podatke o lokomotivi (masa, maksimalna vlečna sila, maksimalna zavorna sila ter DCC naslov) v obliki XML datoteke. V tej XML datoteki je tudi zapisano katera funkcija lokomotive je hupa, katera vklop lokomotive in katere funkcije naj se vklaplja s stikali. V končni verziji se lahko pravo XML datoteko izbere med rapoložljivimi kar na tablici.
Sledila je koda za branje s senzorjev. To ne bi bila prevelkia umetnost, če ne bi na pol poti ugotovil, da imam napačno zdizajnirano elektroniko in so vrednosti vseh stikal obrnjene (vklopljeno stikalo -> 0, izklopljeno stikalo -> 1). Prav tako je bilo treba spisati kodo za sporazumevanje z ADC čipom. Vsaj to sem lahko prekopiral z interneta :lol:.
Zatem sem se spravil pisat kodo, ki dejansko računa hitrost lokomotive, ter kodo ki vklaplja funkcije glede na pozicije stikal. Predpostavil sem da sta vlečna in zavorna sila linearne glede na pozicijo ročice. Vem da v realnosti niti približno ni tako in če ima kdo kakšne boljše ideje kako naj to izvedem se priporočam. Program vsake 0.1 sekunde preveri situacijo ročic in izračuna pospešek iz sil. Upošteva vlečno in zavorno silo ter silo vrtilnega upora? (kako se temu reče?) koles, ki pa je trenutno narobe izračunana. Ko pozna rezultanto, pa v akcijo pride dobri stari F = m * a.

V tej fazi je bil krmilnik že približno uporaben in kot takega sem ga oddal kot šolsko projektno nalogo, ker je zmanjkalo časa. Nato se je moje zanimanje za modelno železnico ohladilo in zadeva je nedokončana čakala v omari. Do letos poleti.

:arrow: :arrow: jutri
Uporabniški avatar
grizeldi
Strojevodja I
Strojevodja I
Prispevkov: 305
Pridružen: 30.01.2013, 13:20
Kraj: Ljubljana

Re: Kabinski krmilnik PiThrottle

Odgovor Napisal/-a grizeldi »

:arrow: :arrow:
Software 2.:
Letos poleti je tale malo manjša škatla spet priromala iz omare. Treba je bilo spisati še budnik, tempomat in vse v zvezi s android tablico.
Slika
Najprej sem se lotil android aplikacije. Android aplikacije sem pisal že prej in vse skupaj ne bi smelo biti nič pretirano težavnega. FIGO! Android je po mojem mnenju eden najbolj po nepotrebnem zakompliciranih sistemov za katere sem do zdaj programiral. Dokler uporabljaš vgrajene vizualne komponente še gre, ampak tu sem potreboval brzinometer. Na Githubu sem sicer našel neko knjižnico z brzinometri, a žal noben brzinometer iz njenega nabora ni podpiral nečesa v stilu rdečega kvadratka za tempomat. Tako je šla večina časa razvoja aplikacije za izdelavo izgleda brzinometra. Koda za komunikacijo z malino pa ni bila tako težka. Ko se aplikacija zažene, malina pošlje tablici vse možne XML datoteke, da lahko uporabnik izbere eno. Nato komunikacija poteka s tekstovnimi ukazi v stilu speed 42 za hitrost/silo in lights true za on/off funkcije.
Slika
Kar nekaj časa sem se ukvarjal s tem, katere indikatorske lučke so na pravi lokomotivi in katere imajo smisel za modelno železnico. V končni fazi so tam pristale lučke za vklop motorja, funkcije vseh štirih stikal, tempomat, budnik in zasilna zavora.

Budnik mi je tudi povzročal več težav kot je bilo sprva zamišljeno. Vse je delalo nekaj napol, dokler nisem vse kode vrgel ven in začel znova. V končni fazi se budnik aktivira s pritiskom na SIFA lučko na tablici nato pa potrjuje vsake pol minute. Podpira svetlobni znak (lučko) ter zvočni - za kar je na strani zvočnik. Prav tako podpira za zvočna signala aktiviranje funkcij na lokomotivi (eden od zvokov mojega taurusa je budnik). Če uporabnik ne uspe potrditi budnika se aktivira zasilno zaviranje po katerem je treba ročko za vleko prestaviti v položaj 0 za deaktivacijo zavore.

Tempomat bi bil še najlažja zadeva... če ga ne bi zavestno zakomplicral :D Namesto enostavnega če prepočasen, pospeši ipd. sem se odločil za uporabo PID algoritma. To je en od algoritmov za katere moraš v neskončnost preizkušati vrednosti konstant preden delujejo pravilno. Nekako polovica matematike za tem algoritmom je nad mojim srednješolskim nivojem, vendar pa sem podobno stvar nekoč že spisal za robota sledilca črti. Tempomat se aktivira s premikom ročke iz položaja 0 ob čemer se sproži tudi zvočni signal (hvala vsem ki ste prispevali zvoke!). Edini vir za delovanje tempomata je bil train simulator (konkretno z DB 101), tako da močno dvomim da vse funkcionira tako kot v realnosti.

:arrow: :arrow:
Uporabniški avatar
grizeldi
Strojevodja I
Strojevodja I
Prispevkov: 305
Pridružen: 30.01.2013, 13:20
Kraj: Ljubljana

Re: Kabinski krmilnik PiThrottle

Odgovor Napisal/-a grizeldi »

:arrow: :arrow:
Tako, to bi bilo kar se tiče tekstovnega poročila vse. Pač pa sem naredil še video iz katerega se vidi skoraj vsa funkcionalnost.

Povezava na video

Upam da je bilo moje poročilo dovolj razumljivo. Če koga še kaj zanima, pa kar na dan z vprašanji ;)
Odgovori