Introduction: The BallClock - a Minimalist Clock-Design

About: My profession is chemistry. And my passion is all kind of technical related things. I like developing electronics, designing things and 3D printing. I like astronomy and physics, sience and technology. I love …

The BallClock

A Minimalist Clock-Design

CC Attribution - NonCommercial - ShareAlike 4.0 International license (CC BY-NC-SA 4.0)

02/2023

This is my design of a minimalist clock. It shows the time via small steel balls that move across a flat carbon clock face as if by magic. There are no numbers or pointers on the clock face.

Inspired from tomatoskins' "Mesmerizing Magnetic Wall Clock" in Instructables I designed this Ball Clock which is mostly 3D printed. The principle is similar to tomatoskins solution but my design is completely new and comes up with additions and a new electronic and software.

The ball moving mechanics are easy to adjust with moveable ball bearing holders. The complete case and the gears are fully 3D printed. So "non-wood-workers" can build this clock too. The clock face is made of a round carbon fiber sheet with a shiny glossy surface which looks very technical and modern.

The Features:

  • detachable, freely moving steel balls for hours, minutes and seconds to show the time
  • glossy carbon fiber sheet as clock face
  • all parts 3D printed
  • customized PCB with all electronic components in one PCB
  • arduino sketch with self-calibration and initialization
  • seconds wheel can be switched off if you want it less esoteric
  • buttons for adjusting the time (hours and minutes), start a calibration and switching the seconds on and off

(as alternative you can use an acrylic sheet that reveals the technical details and shows the incredients running)

I have written this description to the best of my knowledge and belief. However, if you decide to build this, use this description at your own risk!

Have fun!

Supplies

Before you begin:

The assembly of this clock is easy and straightforward. I've made some videos to help with the build that may be useful to someone, but they are not absolutely necessary. Feel free to watch or skip them...

Assembly of the Clock as CAD animation: https://youtu.be/u9UfpBMMZIc

My teen-age daughter builds the clock fast forward: https://youtu.be/LH0MK0wUMLs

PCB Assembly: https://youtu.be/UaXBi_bNUzs

Programming the Controller: https://youtu.be/UoYrFd_WTOE


Tools:

Here are some essentials:

3D-Printer:

Because some parts are relatively large, you must have a 3D printer with a bed size of nearly 300 x 300 mm or you use a 3D printing hub for the large parts. My printer is a Voron 2.4-300 and I could print all the parts on it. As printing material I used PLA from different manufactures in different colors. Other materials, e.g. PETG, should work as well.

Electronics:

You need some tools and skills regarding assembly of a circuit board. I designed the PCB with Eagle and let produce it with an online PCB service. I used EuroCircuits in Germany for that. Most of the PCB components are SMD size. To assemble these you need a small soldering iron, tweezers, good magnifying glasses, patience and a calm hand. For experienced and ambitious makers no problem!

Please find all electronic related things like circuit schematics, board files, assembly sheet and bill of materials for the circuit board in the folder "electronik" on my github ( https://github.com/reparator/The-BallClock). If you want to order a PCB you can use the file MyBallClock.brd and send it to a PCB service of your choice.

Programming Tool:

FTDI-USB-Programmer (see Step 17)

Find the arduino code on my github https://github.com/reparator/The-BallClock/tree/main/Code

Clock Assembly Tools:

No specialities needed. Some screw drivers, allen keys in different sizes and small wrenches. At least a soldering iron to press the melt insert nuts into the plastic.


Bill of Materials:

Optional:

Optional Openframe Version:

Optional:

  • 1 x Vinyl-Plot ElectronikboxPlot1.svg
  • 1 x Vinyl-Plot BackplatePlot1.svg

These are Vinyl-Plots of backside of the part Backpanel and ElektronicBox. I used the plots to achieve an absolute flat and shiny surface of the widespread backside of the 3D-prints. That is absolute luxary for a perfect shiny visual effect and has no other functional aspect. Just if you want it 100 % perfect :-).

