Arduino-based OBD-II Interface and Data Logger · Arduino-based OBD-II Interface and Data Logger CS...
Transcript of Arduino-based OBD-II Interface and Data Logger · Arduino-based OBD-II Interface and Data Logger CS...
Arduino-based OBD-II Interface and Data Logger CS 497 Independent Study Ryan Miller
Advisor: Prof. Douglas Comer April 26, 2011
Arduino
• Italy 2005
• ATmega328 microcontroller • 14 digital I/O pins • 16 MHz clock speed • 32 KB memory • About $30 online
Arduino
Hardware
Automotive OBD
ISO Interface
Software
Data
Conclusions
Arduino • Program “sketches” in Multi-platform Java-based IDE • Code in C/C++ • Serial Communication (currently USB)
Hardware
• Goals of this project:
• Communicate with an automotive engine control unit (ECU) via the Arduino
• Gather and record instantaneous data that is reported by the vehicle
Arduino
Hardware
Automotive OBD
ISO Interface
Software
Data
Conclusions
?
Hardware • Vehicles produced in the U.S. after 1996 are required to have an OBD-II (on-board diagnostic) connector
Hardware • OBD-II Interface • Very simple connection for most applications • Most important pins • K-Line • Ground • +12V
Hardware • Open-source project called “OBDuino” offered the interface schematic (which is fortunate, because I am not an EE major)
Hardware • Open-source project called “OBDuino” offered the interface schematic (which is fortunate, because I am not an EE major)
Hardware • Freescale MC33290 handles the tricky parts • K-Line, Ground, and +12V go in
• Serial Tx/Rx come out
Hardware
OBD-II
Software
• A few functions to perform:
• Initialize ISO connection
• Request data from vehicle’s ECU
• Display the result on the LCD and record the value to retrieve later
Arduino
Hardware
Automotive OBD
ISO Interface
Software
Data
Conclusions
Software • Initialization: • Starts by “bit-banging” 0x33 at 5 baud • i.e.
0 0 1 1 0 0 1 1
200ms pause = 1.6 seconds
Software • Initialization: • Starts by “bit-banging” 0x33 at 5 baud • Code:
byte b = 0x33; for (byte mask = 0x01; mask; mask <<= 1) {
if (b & mask) // Choose bit digitalWrite(K_OUT, HIGH); // Send 1 else digitalWrite(K_OUT, LOW); // Send 0 delay(200);
}
Software • Then you can start 10.4 kbps communication and perform these steps to finish initialization:
Software • Parameter IDs (PIDs) • SAE J1979 standard
• Examples:
PID Bytes Description Formula
0x0C 2 Engine RPM ((A*256)+B)/4
0x0D 1 Vehicle Speed (km/h) A
0x11 1 Throttle Position (%) A*100/255
0x3F 2 Catalyst Temp (B2, S2) ((A*256)+B)/10 - 40
Software • Steps:
1. Request PID with hex value 2. Continuously read data from ISO until successful
checksum or timeout 3. Convert returned value with formula 4. Display / record value and repeat
Software 1. Request PID with hex value
Index Value Description
0 0x68 SAE J1979 standard
1 0x6A OBD-II request
2 0xF1 Off-board tool
3 0x01 Mode 1 PIDs
4 pid Hex value for PID requested
5 Checksum Computed from message
byte message[6];
for (int i = 0; i < 6; i++) iso_write_byte(message[i]);
Software 2. Continuously read data from ISO until successful checksum or timeout
Byte(s) Description
0 Message Header 1
1 Message Header 2
2 Source Address
3 – 9 Data (up to 7 bytes)
Final byte Checksum
byte buf[11];
Software 3. Convert returned value with formula ie.:
PID Bytes Description Formula
0x0C 2 Engine RPM ((A*256)+B)/4
double rpm; rpm = ((double)buf[0] * 256) + (double)buf[1]) / 4.0;
Software 4. Record/display value and repeat • Displaying on an LCD screen:
LiquidCrystal lcd; lcd.print(rpm);
Software 4. Record/display value and repeat • Writing to an SD card:
File log; log.print(rpm);
Software • One last note on PIDs…
• This gives you the rate of air in grams / second
PID Bytes Description Formula
0x10 2 Mass Air Flow Rate ((A*256)+B)/100
Software • You can convert into
• And then use vehicle speed to convert to
or MPG
g airs
gal gasolineh
milesgal gasoline
Data
• Scanned four PIDs over a 20-minute interval every 1-2 seconds
• Vehicle Speed
• Engine RPM
• Engine Coolant
• Calculated MPG
Arduino
Hardware
Automotive OBD
ISO Interface
Software
Data
Conclusions
Data
mph
Data
mph rpm
Data
°C
Data
mph °C
Conclusions
• Embedded computing is ubiquitous
• Massive amounts of data generated by everyday machines
• Elec. Engineering and CS can come together to make some pretty cool things
Arduino
Hardware
Automotive OBD
ISO Interface
Software
Data
Conclusions
Questions?