Arduino testing 2000 Saturn Idle Air Control

This is a small example of using an Arduino
as an inexpensive auto repair tool. Diagnostic OBDII adapters
that work with smart phones and tablets have become quite
inexpensive. But such adapters that can also do in circuit
manipulation of components are still expensive. This workbench
demo is testing and controlling the Idle Air Control valve
while unplugged from the car's wire harness.

This IAC valve is a small stepper motor.
During this repair the valve was removed from the throttle body
so a considerable carbon buildup could be removed. The IAC was
cleaned with enough throttle body cleaner to probably remove
any lubrication from the movable shaft. The plunger shaft or
"pintle" seemed to have a lot of end play and so a replacement
IAC (BWD 21819) was installed. You can test the coils with a
digital multimeter -- in this case 50 ohms each. You can plug
the valve back into the harness and toggle the ignition key to
check for pintle movement. If the pintle comes too far out or
perhaps all the way out and separates while you toggle the
ignition -- or the new valve arrives in the package with the
pintle too far extended -- the problem is how to retract the
pintle enough to mount or remount the valve. BWD suggests that
pressing the pintle back into the valve with the mounting bolts
will damage their replacement valve.

This project then uses the Arduino to bench
test the IAC valve by moving the valve pintle in and out by
either pressing an "In" or an "Out" button or by an "i" or "o"
command sent over a serial connection to the Arduino.

Here is the test setup with the valve and
buttons and a detail shot of just the motor shield. The
Arduino is powered by either a 9 volt battery or the USB serial
connection. The motor shield is powered by a car battery, or
in this case a Radio Shack 3 Amp supply made for testing things
like car radios, or even a smaller supply since the average
current draw during this experiment was less than 50mA.

The 125 steps per revolution was from a
random IAC valve that happened to have specs available.
So how close was the guess? Holding down the "out" button
pops the pintle out for examination: The base is a 3.5mm
screw with a 1.0mm thread pitch. Pressing a button 10 times
(100 steps) moves the pintle an average of 4.15mm. So using
interactive Ruby:

Looks like a 24 step or 15° stepper would be a far better
estimate. Then we can change the steps from 125 to 24 and
increase the rpms to 50 to keep the pintle movement speed about
the same. Running 240 steps then moves the pintle about 1.0cm,
better! Maybe making the default number of steps be 24
instead of 10? Then each button push would move the pintle 1mm.

Adafruit and Sparkfun have quite a number of
different boards that are shields (or wings in Adafruit's
overly cute feather line of boards) that use I2C to make
stepper control easy. Here is one such setup with a tiny
display and built in buttons that is mounted on a Adafruit
Feather M0.