Module N controlate prin Arduino, gara Ciprian Porumbescu

  • In perioada urmatoare o sa vi se solicite modificarea parolei. Pana la modificarea parolei, userul poate figura ca si blocat, odata modificata parola, userul este reactivat automat.
    Pentru orice problema va rog folositi butonul "Contact"

tudor_corbul

Well-Known Member
Trenulist
9 Mai 2007
498
2
Iasi
LOCATION
Iasi
Salutare!

Avand in vedere faptul ca se apropie licenta cu pasi repezi, si proiectul meu se defineste din ce in ce mai mult am decis sa il prezint si pe forum :)

Scopul proiectului este de a controla o diorama/module prin intermediul paltformei Arduino dintr-o interfata user-friendly si portabila. Astfel am recurs la o aplicatie web, care se poate accesa de oriune, de pe orice sistem de operare, printr-un browser.

Voi prezenta pentru inceput ideea, partea de soft si de hard iar mai tarziu voi reveni si cu partea de constuire a modulelor, poze cu gara Ciprian Porumbescu, etc.

De ce N? In primul rand spatiu, si la inceput a mai fost si limitare de putere a unui Arduino care nu ar fi putut controla o locomotiva la H0, intre timp rezolvandu-se aceasta problema.

De ce module? Cred ca deja este retorica intrebarea.

Si am uitat sa specifica, totul va fi in sistem analog (strict in sensul controlului de material rulant).

Logica modulelor

Mi-am propus sa impart gara in blocuri de control. Blocuri de intrare, iesire, si cate un bloc pentru fiecare linie a garii. Portiunea de macaze reprezinta o categorie mai speciala, in sensul in care aceasta portiune se va afla intr-o continua sincronizare de voltaj intre linia activa a garii de pe care va pleca/ajunge o locomotiva.
Blocurile de intrare, iesire (care momentan nu sunt prinse in imaginea de mai jos) vor fi de asemenea intr-o continuza sincronizare de curent cu modulele vecine pentru o trecere fara smucituri de pe un modul pe altul.



Fiecare bloc va fi controlat separat prin intermediul unei punti H. Aceasta poate fi alimentata pana la 37 de V si prin Arduino se controleaza practic partea logica a puntii, variind curentul ce intra in sine.

Vor fi cate 2 senzori IR pe fiecare linie din gara pentru a detecta orice material rulant, specificand astfel stare liniei: libera sau ocupata.



De asemenea vor fi si senzori la intrarea/iesirea de pe modul, plus cate un senzor asezat la o distanta optima inaintea semnalului. Acesta va avea rolul de realiza o opripre treptat a trenuletului pana in semnal, in functie de ce indica acesta.


Cam asta ar fi in mare, vazut din avion partea de control al statie dpdv hardware.
 
Partea Software

Ca si librarie de comunicare cu Arduino am folosit libraria RxTx de aici: http://rxtx.qbang.org/wiki/index.php/Main_Page
Aceasta este dedicata comunicarii portului serial cu Java, de altfel si limbajul de programare pe care este construita toata aplicatia.
Schimbul de mesaje dintre aplicatie si Arduino se face in format JSON. Avantajele JSON ar fi: este verbose(usor de citit), usor de parsat si dedicat aplicatiilor web. Sa nu mai pomenim de mutitudinea de librarii ajutatoare care se poate gasi pe internet.
De altfel, aici este libraria pt Arduino de parsare a JSON-urilor pe care am folosit-o: http://interactive-matter.eu/how-to/ajs ... n-library/

Aplicatia web este construita prin framework-ul Spring, iar pe partea de interfata se foloseste evident Javascript si JQuery.

Logica din spatele Serverului:

La pornirea serverului/aplicatiei se fac conexiunea cu Arduino si se initializeaza starea dioramei ce contine obiecte de linie, macaze si semnale.
La orice actiune de pe interfata se trimite o cerere catre server unde se face o validare: viteza excesiva, linie ocupata, etc (voi prezenta cazurile acestea mai tarziu).
Daca cererea este valida mesajul in format JSON se trimite la Arduino unde este parsat si procesat (se seteaza viteza, directia). Daca nu este valida se va returna un mesaj relevant pentru utilizator.

Logica din spatele Arduino-ului:

In bucla loop sunt 2 mari pasi:
1) Se construiesc mesaje cu starea senzorilor de pe diorama, in cazul meu senzori IR, si se trimit la server pentru update in real a interfetei.
2) Se verifica daca sunt mesaje de la server iar daca sunt le parseaza si in functie de parametrii din mesaj se fac procesarile necesare.

Structura mesajelor JSON este urmatoarea:
Cod:
{
  "type": "line",
  "line":{
    "number" : 1,
    "direction" : "forward",
    "speed" : 140
  }
},
{
  "type": "turnout",
  "turnout":{
    "number" : 1,
    "direction" : 0 //directa
  }
},
{
  "type": "signal",
  "signal":{
	"number" : 1,
    "light" : "green"
  }
},
{
  "line": 1,
  "type": "present"
}]

Si ca un mic teaser, un filmulet cu testul reusit al controlului locomotivei chiar din interfata, si un printscreen cu aceasta:



https://www.youtube.com/watch?v=7Yra01YG_Vo
 
Am mai lucrat la partea de macaze, cu parcurs si sincronizarea macazelor complementare pentru a impiedica un parcurs facut gresit ce ar duce la talonarea unui macaz.



Momentan ma ocup de partea logica a statiei: parcurs, logica de parcurs, macaze, etc.
Undeva in cursul saptamanii acesteia voi incepe si lucrul la module.
Revin cu un filmulet cand e gata partea de logica a statiei!
 
Mersi Robert!

Partea de interfata se apropie de sfarsit, mai am doar de legat restul semnalelor plus alte cateva mici validari, cum ar fi oprirea la rosu.

Intre timp va prezint un exemplu de parcurs ce ar avea loc, impreuna cu detaliile aferente:

Un tren intra pe modul dinspre capatul X al statie (stanga) iar prezenta ii este detectata, aratand actualul parcurs determinat de pozitia macazelor care il are in statie:


S-a pus semnalul pe verde, macazel de intrare s-au blocat (slidere alea gri) iar macazele dinspre capatul Y s-au blocat astfel incat orice tren ce vine din aceasta directie sa nu poata intra pe linia pe care tocmai s-a facut parcursul


Trenul a trecut de macazul 1:


Trenul a trecut de macazul 3 si intra pe linia de garare:


Trenul a ajuns trecut de macazele de intrare si a garat, semnalul de intrare punandu-se pe rosu iar toate macazele blocate astfel incat niciun tren sa nu poata intra pe linia ocupata:


Un alt tren intra dinspre captaul Y, avand ca posibilitati de garare doar linia 2 sau 4:



Din nou se pune semnalul pe verde blocandu-se parcursul pana la gararea trenului:


Interfata momentan este strict pentru asigurarea si testarea functionalitatilor, urmand a fi refacuta cu elemente mai autohtone de pe luminoschemele noastre.
Revin curand si cu lucrul la module :)