I didn't think it was possible, but recently I came across this YouTube video and its associated blog post (in Japanese, which I was able to understand thanks to Google Translate):
Here's a diagram to contrast the pulses sent to the clock lines to turn the clock backwards, versus driving it forward:
As you can see, during the first time step, instead of sending a single positive or negative pulse, you send a short pulse, wait a little, then send a longer pulse in the opposite direction. Then in the next time step, a mirror image of the pulses in the previous time step is sent. The duration of the pulses has to be experimentally determined for different clock motions.
For example, I was able to use this follow code to move the second hand on my clock in a reverse motion reliably:
int tickpin = 25; void rtick() { digitalWrite(tickpin, HIGH); delay(10); digitalWrite(tickpin, LOW); delay(10); tickpin = (tickpin == 25 ? 27 : 25); digitalWrite(tickpin, HIGH); delay(30); digitalWrite(tickpin, LOW); }
So the short pulse is 10ms, the short wait is also 10ms. The longer pulse is 30ms.
Here is a video of the clock in reverse motion:
I was able to reverse-drive the clock reliably up to 4x speed using the code above. I pause the second hand after every 60 ticks, and noted where the stoppage point is. Then I let the code run overnight and came back in the morning to check that the second hand is still stopping at the same place.
But once I tried increasing the speed to 5x or 8x, slippages started to occur.
Comments
Post a Comment