Rotatii pe minut. Turatia motorului.
Kilometrii la ora.
Temperatura lichidului de racire. De asemenea, se va afisa fie mesajul “Low Temp” pentru temperatura scazuta, fie “Operating Temp” cand sistemul de racire, si implicit motorul, a atins temperatura obisnuita de operare.
Temperatura din masina.
Mass Air Flow Rate. Masoara masa de aer ajunsa la motor prin galeria de admisie pentru a produce arderea. Masurata in grame/secunda.
Engine Load. Procentul din capacitatea maxima a motorului care este utilizat pentru a satisface input-ul primit de masina. Indice important pentru studierea eficientei motorului si detectarea eventualelor probleme.
Distanta, in KM, de la ultima stergere a codurilor de eroare din ECU.
Datele din ECU sunt preluate pin ODB II (ELM327) si sunt transmise catre modulul HC-05 prin Bluetooth. Modulul transmite apoi datele la microcontroller folosind interfata UART.
Informatiile primite de microcontroller sunt apoi afisate cu ajutorul modului I2C pe LCD. Continutul afisat poate fi schimbat circular prin apasarea butonului de control.
Schema bloc:
Lista de componente:
Arduino Uno primeste datele de la ELM327 prin modulul HC-05 si controleaza afisajul LCD. Modulul HC-05 faciliteaza comunicarea wireless intre Arduino si ELM327. ELM327 citește si transmite datele de diagnosticare de la vehicul catre HC-05. LCD 1602 I2C afiseaza informatiile despre vehicul (de exemplu, RPM) in timp real. Butoanele permit utilizatorului sa initieze conexiunea si sa afiseze datele pe LCD la cerere.
Modul bluetooth HC-05:
LCD 1602 I2C:
Buton de Conectare:
Buton de afisare LCD:
Imbunatatiri Hardware
Intrucat testarea se poate realiza numai in masina cu motorul pornit, device-ul trebuie sa aiba un design cat mai compact si rezistent la potentiale socuri. Astfel, s-au adus urmatoarele modificari:
Mediu de dezvoltare: Arduino IDE
Pentru comunicarea cu dispozitivul OBD-II (modulul ELM327), modulul HC-05 necesita o configuratie specifica.
In structura curenta a proiectului, modulul trebuie configurat ca Master pentru a initializa conexiunea cu ELM327, conexiune protejata de o parola, iar adresa MAC a device-ului OBD-II trebuie setata ca target device si conexiunea initialiata.
Astfel, configurarea modulului HC-05 se realizeaza folosind urmatoarele comenzi in modul AT:
Librarie specifica pentru controlul ecranelor LCD prin intermediul interfetei I2C. Permite initializarea, controlul si afisarea informatiilor pe ecranul LCD.
Libraria este folosita pentru comunicarea I2C intre Arduino si alte componente I2C. Este utilizata pentru a comunica cu ecranul LCD I2C.
Libraria permite crearea de porturi seriale suplimentare. Este utilizata pentru a crea o conexiune seriala suplimentara (mySerial) pe pinii 10 si 11, pentru a comunica cu modulul ELM327.
Librarie specializata pentru interfatarea cu dispozitive ELM327 prin Bluetooth sau port serial. ELM327 este un microcontroler folosit in mod obisnuit pentru a interfata cu sistemele de diagnosticare OBD-II ale vehiculelor. Este folosita pentru a initializa si comunica cu modulul ELM327, permitand citirea datelor de la masina.
Buton ecran:
pinMode(buttonPin, INPUT_PULLUP);
Serial ports:
Serial.begin(38400); ELM_PORT.begin(38400); Serial.begin(38400); ELM_PORT.begin(38400);
LCD:
lcd.init(); lcd.backlight();
ELM327 (connect):
myELM327.begin(ELM_PORT, true, 2000)
Verifica starea butonului de schimbare a datelor afisate si apeleaza functia potrivita.
buttonState = digitalRead(buttonPin); if(buttonState == LOW) { buttonCounter = (buttonCounter + 1) % 7; // change state } switch (buttonCounter) { // call print function }
changePidHandler() - functie ce adauga un delay scurt la fiecare schimb de PID.
Generalizare functii
Fiecare functie de prelucrare si afisare (print<DATA_NAME>()) are urmatoarea structura:
void print<DATA>() { // cerere date de la ELM327 cu functii auxiliare din biblioteca ELMduino (functii de procesare a PIDs) // functiile trimit query-uri pe PID-uri de OBD standard si parseaza datele primite float tempDATA = myELM327.getDATA(); // se asigura delay-ul la schimbarea datelor afisate pe ecran // necesar intrucat wrapper-ele din ELMduino sunt non-blocante // acest tip de apel poate rezulta in parsarea datelor dintr-un call anterior, // rezultand in afisarea unor date eronate pana la urmatoarea iteratie if (newPidReq == 1) { changePidHandler(); return; } // indicatori pentru response-uri la cererile pe PID-uri // myELM327.nb_rx_state retine starea curenta a request-ului if (myELM327.nb_rx_state == ELM_SUCCESS) { // date primite integral, conform request-ului // afisare date } else if (myELM327.nb_rx_state != ELM_GETTING_MSG) { // date primite integral, dar nu sunt conform celor asteptate (errors) // afisare cod de eroare } // necesar pentru user experience, intrucat schimbarile rapide pot fi greu de citit delay(30); }
Pe scheletul descris anterior, se definesc urmatoarele functii:
Device-ul finalizat prezinta datele exacte extrase din ECU.
Pentru a garanta ca rezultatele obtiunte sunt bune (atat din punct de vedere al datelor, cat si din punct de vedere al vizibilitatii), a fost necesara o testare indelungata pentru a acoperi cat mai multe scenarii posibile.
Astfel, s-au realizat urmatoarele teste:
Turatia in idle a motorului pe care s-au realizat testele este in jur de 700rpm.
Testele s-au realizat atat pe loc, cat si in miscare.
Turatia maxima inregistrata: ~4000rpm
Testarea vitezei s-a realizat folosind 2 metode:
- verificare in raport cu ceasul masinii
- verificare in raport cu viteza data de GPS (cu ajutorul Waze)
Testele au implicat atat franare pana la stationare, cat si accelerare puternica.
Viteza maxima inregistrata: 120KM
Pentru a acoperi cat mai multe valori, testele s-au realizat atat la rece, cat si la temperatura de operare.
Temperatura medie: 89C
Testele s-au realizat in zile diferite si cu stari diferite ale AC-ului.
Temperatura minima: 21C
Temperatura maximia: 30C
Parametrii afisati sunt obisuiti pentru acest tip de motor la idle (~20).
Pe accelerare, datele afisare ajung in jur de 40.
Testele s-au realizat in multiple conditii de mers.
Valorile inregistrate sunt in parametrii normali de functionare.
In conformitate cu distanta parcursa de la ultima interventie de resetare erori ECU.
Testata incrementarea distantei cu trip-ul masinii.
Principala optimizare adusa proiectului este la nivel de user experience, intrucat s-au realizat multiple modificari pentru a fi cat mai naturala urmariea datelor de pe LCD in timpul mersului, fara a impacta atentia soferului la conditiile de drum.
In acest scop, s-au adus multe schimbari la nivel de hardware pentru accesarea butoanelor si asezarea butoanelor intr-un loc cat mai accesibil. Eventuale imbunatatiri se pot aduce prin adaugarea unui suport sau integrarea device-ul intr-un spatiu din masina.