arpi2390

Navigație RTI cu Android (Platforma Odroid) controlat cu Arduino

9 posts in this topic

Bună tuturor!

De un timp nu am mai fost prea activ pe aici așa că deja era cazul să fac și eu ceva în folosul comunității pe forum.

În ultimele luni am umblat foarte  mult cu mașina pe drumuri lungi, în majoritatea cazurilor pe întuneric. Ca navigație am folosit un GPS care se montează pe parbriz și telefonul pentru Waze dar de un timp în țară am folosit doar Waze pe telefon. Problema este că mă deranjează un pic că trebuie să "renunț" la telefon să am navigație (telefonul este conectat prin bluetooth la HU deci nu este o problemă majoră, pot face convorbiri și când rulează Waze-ul) și nu prea îmi place să țin telefonul pe soare de aceea am montat un suport pe HU și acolo țin telefonul doar că acolo nu este chiar în fața mea. Alt minus cu telefonul, diagonala mai mică.

 

Soluția mea: Ecran RTI original de fabrică pe care "rulează" Android. Mai ușor zis decăt făcut...

O mică avertizare în prealabil...nu prea am experiență nici în domeniul de electronică și nici prea multă experiență în programare hardware (căteva proiecte cu controlere PIC, aprindere LED-uri și chesti de genu).

 

Primul pas a fost să-mi iau un ecran original RTI cu tot cu mecanizmul de urcare/coborăre. Am luat de la colegul @MarianBr ecranul, încă o dată țin să îi mulțumesc pentru piesă, preț și seriozitate. Îl recomand dacă aveți nevoie de orice.

Pași următori au fost studierea problemelor și soluționarea lor. Prima problemă, ecranul. Display-ul de la Volvo...este un pic mai complicat...decăt monitoarele cu care sunt obișnuit. După căteva nopți căutând pe internet am înțeles cu ce și cum o pot porni. A doua problemă, îmi trebuia un device care rulează Android cât de cât bine, și aici am găsit o soluție vă detaliez mai jos.

 

Așa am ajuns la această configurație:

vIMG_9503_2400.thumb.jpg.e8cc761149c0b7a

După cum se vede sunt trei componente, ecranul RTI original Volvo, un Arduino Mega (pe imaginea asta, dar deja am schimbat-o cu un Nano care este mult mai mic) și un Odroid (un fel de Raspberry Pi dar care rulează foarte bine Android).

 

Un pic mai în detaliu:

RTI-ul este în primul rând conectat la 12V, masă (acum masa alimentator 12V) și 12V ACC (după cum am înțeles, nu am studiat încă, ACC-ul de 12V există doar când motorul este pornit. Poate mă lămuriți mai repede). Toate acestea vin la conectorul din dreapta, cel albastru a RTI-ului.

În al doilea rând RTI-ul este conectat la un Arduino (o platformă electronică open-source, un controler electronic). Arduinoul se connectează la doi pini prin conectorul din stânga a RTI-ului, cel verde. PIN-ul 7 se conectează la masa Arduino-lui (pin 7 este masa și pe RTI), pe Arduino se vede ușor care sunt conectorii de masă, este trecut GND. Iar PIN-ul 4 de pe RTI se conectează la PIN-ul TX0 pe Arduino, Acesta este firul de comunicație între Arduino și RTI (serial communication), este o comunicație unidirecțională. Arduino-ul trimite comenzi către RTI. PIN-ul TX0 nu este musai în cazul plăci Mega, findcă are mai mulți pini TX (Transmit) dar la Arduino Nano este doar un pin TX0.

În al treilea rând (este ultima) RTI-ul este conectat la placa Odroid, dar numai pentru transmiterea imaginii din Odroid la RTI. Odroidul are un CVBS out, adică o ieșire video composit care se conectează la PIN-ul 10 tot din conectorul din stânga de la RTI (cel verde). Iar Odroidul are nevoie de o masă care acum este legat la Arduino dar poate fi conectat la orice masă (nu de lemn).

În imaginea de jos puteți să vedeț mai clar ce am încercat să explic:

vIMG_9519_exp_2400.thumb.jpg.1d5e1267f51

Odroidul transmite semnal video NTSC iar RTI-ul este setat tot pe NTSC.

