Real time clocks are never truly accurate. You may have noticed that some clocks around your house need correcting every few days/weeks/months as they either speed up or slow down. This is because the 32 KHz crystal in the clock doesn't actually cycle precisely as it should.

If you want accurate timekeeping, you need to use the internet, a satellite or an atomic clock. These are either expensive, or just not possible for the hacker/project. Michael B LeBlanc has come up with an ingenious way to use multiple clock crystals to calculate the average time that they show.

Closeup of Average Clock
Closeup of Average Clock

His theory is that the timekeeping crystals should diverge an equal amount around the centre, and given enough clocks, the average should produce an accurate time.

For his project, he has used 6 Maxim DS1307 real-time clock chips, each with its own 32 KHz crystal. The clocks communicate with the Arduino via I2C, and the address is read with some clever trickery with some 4051 multiplexers.

Each clock's time is shown using a 4-digit LED display, driven by MAX7219 LED drivers, and some controls are included on the side.

It's a really clever idea, and shows a bit of initiative into overcoming problems with cheap components.

You can read the whole story on his blog.