The idea for a ball bearing clock was inspired by the "Idle-Tyme Clock " and "Time Machine Clock". However unlike those designs which have a maze of tracks to deliver the balls back to the start mine has a couple of funnels and a spiral. Also unlike those designs where the motor timing is critical for accurate time and the accuracy will degrade as the motor wears, in my design the accuracy is not dependent on the motor speed (once a minute the motor is turned on and the motor is then turned off when a ball bearing is delivered at the top, it doesn't matter if it takes 1 second or 59 seconds).
To read the clock, start at the bottom and work up. The bottom arm displays the hour, the middle arm displays tens of minutes and the top arm displays the minutes, and the oled display will show the seconds.
The way they work is that once a minute a ball is delivered to the top track which feeds the minutes arm, once that arm gets to 9 the next ball will cause the arm to tip which dumps out all the balls most of which are returned to the bottom but the ball that caused it to tip will go down a different track which feeds the tens of minutes arm, if that arm is full it will cause it to tip and empty and the ball that caused it to tip will feed the hours arm. That means that the top arm will dump every 10 minutes, the tens minutes track will dump every hour, and the hours arm will dump every 12 hours. When the clock goes from 12:59 to 1:00 is the most dramatic time where all 3 arms will dump.
The Time Vortex has a demo mode where balls are delivered continuously or with a small delay.
Video in continuous demo mode: https://youtu.be/z7Dq6jFfYC8
Slow motion video of the big dump, top view: https://www.youtube.com/watch?v=k4OKb21Jx5k
Slow motion video of the big dump, front view: https://www.youtube.com/watch?v=6scgrva1QpQ
Video in demo mode 1 second delay: https://www.youtube.com/watch?v=LVn0acPUzjw
Boring video in normal clock mode: https://www.youtube.com/watch?v=vzpCU1eFGS0
Other parts needed:
At least 29 ball bearings, 9.5mm or 3/8 inch diameter.
N20 metal gear motor (speed isn't critical, I'm using a 12v 100RPM motor)
Arduino nano or clone.
DS3231 RTC module
.96 inch 128x64 I2C SSD1306 oled display
2x tactile push button switches 6mm x 6mm x 5mm
7x Geekcreit WS2812B SMD LED's
2N3904 NPN Transistor (or similar)
1K ohm resistor
1N4948 diode (or similar)
.1uf (100nf) capacitor
Some copper foil
Circuit board (Holder is for 77mm x 60mm x 1.2mm)
Some small connectors (I used micro jst 1.25mm connectors, 2-pin and 4-pin)
Some wire (CAT5 cable works nicely)
Optional 5x M3 x 15 screws and nuts for adjustable feet.
I cut some old circuit board I had laying around to size, it might be on the thin size, I can supply a holder for thicker board if needed.
My bed is 220x220mm, you're not going to be able to print this on anything much smaller. The material I used is PETG, PLA should also work pretty well. I have NO experience with ABS, however I would imagine that you will have problems if you can't print large objects without warping.
All .stl files are provided in the orientation that I prefer to print them.
Everything is friction fit so the tolerances are tight, if your printer is dialed in only minor filling/sanding will be needed, if your printer is sloppy you'll be doing a lot more cleanup. For some of the smaller parts I've included versions with different tolerances, pick the one that works the best for you. The square pins are mostly for aesthetics, and because of the design they could break when removing them if they are too tight. I would make them snug but not too tight. The arm pins are thicker and keep the arms from sliding out of place so they should be pretty tight.
I use cura and the settings I used unless noted otherwise are:
.15 Layer height
1.2 Shell thickness
1.2 Bottom/Top thickness
100% Fill density.
See _Printing_Notes.txt for more details.
I've been working on this for a while and could put it together in my sleep so I'm not sure how much detail I need here. I'll start out with a few notes and will expand as needed as I get feedback.
_importPartsForVisualization.scad can be loaded into openscad. The script loads all the .stl files provided so you can have a 3d model to look at to see how everything is put together. Once the script is loaded in openscad press the preview button, it'll take a few minutes for the preview to come up but once it does it's pretty fast to zoom in/out, rotate the view etc.
See the pictures provided to see how the copper foil is done on the lift tube exit track to form the ball detect switch. I used one strip of foil and cut some tabs that feed through the holes to the backside, once the foil is in place I then used an exacto knife to cut out the narrow gap in the middle to separate the two sides. After soldering the two wires of the connector to the tabs on the back I used hot glue to cover the tabs and wire connections so they don't get torn off.
Also see the pictures to see the assembly of the lift tube cap which contains the motor and a neopixel. The diode and capacitor are soldered directly across the terminals of the motor, the plate that holds the neopixel has a tab which presses against one side of the motor so keep the diode/cap/wire connections all on one side so they don't interfere with that tab.
Make sure all the tracks and arms don't have stringing or blobs as it doesn't take much to stop a ball bearing.
If you print like I do by squashing the first layer into the build plate to get good adhesion then you tend to get an edge that needs to get shaved off, for example the support posts that go into the base are 12mm wide, after printing the width of the post where it was touching the build plate could be 12.2 mm wide and the top could be 12mm, so just shave off that little edge with a razor blade instead of sanding filling the whole thing which would take a lot more work because you're removing more than you need to. However you may still need to do some sanding/filling after you remove that edge because the tolerances are tight. Tight tolerances are needed for people with well tuned printers.
Take one of the simple straight tracks and shave the bottom edge of the hole that connects to the posts, find any post that it can connect to that is pretty clean and see if it fits, if it doesn't than it's probably because of support material residue on the post, but before you start sanding the post make sure the connector of the track is clean, if it is clean than you can clean the post. Once you can attach the track to a post and have a good tight fit, you can then use that same track to do a test fit on all posts, that way you know that if it doesn't fit it will be the post that needs sanding. After testing the fit of the one track to all posts then when you start connecting other tracks if it doesn't fit you will know it's the track connector that needs cleaning. The reason for this approach is that you don't want to over sand one of the connector posts and have a track that is too loose requiring you to reprint the support which takes many hours for the main track support.
The exit hole at the top of the lift tube may need some adjustment. Make sure the balls exit by just "falling out", if they are pinched and pushed out then it can also jam. Pay attention to the upper left quadrant.
Also clean the outer edge of the augers and make sure there are no blobs on the interior of the lift tube. At one point my clock could run for hours at a time and then I would get a random jam. There were lots of tiny blobs on the outer edge of the auger and one of them would catch a random blob on the lift tube and jam.
Another problem spot is on the lift tube entry track where the two parallel tracks come together. Make sure you sand that junction to make sure there are no blobs or stringing. Minor jams will happen there but will clear themselves from the vibration of normal operation or when other balls come in and change the dynamics. If you get jams there that don't clear themselves you'll need to sand that junction a little more.
I would recommend that you don't install the square caps until you make sure that everything is working correctly as you may need to take parts off to sand off blobs you missed or fix other issues.
The clock makes a fair amount of noise so I added a "Quiet Time" feature. When in "Quiet Time" the display will show a message that it's in quiet mode, the display and sign dim, and the motor won't turn on to deliver any balls (so obviously the time displayed by the arms will not show the current time). Once "Quiet Time" is over balls are continuously delivered util the time displayed is correct which has the side effect ofacting as an alarm clock. :)
If a battery is installed on the RTC module than clock will sync back to the correct time after an AC power loss. It works by storing the number of balls that have delivered to a register of the RTC module, so after AC power is restored the clock will read the number of balls that have been delivered and the current time from the RTC, it will then calculate the number of balls that should have been delivered by that time and will then use that information to sync up to the correct time.
If it takes longer than a set time (default is 2 minutes) to deliver a ball than the motor is turned off and an error message is displayed. After the issue that caused the error is fixed (for example clear a funnel clog) then press either button and the clock will sync to the correct time and resume normal operation.
The neopixel below the two buttons will:
Flash green when a ball is delivered.
Turn yellow if in normal clock mode and it has taken longer than 60 seconds
to deliver a ball
Turn red if the time to deliver a ball exceeds the motor time out value
(default is 2 minutes)
Turn blue if the clock is syncing up to the current time (after power
restored, after quiet time is over, or after leaving ball delivery error)
There are a few screens that can be displayed, use the bottom button
to go from screen to screen:
Main Screen Top Button will change the color of the sign
(Displays the seconds or demo mode) Bottom Button goes to next screen
Change Operating Mode Top Button will cycle through the modes:
| Normal, Demo 0, Demo 1, Demo 2
| Bottom Button goes to next screen
Quiet Time Setup Top Button will go to the Quiet Time
| Setup screen.
| Bottom Button goes to next screen
Quiet Time Now Top Button will cause clock to go into
| quiet time mode immediately
| Bottom Button goes to next screen
Reset Seconds Top Button will reset the seconds to zero
| and go back to Main Screen.
| Bottom Button goes to next screen
Info Screen Top Button goes to Main Screen
Can display what you want here) Bottom Button goes to Main Screen
Ball delivery error screen: Press either button to sync.
Sync screen: Press either button to cancel.
In "Quiet Time" mode screen: Press either button to end "Quiet Time" and resume
Quiet Time Setup screen:
Allows you to enable/disable quiet time, set when quiet time starts,
set when quiet time ends, and set the current time.
Quiet Time is disabled by default. If it's not enabled there is no need to
set the current time, the current time is only needed to know when the time
is within the quiet time range.
Increments the highlighted field if it's one of the hour or minute fields
(hold down to keep changing)
Or toggles enabled/disabled if that field is highlighted
Or saves the settings and returns to main screen if save is highlighted
Or exits without saving and returns to main screen if exit is highlighted
Bottom button: Cycles through the highlighted fields.