One day while exploring the bric-a-brac at the markets, I stumbled across an old, Bakelite slave dial from the 1950's.

Slave Dials are clock movements without the actual time keeping circuit. All they contain is the mechanism to drive the hour and minute hands, which can be advanced by an electric pulse. This pulse is sent by a centralised master time-keeping mechanism. They were often used railway stations or large office building to ensure that all the clocks read the same time. You will still occasionally find such dials at markets, car-boot-sales and disposals.

I like the idea of bringing new life to old technology, and so conceived of the idea of melding the slave dial with a micro-controller and internet connection to create a old style slave dial with atomic clock accuracy.

These steps describe the process I went through, and includes all the schematics and source code. This same technique might also be applied to modern clock movements by bypassing the existing pulse-generation circuit.

  • Arduino with WiFi (I used a YellowJacket board from Async Labs, but you could use any Arduino with WiFi or Ethernet enabled or a suitable shield).
  • Stripboard.
  • LM317 Regulator.
  • TIP31 Transistor.
  • 1N4004 Diode.
  • Red LED.
  • 9V Power Supply.
  • DC Power Socket (to suit power supply).
  • 0.1uF Capacitor.
  • 1uF Electrolytic Capacitor.
  • 22R Resistor.
  • 3 x 1K Resistor.
  • 10K Resistor.
  • 100R Resistor.
  • Self-adhesive Velcro.
  • Electrical Tape.
  • Foam (for sound insulation).

Step 1: Identify Slave Dial Characteristics

When I purchased the salve dial, it came with no instructions, packaging or other details. The only markings (other than five decades of grime) were those on the face (SMITH SECTRIC, ACELEC SYDNEY), and some markings on bracket holding the mechanism together (E.C.S. 205/19 MADE IN ENGLAND)). There were markings on the coil, but they were too faint to read.

In order to drive the mechanism, I needed to know how much voltage had to be applied to the coil to reliably advance the hands, for how long, and how many seconds the hands would advance for each pulse. I was concerned about overdriving (and hence damaging) the coil, but also concerned about under-driving it, resulting in an unreliable movement.

I was able to find some general information on these units on the web (thanks to Google). My thanks to the people who put together the English Clock Systems website. It turns out that most such clocks would advance either 30 or 60 seconds depending on the model. The mechanism was specified as a combined resistance of around 3.5 ohms, and a current rating of 0.3 amps, for an operating voltage of 1.05 volts. IN reality, most such units were driven by banks of old dry-cell batteries with a voltage of 1.5 volts, so that is what I aimed for.

Note that slave dials such as this typically had a "shunt" resister is parallel with the coil. The reason for this was so because these clocks were often wired in series. Without the resister, if the coil on one clock went open circuit, all the clocks would stop working. 

Step 2: Design Drive Circuit

The circuit needs to be able to drive the clock's coil at 1.5 volts are there-abouts. I'm sure there are more elegant solutions, but I simply used a variable regulator (an LM317) to supply the voltage, and a the output from this is switched via a transistor (TIP31). Note that due to the voltage drop across the transistor, the regulator actually has to supply around 3V. A diode is place across the clock coil to reduce back-EMF.

The switching transistor is driven via one of the Arduino's output pins. I put an LED in parallel to help with debugging (so I can test the program without having the clock wired up). Finally I wired up a switch to one of the Arduino's other pins. The intent was to use this to enter a configuration mode (e.g. to setup the wireless network settings) however I never actually made use of this.

The Arduino I chose is a YellowJacket from Async Labs. Unfortunately they are no longer making them. If you check their forums (which will remain up for a while), you may find people putting together their own runs (open source hardware never dies after all). Alternatively, a different Arduino could be used. For example, a standard Arduino with an Ethernet shield could be used (with some code changes to accommodate the different network libraries). In this case, using POE (Power Over Ethernet) would also eliminate the need for a separate power cable. Rather than using a network time source, a GPS unit connected to a standard Arduino could also be used. 

I used the freeware version of Eagle to document the circuit, prototyping each segment as I went.

With the circuit design and prototyped on breadboard, I moved to building it on some stripboard. I use a little Java application called DIYLC to design the strip-board layout. 

