Vous êtes sur la page 1sur 30

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
Arduino

Hardware
14 digital I/O pins
Automotive OBD
16 MHz clock speed
ISO Interface 32 KB memory
Software About $30 online
Data

Conclusions
Arduino
Program sketches in
Multi-platform Java-
based IDE
Code in C/C++
Serial Communication
(currently USB)
Hardware
Goals of this project:

Arduino
Communicate with an automotive
Hardware
engine control unit (ECU) via the
Arduino
Automotive OBD

ISO Interface Gather and record instantaneous


Software
data that is reported by the vehicle
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:

Arduino
Initialize ISO connection
Hardware Request data from vehicles ECU
Automotive OBD
Display the result on the LCD and
ISO Interface
record the value to retrieve later
Software

Data

Conclusions
Software
Initialization:
Starts by bit-banging 0x33 at 5 baud
i.e.

00110011
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

byte message[6];

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

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 buf[11];

Byte(s) Description
0 Message Header 1
1 Message Header 2
2 Source Address
39 Data (up to 7 bytes)
Final byte Checksum
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

PID Bytes Description Formula


0x10 2 Mass Air Flow Rate ((A*256)+B)/100

This gives you the rate of air in grams / second


Software
You can convert g air into gal gasoline
s h

And then use vehicle speed to convert to


miles
gal gasoline or MPG
Data
Scanned four PIDs over a
Arduino 20-minute interval every
Hardware

Automotive OBD
1-2 seconds
ISO Interface Vehicle Speed
Software

Data Engine RPM


Conclusions
Engine Coolant

Calculated MPG
Data

mph
Data

mph rpm
Data

C
Data

C mph
Conclusions
Embedded computing is
Arduino ubiquitous
Hardware

Automotive OBD Massive amounts of data


ISO Interface
generated by everyday
Software

Data
machines
Elec. Engineering and CS
Conclusions

can come together to make


some pretty cool things
Questions?

Vous aimerez peut-être aussi