Analog clock with movable hands

I'm interested in creating an analog clock where the position of the hands can both be a form of output (set programmatically) and input (read programmatically). This means that the position of the hands should be rigid enough not to "droop" under gravity, but should be movable easily by a person. And when somebody moves the hands, it needs to be possible to detect their new position.

Is this feasible? I know how to do this from a software perspective, but what kind of motor and sensor could I use to set and detect the position of the hands, and how would they fit together?

Assume for the sake of this question that I want to avoid the more practical option of having a separate control knob for setting the hands.

You didn't say how big...

You probably want geared-down stepper motors. (Or, a single motor if you can figure-out the mechanics... Of course, commercial clocks don't have more than one motor.)

AC clocks usually use a synchronous AC motor. The line frequency is very accurate and it's slowly adjusted /corrected over time so you'll get exactly the right number of cycles over a month or a year, etc., as long as there's no power outage.

Either way, if the computer/software has to know the mechanical position of the hands, you'll need home sensors (or least a home sensor for the minute-hand). Those will probably be some kind of optical sensors. Then, the clock will have to "find home" every time the software automatically re-sets it.

If the software is continuously aware of the true-time, it can check for mechanical-home once per hour and make any required corrections (and/or it can correct before the hour is up, if mechanical-home comes too soon).

The trickiest part might be the coaxial shaft.

A standard stepper motor has 200 steps per revolution which doesn't divide evenly by 60, so that's the reason for gearing-down. (You'd also need to gear-down if you wanted the movement to appear smooth.)

It would also help to know how many hands and how many positions for each hand.

Hollow-shaft stepper motors are likely to be expensive so I would recommend a gear or pulley connecting the motor to the shift. Cheaper to drill a pulley out to the right diameter.

The shafts or motors can have absolute or relative shaft encoders. Relative (quadrature) encoders will require an index mark to allow re-synchronization when power is lost. With the encoder for feedback you don't actually need to use steppers but you can't easily use a geared DC motor since they are hard to turn manually.

Hi,

And when somebody moves the hands, it needs to be possible to detect their new position.

This could be tricky with coaxial shafts etc, as each shaft, Hour and Minute will each need to have an ABSOLUTE ENCODER to detect any manual change in hands position, and read hands position when first powered up.

Tom... :slight_smile:

You could also do something like this, where the minute and hour hand are interconnected by a gear system, allowing a manual adjustment, but still keeping the correct relative positions of the hands, so for example, at midday, both hands are exactly on 12. (The illustrated clock is a bad example here!)

Depending on the accuracy you require, and the resolution of the encoder, it may be enough to monitor only the position of the hour hand.

Thanks for the ideas so far! To answer a few questions:

DVDdoug:
You didn't say how big...

Flexible on this. I was thinking standard kind of wall-clock size, but something like a desk-clock size would be okay too.

DVDdoug:
If the software is continuously aware of the true-time, it can check for mechanical-home once per hour and make any required corrections (and/or it can correct before the hour is up, if mechanical-home comes too soon).

I should have made this clearer in the original post, but keeping accurate true time is actually a secondary priority.

For some context, an example use of this would be a game teaching kids to tell time with an analog clock, where either they have to set the hands to the time displayed on a screen, or type in the time which the hands have moved to.

I guess it'd be a nice-to-have for the clock to have an actual time-keeping mode, but it's not a necessity.

I'll edit that into the OP too.

johnwasser:
It would also help to know how many hands and how many positions for each hand.

Ideally, three hands with precision to 1/60th of a rotation, but two hands with precision to a 12th would be fine too.

It'd also be ideal for the motion to be stepped (is that the right word?) so that when moving it with your hand, it'd "click" through each second, rather than just smoothly rotating, but again that's a nice-to-have.

To understand people's answers, will a stepper motor allow itself to be rotated while active? Is there a way to adjust how much torque would be required, so that it's the right amount that a person can do it (would gearing do the trick here?) And how, physically, would you attach a stepper motor to an encoder? I've seen this done with gears ( https://www.youtube.com/watch?v=wu-1f2CMlmY ), is that the standard way to achieve this?

Stereotomy:
To understand people's answers, will a stepper motor allow itself to be rotated while active?

The amount of force it takes to move a stepper will depend on how much current is flowing. If you use a PWM (analogWrite()) signal to modulate the holding force you can adjust it to your liking.

Stereotomy:
Is there a way to adjust how much torque would be required, so that it's the right amount that a person can do it (would gearing do the trick here?)

As described above, you can reduce the current through the coils to adjust the holding force. Gears would not help because if they make it easier for the human to turn the motor they also make it harder for the motor to turn the hands and the resolution is reduced.

Stereotomy:
And how, physically, would you attach a stepper motor to an encoder?

Any place with access to a moving shaft would work. The encoder disk could be put on either side of a pulley on a single shaft motor, on either shaft of a double-shaft motor, or on either side of the pulley driving the shaft connected to the hand.

Take a look at this thread https://forum.arduino.cc/index.php?topic=497366.0 follow the link in the original post and watch the video.
The project uses conductive ink to be able to work out what page a book has been opened at. That is a similar, though more complicated, problem than working out what position your clock hands are in.

I am imagining a visible minute and hour hand. The minute hand can be moved by the user and via gearing it drives the hour hand, as suggested by sv6gt. Behind the clock face would be following hands that make contact with lines of conductive ink. The system could therefore startup and, depending on the connections being made, determine its initial state. Likewise if somebody moves the hands you don't need to count rotations just read the final connections.

Effectively you are making your own absolute encoder but it should not be that hard to do. Making good contacts and the effect of wear and tear on the ink may be the main problems.

Hollow-shaft stepper motors are not difficult to get. Obviously more expensive than standard ones but not outrageously so. I'd use direct-drive and use a stepper driver with adjustable current so that the "friction" can be adjusted after installation. That does make the thing kind of deep - at least 10cm behind the face of the clock. An optical encoder disk on each shaft can be used as the feedback to the Arduino.