Step 3: Build and Install Circuit

Assembly was fairly straightforward. I cut a piece of strip-board to size, then cut the tracks at the designated points using a drill bit. Note that I used 

After that its just a case of cutting a piece to size, breaking the tracks at the appropriate points with a drill bit, and soldering everything together. Note that I used a set of single inline header sockets and pin headers to mount the Arduino. This allows me to remove it if needed. I also fitted a DC power socket to suit my power supply.

The PCB was mounted inside the clock using double-sided Velcro. I used some electrical tape to insulate it from the metal back-plane of the clock. The power socket was glued in place using some two-part epoxy. I did have to clean the area a bit first and use a little sandpaper on both the clock and the socket in order to ensure a good bond.

Step 4: Write Code to Drive Clock

The clock code can be split into two parts; the code which will advance the clock to a given time, and the code which gets the current time form the internet.

The clock advance code has a few special considerations:
  • Needs to advance the time in 30 second intervals.
  • If the displayed time is behind, the advance should run faster until it is caught up.
  • If the displayed time is far behind, and it is faster to just wait for the time to catch up rather than trying to get the clock display caught up, then the clock should simply wait.
  • The clock maths has to be able to handle noon/midnight, where the time effectively wraps around to zero.
  • The clock should keep track of the last position of the hands, so that this does not need to be reset if power is lost.
  • There needs to be a mechanism to initially define the position of the hands, so the program can move them accordingly.
The main loop of the application keeps checking if the current time is more than 30 seconds ahead of the displayed time. If it is, then an advance movement is started and the new displayed time is recorded in the Arduino's EEPROM. An advance initially sets the coil drive pin high. A second piece of code called from the main loop checks if the coil pulse length period has been reached, and if so set the pin low again. The code will not try and perform another pulse for a set period of time. I ended up with a coil on time of 150ms, and a minimum off time of 850ms, but this may need to be adjusted depending on your clock's movement.

The code which stores the time in the EEPROM uses a few tricks to get as much life out of the Arduino's EEPROM as possible. Each bit of the EEPROM has a limited number of write cycles before it will fail. To stretch this out, I used one bit for each 30-second interval that the clock could display (a grand total of 1440 possible positions). It uses 180 bytes of EEPROM to store this. At midnight and noon, the array is cleared to all zeros. Then after the first 30 second interval the first bit is set. At 1 minute, a second bit is set and so on until jus before midnight or noon all the bits in the array are set. Hence each bit is written only 4 times a day. That should give a lifespan in excess of 15 years (most likely a good deal longer).

When the clock is powered-up, the last displayed time is read back from the EEPROM.

Adjusting the displayed time is done via a simple web page that the clock serves. This was also useful during debugging.  

Step 5: Write Code to Synchronise Time

The time synchronisation code ended up proving the most difficult. I had originally intended to use NTP (Network Time Protocol) to get the time, however I was unable to get this to work with the web server. Instead I ended up implementing the simpler DAYTIME protocol. This involves connecting to port 13 on a given sever, which then automatically responds with the time in a known format. The code parses this and updates its internal time accordingly.

Two possible server addresses are used. If one fails then the other is tried. These are queried on startup, and every hour afterwards. The DAYTIME server sites recommend you limit how often you query them, and may block your address if abused. 

Step 6: Finish Up

At this point I had a working 1950's Clock which would sync to an extremely accurate network time server every hour. It looks great and is a great blend of old and new.

One last change I made was to add some foam rubber inside the clock body to help quieten the loud 'click' every 30 seconds. It is simply held in place by its shape.