Partea un pic mai complicată este programarea plăci Arduino dar dacă cineva dintre voi a mai scris câteva rânduri de C, C++, Pascal sau poate chiar PHP poată să programeze controlerul. Idea este că RTI-ul trebuie să primească în continu comanda de a rămâne "alive" adică aprins. Comanda de "alive" nu este altceva decât transmiterea modului de afișare a imaginii care poate fi RGB, NTSC sau PAL. Arduino-ul în cazul meu transmite în continu (cu un delay de 100 ms) comanda de NTSC (cod HEX: 0x4C), după aceasta trebuie trimis luminozitatea (are 16 valori) și încă nu am aflat de ce dar împreună cu fiecare comandă trimisă RTI-ul trebuie să primească comanda HEX de 0x83. Probabil este un fel de end of line character, adică sfărșit de comandă. 

Exemplu pentru comandă trimisă către RTI pentru a se aprinde, luminozitate maximă și modul de afișare să fie NTSC: 0x4C 0x2F 0x83 (explicație: NTSC | BRIGHTNESS | END OF LINE) - și acesta trebuie trimis în continu câtre RTI. Pentru închiderea ecranului trebuie trimis comanda 0x46 0x2F 0x83 (luminozitatea în acest caz nu contează).

 

Dacă cineva vrea să încerce sau are întrebări voi încerca să răspund.

Un video cu totul conectat și cum funcționează:

 

În videoul de mai sus am avut o mică problemă cu RTI-ul, după ce l-am desfăcut de n-șpe ori am uitat să conectez un conector...cel care se ocupa de oprirea motorului electric la sfârșitul cursei, am rezolvat problema cu reconectarea conectorului.

Ecranul nu este chiar strălucitor dar pentru acum este ok, niște imagini:

vIMG_9528_29_2400.thumb.jpg.409157ae35aa

 

Probleme rămase:

Cea mai mare problemă, tebuie să găsesc un mod de safe shutdown pentru Odroid, dacă o închid prin tăierea alimentației am toate șansele să corup OS-ul din când în când.

Găsirea toate firelor pe mașină și instalarea.

Un mod de controlare a Odroidului, deocamdată folosesc un mouse. Deocamdată voi încerca să fac două lucruri: 1. Am un touchscreen de 6.2 fără controller și driver, o să folosesc un Arduino nano să fac un controler/driver mouse pentru acest touchscreen și o voi pune peste ecranul RTI-ului (nu se va vedea că este acolo). 2. Un touchpad instalat în spatele schimbătorului de viteză în locașul unde este suportul de pahare. Acolo dacă vreau închid capacul și nu se va vedea.

Și mai sunt alte mici probleme.

Aaaah și vreau să schimb ecranul...poate cu ceva mai mare (unul de 7" dar atunci trebuie să modific carcasa). Am deja un ecran de 7"...la care am reușit să prăjesc controlerul timițând 12V pe masa controlerului...am reușit să o pornesc schimbând câte ceva și niște bypass-uri dar se încălzește în căteva secunde dar cum am aproape 0 cunoștințe în domeniu va fi cale lungă să o repar.

 

Sper că nu v-am plictisit cu postul meu un pic mai lung. :) 

Edited by arpi2390
6 people like this

Share this post


Link to post
Share on other sites

Am mai făcut un pic de progres azi (ieri am început să pun totul la un loc și să încep proiectul), acum pot controla totul cu 2 butoane, adică un buton pentru ridicare/coborăre și un buton pentru luminozitate. Aici deja am folosit Arduino Nano care se vede un pic în fața laptop-ului cu cablul USB albastru.

Progresul de azi:

 

Nu prea am văzut pe forum astfel de proiecte de aceea am vrut să detaliez cât mai bine ce am făcut, sper să fie de folos cuiva. Dar dacă credeți că este prea mult electronică și programare în post și prea puțin de Volvo atunci mă mai abțin cu detaliile. :D 

Mai vreau să fac un simplu AUX IN pentru HU-uri (cred că va merge pe orice HU de pe platforma P2) tot cu Arduino Nano pe care să o dezvolt pe parcurs să fie un fel de Yatour/Grom.

4 people like this

Share this post


Link to post
Share on other sites

Felicitări . 

Oricum exista IMIV care face acelasi lucru ba chiar are si audio in . 

Totusi vorbim despre un RTI si tehnologie veche de 14 ani . Nu puteai si tu sa apari acum 6 ani când am dat 300usd pe un IMIV? :D

Cum ai reusit sa ridici ecranul ?

Stiu ca se poate face cu un PIC . 

Share this post


Link to post
Share on other sites

Știu de iMIV dar am preferat să fac eu ceva din simplu motiv că vreau să schimb ecranul original cu ceva care are o rezoluție mai mare și atunci nu prea o să mai am nevoie de interfața video a iMIV-ului sau ceea ce am făcut eu mai sus. Va fi un ecran plug&play cu intrare HDMI care va fi conectat la Odroid, doar că încă nu am ajuns acolo.

