Voltmeter Clock

This is a clock made from 3 analog voltmeters. The labels are self-explanatory; the left meter shows the hour, the middle shows the minute, and the right shows the seconds. The three voltmeters have a range of 0-5 V and are sent PWM signals from an Arduino to show the correct time. The housing is the lid of a cigar humidor.

The first iteration of the clock used two buttons, one to add time to the clock and one to reduce time. The power supply was from a generic AC adapter going to the barrel jack input on the Arduino. A prototype with this original setup is shown below; The design mostly worked, but it lost time every time it was unplugged, and the time adjustment was clunky.

Later designs replaced the button adjustment system with a real-time clock module powered by a button battery. A 9V battery connector was also used in place of the AC adapter for the sake of versatility.

Breadboard prototype of clock

The next step was to create the backings for the voltmeters. AutoCAD was the most convenient program to use; measurements of the dial were taken and the arc was created in AutoCAD based off of those. A radial array was used to add the tick marks. This is shown below. The sketch was exported and PowerPoint was used to add the remaining graphics. The backings were printed, cut, and glued on the face of the dial.

AutoCAD draft of the meter arc

The construction of the housing came next. The original intention was to have the clock in the front of the humidor, hiding the electronics inside the box and allowing for some hidden storage. Unfortunately, I am an electrical engineer and not a mechanical engineer and may have overestimated the construction of this box. The paperboard it was made out of nearly exploded when I went at it with the drill, ruining the body of the box.

Destroyed box after initial drilling

I was persistent, however, and decided it could be a wall-mounted clock by drilling into the lid. Using a little bit more finesse, I bore the holes and mounted the voltmeters using a hot glue gun.

I soldered the connections, mounted the electronics on the back of the lid, glued the new backings on the meters, and voila!

The code for the Arduino is shown below. Libraries used include the RTC library and a timekeeping library.

#include <DS3231_Simple.h>
#include <Time.h>
#include <TimeLib.h>

//int addTime = 13;
//int removeTime = 12;
int hourMeter = 11;
int minuteMeter = 10;
int secondMeter = 9;
DS3231_Simple Clock;

//function that accepts whether it's 'h'ours, 'm'inutes, or 's'econds and what time to calculate voltage (0-255)
double timeToVoltage(char timeType, int timeIn) {
  const double HOURS_MULTIPLIER = 23.1818;
  const double MINUTES_SECONDS_MULTIPLIER = 4.25; //255/60
  int twelveHr = timeIn;
  if(timeType=='h'&&timeIn>12){
    twelveHr = timeIn-12;
  }
  if(timeType=='h'&&timeIn==0){
    twelveHr = 12;
  }
  switch(timeType) {
    case 'h':
      return (HOURS_MULTIPLIER)*(twelveHr-1);
      break;
    case 'm':
      return (MINUTES_SECONDS_MULTIPLIER)*timeIn;
      break;
    case 's':
      return (MINUTES_SECONDS_MULTIPLIER)*timeIn;
      break;
    default:
      return 0;
  }
}


void setup() {
  //pinMode(addTime, INPUT_PULLUP);
  //pinMode(removeTime, INPUT_PULLUP);

  pinMode(hourMeter, OUTPUT);
  pinMode(minuteMeter, OUTPUT);
  pinMode(secondMeter, OUTPUT);

  Clock.begin();
}

void loop() {
  DateTime MyDateAndTime;
  MyDateAndTime = Clock.read();
  /*if(addTime == LOW){
    MyDateAndTime.Minute = MyDateAndTime.Minute + 1;
    Clock.write(MyDateAndTime);
  }
  if(removeTime == LOW){
    MyDateAndTime.Minute = MyDateAndTime.Minute-1;
    Clock.write(MyDateAndTime);
  }*/
  double hV = timeToVoltage('h', MyDateAndTime.Hour);
  double mV = timeToVoltage('m', MyDateAndTime.Minute);
  double sV = timeToVoltage('s', MyDateAndTime.Second);


  analogWrite(hourMeter, hV);
  analogWrite(minuteMeter, mV);
  analogWrite(secondMeter, sV);
}