I look forward to any comments, and hearing about other people making use of this or similar projects of their own.
I had occasion to fly in a RN helicopter and the engine RPM gauge was in the same font as your clock.<br><br>I found it interesting as I had seen your clock in the movie 'Brazil' by one of the Pythons (the one from Minnesota). I made the 'Brazil' comment to one of the RN pilots and he said that many British schools had those clocks. Makes 'Brazil' even more bazzar.<br><br>As the owner of a couple of MGs, I'd love to have a Smith's clock. Another reason to travel to England, to go to car-boot sales and such.<br><br>Great Instructable. I've a GE clock of this same style that could use your very same modification.<br><br>Cheers,<br><br>Fin
Very nice project, and well explained!&nbsp; Finally, a great use of the internet without having to use Twitter to do useful work. The place where I work still uses centralized timekeeping in much the same way they did in the 50's, though I dare say with fewer switches and more electronics than they had back then.<br> <br> I gather that the arduino does not actually sense the clock's hand positions, only keeps track of the number of pulses sent to the mechanism. On initial power up&nbsp;I assume that the initial clock position must be defined and input into the arduino firmware.&nbsp;&nbsp;What happens if the mechanism &quot;skips a beat&quot;?&nbsp; Does the operator then have to redefine the hands position manually, mechanically reset it, or can the arduino issue an extra pulse or two to make the clock catch up automatically?&nbsp; Does the mechanism need greasing and/or dust protection to keep it from jamming as &quot;time goes by&quot;?&nbsp; Thanks.
Thats correct. The Arduino just keeps track of where the hands are; there is no feedback mechanism. Hence on initial startup you have to tell it where the hands are. However it DOES then remember this even if power is lost, so you should only need to do it once. The hands themselves cannot be moved manually.<br><br>In operation it has been very reliable (at least the mechanical portion). When you consider how they were originally used, it would have been fairly important that they never miss a beat. I did up the voltage to the coil a little to help ensure this, but most likely this was not really needed.<br><br>If power is lost and the time falls behind, when powered up the Arduino will fast-forward, sending a pulse every second until its caught up. Its rather funny to watch. Apparently some slave dials supported a reverse mode too, but mine does not.<br><br>I used a little light oil on the mechanism itself, but it was in great condition when I got it. It is rather 'chunky' for a clock movement, so it would take a fair bit to jam or damage it. Beyond being flush up against the wall, there is no dust protection (but I doubt much will find its way in).<br><br>Thanks for the comment!
Thanks for the quick response. Can you tell me how long a 9V battery will last powering both the clock coil and the arduino?<br> <br> Good idea on the foam.&nbsp; The minute by minute jogging of my work clock gets loud when I stay late at night to catch up on paperwork.
I'm afraid I'd have to tale some measurements to be accurate (and I won't have a chance for a week or so), but I can provide some rough figures.&nbsp;<br><br>When not performing a pulse, the circuit draws around 100mA (I think much of that is the WiFi, and could probably be improved by adding sleep support to the code). When performing a pulse this rises to 200 to 500mA (I can't remember exactly what this figure was). A pulse lasts 200mA, and is performed once every 30 seconds normally, or once a second during a fast-forward.&nbsp;<br><br>From Wikipedia (http://en.wikipedia.org/wiki/List_of_battery_sizes) we see that a 9V battery has a capacity of around 565mAh. However if you draw more than a few tens of milliamps, the effective capacity will be far lower. Based on that even ongoing the pulses, you would get only around 5 hours, and probably less.&nbsp;<br><br>It may be possible to stretch this significantly; add sleep support to the Arduino and put the WiFi to sleep expect when updating the time from the net (once an hour at the moment). You could also derive a better power supply circuit for the coil (possibly charge a capacitor at a lower current over a longer time). Also, using a switching regulator to more efficiently make use of the 9V (rather than throwing away 4V worth as heat) would help.&nbsp;
My Elementary School had one of these systems timed in the main office off a beautiful deadstop movement pendulum clock that was a real industrial work of art. Nice to see one of the slaves repurposed like this.
Slick Project and well documented.<br>Great Job!<br><br>KK
Great job, and interesting too. <br>However, if anybody just wants an accurate clock, then Radio Controlled clock movements can be obtained in the UK for about &pound;10 or less.
Magnificent clock.<br>Magnificent reincarnation.
Very nice.
Very Nice Work !! <br> <br>5 of 5 stars
Great find, and an inspired project! Thanks for the detailed writeup.
Nice job!
I love the retro look of this device, and the fact that you've melded something 60 years old with something brand new. Good job!

About This Instructable




More by LinusDillon:Make an Atom Synchronised Clock from a 1950's Slave Dial 
Add instructable to: