Introduction: Mechanical-Digital Steel Ball Clock
So I decided to finally learn how to use an Arduino and worked my way up to my very first project, a digital clock that is completely mechanical.
- (1) Arduino Nano
- (2) PCA9685, 16-Channel 12-bit PWM/Servo Driver
- (1) DS3231, Real-Time Clock (RTC)
- (1) TTP223B Capacitive Touch Switch Modul
- (33) SG90 Servo
- (2) 20KG Digital Servo High
- (1) Servo Signal Reverser
- (1) 12V 6A Power Supply
- Walnut Plywood, 0.125"
- Walnut Veneer
- Clear Acrylic, 0.120"
- Carbon Steel Wire
- Small Screws
- Small Permanent Magnets
- 0.25" Steel Balls
- Glowforge Laser Cutter
- General Hand Tools
Step 1: Circuit and Code
Even though this is my first project, the circuitry was actually quite straight forward. Everything connected with each other through the SDA, SCL, ground, and V+ pins.
I wont go deep into the code either since a lot of it was learned from other sources, but it was pretty simple:
- Each servo was controlled through one of the two PCA9685 boards. 7 segments per digit means 14 servos for hours and 14 for minutes. There are also two heavier-duty servos for rotating the housing, 4 for the lift, and 1 for the colon.
- The time is kept and retrieved from the RTC.
- I also wanted to play with a touch sensor so I used one to switch between military and regular time.
Step 2: Prototyping
Digits & Numbers
- For each digital number, there are seven segments and each segment is controlled by a servo.
- One of the biggest challenges was to pattern the servos in the best possible way so I could minimize the size of the clock as a whole. CAD helped with this.
To start I only made a single digit. You can also see the grooves in the lift where I originally intended for the steel balls to rock back and forth to align the balls in the right place. The clock would also change time by dropping all the balls first, but that got a little complicated. Probably a good thing though because the clock is already pretty loud and 100+ steel balls dropping every minute would probably get annoying.
Step 3: Design
Housing (Top Part)
- Each servo is attached to the wire bent into a linkage. The wire holds onto the one segment for the number and there are 4 magnets for each segment. Now repeat about 28 more times.
- The first layer with the magnets, second holding the servos in place, the third holding the electronics, and the backing last. Admittedly, its tightly designed and has poorly located electronics, but oh well.... :)
- The sides hold the two 20Kg servos that rotate the entire housing to the load/unload position.
Note to self: dont use different materials to build. I wanted to have the clock to be mostly clear (acrylic), with wood showing. Working with various thickness materials that also have different kerf sizes when laser cut gave me a huge headache.
Lift (Bottom Part)
- The lifter has 4 servos connected to help raise and lower the lift plate which holds all the steel balls in the locations of all the segments.
- To raise the lift a simple rack and pinion design was used.
- The 12V power comes though the bottom of the base up to the housing.
- I was able to discreetly hide the wires in one side of the legs with a slot for the wires to move without getting pinched.
Step 4: Finishing Touches
Throughout the design I was very conscious of having two versions of this clock. One that looked like wood all around and when I removed the three covers you would be able to see all of the insides and the mechanism working. I realize now that I will always have it with the covers on, but I still think it looks pretty cool naked!
Thank you for taking a look at my first Arduino project and also my first project posted ever!
Participated in the
Make it Move Contest 2020