Lawrence Technological University
College of Arts and Science
Department of Mathematics and Computer Sciences


Arduino Zero testing fuel injector flow

   This is a small example of using a development board you may have, in the case an Arduino Zero, as an inexpensive auto diagnostic tool.

   This project is for a 2000 Town and Country van that had lost power and limped home with ODBII codes indicating misfires for cylinder 5 and a problem with the fuel injector circuit for cylinder 5. Because accessing the fuel injectors is painful in this car, we wanted to see if we could pinpoint the problem without much part swapping. Gadgets to send a short train of pulses to an individual injector while you watch the fuel pressure in the injector rail are available from about $40 to about $300. The experiment here is to make a cheaper tool out of parts on hand.

   The spark plugs were toast and needed replacement anyway. The compression was OK. The wiring harness for the injectors was OK after some cleaning. (That harness in other vans with this engine often is a melted, shorted mess.)

   This project uses an Arduino Zero to send a train of 50 pulses when the button monitored on GPIO 2 is pressed. Each pulse is produced by holding GPIO 12 up for 7 milliseconds and then down for 22 milliseconds. The injector is energized from GPIO 12 via a power FET.

   The selection of parts, all already on hand, begins with the Arduino Zero because it is the one I was trying most recently. Other parts:

   Here is the test setup. The Arduino Zero is powered by either a 9 volt battery or the USB serial connection. The injector is powered by a car battery.

test setup


   The Arduino code:

  At the push of a button on pin 2, turns on pin 13 LED
  and sends 50 pulses to an optocoupler that controls 
  a fuel injector via a power MOSFET.

const int Status_LED =  13;
const int Optocoupler = 12;
const int Pulse_button = 2;

void setup() {
  pinMode(Status_LED, OUTPUT); // Built in LED.
  pinMode(Optocoupler, OUTPUT); // Optocoupler input.
  pinMode(Pulse_button, INPUT);

void loop() {
  // Continously poll the button on pin 2.
  if (digitalRead(Pulse_button)) {
    // May be a Button press.
    if (digitalRead(Pulse_button)) { // If really pressed.
      // Acknowledge the press.
      // Send the train of pulses.
      for (int i = 0;i<50;i++) {

   Before our tool on the van with the problem, some testing:

   Next using a multimeter and our little tool to see if the injectors are pretty much the same or if one or two are outliers -- looking particularly at cylinder 5 in our case. Data from the van, taken at the injector bypassing the wiring of the harness, seem pretty uniform:
CylinderOhmsPSI at start PSI after pulse 1PSI after pulse 2
111.755 4030
211.855 4030
311.755 4030
411.455 4030
511.755 4030
611.455 4030

   For the next step we could just put in the new spark plugs and look at the codes and injector waveforms. Or we could first swap injectors 5 and 6 -- then if the injector code returns we would be able to see if it moved to cylinder 6 or stayed with cylinder 5. That is the problem is the specific injector in spite of our normal tests, or we need to trace the wiring all the way back to the PCM.

   It's time to clean around the spark plug wells and gap and install the new plugs. The plug wires seem in good shape, so since we are on a budget, for now just a careful cleaning.

   The wiring harness for the fuel injectors was cleaned and looked good. To check the rest of the wiring back to the PCM we can disconnect connector C1 from the PCM and look at the resistances between some points on that connector. (Pin 6 is the Automatic Shut Down Relay Output which gives +12 v to the injectors with key in the run or start positions.) These tests were with the key off where ASDR (Pin 6) seems to have some connection to ground (14 Ω)
Pins Ω
  ASDR (Pin 6)GND (Pin 10)
Injector 3Pin 7 12.626
Injector 1Pin 13 12.626
Injector 6Pin 14 12.427
Injector 5Pin 15 12.627
Injector 4Pin 16 12.427
Injector 2Pin 17 12.432

   Putting things back together we check the injectors while the engine is running:
Injector 3Pin 7 injector 3 running
Injector 1Pin 13 injector 1 running
Injector 6Pin 14 injector 6 running
Injector 5Pin 15 injector 5 running
Injector 4Pin 16 injector 4 running
Injector 2Pin 17 injector 2 running

   In summary the car is running OK after new spark plugs and cleaning the connectors on the wiring to the fuel injectors. No OBDII codes yet but a little test driving is needed now.

Revised August 26, 2017