Arduino-based OBD-II Interface and Data Logger
Transcription
Arduino-based OBD-II Interface and Data Logger
Arduino-based OBD-II Interface and Data Logger CS 497 Independent Study Ryan Miller Advisor: Prof. Douglas Comer April 26, 2011 Arduino • Italy 2005 Arduino Hardware Automotive OBD ISO Interface Software Data Conclusions • ATmega328 microcontroller • 14 digital I/O pins • 16 MHz clock speed • 32 KB memory • About $30 online Arduino • Program “sketches” in Multi-platform Javabased IDE • Code in C/C++ • Serial Communication (currently USB) Hardware • Goals of this project: Arduino Hardware Automotive OBD ISO Interface Software • Communicate with an automotive engine control unit (ECU) via the Arduino • Gather and record instantaneous 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 vehicle’s ECU Automotive OBD ISO Interface Software Data Conclusions • Display the result on the LCD and record the value to retrieve later 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 3–9 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 Hardware Automotive OBD ISO Interface Software Data Conclusions 20-minute interval every 1-2 seconds • Vehicle Speed • Engine RPM • Engine Coolant • Calculated MPG Data mph Data mph rpm Data °C Data °C mph Conclusions • Embedded computing is Arduino Hardware Automotive OBD ISO Interface Software Data Conclusions ubiquitous • Massive amounts of data generated by everyday machines • Elec. Engineering and CS can come together to make some pretty cool things Questions?