Micro KITT

Introducere

Nume: Radut Dragos-Andrei
Grupa: 331CD

Micro KITT este un sistem de monitorizare a datelor din calculatorul de bord al masinii.
Proiectul ofera soferului posibilitatea de a accesa informatii esentiale despre performanta si starea vehiculului in timp real, contribuind la o monitorizare mai precisa decat cea oferita de sistemele uzuale.

Idea care a conturat acest sistem pleaca din dorinta/nevoia de a urmarii cu atentie anumiti parametrii pentru a identifica din timp posibile probleme ale masini. Informatiile de interes sunt temperatura lichidului de racire (overheating), presiunea la nivelul turbinei (overboost condition) si alte date care nu sunt afisate de sistemul de bord stock, acesta doar intoarcand alerte in cazul depasirii unui anumit threshold.

Utilitatea unui sistem precum Mirco KITT este data de identificarea rapida a posibilelor probleme, dar si de posibilitatea de a personaliza datele afisate pe ecranul LCD conform preferintelor soferului.

Informatii afisate pe LCD

  • “RPM:“

Rotatii pe minut. Turatia motorului.

  • “KPH:“

Kilometrii la ora.

  • “Coolant:“

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.

  • “Ambient Temp:“

Temperatura din masina.

  • “MAF Rate:“

Mass Air Flow Rate. Masoara masa de aer ajunsa la motor prin galeria de admisie pentru a produce arderea. Masurata in grame/secunda.

  • “Load:“

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.

  • “Codes Cleared:“

Distanta, in KM, de la ultima stergere a codurilor de eroare din ECU.

Descriere generală

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:

Laboratoare folosite

Hardware Design

Lista de componente:

  • 1 x Arduino Uno R3 ATmega328P
  • 1 x HC-05 Bluetooth Module
  • 1 x ELM327 Bluetooth OBD2 Adapter
  • 1 x 1602 LCD display I2C
  • 1 x Breadboard
  • 1 x Rezistor 1Lohm
  • 1 x Rezistor 2Kohm

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.

mircokitt_scheme.jpg

Modul bluetooth HC-05:

  • VCC - Arduino 5V
  • TXD - Pin 10 (RX) Arduino. Transmitere date de la HC-05 la Arduino.
  • RXD - Pin 11 (TX) Arduino (cu divisor de tensiune). Primire date de la Arduino la HC-05.
    • Pin 10 - 1kΩ Resistor
    • 1kΩ Rezistor - Nod
    • Nod - HC-05 RXD Pin
    • Nod - 2kΩ Rezistor
    • 2kΩ Rezistor - GND
  • EN (KEY) - 3.3V Arduino (doar pentru configurarea modulului)

LCD 1602 I2C:

  • SDA LCD - SDA Arduino (A4)
  • SCL LCD - SCL Arduino (A5)
  • VCC LCD - 5V Arduino
  • GND LCD - GND Arduino

Buton de Conectare:

  • buton - Pin 8 Arduino
  • buton - GND

Buton de afisare LCD:

  • buton - Pin Reset Arduino
  • buton - GND

microkitt_hardware.jpg

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:

  • Varianta de testare:

microkitt_testing.jpg

  • Varianta finala:

microkitt_final.jpg

Software Design

Mediu de dezvoltare: Arduino IDE

Configuratie HC-05

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:

  • AT+RMAAD (Stergere dispozitive asociate)
  • AT+RESET (Resetare modul)
  • AT+ORGL (Resetare la setarile originale)
  • AT+ROLE=1 (Setare modul ca master)
  • AT+CMODE=0 (Permite conectarea doar la o adresa specifica)
  • AT+PSWD=“1234” (Seteaza parola)
  • AT+BIND=<MAC> (Setare adresa target device)
  • AT+PAIR=<MAC>,20 (Initializare pairing, timeout 20s)
  • AT+LINK=<MAC> (Initializare conexiune)

Librarii

  • “LiquidCrystal_I2C.h”

Librarie specifica pentru controlul ecranelor LCD prin intermediul interfetei I2C. Permite initializarea, controlul si afisarea informatiilor pe ecranul LCD.

  • “Wire.h”

Libraria este folosita pentru comunicarea I2C intre Arduino si alte componente I2C. Este utilizata pentru a comunica cu ecranul LCD I2C.

  • “SoftwareSerial.h”

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.

  • “ELMduino.h”

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.

Functii implementate

  • setup() = Initializarea componentelor

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)
  • loop()

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
  }
  • Functii de prelucrare si afisare a datelor

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:

  • void printRPM()
  • void printKPH()
  • void printEngineTemp()
  • void printAmbientTemp()
  • void printMafRate()
  • void printLoad()
  • void printDistance()

Concluzii

Rezultate Obţinute

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:

  • RPM

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

  • KPH

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

  • Engine Temp

Pentru a acoperi cat mai multe valori, testele s-au realizat atat la rece, cat si la temperatura de operare.
Temperatura medie: 89C

  • Ambient Temp

Testele s-au realizat in zile diferite si cu stari diferite ale AC-ului.
Temperatura minima: 21C
Temperatura maximia: 30C

  • MAF Rate

Parametrii afisati sunt obisuiti pentru acest tip de motor la idle (~20).
Pe accelerare, datele afisare ajung in jur de 40.

  • Engine Load

Testele s-au realizat in multiple conditii de mers.
Valorile inregistrate sunt in parametrii normali de functionare.

  • Distance since codes cleared

In conformitate cu distanta parcursa de la ultima interventie de resetare erori ECU.
Testata incrementarea distantei cu trip-ul masinii.

Autovehicul de test: Volvo S60 2.4 D5

Optimizari

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.

Download

Demo

Bibliografie/Resurse

pm/prj2024/cpatru/dragos.radut.txt · Last modified: 2024/05/26 22:23 by dragos.radut
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0