Arduino Advice - Stepper Motors

Hello all,

I am an absolute newbie when it comes to arduino/coding, so need some advice on a project.

I'm working on a clock design that will have various mechanisms to show time, date, month etc.

There will need to be 7x stepper motors, driven by an Arduino board. Each motor drives a specific element to show the correct information (i.e. 1 motor will be used to show MONTH etc.).

All motors can then be controlled by the board to rotate a given amount, at a specific time - i.e. every minute, a motor will be turned by 1/60th of a rotation.

In order to set the current date/time, there would need to be an interface on PC to allow the user to move each element forwards or backwards to adjust - or better yet, grab the current date/time from the computer.

What kind of setup would I need to achieve this?

If possible, would there be any way to add bluetooth connectivity, to allow the user to adjust the date/time with an app?

In future, we plan on scaling this design down, to the size of a wristwatch (using tiny stepper motors, control board (maybe nano?) and battery, with micro USB charge). Not sure what options there are for this, but open to any advice.

As I said, I am a total newbie to this environment, but I am an engineer, with light electronics knowledge. So any help on this is appreciated.


Stepper motors are very inefficient as they need full power all of the time to hold position even when stationary. You can de-power a motor but there is a risk that when it is next powered it will move to the next or the previous step position rather than the step at which it stopped. I have no idea how great is that risk but those errors could accumulate over time for a long running project.

Also, stepper motors have no sense of their absolute position. The normal process is to run the motor towards a limit switch at startup to establish the HOME or ZERO position.

I can conceive of a clock system that gets the time from a Real Time Clock module and at startup it would zero all the stepper motors and then position them for the current time.

Most stepper motors don’t have the ability to move in 60ths of a revolution. The norm is 200 steps per rev and the small 28BYJ48 motors do 2048 steps as they have step-down gearing. However I suspect the small error (between, say, 3 and 4 steps) would not matter as long as it was corrected after a few additional movements.

The other issues that you raise are all easily implemented.

Hello Robin2,

Got'ya. That makes sense.

Would it be a better solution to use servos, or would this essentially run the same problem?

Servos that can track their position have a limited amount of movement. For most of them it is about 160° to 180°. You can get some that go closer to 360°. And you can get sail winch servos that can move through about 3 to 6 revolutions with position control - though I assume the control is less precise.

If you get a continuous rotation servo (often incorrectly referred to as a 360° servo) then you only have control of speed and direction, but not position.

You can get rotary encoders that fit onto a shaft and produce various numbers of pulses as the shaft rotates. That can be used by the Arduino to determine the position of the shaft. However unless you get an absolute position encoder (which are a good deal more expensive) you still have the problem of determining the ZERO position when the Arduino starts. And reading a lot of encoders without the risk of missing a step can be hard work for an Arduino.

The old clock makers solved all these problems with gears :slight_smile:


PS ... it might be a nice (and unusual) feature whether using steppers or servos if all the dials were to go through the reset procedure at midnight.