4-Stroke Digital Clock




About: I'm Mechanical Engineer and an enthusiastic Maker. I like to create my projects using the Arduino.

The "4-Stroke Digital Clock" driven by Arduino is a fun emulator of an internal combustion engine in a digital clock.

Hours and minutes digits represent the pistons moving and with a precise RPM control (100 to 800).

The RPM are shown by two columns in the center of display.

Another interesting visual information is the firing sequence "1-3-4-2" of cylinders.

Spark starts when the piston is at the top of cylinder in the compression cycle.

The code is a good exercise for managing dot matrix pixels and for introducing a simple animation feature.


Step 1: The 4-Stroke Internal Combustion Engine

The engine model used in this project is an I4 (four cylinders in line) in 4-Strokecycle.

The 4-stroke internal combustion engine works in 4 steps (Intake-Compression-Combustion-Exhaust) as illustrated in the diagram:

  1. Intake
  2. Compression
  3. Combustion
  4. Exhaust

C=Crankshaft / R=Conrod / P=Piston / V=Valves / S=Spark Plug

Note: More basic information of Internal Combustion Engines can be find at Wikipedia.

Step 2: The Clock

In this project the digits of Hours and Minutes simulate the pistons moving and the spark is highlighted in correct time for all cylinders.

The rotation is accurately calculated to represent the actual speed and the value is adjusted by a rotary potentiometer from 100 to 800 RPM (Revolutions Per Minute).

Step 3: Material List & Assembly

  • Arduino UNO R3
  • LED Dot Matrix with MAX7219
  • DS1307 RTC (Real Time Clock)
  • Rotary Potentiometer - 10K Ohms
  • Breadboard
  • Print Template
  • Jumpers

The assembly is very simple but you must follow the attached breadboard diagram with attention.

Step 4: Code

2 People Made This Project!


  • Make it Glow Contest 2018

    Make it Glow Contest 2018
  • First Time Author

    First Time Author
  • Big and Small Contest

    Big and Small Contest

2 Discussions


10 months ago

Your innovation towards using various ideas to show time impresses me! well done. Only 1 suggestion: At higher RPMs is there any better way to show time so that it is clearly visible?

1 reply

Reply 10 months ago

Hello, ravijag !!

Thank you for the comments!

I think your wish is out of the scope of this project.
My idea is to reproduce a real combustion engine working in unusual way: as a digital clock!
The RPM is calculated to show the real speed starting in 100 RPM.
I defined the maximum 800 RPM because it is the idle speed of a regular street car.
I could have done a filled retangle to represent the pistons moving, but the funny is to use the hour and minutes for that !!