Jump to content


  • entries
  • comments
  • views

Giant 3D Printed Skeleton Wall Clock




Based on some of my other clocks this will be a wall clock for my living room to go above the fireplace.  It will have a dial of around 3ft diameter with a sweep seconds hand as well as the usual minute and hour hands.  It will be driven by a stepper motor controlled by an Arduino Nano with Real Time Clock module to ensure excellent time keeping.  Unlike other clocks it will not have any extras such as moon dial or striking, nor a pendulum.  This will be of the simplest design using an epicyclic gearing principle with minimal number of parts.

  • Like 1


Recommended Comments

As mentioned in the initial description, this clock uses epicyclic gearing to provide the 60:1 and 12:1 reduction ratios between seconds and minutes and between minutes and hours.  This is described in my DIY Skeleton Epicyclic Clock with 3D Printed Gears but I shall repeat it here.

The principle involved is that when a pinion is moved round two spur gears with just one tooth difference and one gear is fixed the moving gear rotates by one tooth for each revolution of the axis of the pinion.  So if the fixed gear has 59 teeth and the moving gear 60 teeth the gear ratio between the rotation of the pinion axle and the moving gear is 60:1.  This is the ratio required for seconds to minutes in a clock.

When the gears are different by two teeth the moving gear turns by two teeth for each revolution of the pinion axle thus if the gears have 22 and 24 teeth the gear ratio becomes 24:2 = 12:1.  This is the minutes to hours ratio.  However, it works out better to have more teeth and a lower modulus to make the motion smoother for 3D printed gears.  Using 44 and 48 teeth gives a gear ratio of 48:4 = 12:1.

Edited by Gina
  • Like 1
Link to comment

I think this is just about it for the overall design.  Some fine tuning to do and the parts have to be fitted to available ball bearings.


Link to comment

Here's just the drive chain.  This is just the gears and ratchet wheel without the main axle and bearings.


Explanation :- 

  1. Green wheel is seconds with red pinion attached
  2. Red and blue gears form the seconds to minutes reduction with the pinion above
  3. Yellow wheel driven by friction from blue gear - provides ability to set time.
  4. Pink pinion on yellow wheel drives minutes to hours reduction
  5. Orange and pastel pink gears plus pink pinion reduce minutes to hours.

Red and orange gears are fixed.  Green, blue yellow and pink rotate on ball bearings.  The ball bearings keep the wheels aligned.

Link to comment

This is how the clock will look on my wall which is primrose yellow.  I may yet reprint one or two parts in a different colour eg. the hour gear which is orange ATM may look better in red.


  • Like 1
Link to comment

Real clock on floor.  The long threaded rod with the yellow sleeve will be replaced with a bolt when I get one.


  • Like 1
Link to comment

Working on the drive unit now.  This is the layout of the stripboard and components.  The RTC (Real Time Clock) is accurate to a minute or two a year.  The stepper motor is a NEMA14.


And the Arduino sketch

// Filename :- Giant_Wall_Clock_v1_2018-11-12
// Software timing from RTC on pin 2 using polling
#include <DS3232RTC.h>    //http://github.com/JChristensen/DS3232RTC
#include <Time.h>         //http://www.arduino.cc/playground/Code/Time  
#include <Wire.h>         //http://arduino.cc/en/Reference/Wire (included with Arduino IDE)
String VerString = " Giant_Wall_Clock_v1_2018-11-08";
boolean lastSqWave = 0; 
boolean ledON = 0; 
int count = 0;  // Used to flash LED
int sqwPin = A6;
int dirPin = 5;  // DIRECTION pin
int stepPin = 6; // STEP pin
int slpPin = 7;   // Sleep pin
int rstPin = 8;  // Reset pin
int ms3Pin = 9;  // Microstepping pin
int ms2Pin = 10;  // Microstepping pin
int ms1Pin = 11;  // Microstepping pin
int enPin = 12;  // Enable pin
int ledPin = 13;  // Internal LED pin
void setup() {
  Serial.begin (9600);     // Enable Serial Monitor via USB
  pinMode(dirPin, OUTPUT);
  pinMode(stepPin, OUTPUT);
  pinMode(slpPin, OUTPUT);
  pinMode(rstPin, OUTPUT);
  pinMode(enPin, OUTPUT);
  pinMode(ms1Pin, OUTPUT);
  pinMode(ms2Pin, OUTPUT);
  pinMode(ms3Pin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  digitalWrite(ms1Pin, 0);  //  full-step mode
  digitalWrite(ms2Pin, 0);  //  full-step mode
  digitalWrite(ms3Pin, 0);  //  full-step mode
  digitalWrite(enPin, 0);   //  enable
  digitalWrite(rstPin, 1);  //  not reset
  digitalWrite(slpPin, 1);  //  not sleep
  digitalWrite(dirPin, 1);  //  set on test
  pinMode(sqwPin,INPUT_PULLUP);   //  RTC timing pin
  setSyncProvider(RTC.get);  // the function to get the time from the RTC
  if(timeStatus() != timeSet) 
      Serial.println(" Unable to sync with the RTC");
      Serial.println(" RTC has set the system time");
  RTC.squareWave(SQWAVE_1_HZ);    // 1Hz square wave            
void runClock(void){
  for (int i = 199; i >= 0; i--) { 
    digitalWrite(stepPin, 1);
    delayMicroseconds(10);     // Make STEP pulse 10μs long
    digitalWrite(stepPin, 0); 
    delayMicroseconds(30); }     //
  ledON = !ledON; digitalWrite(ledPin, ledON); }  //  flash LED 1s on 1s off

void loop(){
  boolean sqUp = ((analogRead(sqwPin) > 500));  // read logic level of 1Hz square wave
  if (sqUp != lastSqWave)  { lastSqWave = sqUp; if (sqUp); { runClock(); } }  //  Call runClock on rising edge of RTC square wave
// End


Edited by Gina
  • Like 1
Link to comment
22 hours ago, Gina said:

Working on the drive unit now.  This is the layout of the stripboard and components.  The RTC (Real Time Clock) is accurate to a minute or two a year.  The stepper motor is a NEMA14.



Hi Gina,

What software is this?, I'm looking into using schematic software myself. 

Link to comment

The layout diagram was done in LibreOffice Draw and the Arduino sketch (code) in the Arduino IDE.

  • Like 1
Link to comment

Finished clock except for the motor drive unit - tested with a DC motor-gearbox.  Arduino Nano arriving tomorrow.  The one I had was faulty.


  • Like 3
Link to comment

Got motor unit working but the motor is very noisy so I've ordered a couple of TMC2208 driver modules (one spare or for other clock) to replace the A4988 driver to stop the noise.

Edited by Gina
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. By using this site, you agree to our Terms of Use.