52-Week Daily Habit Tracker

I built this to help motivate me to enforce daily habits. It was inspired by Simone Giertz's Every Day Goal Calendar.
16
23
0
724
updated November 24, 2024

Description

PDF

The goal of this project was to make myself a physical device that will help motivate me to practice the daily habits I want to practice. If I do the thing, then I get to press the button and the LED lights up for the day.

I shared this on reddit and had many requests to make the files for this project available, so here they are. This was only intended to be a one-off so it's not perfectly designed, but I hope you'll find them useful if you wish to build something similar.

STLs are provided, and there are STEP files in a zip in the other files section.

The Arduino code is there as well. It's designed for a Teensy 2.0.

You'll need to print:

  • front_plate.stl - There's also front_plate_letters.stl. If you don't have a multi-color printer, you can print front_plate_letters.stl first, clean up purge lines, etc., swap the color, then print front_plate.stl on top of it.
  • torso.stl - This has built-in mouse ears and “hold-downs” to assist with bed adhesion because there's extremely minimal bed contact area for the size of the print. You'll need supports for the overhanging lip all around the inside, as well as the screw posts in the corners and at the top.
  • back_cover.stl - Supports recommended for the screw post recesses at the top
  • thumb_button.stl - x2, recommended printing face-down and using supports, for aesthetics
  • small_button.stl - x5, recommended printing face-down and using supports, for aesthetics
  • oops_spacer.stl - I made the center screw post too short on the front plate, so this spacer corrects that. You could glue it to the screw post or lightly slide it onto the screw
  • bottom_edge_clamp.stl (optional) - The bottom edge of the torso ended up slightly bowed down and didn't look that good when the front plate was assembled. This piece can be glued into the bottom of the torso to clamp on the wall of the front plate. See photos
  • extra_pcb_post.stl (optional) - My perfboard ended up too short to span the full width of the front plate, so I used two pieces and glued this extra screwpost in to hold it. See photos
  • led_bender.stl (optional) - A tool I made to help me bend and cut the LED leads. I really can't recommend wiring this matrix by hand like I did so hopefully you don't need this tool.

 

Screws:

  • 4x M3x8mm countersunk screws
  • 3x M3x12mm countersunk screws
  • 2x M3x16mm buttonhead or socket head cap screws
  • 4-5x Number 0 x 3/16" plastic screws to hold the PCB down, could probably use an M2.5x6 if you tap the screw posts

The screwposts in front_plate and back_cover are intended to be tapped to M3.

The screwposts for the perfboard are on 0.1" spacing, so you can just drill out the holes in the perfboard and they'll line up.

 

Electronics:

You're kind of on your own here because I didn't make a schematic for this project. Also, I would really recommend designing a PCB rather than doing it freehand like I did, it took ages. But here are the broad details:

  • 7 column by 52 row LED matrix, the columns are driven high-side with P channel MOSFETs, and the rows are low-side driven by 8x shift registers
  • LEDs have 120 ohm resistors for ~22mA of current while on (so ~3mA average current with the column scanning), but this ended up being much too bright at full brightness. I tend to run the display at 15% PWM and it's plenty visible.
  • I used SN74HC595 shift registers, but only because I had then lying around. There may be better options. They must be able to handle moderate currents
  • There are 9 shift registers, the first one controls the column MOSFETs, and the rest control the rows, with the last shift register in the chain controlling the first rows of LEDs. In the code, leds_lookup.h controls each LED to a shift register, shift register pin, and column
  • I only hooked up the OE pin of the first shift register (the one that controls the columns) to the microcontroller, so make sure you have pull resistors on your MOSFETs so they'll switch off, since OE makes the outputs go hi-z
  • The tact switches I used are 5.1mm high and have rubbery tops. Specifically, I used C&K KSC403J50SHLFG
  • The hole in the back cover is sized for a typical 5.5x2.1mm panel-mount barrel jack, specifically this one

 

Usage:

Here's what each button does and how to use the tracker.

There are four “charts”. A chart shows (nearly) all the days in a year, and each lit LED indicates that you did the habit on that day. You must mentally assign your habit to each chart. For me, I use chart A for my large project, and chart C for house chores.

  • Thumbs up/down - Starting from any enabled chart, press either one, and the current day will start flashing. Then, press thumbs up/down to mark whether you did the thing for that day, for that chart. It will cycle through all enabled charts. The current day will stop flashing, and it will internally move to the next day.
  • NEXT - Cycles through the four charts, then the "day” chart that simply lights one LED corresponding to the current day.
  • EN - Enable or disable the current chart for inclusion in the automatic thumbs up/down cycle, as described above. Long-press to turn off the display, any button to wake it
  • LEFT/RIGHT - Press once to start flashing the current day. Press again to change the current day, or to move to a day to edit it with the FLIP button. While changing the day, hold down to move faster. Long-press to turn display brightness up/down.
  • FLIP - Press once to start flashing the current day. Press again to toggle the LED for the current day, on the current chart. Long-press for blinkenlights mode, any button to go back
  • Erase current chart - Hold thumbs down and FLIP for ~10 seconds, until display stops flashing. Also works on the “day” chart to reset the current day back to day 1.

 

If you want to build one of these yourself and need help (and have done at least some research yourself into what might be required to realize this project), please feel free to ask me some questions. Check the photos for a few more details.

Model origin

The author marked this model as their own original creation.

License