Voltmeter Clock




This clock tells the time - hours, mins, and seconds using 3 analogue voltmeters. A PIC16F628A microcontroller is used to display the time by varying the voltage to each voltmeter and also provides very basic timekeeping. The Microcontroller code is written in Picbasic Pro 3.

Accurate time is maintained by synchronising the clock to my Master Clock that is synchronised to a radio "atomic" clock.

The clock is based on an instructable "Multimeter Clock" by abbtech see pic 2. The instructable can be found here and website here alan-parekh.com .

I purchased a kit of parts from Alan's site and decided to change the design quite a bit and give the clock a retro industrial look.

I had a different version of Picbasic to the original code so first of all I had to convert it to run on PICBasic Pro version 3.

I added the following.
Switched display On and Off (keeping battery backup as per Alan's design) but also allows me to turn meters Off in full power mode whilst still keeping track of time.

Synchronization to my Master Clock every 30 seconds

Synchronized LED & Re-Synch LED

Synchronization On & Off

Transistor voltmeter drivers

The clock also has a chime board but this is completely separate from the clock and is controlled by my Master Clock so is not covered here.

If you want to see details of this board have a look at my Voltmeter Clock page for details.

In my latest clock I now use a sound board from Adafruit this is far more configurable and has CD quality sound.

Step 1: Design

I wanted an industrial/laboratory look to my clock so for the base I used a large lump of mahogany that had been laying around my workshop for years. I used off cuts to make the frame for the clear plastic cover (purchased from Ebay) and also for the panel meter decorative strips. All these were cut to size on my table saw. See pics 1 & 2

I wanted to use 7.2 x 7.2 (2.8" x 2.8") square 240° display panel meters (pic 3 right) as these displays give a far greater separation between digits but these were very expensive. You may be able to pick up cheap 2nd hand meters from Ebay. Instead I used far cheaper 7.2 x 7.2 (2.8" x 2.8") square 90° display panel meters (pic 3 left) new from Ebay Hong Kong. You can of course use any panel meter you like including horizontal or vertical mounting edgewise panel meters (pic 4). Pic 5 shows the original meter on the left and meters with modified dials on the right.

The three meters are mounted together at the rear of the cases using aluminium angle top and bottom. The meter assembly is then bolted to the mahogany base from the rear by a pair of brackets. This gives the impression that they are floating over the case. To keep in with the industrial look I used large push and toggle switches on the control panel mounted beneath the display. see pic 6 for display, indicators and control panel layout.

Pic 9 shows the aluminium angle running top and bottom of the 3 meters with the meter fixing bolts clamping the meters to the aluminium angle. The 2 meter fixing brackets and studs can be seen protruding from the lower aluminium angle. These are fixed through the mahogany base with studding.

Why synchronize?

Microcontrollers use a quartz crystal as a time base in this case 20Mhz but as this in not exactly divisible by 2 you will never get a precise 1 second pulse. Over a short period this will not matter and will not be noticed. Over a few days the clock will be many seconds out. You could use a real time clock as a time base as these use a 32.768Khz quartz crystal that when divided by two 15 times gives you a 1 second pulse. Given a bit of adjustment and a stable temperature you can get a second a week accuracy.

This clock goes 1 stage further and uses a 30 second synchronizing pulse (you can use any timed pulse) from my Master Clock to stay in sync. I use 30 seconds as my slave clocks are driven by 30 second pulses. Every 0 and 30 seconds past the minute the clock checks for a 30 second pulse if the pulse arrives earlier or later it resets the clock to stay in sync with this pulse.

There are 2 LEDs that monitor synchronization in-sync and re-sync. The in-sync LED pulses each time the a 30 second pulse is received. If the clock is not in sync the re-sync LED lights to show the clock has drifted and has been re-synchronized.

The timelapse video (pic 7) shows this synchronisation in progress. The Green LED shows the 30 second sync pulses arriving and the Red LED shows when the clock has been re-sync'd. The Red re-sync led pulses approx every 6 sync pulses showing that the clock has drifted by a few hundred milliseconds every 3 mins.

This can be seen in normal time in the sync video (pic 8). Synchronization has been turned off for some time to let the clock drift ahead of correct time by 3 seconds as shown by the Master Clock video overlay top centre. The clock can be seen stepping to 12 o'clock and the seconds resetting to zero. When the clock reaches 12:00:03 a 30 second pulse is received and this sets the clock back to 0 seconds. The clock is now showing the same time as the Master Clock in the background.

Step 2: Drawing Dials

To make the dials you need to draw them up on some kind of drawing package.

If you don't have a drawing package I have uploaded 4 types of files including are large jpg file for you to use or modify. In order below file 1 dwg format Autocad, file 2 dwl format, file 3 tcw TurboCAD and file 4 large jpg file zipped up.

I use TurboCAD but any cad or drawing package should work.

There are many different ways of drawing dials but this is the way I do it.

fig 1. Draw the outline of your meter marking the exact center point of the needle

fig 2. Draw 3 arcs. I use the arc center and radius tool. The center point being the needle pivot, the radius being the arc distance, the start point being 180° and the end point being 90°. Do this 3 times for the outer, middle and inner arc.

fig 3. Using the line tool draw 2 lines horizontal lines at the lower point of the arcs. The 1st from the end of the inner arc to the middle arc then the 2nd from the inner arc to the outer arc. These are the 2 elements you are going to radial copy. First radial copy the longer element from the inner to outer arc by selecting this element then choose Modify Array Radial from the top menu. Define the center of the arc by selecting the needle pivot point then set the step angle to -15° (15° into 90° is 6) and the number of steps to 6. This will copy the element rotate it around the needle pivot -15° paste it then do it again 6 times in total. With the last element ending at 90° and being vertical.

fig 4. Shows the results. We now have the 10 seconds lines on our dial. Repeat fig 3. for the 2 seconds lines by selecting the middle to outer horizontal element. This time we need 30 lines at an angle of 90/30 or -3°.

fig 5. Shows the 2 seconds lines drawn and the 10 second line labels added.

fig 6. Shows the full set of dials the mins dial is drawn in the same way as the seconds dial while the hour dial has 12 -7.5° lines drawn on just 2 arcs.

Step 3: Modifying Panel Meters and Printing/Applying New Dials

fig 1. I have used 3 of these Panel Meters from Ebay Size 72mm x 72mm x 57mm

fig 2. Unclip black plastic retaining strip from the left hand side of the meter and then slide out the dial.

fig 3. Dial slides out sideways.

fig 4. Carefully lift up black plastic bezel and remove it and the glass underneath.

fig 5. Now remove any components from inside the meter just leaving the wires to the coil.

fig 6. There are now 2 choices for adding the meter new scale.

Option 1 print out the new scale on stiff paper and stick over the old scale.

Option 2 and the method I used.

fig 7. remove the old scale by rubbing down with emery cloth and then

fig 8. spray paint a new coat of off white (white paint looks wrong on an old clock) paint to the dial surface.

fig 9.then print a new scale onto inkjet transfer paper and apply to the new painted surface. The white backing paper will dry opaque.

fig 10. Once the inkjet transfer paper is dry spray over with acrylic varnish to make the inkjet transfer backing go transparent where there is no ink to reveal the off white dial surface below.

fig 11. completed seconds meter

Inkjet transfer paper and detailed instruction are available from Lazertran.

Step 4: Electronics

The schematic fig 1. shows four basic parts to the circuit. View large version here

Power and backup power




Power is from a 12v power supply via a 5v regulator RG1. Diode D5 prevents power from being fed to the standby batteries. As long as the power is on and the display switch is on the displays are powered on. If power is off D4 prevents the standby batteries from keeping the displays on. D5 will then allow the standby batteries to keep the Micro controller powered up.

Control is via the Pic 16F628A microcontroller see code page for full details.

When the clock is first powered up the PWM outputs will default to about 50% of max output. You will first need to adjust the scale of all three meters. This is done by operating the “Scale Adjust” switch. In this mode only the meter being adjusted will be powered.
The first button “Hour/ Meter Select” (also used to advance the hours when in clock mode) is used to select which meter is to be adjusted.

The second button (also used to advance the minutes when in clock mode) is used to decrease the full scale setting of the powered meter.

The third button (also used to reset the seconds when in clock mode) is used to increase the full scale setting of the powered meter.

The goal here is to move all three meters to exactly full scale. When complete turn the scale adjust switch off to return to normal clock mode, at this time the settings will be saved to non-volatile memory.

The time will also need to be set. The time is adjusted using the three buttons.

The hour button increments the current time by one hour.

The minute button increments the current time by one minute.

The second button resets the seconds.

Once set the time and the “Sync” switch is operated the time is checked against the Master Clock 30 seconds pulses on zero and 30 seconds. If the clock is not in sync then the seconds are corrected on chip and the second hand is moved to show the exact time. In “Display Off “ mode the clock is also kept in sync but only on the 30 second pulse.

Synchronization is from my master Clock via a transistor pulse inverter and 555 timer via the Sync On/Off switch.

Output to the three meters is PWM and is via transistor drivers so many different voltmeters can be used.

Depending on your meters R6,7 & 8 can be changed to lower value if you can't get full scale deflection or to larger values if your meters are over driven.

fig 2. shows the prototyping board layout for the main control and power.

fig 3. shows the vero board layout for the transistor volt meter drivers.

fig 4. shows the vero board layout for the transistor pulse inverter for clock sync and chime trigger.

fig 5. shows the 55 timer board that converts the sync pulses from my master Clock

Step 5: Code



    • Backyard Contest

      Backyard Contest
    • Beauty Tips Contest

      Beauty Tips Contest
    • Barbecue Challenge

      Barbecue Challenge

    25 Discussions


    1 year ago

    Absolutely beautiful design... Thank you for the inspiration.

    1 reply

    2 years ago

    Very nice instructable.


    3 years ago

    Awesome, really awesomw


    3 years ago

    Awesome design! I have asked Santa to bring me the parts for Christmas. Looking at the implementation, there are a lot of moving parts. Would using a clock module help simplify the design? If so how/where would you incorporate it?


    1 reply

    Reply 3 years ago

    Hi joe.andolina

    You could use the real time clock module to help keep the clock on time instead of using a sync pulse from a master Clock as in my design. I think these real time clocks use a serial interface to talk to the microcontroller so you would have to write the code to talk over the I2C interface.


    3 years ago

    I might just have to make this. Out of curiosity, how much current does it draw?

    1 reply

    Reply 3 years ago

    I have not measured it but it runs off 3 AA batteries for some time. If I get time I will measure it.


    3 years ago

    I like your design, I spent much less time on the aesthetics...


    3 years ago



    3 years ago

    Very elegant, very ingenious, rather like the old master/slave clocks by makers such as Gent, with the wood and glass case.

    Interestingly, I have been working on a radio clock arrangement (MSF in UK) to try and synchronise all the wretched programmers and room thermostats that never keep good time and eventually drift 10's of minutes apart. Plus, they're too complicated and too difficult to read with worn out eyes.

    What I have done is hack into a digital MSF clock to get at the alarm output (buzzer). The alarm signal comes out as a minute's worth of closely spaced bleeps. The "pulses" go into an Arduino and if the correct pattern of pulses is received from the clock, the Arduino says "yes, it's 00:00:00" and outputs a pulse which goes into a Hope RF FM 868 kHz transmitter that transmits to multple receivers. I do this to distinguish the alarm pattern from all the other bleeps that the MSF does when buttons are pressed.

    I am replacing all the commercial time-keepers with Arduino-based devices, usually with some type of real time clock (again, not great accuracy in my experience) and at 00:00:00, the RTC has it's seconds, usually good enough, reset to zero. The Arduino clock might be good enough, but the RTC takes care of time, date, daylight saving etc.

    2 replies

    Reply 3 years ago

    Hi Phil_S.

    I used to work on Gent/Synchronome master clocks when I worked in Telephone Exchanges.

    Your system sounds like a very interesting. My old logic Master Clock used to sync every 60 seconds from the DCF77 signal from Germany via a logic decoder. Do you have a web site or can you post some pics of your system?

    I use a lot of 30 second movements in my clocks now but driven by an Arduino master clocks using the German DCF77 signal.

    See my Master Clock here https://www.instructables.com/id/Arduino-DCF77-Mast...

    and bracket clock here https://www.instructables.com/id/Arduino-Binary-7-S... My clocks give out pulses like the old Exchange clocks.

    The clocks use Udo Klein's DCF77 library Udo Klein . His library is outstanding and works through huge amounts of noise. He is now working on an MSF library so may be worth a look.


    Reply 3 years ago

    Hello Oliver

    I don't have much I can publish, but the details are these:-

    The MSF clock is a Precision PREC0018 digital, nothing special. Conveniently, it has a buzzer rather than a piezo, so using it is easy. It has a single 1.5-V AA cell. The buzzer has - & +. The buzzer -ve drops from 1.5-V (yes, odd) to 0-V when it sounds. I connect to the cell -ve and the buzzer -ve. The buzzer +ve does nothing useful, but I bring out all four connections to a stereo plug which leaves the clock functional and in one piece.

    On a scope, I could see that the buzzer operated for 1-minute in alarm, and this was subdivided into bursts at 1 second intervals, with four pulses per burst. Thus you get a total of 240 pulses over 60-seconds. Using a second Arduino to simulate the clock for convenience, I used a hardware interrupt to precisely time the pulses. The Arduino that will be attached to the clock in the finished version has to see a count of 240 regular pulses in a 60-second slot - that confirms the alarm has gone off and not a random button press. I also reset the Arduino after every successful alarm, just to clear the last data out.

    You need to level shift from 1.5-V to 5-V for the Arduino.

    A successful alarm at 00:00:00 (or any other time) outputs a pulse to a bog-standard transmitter - I like the Hope HM-T and HM-R (868-kHz). I use an RF Solutions RF800 series encoder and decoder - the encoder will take three inputs and the decoder will support from 3 to 15 receivers. You could use any transceivers, even XBee's if you have a network.

    End devices will have an RTC (Dallas 1320 or 3238 - numbers off the top of my head). Using any of the RTC libraries that support a time reset, all that is necessary is to reset the seconds once a day to maintain accuracy.

    I'm not smart enough to decode the MSF output, so this was a bit of a hack.

    You probably wouldn't even need an RTC if you used the Arduino Time libraries, but it is a backup.

    I worked in a public utility main office and depot and all the clocks were driven by this rather nice Gent Master clock sited in the technical offices where I was based. A number of us techies coverted this clock with a view to liberating it when the depot was shut down to be relocated. Some other sod must have come in during the night and pinched it - I do know who - before I could. Your combination of analogue meters and new tech in the wood and glass reminded me of the Gent. Very nice job.


    3 years ago

    Flow charts *thumbs up*


    3 years ago

    Hi, nice project, very inspiring.

    One question : the analog meters you refer to have a 500 Vac range (on Ebay spec). but according to your schematic you drive them with 12 Vdc ??

    Should the 100% PWM voltage not be equal to the maximum range voltage of the analog meter ?

    1 reply

    Reply 3 years ago

    Hi strooom.

    The meters can be driven by only a few millivolts. When you take them apart there will be a big resistor. Depending on the value of full scale deflection (FSD) you just change the resistor. In my project you take the resistors out and they get replaced by the transistor drivers and resistors R6,R7 and R8 . You may need to change these values up or down depending on your meters but there is a fair amount of leeway as FSD is adjusted by the control switches on setup.


    3 years ago



    3 years ago

    Brilliant! I greatly appreciate your attention to detail and appearance, but the construction is well beyond my capabilities.


    3 years ago

    Thanks for your comments everyone!