Tot ce va rămâne din ce am făcut până acum este coborărea/ridicarea, controlat de Arduino.

Am explicat mai sus, RTI-ul are un pin pentru comunicare de tip "serial communication" unde așteaptă 3 valori, una este modul de afișare video (NTSC, PAL, RGB), al doilea valoare este luminozitatea, iar ultima cred că este un fel de end of line, adică RTI-ul înțelege că poate executa comanda anterioară dar nu am găsit nimic pe net care să confirme acest lucru. Cele trei valori trebuie trimise în continu, altfel ecranul se stinge și coboară la loc.

Am dat și un exemplu mai sus: 0x4C 0x2F 0x83 (NTSC | luminozitate maximă | end of line)

De restul se ocupă RTI-ul, când primește comanda ridică ecranul. Se poate și cu PIC controller dar este mult mult mai ușor să programezi un Arduino, are limbajul de programare foarte aproape de C/C++. Arduino-ul în acest caz se comportă exact ca un PIC doar că mie-mi era mult mai ușor să o programez.

Dacă cineva are nevoie de codul de sursă sau orice altă explicație să-mi ziceți.

Edited by arpi2390
2 people like this

Share this post


Link to post
Share on other sites

Legat de audio in, teoretic este la fel de "ușor" de făcut și programat ca ceea ce am făcut până acum pentru RTI. HU-ul când pornește așteaptă un semnal de la toate perifericele legate de el și dacă te ai conectat în acest ciclu HU-ul îți permite să transmiți audio prin LEFT/RIGHT pe mufa care intră în spatele HU-ului.

Problema deocamdată este că nu am doar un HU care este pe mașină. Dar dacă are cineva un HU603/HU803 (prefer HU803) de vânzare la un preț foarte bun...ca să experimentez...

@Bogdan G Legat de câți ani are mașina, teoretic acest lucru merge și pe S60-uri din 2009 (acolo sunt numai 8 ani :D ) care sunt pe platforma P2 (sau orice ce este pe platforma P2) și din ce am studiat pe net are trebui să meargă și la V50/S40 care are navigația cu mecanismul de rabatare, aici nu știu la care și cum.

1 person likes this

Share this post


Link to post
Share on other sites

Felicitari pentru initiativa si tutorial!

Edited by Brava

Share this post


Link to post
Share on other sites

Mersi.

Postez și codul sursă pentru Arduino dacă cineva vrea să încerce:

volvo_rti_arduino_controller.txt

Cu codul de sus dacă totul este conectat RTI-ul o să se pornească, dacă schimbați partea int current_display_mode = RTI_NTSC; cu int current_display_mode = RTI_OFF; și trimiteți codul din nou pe Arduino RTI-ul o să se oprească și ecranul va retrage. Dar tot trebuie să rescrieți codul în Arduino, este doar un cod de a testa totul (cel care am folosit în primul video).

Aici aveți o variantă cu două butoane conectate la Arduino pe PIN 5 (ON/OFF) respectiv PIN 6 (BRIGHTNESS) care merge și stand alone (de sine stătător):

volvo_rti_arduino_controller_push_button.txt - este codul pe care am folosit în al doilea video

Nici unul din versiuni de sus nu este cel final, sunt doar pentru teste.

Tot ce vă trebuie este un Arduino și să descărcați IDE-ul Arduino (editorul), trebuie să conectați totul și să dați copy paste la codul de sus. Totul ar trebui să pornească, după ce pornește RTI-ul PIN-ul 10 este open pentru surse video (în acest caz NTSC dar puteți să schimbați la partea: int current_display_mode = RTI_NTSC; cu valorile RTI_PAL, RTI_RGB - RGB-ul nu merge pe PIN 10, are 4 alte pin-uri, 3 pentru culori Red, Green, Blue și un pin pentru RGB sync).

Nu știu cât de bine am explicat...dar dacă cineva vrea să încerce puteți să-mi scrieți dacă aveți probleme.

Am uitat să spun, RTI-ul se conectează la 12V!!! să nu încercați un voltaj mai mare că o să prăjiți RTI-ul, iar polaritatea este importantă, PIN 1 este PLUS și PIN 5 MINUS (PIN 2 tot PLUS și PIN 4 tot minus - cred că este un fel de backup), PIN-ul din mijloc PIN 3 este tot PLUS de 12V. Toate acestea la conectorul din dreapta, cel albastru.

Edited by arpi2390
5 people like this

Share this post


Link to post
Share on other sites

P.S. O să fac 2-3 diagrame cu conecțiunile care trebuie făcute când o să am un pic de timp.

5 people like this

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now