Lumea din jur devine din ce în ce mai interconectată, iar un element important din viața de zi cu zi îl reprezintă autoturismele. Atât de important, încât numărul total de automobile din România ajunsese la 6 milioane în anul 2018, adică aproximativ 1 mașină la 3 locuitori (conform statista.com)
În aceste condiții, ar fi de ajutor să ne putem conecta la autoturismele noastre și să monitorizăm periodic mai mulți parametri decât ne arată tradiționalul computer de bord. Ei bine, aceasta se poate realiza destul de ușor cu ajutorul instrumentelor prezentate mai jos.
Vom descoperi ce este interfața OBD și cum funcționează, care sunt modurile de comunicare cu un device mobil (smartphone sau tabletă) și cum se realizează interpretarea semnalelor primite.
În primul rând, OBD vine de la On-Board Diagnostics și reprezintă un sistem computerizat care este încorporat în majoritatea autoturismelor moderne (în special cele după 1996). Acesta permite atât monitorizarea parametrilor motorului, emisiilor și ai sistemului electronic al mașinii, cât și detectarea de erori sau defecțiuni.
Scopul inițial al introducerii OBD în anii '80 a fost încurajarea producătorilor să proiecteze automobile cu sisteme de control al emisiilor, pentru reducerea poluării. Astfel, acestea aveau nevoie de o interfață prin care să se poată verifica emisiile de gaze, iar în funcție de asta să se aprobe sau respingă cererile de înmatriculare. Inițiativa a avut succes, iar interfața a continuat să evolueze de-a lungul timpului, astfel încât cantitatea de informații care se poate citi sau scrie prin OBD a tot crescut.
În timp ce primele versiuni ofereau doar informații generale, precum "există o defecțiune", fără alte detalii, versiunile mai recente folosesc un port standardizat de comunicare prin care oferă date în timp real și în concordanță cu o serie bine definită de coduri de eroare.
Interfața OBD II prezentă pe majoritatea autoturismelor din prezent oferă acces la o mulțime de parametri și senzori din ECU (Engine Control Unit) - unitatea principală de control electronic al mașinii. În plus, vine și cu un standard pentru tipul de conector, așezarea pinilor, formatul mesajelor și o listă mult mai mare de coduri de eroare.
Pentru a cere date de la un automobil, sunt folosite o serie de coduri care au următorul format:
Sursa: http://dthoughts.com/blog/2014/11/06/obd-scanner-using-elm327/
Exemple de "mode":
0x01 : afișare date în timp real;
0x02 : afișarea datelor la un *timestamp* unic;
0x03 : afișarea codurilor de eroare stocate;
0x04: ștergerea codurilor de eroare stocate;
0x09: informații despre vehicul
Exemple de "pid" (Parameter ID):
0x05 : temperatura agentului de răcire;
0x0C : rotații pe minut ale motorului;
0x0D : viteza automobilului;
0x11: poziția accelerației;
0x5C: temperatura uleiului motor
Astfel, dacă dorim de exemplu să citim viteza în timp real, ar trebui să trimitem următoarea comandă:
Mode: 0x01
PID: 0x0D
Comanda finală: 01 0D
Răspunsul va avea următorul format:
Sursa: http://dthoughts.com/blog/2014/11/06/obd-scanner-using-elm327/
Statusul de succes este "41", pid are aceeași valoare cu cea pe care am cerut-o, iar data reprezintă valoarea pentru acel pid.
Pentru exemplul de mai sus cu viteza am putea primi următoarea valoare : 41 0D 3F, 3F fiind viteza în format hexazecimal, iar echivalentul din format zecimal ar fi 63, adică 63 km/h în sistem metric.
Acum că am văzut partea teoretică și formatele de comunicare, să trecem la conexiunea propriu-zisă. Autoturismul are această interfață OBD II, la care va trebui să ne conectăm pentru a citi și scrie informații, iar unul dintre cele mai simple moduri de a face aceasta este utilizând un adaptor ELM327.
Acesta este de fapt un microcontroller produs de către ELM Electronics (din 2005) cu scopul de a interpreta semnalele primite pe o interfață OBD II și de a le transmite mai departe către un calculator sau un device mobil, în format UART. Transmisia aceasta se poate face atât prin USB, cât și prin Wi-Fi sau Bluetooth.
Așadar, putem crea requesturi în format ASCII, iar ELM327 se va ocupa de conversia lor în mesajele corespunzătoare pentru interfața OBD II și vice-versa. Pentru exemplul de mai sus, comanda 01 0D se trimite prin emiterea valorilor ASCII pentru 0, 1, 0 și D.
Sursa: http://dthoughts.com/blog/2014/11/06/obd-scanner-using-elm327/
Varianta 327 este cea mai populară deoarece este compatibilă cu toate familiile de protocoale OBD II, indiferent de producătorul autoturismelor. Protocoalele suportate de ELM327 sunt:
SAE-J1850 VPW (10.4 kbit/s) sau PWM (41.6 kbit/s) ;
SAE-J1939 (250kbit/s sau 500kbit/s) ;
ISO 9141-2 (10.4 kbit/s) ;
ISO 14230-4 KWP (10.4 kbit/s) ;
Așa cum menționam mai sus, adaptorul ne poate transmite aceste date de la și către un device mobil, iar o variantă de comunicare este cea prin Bluetooth. Există mai multe astfel de adaptoare pe piață, dar în general arată așa:
Este important de menționat faptul că pentru a funcționa cu dispozitive iOS, adaptoarele trebuie să utilizeze Bluetooth 4.0 (Low Energy), așadar acest aspect trebuie verificat înainte de a le cumpăra. În cazul conectării la dispozitive Android nu avem această limitare.
După procurarea unui adaptor ELM327, următorul pas este utilizarea unei aplicații care să citească datele primite. Din moment ce Android oferă o flexibilitate mai mare, am ales un exemplu de aplicație Android pentru scopul acestui articol, și anume: Torque. Este una dintre cele mai populare aplicații din zona asta, având o versiunea Lite care este gratuită și una Pro care este contra cost. Interfața arată astfel:
Putem observa și o bună parte din parametri măsurabili menționați în secțiunea anterioară despre ELM327.
Aplicația folosește o bază de date cu mode-urile și pidurile standard, ceea ce îi permite să convertească informația primită de la adaptor într-un format mult mai prietenos pentru utilizatori: grafice, valori numerice etc.
În plus, dacă e vorba de citirea codurilor de eroare, există din nou o serie de reguli și formate după care le putem interpreta. Un cod de eroare este alcătuit din 1 literă și 4 cifre, clasificate astfel:
B - Body: aer condiționat, airbags etc. 1164 coduri.
C - Chassis: frânare, direcție etc. 486 coduri.
P - Powertrain: motor, transmisie etc. 1688 coduri.
U - Network: funcții ale computerului de bord. 299 coduri.
Prima cifră:
0 - cod standard;
1 - cod specific producătorului.
A doua cifră: între 0 și 7, fiecare reprezentând o categorie (de exemplu 7 - transmisie).
A 3-a și a 4-a cifră definesc mai exact problema.
Astfel, un exemplu de cod ar fi: P0782, care înseamnă: Powertrain (P), standard (0), transmisie (7), defecțiune la schimbarea vitezelor 2-3 (82).
Din fericire, aplicația se ocupă de toată această conversie și pe lângă codul de eroare propriu-zis, mai afișează și informații într-un format mai prietenos pentru utilizator. În plus, dacă sunt identificate erori, ne oferă și posibilitatea de a le căuta pe web direct cu un click.
Dacă dorim să dezvoltăm noi înșine ceva similar, există API-uri pe care le-am putea folosi pentru interpretare, precum: Car Diagnostic API oferit de către IBM.
Într-o lume în care toate dispozitivele încep să comunice unele cu altele, există potențial destul de mare în zona aceasta de automotive și IOT pentru a face viața oamenilor din ce în ce mai ușoară.
Inspectarea propriului autoturism este doar un pas mic, însă am putea vedea și soluții prin care automobilele să aibă integrate propriile sisteme de diagnosticare și să se ocupe automat de căutarea și rezolvarea problemelor care apar. Tesla a făcut deja un pas în direcția aceasta, rămâne de văzut dacă și ceilalți producători vor face la fel.
Până atunci, avem această soluție destul de simplă dar utilă, prin care putem vedea noi înșine mai multe detalii despre propriile noastre autoturisme.
de Kiss Tibor
de Ovidiu Mățan