To use these: Plot the files on a plotter in black vinyl (take care: the svg-files are horizontal mirrored so that the vinyl sheet is on the backside), strip off the matrix and the hole parts and transfer the sheet to the flat sides of the 3D printed parts (See the video: Step 2).

ATTENTION:

One safety remark:

NdFeB-magnets (Neodymium-magnets) are very strong and have to be handled carefully. If two of them collide they can break into small, sharp pieces. Also they are dangerous for people with heart peace-maker.

Keep children away from these magnets. Follow the instructions of the manufacturer.

Printed Parts:

I uploaded all STL-Files on Thingiverse: https://www.thingiverse.com/thing:5811567

I suggest to print the parts in PLA (different colors for hour-, minutes- and seconds-part and for the pushbutton-caps).

Printing parameter I used:

  • Base layer high 0.2 mm
  • 4 Perimeters
  • 3 Solid layers top and bottom
  • 30 % Infill
  • No support needed

The color of the parts is given by the identifier in brackets:

[r]: red, [o]: orange, [y]: yellow, [b]: black, [w]: white

Feel free to change it at your choice.

What you need:

  • 1 x [r]HoursGearV2.stl
  • 1 x [r]HoursRing.stl
  • 1 x [r]HoursRitzelV2.stl
  • 1 x [r]HoursStepperSupportV2.stl
  • 1 x [o]MinutesGearv2.stl
  • 1 x [o]MinutesRing.stl
  • 1 x [o]MinutesRitzelV2.stl
  • 1 x [o]MinutesStepperSupportv2.stl
  • 1 x [y]SecondsGearV2.stl
  • 1 x [y]SecondsRing.stl
  • 1 x [y]SecondsRitzelV2.stl
  • 1 x [y]SecondsStepperSupportV2.stl
  • 1 x [b]BasePanel.stl
  • 1 x [b]ElectronikCover.stl
  • 1 x [r]Kappe.stl
  • 1 x [b]Kappe.stl
  • 1 x [w]Kappe.stl
  • 1 x [y]Kappe.stl
  • 18 x [b]HalterBearing.stl
  • 18 x [b]HalterBearingUpper.stl
  • 1 x [b]Staender.stl
  • 1 x [b]HalterFront.stl

For the open frame version:

  • 1 x [b]HalterFrontopenFrame.stl
  • 1 x [y]ZeigerSeconds.stl
  • 1 x [o]ZeigerMinutes.stl
  • 1 x [r]ZeigerHours.stl



Step 1: Prepare Ring Retainers

Assemble the 18 ring guides as shown in the pictures.

First press the melt-inserts with a soldering iron into the two outer holes of part "HalterBearing.stl". The temperature of the soldering iron should be in the range of 370 °C for PLA.

Add a M3 washer to the plastic pin in the middle, than one bearing 3x8x4 mm and another washer M3. Cover the whole thing with the printed HalterBearingUpper.stl.

Step 2: Prepare Base-Panel

Press twelve of the inserts into the marked holes of part BasePanel.stl with a soldering iron. You can see the positions at the picture.

Step 3: Prepare Geared Rings

Press a small cylindric Nd-magnet 5 mm Diameter x 8 mm Length into the hole of each geared ring.

Step 4: Prepare Stepper Motor Supports

Press the inserts into the motor mount and assemble the stepper motor with two washers M3 and two M3x5mm hexagon socket head screws. Repeat this for each of the three motors.

Step 5: Attach Second-Ring Retainers

Now assemble six of the former prepared ring holders from Step 1 with two M3 x 12 mm bottom head screws each. Push the screw from the backside through the elongated holes in the most outer position and fix the retainers with them.

You don't have to tighten the screws too much. The whole retainer has to be moved later.

Step 6: Mount the Stepper Motors

