Maker Pro
Arduino

DIY Arduino 3D Printed gear Clock

December 18, 2021 by Mirko Pavleski
Share
banner

In fact, it is not a very precise clock, but a visually interesting device. It consists of a set of gears powered by a small stepper motor.

Hardware

Software

1 Arduino IDE

Tools

1 Soldering iron (generic)
1 Solder Wire, Lead Free

Today I will show you how to make a 3D Printed Arduino clock. In fact, it is not a precise clock, but a visually interesting device.

www.pcbgogo.com

It consists of a set of gears powered by a small stepper motor. The stepper is controlled by Arduino nano, on which is uploaded a simple sketch, and a ULN2003 motor driver board.

The project is taken from Thingiverse :(https://www.thingiverse.com/thing:4930786), Where you can find more detailed instructions for making it. I am a fan of unusual clocks, so in my previous videos, you can see a whole collection of such devices powered by Arduino.

When the power is turned on, the stepper starts moving the Seconds arrow one step at a second. The hands for minutes and hours move successively through the set of gears, of course at a correspondingly slower speed. The motor was turned off during waiting, and the delay was adjusted to keep the time.In this way, the power consumption is very small, and overheating of the stepper is avoided.

Let me also mention that the 3D Printed parts are made on "Geeetech I3 Pro B" 3D Printer, and PLA material was used. Print resolution is 0.2mm, and infill 25%.

Schematic.jpg
#include <Stepper.h>
//souce code for 28BYJ-48 (ULN2003)

#define MOTOR_1   (8)
#define MOTOR_2   (9)
#define MOTOR_3   (10)
#define MOTOR_4   (11)
const int NUMBER_OF_STEPS =64;
const int RPM = 10;
const float GEAR_RATIO = 64;
int csec;

Stepper stepper(NUMBER_OF_STEPS,MOTOR_1, MOTOR_3, MOTOR_2, MOTOR_4);
void setup() {
  stepper.setSpeed(RPM*GEAR_RATIO/2.0); // speed for movement
  csec=0;
}

void loop() {
  int  sstep;
  delay(1000-1000/RPM-2);  // delay for 1 min, 1000ms-60000ms/RPM/60-proc.time
  if(csec%7==0){
    sstep=37;
  }else{
    sstep=36;
  }
  stepper.step(sstep);
  stopMotor();
  csec++;
  if(csec==60) csec=0;
}

void stopMotor() {
  digitalWrite(MOTOR_1, LOW);
  digitalWrite(MOTOR_2, LOW);
  digitalWrite(MOTOR_3, LOW);
  digitalWrite(MOTOR_4, LOW);
}

Related Content

Comments


You May Also Like