Main Content

An Arduino-based graphical flip clock. Bonus faces because theres room. Really minimal enclosure. I’d had the idea for a graphical flip clock for a while (run-length encode half-digit foreground/background data, draw every n-th row to get the look of a tipped split flap) but it was on the back burner. Then I found a pretty nice 3.5 320x240 colour LCD (ILI948x driver) on a local market website. After implementing the clock I found I had room in the sketch and was inspired by the colourfulness of the LCD, so slapped in some other faces based on code from earlier projects; a cubist clock, a triangle clock and a pong clock. The LCD is a shield socketed onto a blank intermediate shield with RTC and push-buttons directly attached. The intermediate shield is socketed to a Uno, creating a quite thick “sandwich”. I went with an ultra minimal enclosure, front and back clear acrylic plates.

DETAILS
Some more detail I wasn’t able to add before:
The main clock display is the day, date and month in smallish flip-style digits across the top of the LCD (landscape mode). The time is in big digits across the bottom. As a bonus, across the middle there’s a blinking/flipping colon and also a coloured digit indicating the number of days until I need to put out either the rubbish bin (red) or the recycling (yellow). It’s alternate weeks and I keep forgetting (this display is optional).

The time digits change with a detailed 3-step animation (top flap at 41°, 90° and 131°). The angles come from skipping every 4th row of the digit data, so it’s acos(3/4)=41°, close enough to 45°!

The LCD inspired me to add in some additional clock “faces”:

CubeClock

The LCD colours are appealing, so I experiment with coloured cubes. The look is based on this font www.dafont.com/kubics-rube.font

Triangle Clock

An adaptation of an eariler project with a triangulated irregular network (TIN) style face, more pretty colours.

PongClock

There was a little program memory left, so I squeezed in a very simple Pong Clock, again using code from an earlier project.

The sketch uses all but around 100 bytes of the Uno’s program storage space.

There are two push-buttons, Set and Adj. Pressing Adj from time display cycles through the faces (including a pseudo-face which randomly cycles through faces). Pressing Set from time display goes to the configuration screen. This uses the flip clock look. As well as setting the date and time it configures the red/yellow bin cycle (or none)

The clocks use a simple automatic DLS adjustment class which takes a table of start/end dates.

The LCD shield uses an ILI948x driver. As always, the trick is finding some code which successfully initialises the display (including orientation). The only other interaction is a) setting a “window” on the screen and b) filling it with colour data.

The viewing angle is fairly important, from the wrong angle the display is quite washed out.

This shield has a built-in SD-card reader, but no touch screen. Fortunately that leaves pins 10,11,12,13 and A5 free. I connected SET/ADJ push-buttons to 10 & A5 and used 11 & 12 as SDA/SCL for a software I2C to the DS3231 real time clock module.

There was a lot of software in this project so when the time came to go from prototype to final assembly I decided to go to the other extreme and keep it as simple and minimalistic. It starts with a blank stackable shield. This gave me access to the pins I needed for the RTC and the two switches. I mounted all directly to it. The LCD shield goes on top, and Uno underneath to create a quite thick sandwich. This sandwich would actually have been enough, since it stands up OK. But I decided to add some protection in the form of two laser-cut clear acrylic plates. The Uno is attached to the back plate. The front plate is attached to the back plate with stacks of standoffs.

There is no backlight control and the thing is quite bright. To keep the build simple, there’s no LDR to sense ambient light and dim the display. Instead, there’s a bit of a hack in the sketch to optionally blank it between selected hard-coded hours (eg 7pm-7am). All that does is make the display black, but there’s still a glow - the copper tape is an attempt to reduce this light leakage. I plan a separate project with an LDR and a relay…”

Link to article