Clock pod mod with Subaru Select Monitor ECU polling and Arduino
The check engine light: what does it mean!?!
I check my engine often; it is always in the same place. Go away, stupid light.
As my car continues to age ungracefully, I am seeing this light come on with increasing frequency. When I’m out driving I don’t necessarily have my laptop on me and a car parts store may not be nearby- a quick code check is not available. Should I have my car towed for what has lately been a P0420?
I don’t think so.
Thus, I have been motivated to integrate the simple CEL code-reading functionality of learning view into my car.
But why stop there: if I am going to be communicating with the ECU to pull the codes, why not build a sensor/memory polling mechanism too?
Thus, my project is a simple LCD display, powered by an Arduino Uno which communicates over the OBD II connection using the Subaru Select Monitor (SSM) protocol.
The plan for the end product is to
-Integrate with the car’s design in an unobtrusive manner: in the clock pod
-replicate the original function of the clock pod: display the time
- monitor a few interesting parameters:
1) intake air temperature: I chose this since my car, unlike many new cars, does not have an exterior temperature thermometer
2) Injector duty cycle: I have been having fuel learning issues, so I want to know if I’m reaching into the upper ranges of my injectors. Plus this is a pseudo-measure of in-use power.
3) boost: my car came without a boost gauge.
-read and display check engine light codes when the light is on in the dash display.
This thread is a documentation of the development process rather than a tutorial; however I do intend to include all of the details which would enable anyone else to replicate this mod.
The check engine light: what does it mean!?!
I check my engine often; it is always in the same place. Go away, stupid light.

As my car continues to age ungracefully, I am seeing this light come on with increasing frequency. When I’m out driving I don’t necessarily have my laptop on me and a car parts store may not be nearby- a quick code check is not available. Should I have my car towed for what has lately been a P0420?
I don’t think so.
Thus, I have been motivated to integrate the simple CEL code-reading functionality of learning view into my car.
But why stop there: if I am going to be communicating with the ECU to pull the codes, why not build a sensor/memory polling mechanism too?
Thus, my project is a simple LCD display, powered by an Arduino Uno which communicates over the OBD II connection using the Subaru Select Monitor (SSM) protocol.
The plan for the end product is to
-Integrate with the car’s design in an unobtrusive manner: in the clock pod
-replicate the original function of the clock pod: display the time
- monitor a few interesting parameters:
1) intake air temperature: I chose this since my car, unlike many new cars, does not have an exterior temperature thermometer
2) Injector duty cycle: I have been having fuel learning issues, so I want to know if I’m reaching into the upper ranges of my injectors. Plus this is a pseudo-measure of in-use power.
3) boost: my car came without a boost gauge.
-read and display check engine light codes when the light is on in the dash display.

This thread is a documentation of the development process rather than a tutorial; however I do intend to include all of the details which would enable anyone else to replicate this mod.