LED Tower of Accomplishment
by SiddharthS141 in Living > LEGO & K'NEX
303 Views, 1 Favorites, 0 Comments
LED Tower of Accomplishment
When stuck in quarantine, I have found it harder and harder to motivate myself to work or do anything. So, I created this: The Tower of Accomplishment. A simple LED strip project that every time you accomplish something, no matter how small, you add it to the tower! This way, you can visually see all you’ve completed in a day and applaud yourself for it! It is important to recognize all that you do over the course of a day. Hopefully, if you’re feeling unproductive, you can look at this tower to remind yourself that you have done amazing things. At the end of the day you clear the accomplishments and it saves the number. That way, you can track your average number of accomplishments and how you are doing on a particular day. I tend to award myself for simple things like getting out of bed and doing homework/chores and going for a run.
Supplies
Materials:
Electronics:
- Arduino Uno
- Individually Addressable RGB LED strip
- 4 x 1kOhm resistors
- 4x pushbuttons
- Breadboard
- Voltage Regulator (5V)
- Jumper Wires
Software:
Mechanical:
- · K’Nex parts (see images in later sections)
Electronics and Code
What I wanted this tower to do is have a button to add accomplishments and stack them visually on the LED strip. I needed a button to clear the accomplishments for the day and store the value somewhere so that it can be used for later calculations of average accomplishments per day. I needed a button to display the average tasks over the last 10 days and how today stacks up against that. And of course, I needed a flex button that is fun to press because it does something cool.
Let’s start with electronics:
The schematic shown is pretty straightforward, we have buttons wired to the Arduino with a pulldown resistor on them to stabilize their value. They are powered from the 5V supply on the Arduino. We have 12V, 1.5 A coming into the Arduino to power it through the barrel jack. I then use this raw source from the V_in pin of the Arduino, through a 5V voltage regulator, to power the LED strip. I did this because the 5V from the regulated source can provide 1.5A, rather than the 5V from the Arduino pin, which can only provide 0.5 A. With 1.5A, I can use 3x the number of LEDs on my strip. The last part of the electronics is the LED strip. It is powered with the 5V from the regulator, grounded to the Arduino, and a PWM pin is hooked up to the middle signal pin. Make sure your Arduino, led strip, and regulator are all connected to the same ground.
Here is how I connected my pins:
· Pin 6 -> LED signal line
· Pin 5 -> Display Average Button
· Pin 4 -> Clear Tasks Button
· Pin 3 -> Add Task Button
· Pin 2 -> Rainbow Button
Now for the code:
The code is segmented to try and make it easier to understand. The beginning part of the code is setup. You need to install the NeoPixel library so that you can control the LED strip. You also need to include the EEPROM library to access the flash memory on the Arduino.
You create a single LED strip object to manipulate. Change the LED_COUNT to match how many LEDs you want to control in the strip. The “_PIN” variables are the pins from the Arduino connected to the buttons and LED signal, so make sure those match the circuit as well.
Each method does something a little different. The setup() method initializes the start state of the variables, and makes sure all the lights are off to begin with. The loop() method is running continuously and is where the buttons are read in to execute each function. addTask() is exactly what it sounds like: it increments the number of tasks and makes sure its fewer than the max number of LEDs. clearTasks() saves the number of tasks to Arduino’s permanent memory and then sets it to zero. The visualize() method outputs to the LED strip how many LEDs to light up and what color. There is a button to add tasks, one to clear them, one to show the average tasks over the last 10 days and a fun button that lights the strip as a rainbow. The visualize() method takes these into account when setting the LEDs in the strip. I have attached the code for you to dig through and make your own.
Downloads
Building the Tower and Reel
This part you should feel free to get creative with. All you need is a spool to hold the LEDs you aren’t using, a tower to mount the active LEDs on and a place to put the electronics such that its still easy to access and power the LED strip. As you can see, I made mine out of k’nex, which was a fun throwback.
1. The spool
The spool is simply two 8-way round connector attached to a couple rods. The flanges on the side are shield pieces that hold the LED strip in place. This resembles a bobbin for thread or a kite string spool. I pass a long rod through the center of the 8-way connectors so that it is easy to mount and spin.
2. The tower
The tower is a simple cubic/rectangular structure with long rods giving it height and the 7-way 3D connectors as the joints. I built it up so that the LED strip had some clearance from the ground. This way you can see all the LEDs. I made a triangle design with the three-way 2D connector and short rods for the “roof” on top of the tower. The spool sits right at the top, mounted in the holes of the connector (see images).
3. The base/electronics
It was difficult to get the buttons away from the breadboard and Arduino without a soldering iron, so instead, I just built a place for it to sit, low enough to the base of the LED strip, so I could power it though jumper cables. It was using the k’nex shield parts clipped into the 7-way connectors.
The base was just expanding the rectangular frame horizontally on the base level. Just more 3D connectors with long rods attached to them. This helps prevent the top-heavy structure from toppling.
Putting It Together
- I wrapped the LED strip around the spool, letting out only as many LEDs as I was using. I slid the central shaft of the spool through the triangular mount that is the “roof” of the tower. Like a roll of toilet paper, with the LEDs dangling down.
- I used small stopping pieces to hold the strip in place along the height of the tower.
- I placed the breadboard and Arduino on the mounting platform and plugged in the LED strip to the power and signal lines
- I plugged in the Arduino and tried it out.
Final Thoughts
Here is a video of the final project in action. Notice there are two states for the view average button: with red LEDs and blue LEDs. The blue LEDs indicate that you have done more tasks than your average, while the red LEDs indicate how many fewer tasks you have done compared to average. Hopefully the satisfaction of clicking the button and seeing your accomplishments stack up is enough to keep you busy and motivated! Stay safe, and enjoy! Catch y'all on the flip.