Introduction: Timing Light and Tachometer With Arduino

I created this automotive timing light to check and adjust the ignition timing. This can be used on any spark-ignited two-stroke or four-stroke engine on a gasoline car, truck, motorcycle, ATV or lawnmower engine. In addition to setting the ignition timing, you can also check the RPM of the engine.

If you want to check and adjust the ignition timing or want to check the engine RPM (if you don't have a tachometer on the dashboard) you can build and use this simple circuit. If you only need to check the timing, you can omit the Arduino and supply 12V power directly from the car. If you are using the Arduino, RPM will be displayed on the computer screen.

Constructing the equipment is the same for all two-stroked and four stroked engines. However, the Arduino sketch should change a bit as described in the relevant section. Make sure the code is edited accordingly


  1. Arduino Uno/Nano/micro or another compatible board
  2. Computer with Arduino IDE
  3. Dot matrix PCB (prototyping PCB) board
  4. Soldering iron and solder
  5. Jumper wires
  6. 1.5m strand of thin copper wire - can be salvaged from an old transformer/inductor/ or electrical motor
  7. 0.5m PVC tube - to make a handle for the light
  8. 1.5m twin wire
  9. 1.5m coaxial cable
  10. Component list
    • 1x 100pF ceramic capacitor
    • 2x 1n4001 rectifier diode
    • 1x 12V 1.5W Zener diode
    • 1x 1.8K resistor
    • 1x 100K resistor
    • 1x 220 Ohm resistor
    • 1x 10 Ohm resistor
    • 4x LEDs
    • 1x 4N35 optocoupler
    • IRFZ830 MOSFET

Step 1: Solder the Components

  • Check that all the components are of the correct specification. Test to make sure they are working properly.
  • First, solder the four LEDs in parallel on a small separate piece of PCB. Connect all the + terminals together and all the - terminals together. Solder a twin wire about 1.5m to it. Test to make sure all the LEDs light up.
  • Leave out the capacitor and the copper coil for now.
  • Solder one end of the inner core of the coaxial cable as shown in the schematics.
  • Solder the components (except the Arduino) on a dot-matrix board following the schematics given.
  • The pinouts of the MOSFET and Optocoupler are in the pictures. Make sure the diodes point in the correct direction.
  • Don't solder the Arduino. Connect it with jumper cables.

Step 2: Make a Long Handle to Hold the LEDs

The LEDs aren't much bright. They blink rapidly and most of the time they are switched off. Fixing the LEDs on a sturdy long handle about 0.5m long makes it easy to place the light very close to the timing marks while the engine is running. It makes reading the timing marks easy.

A PVC tube does the job. Use two-part epoxy glue to stick the LEDs to the handle securely. Make sure the wire is secured to the handle and not dangling down in a way that might get caught on the spinning fan, belt, or pullies. Use cable ties or tape to secure the twin wire to the handle.

Solder the twin wires from the LEDs to the circuit board. Make sure the polarity is correct.

Step 3: Program the Arduino

Program the Arduino with the following sketch. It is for four-stroke engines with single spark ignition. If you are using this on a two-stroke engine or a four-stroke engine with a wasted spark mechanism, comment out the second to last line of code.

Step 4: Wrap the Copper Coil

Locate the spark plug high tension lead for the No.1 cylinder. This is usually the first cylinder counting from the harmonic balancer side. Refer to the vehicle manual if you are not sure what the first cylinder is.

Wrap the copper coil tightly around the high tension lead to no.1 spark plug. Abut 15-20 turns is sufficient. Wrap more turns if the light is too faint. Use some tape or a clothespin to secure the coil and prevent it from unraveling.

Connect the two terminals of the capacitor to the free ends of the coil. Connect the free end of the coaxial cable to one end of the coil. Secure the wires so that nothing will be caught between moving parts.

Step 5: Start the Engine

Connect the Arduino to the computer. Open the serial monitor.

Start the car making sure nothing will get caught between moving parts.

You should see the LEDs blinking. Revving the engine should make it blink faster. The serial monitor will display the RPM.

Troubleshooting tips-

Check if the Arduino is connected to the correct COM port and is powered on.

Check the connections are intact.

If the LEDs have only a faint glow, wrap more turns of wire around the spark plug lead.

Step 6: Check the Timing and Adjust If Necessery

Shine the light on to the timing mark. The long handle will be useful to do this safely.

Read the degree mark lining up with the timing mark. This is your ignition timing.

Check with the vehicle manual to see if the timing is correct for the given RPM. Adjust and recheck if necessary.

Congratulations! You made your own timing light and tachometer and adjusted the timing yourself. Give you a pat in the back!