Time Slider

42K477119

Intro: Time Slider

A digital clock using sliding grids to show or hide the segments of the digits.

Each minute the sliders move in a synchronized manner to show the current time.

The clock is powered by an Arduino Mega and it uses a DS3231 RTC to keep the time. Each digit has two sliding grids which are affected by small stepper motors.

I designed it with Autodesk Fusion 360 and 3D printed it on a Prusa MK3S.

STEP 1: Parts List

  • Arduino Mega
  • DS3231 Real Time Clock Module
  • Eight stepper motors 28BYJ-48 with ULN2003 Driver
  • 82 cm Wooden strip 19x19mm
  • Steel Wire 1m
  • 46 Washer head screw 4.2 x 14 mm
  • 16 Button head screw and nut M4 x 10
  • 18 self tapping screws M3 x 5
  • Dupont Wires
  • 5V power cable with DC plug 5.5x2.1mm
  • Power supply 5V/2A
  • Power supply for the Arduino Mega

STEP 2: 3D Printed Parts

3d Printed Parts:

  • One A1 - A8
  • Three B1 and B2
  • Two C1
  • Four Digit
  • Two Dot
  • Four Grid
  • Eight Gear
  • Four L1 - L4
  • Four R1 - R3
  • Twenty Rackjoin
  • Twenty-eight Thinjoin
  • One ArduinoMount
  • One DS3231Mount
  • Two ULN2003Mount


I printed it in PLA. Layer height: 0.2mm, Infill 15%

I used Brim on parts A, L and R to avoid warping.

I used approximatey 2kg black, and 350g red PLA.

STEP 3: Electronic Schematics

STEP 4: Assembly

  1. Attach the plates B1 and B2 on the body A1 - A8. Use Washer head screws.
  2. Attach C1 onto A1+A5 and A4+A8. Use Washer head screws.
  3. Install the wooden strip with Washer head screws.
  4. Fasten the steel wire to the wooden strip with Washer head screws. Adjust the length of the steel wire so that the clock hangs flat to the wall and does not tilt outwards.
  5. Glue Digit, Dot and Grid.
  6. Assemble L1-L4. Apply some glue to the L-pieces and attach the Rackjoin. Make sure it alligns with the rack.
  7. Glue on Thinjoin. Make sure the rack is perfectly straight so it will slide well in the tracks.
  8. Repeat above steps with R1-R3.
  9. Test the sliders in the tracks. Make sure they slides well. If not, fix it by sanding it. And maybe lubricate with silicone spray.
  10. Attach the stepper motors with M4 screws.
  11. Attach the gears.
  12. Glue Arduinomount. It is higher on one side - the Arduino Mega is mounted tilted so that the usb connector will be accessible. Place the lowest side towards the center of the clock.
  13. Glue ULN2003Mount and DS3231Mount.
  14. Mount the Arduino Mega and the ULN2003 drivers with small M3 screws.
  15. Attach DS3231 (snap fit).
  16. Connect the wires from the motors to the ULN2003 drivers.
  17. Connect Dupont cables between the ULN2003 drivers and the Arduino Mega as defined in the source code.
  18. Make a harness connector, connecting all the + pins on the ULN2003 drivers to the positive DC connector power cable. GND on the Arduino Mega and all the - pins on the ULN2003 drivers to the negative DC connector power cable.
  19. Connect DS3231 SDA, SCL, 5V and GND to SDA, SCL, 5V and GND on the Arduino Mega.

STEP 5: Software


Arduino libraries:


If you want a 12 hour display (why would anyone want that on a digital clock) set the variable twelve_hour_mode to true

STEP 6: Operation

  1. Slide the grids into the tracks so that the gears engage.
  2. Turn on the power.
  3. Enjoy the show.

87 Comments

I've been obsessed with building this terrific clock since March 2023. I began printing 3D parts in May of 2023. On 10/4/23, I was 100% 3D parts printed! On the same day, I reached 99% complete for gathering the non-3D printed parts, what I call the fiddly bits; screws, wires, stepper motors, etc. I'll share a link to my github for all the G-code I exported from several different slicers for printing on either a Lulzbot, Ender 3, or Ender 3 Pro.

https://github.com/bohicarico/TimeSliderClock

The build quality of my slider bits isn't good enough to allow the clock to function. I initially began the task of sanding the parts. The thought behind the effort was that I could get the woefully misaligned parts good enough to slide under stepper motor power. That it is unlikely. I'm pivoting. I decided to reprint all of the sliding elements. I will take more care in ensuring they're all properly aligned. Anyone considering this project, please avoid my mistake in rushing to join the sliding assemblies. Like me, I think you'll come to regret your haste. Slow down. Get it right the first time!

I added to the sketch the change of daylight saving time (DST) and the blinking of the LED on pin 7. DST is for the Czech Republic, but for other areas you just need to modify the condition.

Clever. Nice idea.
which of these two codes need to be run on the mega for the timer to work?
Any way we can reduce the sound from the motors? It's quite loud but this is an amazing piece of engineering
Hans, your clock project is an impressive example of functional art! I'm adding this to my "Make It" queue. I have an Arduino Mega 2560 reserved for it. I'll print and gather up the rest of the BOM and get to it. I have the will I just need the time.
I pushed the sketch out to the Arduino. One more step done.
I printed two parts today. I'm excited to get this fun clock built.

I made a parts manifest spreadsheet for this project. I'll put it in my github and share the link here for anyone interested.
for me the problem is: there is to much friction, is it posible to sand some bits down
I can't download the library file of ds3231! Does anyone know why?
Hallo miteinander, ich bekomme die Programme nicht auf den Arduino Mega2560 R3, bin leider totaler Laie, kann mir da jemand helfen?
LG Steffen aus CH
Is there anyway to add pin 13 to have it blinking every one second - I could not add it to the sketch, it will not blink!!!
I would be very grateful!
Erik hoffman
Any reply??????????????????????????????????????????????
In timeslider.ino in Setup() set pin 13 as output:
pinMode(13, OUTPUT); // sets the digital pin 13 as output

Then in class Clock introduce a variable e.g.
bool blink13 = false; // whether to light pin 13

Then in displayTime() right after "old_ms = millis();", add
blink13 = !blink13; // flip display of pin 13
digitalWrite( 13, blink13);

If things are still not working then add some Serial.print() statements, and monitor with the Arduino IDE serial monitor. N.B. I have not actually tried this.
More Comments