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

arpi2390
By arpi2390 in VOLVO S60/S60R (2001-2009),
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: 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: 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:   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.  
  • 8 replies