

The OBD II (On-Board Diagnostics II) is a standardized system implemented in most vehicles manufactured after 1996. It is designed to monitor and report on the performance of the engine, emissions system, and other critical vehicle systems. The "mirrored" aspect refers to a specific configuration or display of OBD II data, which may involve duplicating or formatting the diagnostic information for easier reading or interpretation, such as on a secondary display or diagnostic tool.
Common applications of the OBD II system include:








The OBD II connector is a 16-pin standardized interface. Below is the pinout configuration:
| Pin Number | Name | Description |
|---|---|---|
| 1 | Vendor Option | Manufacturer-specific use. |
| 2 | J1850 Bus+ | Positive line of the SAE J1850 protocol. |
| 3 | Vendor Option | Manufacturer-specific use. |
| 4 | Chassis Ground | Ground connection to the vehicle chassis. |
| 5 | Signal Ground | Ground for signal reference. |
| 6 | CAN High (J-2284) | High line of the CAN bus. |
| 7 | ISO 9141-2 K-Line | Communication line for ISO 9141-2 and ISO 14230-4 protocols. |
| 8 | Vendor Option | Manufacturer-specific use. |
| 9 | Vendor Option | Manufacturer-specific use. |
| 10 | J1850 Bus- | Negative line of the SAE J1850 protocol. |
| 11 | Vendor Option | Manufacturer-specific use. |
| 12 | Vendor Option | Manufacturer-specific use. |
| 13 | Vendor Option | Manufacturer-specific use. |
| 14 | CAN Low (J-2284) | Low line of the CAN bus. |
| 15 | ISO 9141-2 L-Line | Optional line for ISO 9141-2 and ISO 14230-4 protocols. |
| 16 | Battery Power | Direct connection to the vehicle's battery (12V). |
You can use an Arduino UNO with an OBD II adapter (e.g., ELM327) to read vehicle data. Below is an example code snippet:
#include <SoftwareSerial.h>
// Define RX and TX pins for SoftwareSerial
SoftwareSerial mySerial(10, 11); // RX = pin 10, TX = pin 11
void setup() {
Serial.begin(9600); // Initialize hardware serial for debugging
mySerial.begin(9600); // Initialize software serial for OBD II communication
Serial.println("Initializing OBD II connection...");
mySerial.println("ATZ"); // Reset the OBD II adapter
delay(1000);
mySerial.println("ATE0"); // Disable echo for cleaner output
delay(1000);
mySerial.println("010C"); // Request engine RPM (PID 0C)
}
void loop() {
if (mySerial.available()) {
// Read data from OBD II adapter
String data = mySerial.readStringUntil('\r');
Serial.println("OBD II Data: " + data); // Print data to Serial Monitor
}
}
Note: Ensure the OBD II adapter is connected to the Arduino UNO's RX and TX pins as specified. The adapter should also be plugged into the vehicle's OBD II port.
No Data Received:
Incorrect or Garbled Data:
ATE0) to avoid redundant characters.Device Not Powering On:
Q: Can I use OBD II on older vehicles?
A: OBD II is only supported on vehicles manufactured after 1996. For older vehicles, you may need an OBD I adapter.
Q: What is the "mirrored" feature?
A: The mirrored feature refers to duplicating or formatting OBD II data for easier interpretation, such as displaying it on a secondary screen or diagnostic tool.
Q: Is it safe to leave the OBD II adapter connected while driving?
A: Yes, but prolonged use may drain the vehicle's battery if the adapter remains connected when the engine is off.
Q: Can I clear diagnostic trouble codes (DTCs) using OBD II?
A: Yes, most OBD II tools allow you to clear DTCs, but ensure the underlying issue is resolved before doing so.