Unul dintre cele mai importante bunuri ale unei persoane este mașina. În contextul dezvoltării IoT ar fi interesant să descoperim cum putem să ne conectăm la mașina noastră și ce fel de informații putem extrage din ea.
Cu ajutorul sistemului OBD-II putem afla mai multe informații
OBD-II (on-board diagnostics) reprezintă un sistem și un standard în industria auto prin care proprietarul unei mașini poate să își diagnosticheze mașina. Standardele OBDII includ informații specifice despre tipul de conector pentru diagnosticare, protocoalele de semnalizare și formatul de mesagerie. De asemenea, OBD-II include o listă de parametrii auto de monitorizat, și un ghid de criptare de date pentru fiecare parametru. Pe lângă toate acestea OBD-II mai include și o listă de DTC-uri (data trouble codes) standardizate. Toate acestea lucrează împreună pentru a o oferi o imagine digital de ansamblu completă asupra mașinii.
Informațiile oferite sunt standardizate prin coduri DTC
Fiecare DTC conține 5 caractere: o literă, urmată de patru cifre. Litera face referire la sistemul interogat: P pentru motor și transmisie (sistemul de propulsie), B pentru caroserie etc. Următorul caracter este 0 care indică compatibilitatea cu standardele OBD. Următoarea cifră reprezintă subsistem-ul: P01xx – Măsurători refereritoare la carburant și aerisire, P04xx – parametrii de emisii auxiliare. Ultimele două caractere fac referire la defecțiuni specifice. Pentru mai multe detalii consultă pagină de wiki DTC.
Cum comunicăm cu mașina?
Dispozitive necesare: Pentru a te conecta la mașină ai nevoie de dispozitivul ELM327 cu interfață WiFi și un telefon iOS cu sistem de operare minim 8.1.
Comenzile OBD pe care trebuie să le știi pentru a solicita informații din calculatorul de bord
Comenzile OBD sunt formate din coduri hexazecimale scrise în caractere ASCII. Acestea conțin două sau mai multe perechi de numere hexazecimale. Prima pereche hex din comanda OBD reprezintă modul OBD care va fi folosit. Orice altă pereche hex reprezintă PID (parameter id) care va fi citit din modul specificat. Sunt 10 moduri OBD dar nu toate mașinile le vor folosi pe toate. Prima dată va trebui să verifici protocolul mașinii pentru a vedea ce moduri OBD suportă. (vezi tabelul)
Mai multe detalii în legătură cu OBD PID’s poți găsi pe wikipedia. O parte din producătorii de mașini folosesc parametri custom prin urmare ai grijă să faci research înainte. Pentru a afla ce PID’s suportă mașina, poate fi folosită comanda PID 00. Aceasta funcționează pe orice mașină care suportă OBD și va returna lista de PID’s pe care îi recunoaște.
Informații necesare pentru a conecta aplicația mobilă la rețeaua creată de dispozitivul ELM327
Primul pas este să găsești port-ul OBD-II unde trebuie conectat dispozitivul ELM327. Acesta va genera o rețea Wi-Fi. Folosește telefonul și descoperă ip-ul rețelei.
Ce trebuie avut în vedere când dezvoltăm aplicația de mobile pentru a ne conecta la OBD-II
Limbajul folosit în exemplele de mai jos sunt în objective-c. Protocolul de comunicare între mobil și OBD este de tip input/output unde trimiți comanda tip text și primești înapoi răspunsul. Pentru a crea conexiunea cu Wi-Fi am folosit librăria CFNetwork pusă la dispoziție de framework. În procesul de achiziționare informații despre host am folosit CFHostCreateWithName pentru a crea o instanță de tip CFHost. (Figura 1)
Cu informațiile obținute anterior referitoare la IP stablim o conexiune persistentă cu device-ul ELM327, folosind metoda connect care va primi ca parametri IP-ul și Port-ul adaptorului. (Figura 2)
Aceasta va merge în loop atât timp cât aplicația este activă. După ce am stabilit conexiunea, apelăm metoda sendInitialCommands care va trimite mai departe pe output stream comenzile de inițializare tip AT. (Figura 3)
Acum vom afla PID-urile suportate de computerul de bord al mașinii apelând metoda read_pids. Aceasta va oferi un string format din caractere hexazecimale separate prin spațiu care reprezintă PID-urile accesibile. (Figura 4)
Pe baza PID-urilor descoperite realizăm un array care va fi parcurs în mod repetat. Pentru fiecare element din array vom forma o comandă AT care va trimisă către OBD-II în loop. Informația primită din OBD-II este interpretată folosind metoda read_stream. Atât timp cât primește informație pe inputStream metoda parcurge linie cu linie informațiile primite și le convertește într-un format standardizat pentru fiecare PID. De exemplu, turația mașinii pe inputStream va veni de forma „41 0C 0E 96”. Facem abstracție de prima pereche pentru că sunt mod-ul și PID-ul pe care l-am cerut. Ce ne interesează sunt „0E 96” care vor fi convertite în format zecimal rezultând valoarea 3734. Această valoare trebuie împărțită la 4 și rezultă turația reală a mașinii care este 933. (Figura 5)
Un alt exemplu ar fi aflarea vitezei mașinii. Mai jos este o porțiune de cod care poate fi folosită pentru a interpreta informația primită de la OBD-II cu privire la viteza de deplasare a mașinii. (Figura 6)
Colectarea datelor live este doar primul pas. Acestea pot fi stocate și procesate pentru a realiza o analiză mai complexă a întregii performanțe a mașinii. Un exemplu interesant ar fi o aplicație care ar analiza modul tău de condus și ți-ar oferi recomandări pentru a economisi combustibil și a polua mai puțin.
BCR și Fab Lab Iași inaugurează Zbor – un spațiu de explorare dedicat tinerilor
Iași, 7 octombrie 2024. Banca Comercială Română și Fab Lab Iași inaugurează hub-ul Zbor, un spațiu sigur și creativ pentru dezvoltare personală, profesională și socială.