Gimbal Clock
As I was trying to come up with new ideas on how to display time, I came across these 3D printed illusions where numbers or letters appear different when viewed from different sides. You can find more examples when searching for "dual letter illusion". The effect is created by extruding different numbers/letters from a block after 90° rotation.
In my clock each block can be rotated along two axis hence the name gimbal clock. The project gave me a good excuse to use some of the many servo motors that I still have left over from my Servo Wordclock project.
Supplies
The project uses very few parts as the electronics are rather simple you just need the servos, a driver board and a microcontroller. The mechanical parts were fully 3D printed from PLA.
- 13 pcs MG90s servos
- PCA9685 PWM driver board
- Wemos D1 mini
- 3D printer
CAD Design
One of the main challenges of this project was the design of the number blocks. At first, I searched for a "square font" where all digits have the same height and width which allowed to extrude them from a simple cube. I then figured out how to arrange the digits in order to have as many of them displayed by a single block. One of the constraints was that I wanted to rotate just around two axis and with a maximum rotation angle of 180° for a standard servo. In order to have the digits more closely together I even constrained the rotation angle of the vertical axis to 90°.
In the end I came up with a design whre I placed the digits from 0-5 for the ten-minutes on two blocks and the digits from 0-2 for the ten-hours on just one block. For the digits from 0-9 (hours and minutes) I needed three blocks. The blocks which are unused are rotated by 45° so that the digits are "unreadable".
3D Printing
All parts where 3D printed from PLA. For the number blocks I changed between black and orange filament. The number blocks and servo holders where printed with supports. The housing was divided into two parts in order to fit on the print bed of my MK4. All stl files can be found on my github.
Assembly of the Housing
The two parts of the housing were joined with super glue. I then attached the Wemos board with hot glue and the servo driver board with M2x4 screws.
Assembly of the Gimbal Mounts
Assembly of the gimbal mounts is rather straight forward
- attach servo motors to gimbal mounts
- attach number blocks to servo motors
- fix servo cables with zip ties
- attach servo motos and gimbal mounts to base plates
Wiring Electronics
The electronics were wired in the following way.
Wemos D1 mini <-> PCA9685
D1 <-> SCL
D2 <-> SDA
5V <-> V+
3.3V <-> Vcc
GND <-> GND
horizontal axis servo motors (from bottom to top) <-> PCA9685
ten-hours <-> CH0
hours <-> CH1-CH3
ten-minutes <-> CH4-CH5
minutes <-> CH6-CH8
vertical axis servo motors <-> PCA9685
ten-hours <-> CH12
hours <-> CH13
ten-minutes <-> CH14
minutes <-> CH15
Code
The code was written with the Arduino IDE. After uploading the KeypadControl() function was used to manually move the servos to the desired position for each digit. The positions are then document in the servos.h file.
After commenting out the KeypadControl() function the clock can be run in normal mode where it creates an wifi access point that you can use to configure your wifi settings. It then restarts and connects to your local wifi and fetches the time from an NTP server.
The code can be found on my github.
Concluding Remarks
I like the clock because the design and built was not too complicated but the working principle is still new and I believe has not been done before. There are a few things though which could be improved
- using LEDs to indicate which number block shows the current digit. Maybe illuminating them from the inside using transparent filament
- making everything less wobbly possibly by using larger servos and maybe adding a counter balance to the gimbal mounts
- improving the number block design especially for the digit "9" which is hard to recognize