Arduino CrossFit Timer – Grizz9000

I was looking for, what I thought, was a simple clock/timer design.  Something with a remote and a big display that could be read from across the gym and that I could program with up/down counting but also intervals specific to CrossFit like Fight Gone Bad or tabatas.  I wanted to incorporate a bell to give it a gym feel and something that could be heard over loud music.

This journey took me through many designs, chips, a custom board, woodworking and a whole lot of learning!

I want to give a special thanks to these sites/companies for all they do.

adafruit.com – sparkfun.com – arduino.cc

Anyone can sell and anyone can give back but mixing the 2 so others can succeed is tremendous and noble work!

Here’s a video of the final product:

Let’s break this project into pieces… actually that’s how I approached this.  There were many things I didn’t know how to use/do/code before I started.  Looking at each piece I would breadboard the very simplest design (learn, discover, etc) and then incorporate that into my design; move on.

My first thought was to use the adafruit 16×32 display.  This display worked very nicely but I found that I wanted bigger fonts or smaller fonts so I could write more on the one screen.  This pushed me to rewrite some code to change fonts.  Then I found that my refresh rate was screwing up my IR reads from the remote.  As I was reading in a button from the remote, I would refresh and miss the rest of the IR code.

My solution was to use 2 Arduinos!  One would be the master refresh and the other the reader for the IR.  The slave would bit bang some digital lines and when the master was ready to read it would look and gather up the bits and tell the slave it’s all read.  This was a fun challenge as I was burning up digital pins as 4 pins would only give me 16 states (2^4) and I needed some control pins, etc, etc.  This actually worked pretty well but I was making things more and more complicated.  From here I started to ditch the matrix and move to large LED boards.

Checking online I found some 8″ Large LED displays.  eBay had a pack of 4 for $99 shipped.  Sparkfun had a great write up on a wall clock and another one for a BricoClock.

My design quickly changed from the Matrix to LED segments.  The issue was a common cathode or common anode… no idea!  Not to mention that my buying spree had set me up with a bunch of common cathodes and now these large digits were common anodes.  After some reading and testing, I found that all this means is that, for common anode (CA), there is one anode pin that all the other pins share.  We put +POWER to the common anode and then ground all the others (with resisters, etc, etc) and she’ll light up!

I thought about using the max7219 chip but it needed common cathode (CC) digits and the large ones were CA and that max chip could only handle so much current and I needed to switch the high/low because of the CC LEDs.  Now I was onto darlington arrays and UDN2981 and ULN2803 chips

I then tried some SAA1064 4-digit LED display drivers.  Tronixstuff did a wonderful tutorial on this.  I learned about I2C and all the fun that comes from using those libraries with Arduino.

After all that testing and playing around I needed to start looking at registers and shifting.  While there are plenty of great tutorials on shifting (2), none seemed to handle the load of these large LEDs.

I stumbled on a chip called the tpic6a596.  Yet another set of numbers and names and this time it was a current SINK chip (which simply means that it just grounds stuff) … my common anode (POWER) LEDs would hook up to these nicely.

I didn’t find any boards, shields, etc. that would handle this so I figured it was time to design another PCB!  In the end, I picked PCB Fab Express for my boards.  They turned out great and the price wasn’t too bad.  I used the free version of Eagle to design the whole thing.  I should say (with my head down) that I did need 1 jumper when the boards came in.  The 2 grounds were never connected for some reason.  Easy fix though.  Another tip is that I printed out the board and taped it on a piece of styrofoam.  I then pushed the different components in to see if they fit.  This was a HUGE help as many pieces that I ordered were much different than the pkg/layout that I was using on the board.

Here’s a quick video with a 1 chip smoke test

So what about the code?  Cmon timing is easy!  There are tons and tons of tutorials out there on how to time and even more on how to include RTC chips.  I used the adafruit DS1307 for the job.  You’ll see in the pics that I even mounted it right on the board instead of having to wire it externally.

I was finding, like most projects, that finishing this thing was going to be the final crux.  I needed to find (really build) a box that could be hung up and not look like a DIY project gone wrong.  I ordered up some plexiglass from McMaster and another site (forget) and learned that I can’t pick colors worth a damn.  I ordered a RED, BLACK and SMOKE.  In the end, I used the smoke AFTER I painted the front flat black.

Using a table saw that someone gave me years ago and some wood molding, I came up with a BOX.  I then ripped a slot for the plexiglass and then carved out the end so the backing would fit.  Couple of filler and sanding intervals and it was time to paint.

I’m happy to say that the clock is still running happily at CrossFitGordon.  The remote, digits and bell look and sound great!  I’ve gotten some great feedback and proud to have my name on this thing.  To date, I need to put a back on the unit, power switch and add a few more fun timers and we should be golden.

Thanks for checking this out and drop me a line in the comments if you have any questions, comments, etc.  I’ll be uploading the code as soon as I get it updated with a couple of minor bug fixes.

BTW the name Grizz9000 comes from the owner’s dog “Grizz”!

Also, let me know if you would like to see this CrossFit Timer on something like Kickstarter.