I decided to design a binary clock using flip-disc displays. I use the Arduino platform very often and this time I did the same. The clock is basically a simplified and modified copy of the Arduino Uno (see the diagram and description below) and the code is written in the Arduino IDE.

Flip-disc Binary Clock can be found on Kickstarter.

The clock should display hours and minutes. I also thought about seconds but came to the conclusion that reading seconds in the binary system can introduce unnecessary confusion - decoding the value takes a while, of course you can learn to read it quickly but for an inexperienced user it can be inconvenient. Assuming that each disc is another bit, with 6 discs the largest value is 63, which is ideal for displaying seconds 0-59. The top row corresponding to the hours does not need as many bits but for the aesthetics of the clock it will have the same number of bits.

The top row for displaying hours and the bottom for minutes.

Flip-disc displays are really old technology, they are electromechanical displays. The control is very specific and is based on precise current pulses thanks to which we can rotate individual discs. A detailed explanation of how flip-disc displays work and how to control them can be found here.

Design assumptions:

I like modular construction of electronic devices, so the clock will be a compact structure of two pcb boards connected to each other and to the casing with a set of spacers. The clock consists of two main modules: a 2x6 display module and a clock controller module.

2x6 Flip-disc display

Display with two rows of 6 discs each. The simplest way to control flip-disc display is to control one disc at a time (see detailed explanation). With this assumption, we can treat both rows as a matrix of two rows and 6 columns, which will reduce by half the number of mosfet transistors needed to control individual discs. See the diagram below or download.

I used mosfet N/P transistors to directly control the discs, while the transistors are controlled by two popular 595D shift registers. This reduced the number of control lines used by the microcontroller to 3. You can, of course, omit the shift registers and control the transistors directly through the microcontroller using 16 pins but then only a few pins remain for other tasks. I also wanted the 2x6 flip-disc display to be versatile and usable for purposes other than the binary clock. There is another advantage of using shift registers that I didn't mention: the displays can be connected in series with each other up to 8 and all the time the number of control lines will remain the same - only 3 lines. Connecting flip-disc displays in series is made possible by a dedicated library for Arduino FlipDisc.h

Binary Clock Controller

Below you will find a schematic of the clock controller - download schematic.

I chose the RX8025T real-time clock - I wrote the RX8025T.h library for Arduino. The accuracy of the clock is comparable to the popular DS3231.

How the binary clock works: The RX8025T stores the current time and generates an interrupt to the INT0 output every 60 seconds. The ATmega328, upon detecting the interrupt, reads the current time from the RTC and displays it on the flip-disc display in binary code. The RTC clock has a backup power supply, a supercapacitor. Two buttons are used to set the time and the 12/24 hour format. The clock's power supply is quite archaic as it is 12V - this was the easiest way without unnecessary DC-DC converters. The microcontroller and all control electronics operate on a 5V.

VF - power supply for flip-disc displays requires some more extensive explanation.

The pulse shaper power supply consists of two transistor switches and a capacitors. When the CH (charging) line is turned on, the capacitor accumulates charge, then the charge is released when the PL (pulse) line is turned on. 

A more detailed description of the operation can be found here.

The controller board can be connected to the flip-disc display board via the PH1 pin connector on both boards. To further stiffen the structure, there are 4 spacers of 6mm length between the boards, the remaining spacers are used to screw the clock to the casing. 

How to Read Binary Time

The clock displays hours and minutes. The top row displaying hours and the bottom row displaying minutes. The time is displayed in binary code, i.e. each of the discs in the two rows has a different bit weight, starting from 2^0 = 1, each successive bit is another power of two 2^1 = 2, 2^2 = 4 etc. Inactive discs are ignored and have a binary representation of 0, while displayed discs are 1. Adding up the active discs, we can read the time.

It may not be easy at first and requires some mental effort, but it gives some intellectual satisfaction and you can quickly learn to read the binary code. 

Casing Design

Design no.1

Design no.2

Design no.3

Arduino Code

The heart of the clock is the ATmega 328 microcontroller (default 16 MHz external crystal). The clock code was written in the Arduino IDE and uses MiniCore.

If you want to upload your own code, there is an ISP connector on board for programming. If you use a programmer that allows you to power the microcontroller to be programmed, all you have to do is turn off (slide switch) the clock during programming. If the programmer (e.g. Atmel-ICE ISP) requires an additional power supply for the microcontroller to be programmed, the clock controller board should be disconnected from the flip-disc display board during programming - this is very important because the flip-disc display may be damaged during programming. 

Flip-disc Binary Clock can be found on Kickstarter.