Monday, March 2, 2015

Building My Own Chess Clock

I now own 3 digital chess clocks:
  • DGT North American
  • DGT Easy Plus
  • Duel Timer
Each of them has drawbacks.  For instance, the DGT North American does not show the delay seconds counting down,  The Easy Plus cannot do more than one time period, and the Duel Timer only indicates whose turn it is to move on the display (no light or mechanical button).

So as an Engineer, I figure I can make something that can address all of these issues.  This is likely to become a massive project, so I will break it down into manageable chunks.

Phase 1 - Choose a Microcontroller

Based on what I have found on the interwebs, I am looking at the Arduine Uno R3.   Everything needed is onboard, just plug in and start programming.  Here are the specs:

Operating Voltage5V
Input Voltage (recommended)7-12V
Input Voltage (limits)6-20V
Digital I/O Pins14 (of which 6 provide PWM output)
Analog Input Pins6
DC Current per I/O Pin40 mA
DC Current for 3.3V Pin50 mA
Flash Memory32 KB (ATmega328) of which 0.5 KB used by bootloader
SRAM2 KB (ATmega328)
EEPROM1 KB (ATmega328)
Clock Speed16 MHz
Length68.6 mm
Width53.4 mm
Weight25 g

Phase 2 - Learn to program the microcontroller

I can get the Arduino as with a starter kit that includes enough components and instructions for some first projects.  Plus there a lot of tutorials and videos on the web with instructions.  Failing that, I might even read some books.   It shouldn't take too long for me to be able to write the code for an elementary count down timer that switches to the other counter when a button is pressed.

Phase 3  -  Integrate the Displays

Right now I am looking at the HD4470 20x4 LCD display, one for each side.
The 8 custom characters would allow me to design a segmented display that would use 3 lines for the time H:MM:SS and the 4th line for information such as delay countdown (or increment), period, and move counter.  I mocked up something with only 5 custom characters that might look like this:

This display can be controlled with just 6 digital lines, one of which is the enable.  If I understand correctly, I could control 2 displays with just 7 lines, with a unique enable going to each display, and the rest of the data going to both.

Phase 4 -  Build the Case

For the first attempt, I will probably just use a clear plastic box, some large buttons and LEDs to indicate which player to move.  That would leave me 3 more digital pins to add Pause, and setting buttons.

The ultimate goal is to make a nice wooden body with mechanical buttons that click into place, just like my wife's nice Jerger analog clock.

Pressing the Start Button

Publishing my thoughts here forced me to spend some time thinking about what I would need and doing some research.  It also gives both my readers a chance to guide me back to the right path if I am starting out in the wrong direction.  So now is your chance; leave me some comments.

I'll publish some future posts with status reports and pictures as I make progress.


  1. i will try to find info for the programming side so that i can follow along (contribute?)

  2. This comment has been removed by the author.

  3. The Arduino has been ordered.

  4. could you post the link for the site from which you ordered? - thanks

  5. I ordered it from Adafruit (, because they have a very helpful website including beginners video tutorials.

    I ordered the Experimenters Kit that includes the Arduino, a small breadboard, lots of components, and a booklet of beginners projects. I figured I needed to try some easy things first to get my feet wet. I haven't done any electronics tinkering since my rating was in the 1400s.

    I did not order the displays yet. I need to feel comfortable programming the Arduino before I sink too much money into this.

  6. went ahead and ordered the experimenters kit - not just to follow along with this project but also to expand into some robotics projects i am mulling over - also thinking about how you are going to program the clock - my thoughts involve an "event loop" - current state vs current request (what button pushed...etc)