Programska koda V1.0
Tokrat nekaj informacij o prvi verziji programa in uporabniškega vmesnika za nadzor kretnic.
Kot sem že omenil sem si zamislil, da bi lahko kretnice krmilil preko brskalnika na tablici, pametnem telefonu ali računalniku, ki ima dostop do istega omrežja kot Arduino v modulu. Za ethernet komunikacijo sem na Arduino Mega namestil Ethernet shield, ki ima tudi možnost uporabe micro SD kartice. Na SD kartici je zapisana HTML koda, ki jo brskalniku posreduje Arduinu.
Pri dosedanjem igranju z Arduinom v kombinaciji z Ethernet Shieldom (ne v modelarskih aplikacijah) sem že večkrat uporabil komunikacijo med brskalnikom in Arduinom kot spletnim strežnikom. Kot osnovo sem uporabil klasični primer
kode za spletni strežnik iz Arduinovega nabora knjižnic.
Za potrebe krmiljenja kretnic sem osnovo nadgradil v toliko, da sem HTML kodo shranil na SD kartico, poleg tega sem na strani brskalnika uporabil JavaScript in Ajax tehnologijo, ki mi je omogočila stalno komunikacijo med Arduinom in brskalnikom. To sem potreboval, saj lahko do določenih dogodkov pride na strani Arduina in sem želel, da je o tem obveščen tudi uporabnik preko brskalnika. Tak primer bi bil npr. sporočanja zasedenosti tirov ali stanje kretnic, če je na krmilnik hkrati priključenih več brskalnikov. Po nekaj "Googlanja" sem našel
podoben primer, ki sem ga prilagodil svojim potrebam.
Ne vem koliko bo moja programska koda zanimiva, a bom vseeno poskusil opisati glavne značilnosti
Inicializacija
V prvem delu Arduino kode so določene vse spremenljivke in vhodno izhodni signali. Kot zadnji element inicializacije se v shift register 74HC595N zapiše osnovna vrednost pri kateri so vse kretnice v mirovanju. Ko je ta del inicializacije zaključen se pošlje signal napajalnemu vezju, da lahko preko releja vključi napajanje za premik kretnic. S tem so preprečeni nekontrolirani premiki kretnic med inicializacijsko sekvenco.
Glavna zanka
V glavni zanki Arduino preverja ali je preko Ethernet shielda dobil kakšno zahtevo. Pričakovani sta dve možni zahtevi.
- zahteva po sami spletni HTML strani ob prvemu nalaganju strani - v tem primeru se iz SD kartice prebere zapisana HTML datoteka, ki se posreduje brskalniku
- zahteva po stanju in / ali premiku kretnic - v tem primeru se brskalniku v formatu XML pošlje trenutno stanje kretnic, če pa je iz strani brskalnika prišla še zahteva po premiku kretnic, se ta tudi dejansko izvrši
Stanje kretnic
Osnova za stanje kretnic so spremenljivke v Arduinu. Na ta način Arduino ve ali je premik sploh potreben, poleg tega ga ne more zmesti situacija v kateri bi iz dveh brskalnikov dobil ukaz za premik iste kretnice. Na podlagi spremenljivk se pripravi XML koda, ki se posreduje brskalniku, da lahko ta v uporabniškem vmesniku pravilno prikaže stanje kretnic.
Premik kretnic
Program najprej ugotovi ali je premik sploh potreben in v primeru, da je, premik tudi izvede. Pri servo kretnicah s pomočjo pisanja v shift register najprej aktivira pravo kretnico, nato pošlje servo signal za premik. Za vsako servo kretnico sta v programu na podlagi kalibracije določeni tudi obe skrajni legi. Ko je premik končan, servo kretnico ponovno izkopi. Pri elektro magnetnih kretnicah za kratek čas spusti tok skozi ustrezno tuljavo. Trenutno je aplikacija napisana tako, da se lahko hkrati premika le ena kretnica.
HTML koda
Arduino brskalniku iz SD kartice posreduje HTML kodo z JavaScriptom. Koda od Arduina vsakih 800ms (stvar nastavitev) zahteva stanje kretnic. V primeru, da je pritisnjen kakšen gumb, tej zahtevi doda še zahtevo po premiku kretnice. Stanje kretnic se prikazuje s tekstovnimi znaki na samih gumbih "/" ali "\" vožnja v odklon oz. "--" vožnja naravnost. Dodani so tudi gumbi, ki omogočajo premik kretnic v verigi do določenega tira. Gumb "Tir 2" tako nastavi v ustrezen položaj kretnice K1, K4, K5 in K3. Gumbi so na uporabniškem vmesniku razporejeni približno tako, kot kretnice na samem modulu.
Čeprav je programska koda relativno preprosta in bi jo lahko precej optimiziral, je delovala solidno in nisem imel kakšnih večjih težav. Uporabniški vmesnik je enostaven in kliče po nadgradnji, a za potrditev koncepta dobro služi. Po nekaj začetnih težavah v fazi razvoja je bilo prav lepo opazovati premike kretnic, ki jih je z lahkoto nadzoroval tudi "mlajši strojevodja".
Če koga bolj podrobno zanima lahko objavim tudi Arduino in HTML kodo.