Retro look accurate digital clock
This digital clock uses 4 display wheels to show the time. I used birch plywood for the cabinet to give the outside a nice look. Side panels are made of dark hardwood for a good contrast and the whole was finished with a silky varnish, not to make it too shiny. The clock is operated by inexpensive small stepper motors controlled by a arduino mega board. Each wheel has its own stepper and driver to change the numbers for each digit.
To get a uniform display for all digits, the wheels were made identical to each other although the tens of hours only requires to display 0 to 2 and the tens of minutes 0 to 5. It is also easier to make 4 identical wheels with the same gears, mounting etc. One could decide to omit engraving the digits not required but it is less complicated to keep everything to the same standard.
The arduino drives 4 Schmalzhaus easydriver boards. these are really uncomplicated to use. they only require a direction signal and stepping pulses and a choise of stepping modes (full, half, quater or eighth microsteps).
An Real Time Clock (RTC) module with a DS3231 chip and battery backup is used to keep time even if the clock is not powered. On the rear side I mounted 5 switches so the time and a few other things can be set.
- CNC router and bits.
- Software for designing and creating the toolpaths (CAM).
- Normal hand tools like screwdrivers plyers nutdrivers etc.
- Sanding machine and sanding blocks.
- Drill and drillbits.
- Glue clamps.
- Soldering iron.
- PMMA (Plexiglass) 3mm (gears) and 2 mm (rear panel and display windows).
- Birch plywood 9 mm and 12 mm.
- Hardwood 15 mm (side panels).
- Polycarbonate (Lexan) 0.75mm for the number displays.
- M5 threaded wire (5mm diameter), 1m length with 20 nuts.
- 4mm Steel wire
- Brass tubing 4mm internal and 5mm external diameter.
- 8 x M4 x 15 countersunk screws and nuts.
- 4 x M3 x 40 countersunk screws and nuts.
- Arduino Mega2560.
- Prototype Shield for arduino.
- universal prototype PCB.
- Schmalzhaus easydriver (4x)
- Small steppermotor (28BYJ-48 5V) (4x)
- Strong permanent magnets (4x)
- Hall sensors with open collector (4x)
- White LED adhesive strips (4x 3 LEDs for 12V)
- 5x Push button make switch.
- 12V 2 A power plug adapter.
- 2 x adjustable switching DC-DC converters.
- NPN transistor, Ic >=100 mA HFE >= 200 (I used BC639-25).
- 4700 Ohm resistor.
- Male and female connectors 0.1" pitch.
- 0,5mm diameter solid core wire.
- 0,5 mm2 flexible core wire.
- Power connector (same as on Arduino)
- Thin liquid CA glue, wood glue, UHU Por, two component plastic glue and Pattex 100% glue.
- Silver and black spray paint.
- Silky varnish.
- Resin core solder for electronics.
The clock consists of three main parts:
- The mechanical part with wheels, gears and motors.
- The electronics based on arduino Mega 2560 easydrivers and RTC module.
- The multiplex housing.
Step 1: Making the Mechanics Part 1 the Wheels and Motor Mount
The clock has four wheels that each independently can display a digit from 0 - 9, making up the time display from 00:00 to 23:59, the tens of hours and tens of minutes wheels actually have too many digits on the wheel. However to make each digit appear the same, simplify design and manufacturing, I chose to make four equal display wheels. Each wheel is made of 3mm Plexiglas (PMMA). One side is closed with only a centre hole while the opposite side is actually an internal gear with 35 teeth. The stepper motor has an 8 teeth gear wheel glued to its axis and is mounted inside the wheel to keep the distance between wheels as close as possible. The gears are available at http://hessmer.org/gears/InvoluteSpurGearBuilder.html , you can generate any combination you require. The motor is held in place by a set of Plexiglas pieces making up the motor mount and the centre axis holder.
The numbers are engraved on 0,75 mm Polycarbonate (Lexan). This plastic is strong, scratch resistant and flexible so it can easily be bend around the wheel. To make assembly easier and get straight and consistent wheels, I made a mold to hold the numbers on the wheels while the glue cures. In the first attempts I used CA glue to glue the parts together. This proved to be a mistake as the paint came off the number strip (in the picture, on the left number strip you can see the issue). In a second attempt I used UHU POR. This glue remains flexible after curing, which is good but has not enough stick to hold the ends together. At the numbers 0 to 9 joint I drilled 1 mm holes through the strip in the wheel and glued pins to hold it in place. In the next part more on the number strips.
Each wheel has a brass rod glued in the PMMA with 2 component plastic glue using a PMMA doubler washer for more stability. A 4mm steel wire is running through the brass rods and the PMMA motor mounts to function as wheel bearing. I used some grease to ensure low friction and wear. In the bottom part two threaded rods M5 are used to hold the motor mounts in the correct position.
On the motor mount a Hall sensor is mounted and on the corresponding wheel a magnet is glued (inside the wheel) at such position that the sensor is activated when the wheel is approximately on 0 position. Exact positioning is covered by software offset compensation. Note, the hall sensors require the magnetic polarization to be correct towards the housing. Ensure you get all magnets and hall sensors in the correct position.
Step 2: Making the Mechanics Part 2 the Number Strips
Numbers for the wheels are engraved and painted. Following are the steps to
get perfect results:
- Take a Polycarbonate sheet of sufficient size and remove the protective foil on one size.
- Spray the Silver paint (or any other colour you want) to cover the entire surface of the sheet, spray multiple layers to get a good covering.
- After the paint has cured, engrave the painted side (0,2 mm deep) with the mirror image of the numbers and cut the strips out.
- Carefully remove the plastic chips with a soft brush.
- Tape the strips to a disposable underground using a masking tape for fragile surfaces, leaving the engraved parts open for painting.
- Spray the colour of the numbers in multiple layers while for checking good coverage.
- Let the paint dry and leave the protective foil on for protection.
It is a good practice to leave the protective foil on until the very end when you are about to mount the final assembly into the housing.
Step 3: The Electronics
The electronic hart of this clock is a Arduino Mega 2560. The stepper motors are driven by Schmalzhaus Easydriver modules. As the motor current is relatively low, no heatsinks are required on the chips. The 12V input power to the Arduino is regulated to 5V by its on-board voltage regulator. Because of the extra current used by the Easydriver chips (not the motors, they are powered separately) the arduino voltage regulator was getting too hot. To solve this, and to provide separate power for the motors, two adjustable DC/DC converters were used to reduce the input voltage to 8,5 V for the Arduino and provide 6V to the motor drivers on the Schmalzhaus.
Pin assignments are as per drawing, you can easily re-assign the pins to your requirement and I recommend to use a different pin for the LED lights. During power up it will flash the lights. Other pins will not do so. Just make sure the LDR is mounted on the rear outside the cabinet and connected to an analogue capable pin. The LED must be driven by a PWM capable pin. In the drawing the transistor used is a BC547 which will handle up to 100mA. If you however plan to use more (each segment uses minimal 20 mA , a medium current transistor e.g. BC639 is required.
The Easydriver boards use separate power for the motor driver part and the logic/input part. To separate the power, the jumpers on each board need to be cut. The 5V for the logic is taken from the Arduino. The Hall sensors are connected to this 5V as well. The hall sensor open collectors and the pushbutton switches require a pull-up resistor which is available in the AT Mega chip and is programmed in software.
To keep track of time, a Real Time Clock (RTC) module (DS3231) is connected by 2wire (I2C) to Arduino pins 20 and 21. The module has battery back-up and will keep running when powered off to keep the time accurately until the next power up. Again the module is also powered by the 5V from the Arduino
Step 4: The Housing
The housing is made up from 9 mm and 12 mm birch plywood cut to shape on the CNC router. About 20 layers are cut to the required shape. The layers in between digits have been machined down to a little more than 6 mm before they were cut out. By using M5 and M4 threaded rods, the layers are positioned in sequence and aligned. the nuts are then tightened to hold the parts together. To avoid glue spilling and oozing out, I did not put glue in between. instead, using thin CA, I soaked the wood from the inside using the glue's capillary characteristics to get in between the layers. Use plenty to ensure good glue penetration. Please note that when using CA make sure you don’t breathe the fumes or get them to irritate your eyes. Do this outside or in a well ventilated area. Remove the threaded rods after the glue has cured. Run some glue through the holes for the rods to allow the glue to soak in there as well. The outside is not glued but left as is. glue and clamp the side panels in place with wood glue and when cured sand the outside until smooth and apply two layers of varnish with in between sanding for best results. Finally the mechanics and electronics can be built into the housing, ensuring no cables or other parts touch any of the moving parts.
Step 5: The Software
The software had some challenges to me. Although I have worked with other compilers, this is my first program in Arduino C. I must say that it is really easy to check and upload the program, just a mouse-click and the program is written to the board (that is, if there are no syntactical errors) and runs immediately after.
Some difficulties to overcome is the particular gear reduction that is part of the motor assembly and also the reduction from motor to wheel. The stepper motor data sheet states the gear reduction is 1:64 and the number of steps for the motor itself is 64. I found out that the motor runs best at quarter stepping, approximately 120 steps per second is about the maximum reliable speed I was able to get out of the motor. The gear ratio however was not exactly 1:64 but rather 1:63.68395. With a reduction of the motor to wheel gear being 8:35, the total number of pulses required for one wheel revolution is 128 x 63.68395 x 4.375 = 35663.012 (the motor needs 128 quarter steps per rev).
Each digit increment therefore requires 3566 pulses. This is 0.3012 pulses short per digit increment. Since each day has 1440 minutes, the fault in 24 hours would be about 433 pulses short. A visible offset from the normal position. To correct the fault, a counter for compensation pulses is added and in addition, each time at exact midnight (00:00) all wheels are synced to 0 position. The second challenge is to keep track of the current wheel positions. I added magnets and hall sensors that go active close to the digit 0 position but are of course not exact and the detection by the hall sensor is active for a few degrees of wheel rotation. These issues were solved by implementing an offset per wheel for the difference between sensor detection and actual 0 position (if the wheel always turns in the same direction, the sensor switch point is consistent to the wheel position).
Below you can find the vector drawings and the arduino program.
Any questions, please ask.