I built a machine to walk my FitBit for me. I call it the FitBit Cheat-O-Matic! Why? Our office is having a FitBit competition this month (November 2013). In preparing for the competition I overworked my Achilles tendon and could not participate. So, I adopted the mantra:
If you can't join 'em, beat 'em.
The FitBit Cheat-O-Matic is a machine that shakes my FitBit for me 24 hours a day, 7 days a week and does it faster than my normal walking pace. I suppose it's actually faster than most people can run, for that matter. Sure it's cheating! Not only is it cheating, but it's cheating at a level that's so blatant it can't be mistaken for anything else! It's fully disqualified from the competition, of course. But the point is no longer to win the competition, but to be totally ridiculous and to rack up outrageous FitBit stats and make people laugh or maybe shake their heads.
How It Works
Turns out you can simply shake (but not too hard) a FitBit in just about any orientation (which is pretty cool, actually) and it will register steps. Not rocket surgery, really, but took a little experimentation. After the minute or two it took to find the optimum rate, I was all set. Shaking something with a servo and an Arduino is child's play.
At the heart of the machine there is one of my usual Arduino-compatible microcontrollers-on-a-breadboard (AVR ATmega328-PU, 16 MHz crystal, AVR ISP Mk II programmer, 3.3V switching regulator and supporting components) that controls the servo holding my FitBit out on its little arm. There is a potentiometer that allows me to adjust the speed at which the servo shakes the FitBit. Easy as that.
The first version of this thing used a less expensive servo that was rigged to constantly rotate, not just move 180˚ range. The servo was a standard RC servo with plastic gears and cost about $12. It seized up after about a week. Amazingly, the gears were totally fine. It was the little DC motor that began to stick. Nothing shocking there. Lower grade RC servos are meant to do little bits of work at a time, not run continuously for a month (in my experience). Here's what the first attempt looked like:
The FitBit was held by a little shelf that was on a hinge using two pieces of a rubber band. The servo had four arms on it and as they swept up counter-clockwise from below the shelf, they lifted the shelf up. Then, as they passed, they let the shelf drop and the FitBit counted that as a step. To kill a little sound, I glued a piece of foam to the back of the shelf that impacted the stand every step. To kill more sound, I added rubber feet to the bottom of the stand. The servo caused four steps per revolution. It was super simple and required only power to the servo and no smarts from a microcontroller. It maxed out at about 6,200 steps an hour (give or take).
The new version of the machine uses a better servo and makes the FitBit register over 7,100 steps an hour. The FitBit is held to the arm of the servo using a single section of a rubber band which is pinned to the arm with a piece of copper wire. The stand for this contraption is the same stand for the first version: It's just two pieces of scrap wood glued and screwed together. There is a hole cut to hold the servo. I kept the rubber feet on the bottom.
This new servo isn't just a run-of-the-mill RC servo. Oh, no. It's a Savöx SC-1257TG, to be exact: It's got a coreless motor, it's digital servo and has strong titanium gears. Even the case is made of aluminum! It's rock solid. Because is has a microcontroller inside and a better motor, it's faster and more accurate (not that we need accuracy here). That means it can shake my FitBit longer and more times per minute. In the immortal words of Tim Allen (grunting): Ooohh ooh ohhh!!
This is the servo before it was installed in the machine:
The potentiometer is connected to one of the analog pins on the microcontroller. The microcontroller tells the servo to move its arm up and down at a percentage of 1 second (or 1,000 milliseconds). The ADC pin gives a reading from 0 to 1,023. I simply take the value read from the ADC, divide it by 1,024 and multiply the 1,000 milliseconds by that. It gives a percentage from no delay to 1,000 milliseconds. So, if the potentiometer is set to the max (returns 1,203), it causes the arm on the servo to move once per second ( 1,023 / 1,023 * 1,000 = 1,000 ms or 1 second delay). If the pot is moved to its zero-value position ( 0 / 1,023 * 1,000 = 0 or NO delay ), the arm will move as quickly as the servo can move it. Actually, that causes the machine to flail wildly and the arm freaks out because the Arduino will send positioning signals to the servo faster than the servo can reposition itself.
Here's the Arduino code running on the FitBit Cheat-O-Matic:
Bottom Line: meltmedia Rocks
meltmedia subsidized FitBit fitness tracking devices for any meltmedians that wanted one. I've said it before and I'll keep saying it: Working at meltmedia is amazing! It's a great company with fantastic and incredibly smart people. Sadly, no matter how smart they are, without a FitBit Cheat-O-Matic, they're not even in the same galaxy as me as far as FitBit steps goes:
This is what a typical day looks like with the new version of the FitBit Cheat-O-Matic (still had a little less than 4 hours to go in this day, too):
Here's some video of the machine running:
So, there ya have it! How to cheat at your company's FitBit walk competition!