Introduction: Shadow Clock

About: I'm an engineer, designer. I specialize in 3d modeling, 3d printing and electronics. If you have any questions just message me here or by email:

Here is my design of digital LED clock which display time in analog way by shadow hands. Each clock hand has 60 steps like classic clock. It is based on Arduino Mega and most effective method of LED driving called Charlieplexing with 180 LEDs.
Clock is designed to be as simple as possible and with this instructable can be assembled by anybody who has basic soldering skills.

Step 1: Tools and Parts


  • Soldering iron
  • Wire cutter
  • Screwdriver
  • Heat gun or lighter
  • IDC crimp tool (optional)


Step 2: Assemble LED Matrixes

For this step you will need:

  • round LED Matrix PCBs 3pcs.
  • red colour LEDs 60pcs.
  • green colour LED 60pcs.
  • blue colour LEDs 60pcs.
  • 150ohm resistors 18pcs.
  • 91ohm resistors 9pcs.
  • angled 2x5 goldpins 3pcs.
  • IDC connector
  1. Take one round PCB, 60 LEDs in one color and 9 resistors. If you use DIY KIT take 150ohm resistors for red / green leds or 91ohm for blue. If you use other diodes you have to calculate value of resistors. For eg. if diode specification says 2V, 20mA value of resistor would be R=(5V-2V)/0,02A=150ohm. If it says 3V, 25mA, it would be R=(5V-3V)/0,025A=80ohm. etc. Do not use diodes with current over 40mA. It is maximum value of current for Arduino I/O Pin.
  2. Solder resistors as shown on picture. Tin should be visible on both sides of the PCB
  3. Bend 60 LEDs like on the picture (it is easier if you will use something which has 90 degree angle and has around 8-10mm long flat surface)

  4. Solder all 60 LEDs watching polarization (longer and shorted legs) as shown on pictures

  5. Solder angled 2x5 goldpin like on the picture (first put it in the IDC connector of the multicolor flat cable)

Repeat this step for another 2 PCBs.

If you want to make your own PCBs use schematic diagram picture. Remember that circuit paths must be well isolated with proper distance from each other to avoid ghosting effect. Diodes must be placed firmly with place to bend them later (to calibrate light of each LED on center pin).

Step 3: Solder Cables Pins

For this step you will need:

  • flat multicolour cable 3pcs. around 15cm long each
  • angled 2x5 golpin 3pcs.
  • 3mm heat shrink tube around 20cm
  1. Detach each wire of cable on around 10mm length and split it into two groups like on the picture

  2. Cut heat shrink tube to 10 pcs. around 7mm each and place them on each wire

  3. Solder wires to proper pins as shown on the pictures

  4. Use heat gun or lighter to shrink tubes

Repeat this step for another 2 cables.

Step 4: Prepare Button Switch

For this step you will need:

  • button switch
  • 10kohm resistor
  • 3 wires from rainbow cable (green, blue, purple) around 10cm long + 3 goldpins.. or instead you can also use arduino male pins rainbow cables as I did
  • 3mm heat shrink tube 1cm long
  • 5mm heat shring tube 2cm long
  1. Cut around 1cm of blue wire (it should be little shorter).
  2. Solder resistor to blue and purple wire as on picture.
  3. Place 5mm heat shrink tube on soldered resistor.
  4. Place 3mm heat shrink tube on green wire.
  5. Solder blue wire to one leg of switch and purple wire with resistor to another leg.
  6. Use lighter or heat gun to shrink tubes on switch legs.

Step 5: Connect Arduino

For this step you will need:

  • programmed Arduino Mega 2560. If you want to program it yourself use attached arduino code.
  • TinyRTC module
  • Prepared button switch
  • Assembled LED matrixes
  • Assembled IDC cables
  • 4 wires from rainbow cable (yellow, orange, red, brown) with 8 single goldpins... or instead you can also use arduino male pins rainbow cables as I did
  • 20mm screw sleeve spacer female-female
  • 10mm screw sleeve spacers female-female
  • M3 5mm bolts 6pcs.
  • USB power source
  1. Take Arduino board and screw 10mm sleeve spacers to it as shown on pictures.
  2. Mount TinyRTC module on Arduino board with 20mm screw sleeve.
  3. Connect TinyRTC module to Arduino board as shown on wiring diagram.
  4. Connect prepared button switch.
  5. Connect 3 rainbow cables to Arduino board and matrixes.
  6. Connect USB power to Arduino and press the button. One LED on each PCB should light up and clock should start ticking. If it is not working check wiring.

Step 6: Calibrating LED Matrixes

For this step you will need:

  • Assembled electronics from previus step
  • Clock cover
  • others screw sleeve spacers and bolts

  1. Download Shadow clock cover from attached files or from my thingiverse profile here. There are two versions of cover. One for 3d printing and one for laser cutting. If you want to make your own version there are two important tips. First: clock face should have max 20cm diameter. Second: Gnomon (Center pin) should have 10mm height.
  2. Disconnect all LED matrixes from Arduino board.
  3. Take one LED matrix and mount 20mm screw sleeve spacers on bottom and 10mm on top of the board.
  4. Connect this board with cable to the minutes pins of Arduino board (pins from 34 to 43, if needed check diagram from previous step).
  5. Calibrate glowing diode by bending it like on the pictures. Light beam should be focused on center pin.
  6. After bending first one use switch by pushing it once and switch light to another LED. Calibrate all 60 LEDs.
  7. Disconnect cable from Arduino board
  8. Mount second PCB on first one and connect this board with cable to the minutes pins of Arduino board. Calibrate it.
  9. Disconnect cable from Arduino board
  10. Mount last PCB, connect it to minutes pins. of Arduino board and calibrate it.
  11. Connect all matrixes to Arduino board as on a diagram from previous step. Bottom PCB is for seconds, middle for minutes, top for hours.

Step 7: Enjoy It!

For those who are looking for more... if you will like it in my next instructable I will present possible variations of this clock with full description of source code.

English isn't my native language so sorry if there are some language mistakes.

If you have any questions just leave a comment or message me.

This was my first instructable. If you enjoyed it please vote for me :)


Sebastian aka Protonik

First Time Author Contest

Participated in the
First Time Author Contest