Take the stepper motors from Step 4 and mount these with two M3x8 mm button head screws from the backside into the base panel. The right position can be seen in the pictures or the assembly video.

After that press the drive gears (parts Seconds/Minutes/HoursGear.stl) onto the motor shaft. The flat side must face-up.The drive gears must sit very close to the baseplate but should not touch it. Some fine adjustment could be neccessary. The drive gear must rotate freely without scratching the bottom.

Step 7: Mount All Retainers

Now add the remaining twelve retainers (from Step 1) in the same way as in Step 5 for the minutes and hours positions. Fix them slightly with 24 bottom head screws M3 x12 mm, but not too much. They must still be movable.

Step 8: Mount the Geared-Rings

Next step is assembly of the geared ring for seconds (the yellow one). Lay it in the gaps of the ring holders and slide them slightly to the center of the baseplate. You should try to stay here as concentric as possible. Perhaps you have to loose the mounting screws of the retainers again a little bit. Adjust the holders in a way, that the seconds geared ring is freely rotateble but does not fall out of the retainers. A slide contact to the bearings is acceptable, but the ring should not block. Take care in adjusting this right, it will save you trouble later.

Repeat this for the orange Minutes-Ring and the red Hours-Ring.

The result is shown in the pictures.

Step 9: Prepare the Small Gears (Ritzel-Parts)

Next assemble the small gears (Ritzel-Parts). They consist of the printed gear (Seconds/Minutes/Hours-RitzelV2.stl), two bearings 3 x 8 x 3 mm, a button head screw M3x16 mm and a washer M3. Simply press two bearings into the gear and push the screw through both.

Step 10: Assembly of the Small Gears

The Ritzel-Parts will be assembled into the elongated holes of the baseplate and they should touch both gears (Geared-Ring and Motor-Gear) of the same color to build a geared transmission. Take care - especially with the orange ritzel - that these do not touch the outside of the other Geared-Ring. In this case you have to loose the related ring holders again and move the ring gear a little bit to achieve the needed space. The stepper mounts are movable either in a limited range. Fix the ritzel gears with a washer and a nut from the other side of the holes. The result should look like in the pictures.

Attention again: Take care that the parts gear into each other but not that strong that a smooth motion is not possible anymore. A little bit of sensitivity is neccessary here.

Step 11: Mount the Hall Sensors

Solder three wires (red, blue, black) on each Hall-Effect sensor. If you look at the labeled side, first is red (+5V), the middle black (GND) and the right blue (SIG). Secure the joints with heat shrink tubes. Bend the wires near the sensor in 45 degree, with the labeled side downwards (see picture). Now glue these sensors in the rectangular holes of the basepanel. You can use a small portion of hotmelt glue for that. Take care, that no glue drops through the hole onto the geared ring underneath the hole. The labeled side of the sensor must face downwards.

Step 12: Mount the Electronics / PCB

Some words to the Electronics:

You need a special PCB to assemble this clock. You can order one from PCB etching service (Eurocircuit or similar) with the attached *.brd-Files (See Folder Electronics on Github), but you have to solder the components by yourself.

The circuit is based on Arduino-principle. You need a Atmel 328P-AU (TQFP) with bootloeader programmed to write the arduino sketch on it. So before you solder the main chip you have to flash a bootloader on it. There are many instructables here on this platform how you can do that. Most of them are for the DIP-Versions of the Atmel 328P. As I use this chip very often I designed my own programmer for that. I will come up with another instructable regarding this point.

Take the BOM for the components from the schematic and the file BallClockBOM.txt.

Here is a video, how I assembled the PCB, for those who are not familiar with SMD soldering:

The BallClock - PCB Assembly

Mounting the PCB:

Take four Nylon pillars M3 x 8 mm with threads and screw them into the dedicated inserts. Put the colored caps onto the pushbutton pins of the PCB. Now fix the PCB with four Nylon pillars M3 x 12 mm. Fix at least the PCB cover (ElectronikCover.stl) with four ISO10642 M3x8mm hexagon socket countersunk head screws.

Step 13: Screw-On the Pillar

If you want to dispose the clock on a desk you can assemble now the stand with two screws M3 x 8 mm onto the backside panel.

Step 14: Prepare the Carbon-Face-Plate

Glue the part HalterFront.stl with a small portion of plastic glue or super glue (I used Uhu Hart Kunststoff) onto the carbon face plate. Take care the carbon plate and the Halter-part are concentric.

One remark regarding the carbon face plate:

Do not take the bait and try to cut the round face plate sheet yourself. Carbon fibers, especially the dust of the fibers, which occurs during cutting, is very hazardous and can cause lung cancer. Whereas the ready made round-cut face plate is not dangerous nor harmful.

Step 15: Balls Garage

Press three cylindric Nd-magnets 6 x 3 mm into the side holes of the basepanel provided. Use some super glue to fix them if they do not snug. These magnets are to store the magnets during cleaning the face plate or transport. This step is optional.

Step 16: Wiring Motors and Sensors

Attach the appropriate crimp connectors to the cable ends of motors and hall sensors. The pictures show you how they get wired to the ballclock board.

If you bought the steppers with driver PCB included they will have the right plug already mounted. But take care of the right wire assignment. On my PCB the stepper assignment is as follows (yours could be different!):

5 Pin JSH-XH:

1 - +5V red

2 - Coil 1 orange

3 - Coil 2 yellow

4 - Coil 3 pink

5 - Coil 4 blue

Add the jumper in JP1 towards the JST-XH05 connectors to supply the steppers with 5 V. If you have 12 V steppers, you can jumper JP1 in the other direction to supply the drivers with 12 V (if you have a 12 V wall power supply). Take care: The above mentioned steppers are for 5 V only!

Step 17: Flashing the Processor

Flashing the processor is quite simple due to the Arduino environment.

Tool you need:

FTDI-USB-Programmer (This is only an example).

Plug your Arduino FTDI programming tool into the 6- pin programming input header on the BallClock board (Pay attention to the right direction of the 6-Pin header, GND is at PIN1 of JP2) . Here is an instructable how programming the arduino with FTDI-programmer has to be done: https://www.instructables.com/Program-Arduino-Mini-05-with-FTDI-Basic/.

Start your programming environment (PlatformIO in my case).

Download the code from github: https://github.com/reparator/The-BallClock

Put the downloaded libraries (from GitHub-folder "Code") into the appropriate folders of your programming environment. Select as target device "Arduino UNO". Take care to use the right serial port.

Load the ballclock code (file main.cpp in the software folder), compile and upload it to the ballclock board.

Thats it!


Step 18: Mount the Carbon-Face-Plate

The former prepared Carbon face plate is now attached to the base plate from the front. It should stick snug without glue and is removable.

Step 19: First Start and Operation Instructions

First time startup

ATTENTION:

Double check the PCB board for short circuits!

Double check the wiring of the components (motors, hall-sensors, power-supply)!

Now plug the 2.1 mm male connector from the wall power supply into the ballclock boards jack. If everything went well (no smoke :-), first of all nothing happens. The clock waits for user input. Now short-press the white pushbutton:

The clock initializes. The balls are moving to the hall sensors and stop.

Press the white button again, but now perform a long-press (~ 1 sec).

The clock starts is calibration: The balls run two times to the sensor and stop again. This takes a few minutes. During that movement the clock counts the necessary steps for one revolution and store the values into its EEPROM.

When calibration is finished, attach the balls at 12 o’Clock Position, than press the white button again.

The clock should run now.

Operation instructions

Take a look at the operation manual on github (manual) where setting the time, calibration and initialization are described in detail.

Have Fun with your new minimalistic Clock!

Clocks Contest

Second Prize in the
Clocks Contest