Introduction
We are the Daisies, and for this project, our goal is to learn about real problems in carpentry so we can choose something meaningful to solve. We met with two carpenters, Dustin and Paul, on November 10th, 2025. Since they work with tools every day, we wanted to understand what slows them down, what frustrates them, and what could make their work easier. Through the interviews and conversations, we paid attention to the small help or assistance that they can possibly get with our project. That conversation helped us decide what direction to take for our project. We discovered that they had trouble losing the small tools that they use often, such as knives, tape measures, etc. So, we decided to create a toolbox that can notify Paul and Dustin which tools are not in the box to address the need for organization and tracking of their smaller tools.
What We Built
We created the tool box out of plywood(lasercut) which was divided into 3 vertical columns and each had a sensor, which they can put a tool that the sensor can detect, then the LEDs on the box would notify whether the tool for each columns are filled or not. At default, when the tools are all on the tool box a blue light will be shown for each columns and if a tool is missing, there will be a red light blinking to notify them that it is missing. Additionally, for one of the column we gave them a choice to use a removable wall where they can divide one column into two(so, just for one column there is two sensors). We also created a larger tool box with no technology that Paul and Dustin can use to put larger items. We engraved their names, Mario and Luigi characters to give them a feeling that the product is customized just for them as well as making it battery powered(can be switched when it runs out) so that it can be portable and be able to be loaded on the cart easily.
Main tool box with technology : Depending whether the sensors detect an object the color of the LED light will change, when detected blue light, if not red light blinking. The total 9 LEDs are also seperated into 3 groups accordingly to the columns that are connected.
Video of the tool box : Can start the tool box by turning on the switch and as the tools start to be filled in, the LEDs will turn blue from red.
Top view: The infrared proximity sensors are in center of each columns and they detect whether the tool is on or not.
Front view : Made a space in the middle so when the users are trying to switch the batteries, they have sight and enables them to do more with ease.
Side View : Hot Dog engraved, and there is a switch to turn the feature on and off, and a slightly exposed battery for convenience in replacing with new ones.
Larger box : Along side with the LED tool box, we created a larger one for tools that are bigger and more noticeable easily.
Larger box Cover : We engraved a Mario and Luigi character and Dustin/Paul's name.
Narrative sketch : Dustin and Paul gets a call to fix the door at Hunt Library. After arriving, they unload the tool cart from the van and make there way through to where the broken door is. They turn the switch on for the tool box before they start fixing, and uses different tools from the cart and the tool box. After completing their task they notice that one column of the tool box is blinking with red light! So before they go back, they quickly looked around and found the tape measure that they forgot to put back and now with all the tools on the box, all blue lights are showing. They turn the switch off and get back to the van with their tool cart.
Prototype
This prototype was designed to help answer the design question: Can the user be informed when their tools are left behind? Our prototype started with focusing on getting the sensors to work. After that, we laser-cut a toolbox organizer and cut holes through it for the sensors. We then tried to laser cut a box of the same dimensions without a lid to place under the compartment box. However, we got confused with the measurements and laser-cut the wrong size. This bottom box was meant to hold all the wires and the Arduino.
The top organizer and bottom box are connected, with LED lights around the sides of the toolbox.
Close-up of the laser-cut holes where the sensors were installed for tool detection.
Experimenting with the switch.
Taping the sensors to under the compartment box.
Put together circuit boards are used to connect the sensors, LEDs, and Arduino together for the system to work.
Putting the compartment box together.
Prototype Video and Feedback Process!!
In this video, we place tools in their compartments. If all the tools are inside, then the whole strip of LEDs will turn blue, and if there are tools missing, it will blink red lights.
During our prototyping process, we learned that our original ideas changed a lot once we received feedback from the carpenters. At first, they said the toolbox looked smaller than expected, but they ended up liking the size since it helped them focus on the smaller tools they often forget, like tape measures and knives. This answered one of our main questions about whether the size would be useful in real work situations. Another question we explored was how the lights should work. Originally, the LED strip went around the entire box, but they told us the lights might be hard to see from the side if the box was placed on a cart. For that reason, we moved the LEDs to the top so they would always be visible.
We also changed how the LEDs worked based on feedback. Instead of all lights turning on together, the carpenters wanted the lights to show tool status by section. Now, each row lights up blue if the tools are there and red if something is missing. One suggestion we did not fully use was adding too many extra features, since we wanted to keep the design simple and easy to use. A surprise for us was how much small design choices, like LED placement, really affected how useful the product could be in real situations.
Process
Overall, the process went smoothly, as much of it relied on laser cutting, and once that was done, it was a matter of putting it all together and fitting in the electronics and LED strip smoothly. We did run into some mishaps along the way with laser cutting, as some of the compartments did not line up perfectly, and we had to cut some parts out. If we were to do it again, we would also make the bottom compartment a little taller so that there would be more clearance for the electronics. To make the electronics even more secure, we would want to solder all of the components in further development, and that would also downsize them a little bit, so maybe we wouldn't even have to increase the height of the bottom compartment. We would also want to create a way to access the electronics, because we wood-glued a panel onto the side of the box to conceal them, eliminating a way to access the electronics if needed, which we were a little scared about. We wanted to make sure it worked completely before gluing on the final panel. It would be nice to add a little slot or mechanism to make the electronics accessible. Fortunately, the battery compartment slot lined up well and was easy to take in/out. The channel and acrylic cover for the LED strip were also successful additions.
Notes from the very first interview, where we wrote down the main needs and specfics of Paul and Dustins' current system.
A screenshot of the notes we took while meeting with Paul and Dustin after the prototype review, with very helpful ideas and insights for our final iteration.
Measuring and choosing the optimal layout for the LED strip on the box, ultimately deciding to run it along one end of the box that connects to all three compartments.
Securely gluing the top and bottom compartments together to finalize.
Sketches and brainstorming to visualize the potential proportions and measurements of the box relative to the size and amount of tools.
Putting together the laser cut complimentary box, which is meant for organizing larger tools.
Measuring and cutting the channel and cover for the LED strip cover for protection and light diffusion.
Securing the last panel to cover the electronics with wood glue and clamps.
Our process diverged a little from our schedule as we planned to do the small steps bit by bit between our last class before Thanksgiving break and after, but because many of the tasks relied on the laser cutting, we were able to put most of it together after all of the pieces were cut and engraved, adding the finishing steps at the end like LED strip cover and getting it to work, which fortunately went smoothly.
We received a lot of insightful feedback during the critique that we hadn't thought of before. Our positive feedback mainly consisted of people commenting on the iteration of adding individual lights to indicate each compartment, instead of needing all three of them to be filled for the blue light to go off. One of the comments said, "The sensor system is simple and effective. I really like the lights responding per slot," which validated the change we made from our prototype. Another positive feedback was that the red/blue LED was effective in getting the message across immediately, with a comment saying, "Red strip is much easier to quickly glance at," and another saying, "Small and compact. Easy check to see blue light." These comments also validated our choice to use the LED strip as the main indicator for the interaction.
On the other hand, we also got some really helpful feedback on what could be improved. One of the most common pieces of feedback we got was regarding sawdust, debris, or weather, which is something we didn't really think about before. As Paul and Dustin are carpenters, we can imagine that a lot of particles could get into the electronics through the holes in the compartments. Many people recommended adding some sort of film or cover/lid to the box to protect it from rain and dust. etc, and so that tools would not fall out during transportation, with someone commenting, "Maybe could use a cover so items don’t fall out on transport." We think it would be really interesting to play around with different protective materials to cover the IR sensors that wouldn't interfere with the signal. Another helpful piece of feedback we got was potentially scaling the boxes and compartments to fit perfectly into the cart, with someone saying, "Could be made larger to fil cart width and include batteries that tend to walk away." This would be really fun to explore to create a full-size customized accessory for the specific cart, to make the whole thing all-in-one.
Working with a client was an amazing learning experience, and we appreciated all of the feedback and support from the FMS staff. It was really insightful to get feedback from them, especially because they drew on their personal experiences that directly relate to what we made, which we wouldn't have known about on our own. The main takeaways drew a lot on the conversations that took place between our team and the client, as it was these conversations that really pushed our ideas forward, and the final product would not have existed at all without their need for the solution. It was really interesting to think about what inputs/outputs we could use for the design, and it brought a new perspective to our experience with physical computing through applying our new skills to something real. If we were to do this again, we would want to do more research before our initial interview with the client to better understand the work they do and where their needs may lie, as it might be difficult for them to come up with any problems in their routines right away themselves on the spot that they may not thought about before or knew would be useful.
In conclusion, this project was an amazing learning experience, not only when it came to building our technical skills in physical computing, but also when working with a real client and exploring a different field while applying our own knowledge. Although there are things we would do differently, such as better research, extra steps in polishing and measurements, and accounting for weather or tear, we are all overall satisfied with the final product and had a lot of fun.
Schematic and block diagram
Block Diagram
Schematic
Code
/*
Project Title: Tool Box Reminder
Author: Russell Sang, Danely Rodriguez, Silvia Shin
Description:
This program controls a 9-LED addressable strip using four analog sensors.
The LEDs blink red by default and switch to blue in specific segments when
corresponding sensors detect interaction. 3 LEDs are grouped together(1-3,4-6,7-9).
Pin Mapping:
LED Strip Data → D7
Sensor 1 → A0 (controls LEDs 7–9 with A2)
Sensor 2 → A1 (controls LEDs 4–6)
Sensor 3 → A2 (controls LEDs 7–9 with A0)
Sensor 4 → A3 (controls LEDs 1–3)
Credits:
Uses the PololuLedStrip Arduino library (Pololu) and codes were generated by the help of ChatGPT 5.1
*/
#include <PololuLedStrip.h>
/* ================== CONFIG ================== */
#define LED_PIN 7
#define SENSOR1_PIN A0 // group 7–9 (paired with A2)
#define SENSOR2_PIN A1 // group 4–6
#define SENSOR3_PIN A2 // group 7–9 (paired with A0)
#define SENSOR4_PIN A3 // group 1–3
#define NUM_LEDS 9 // only first 9 LEDs are used
// Calibration thresholds (set during startup)
int thOn1, thOff1;
int thOn2, thOff2;
int thOn3, thOff3;
int thOn4, thOff4;
// Detection sensitivity
const int MARGIN_ON = 40;
const int MARGIN_OFF = 20;
// Color values
const uint8_t RED_R = 255, RED_G = 0, RED_B = 0;
const uint8_t BLUE_R = 0, BLUE_G = 0, BLUE_B = 255;
// Blink speed for red LEDs
const unsigned long blinkInterval = 400;
/* ================== GLOBALS ================== */
PololuLedStrip<LED_PIN> ledStrip;
rgb_color colors[NUM_LEDS];
// Detection states
bool det1 = false, det2 = false, det3 = false, det4 = false;
// Blink timing variables
unsigned long lastBlink = 0;
bool redOn = false;
/* ================== SETUP ================== */
void setup() {
Serial.begin(9600); // used for calibration feedback (optional)
clearStrip();
ledStrip.write(colors, NUM_LEDS);
calibrateSensors(); // auto-calibration at startup
}
/* ================== LOOP ================== */
void loop() {
// Read all sensor values
int s1 = analogRead(SENSOR1_PIN);
int s2 = analogRead(SENSOR2_PIN);
int s3 = analogRead(SENSOR3_PIN);
int s4 = analogRead(SENSOR4_PIN);
// Update detection states using hysteresis
det1 = updateDetectWithHysteresis(s1, det1, thOn1, thOff1);
det2 = updateDetectWithHysteresis(s2, det2, thOn2, thOff2);
det3 = updateDetectWithHysteresis(s3, det3, thOn3, thOff3);
det4 = updateDetectWithHysteresis(s4, det4, thOn4, thOff4);
// Handle red blinking
unsigned long nowMs = millis();
if (nowMs - lastBlink >= blinkInterval) {
lastBlink = nowMs;
redOn = !redOn;
}
// Fill all LEDs with blinking red
rgb_color redColor = redOn ?
(rgb_color){RED_R, RED_G, RED_B} :
(rgb_color){0, 0, 0};
for (int i = 0; i < NUM_LEDS; i++) {
colors[i] = redColor;
}
// ===================== BLUE OVERRIDES =====================
// A3 → LEDs 1–3 → indices 0–2
if (det4) setSegmentBlue(0, 2);
// A1 → LEDs 4–6 → indices 3–5
if (det2) setSegmentBlue(3, 5);
// A0 AND A2 → LEDs 7–9 → indices 6–8
if (det1 && det3) setSegmentBlue(6, 8);
// Update LED strip
ledStrip.write(colors, NUM_LEDS);
delay(5); // small delay for stability
}
/* ================== CALIBRATION ================== */
void calibrateSensors() {
Serial.println("Calibrating sensors... Keep all sensors clear.");
long sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0;
const int samples = 100;
for (int i = 0; i < samples; i++) {
sum1 += analogRead(SENSOR1_PIN);
sum2 += analogRead(SENSOR2_PIN);
sum3 += analogRead(SENSOR3_PIN);
sum4 += analogRead(SENSOR4_PIN);
delay(10);
}
int base1 = sum1 / samples;
int base2 = sum2 / samples;
int base3 = sum3 / samples;
int base4 = sum4 / samples;
// Set ON/OFF thresholds
thOn1 = base1 - MARGIN_ON;
thOff1 = base1 - MARGIN_OFF;
thOn2 = base2 - MARGIN_ON;
thOff2 = base2 - MARGIN_OFF;
thOn3 = base3 - MARGIN_ON;
thOff3 = base3 - MARGIN_OFF;
thOn4 = base4 - MARGIN_ON;
thOff4 = base4 - MARGIN_OFF;
// Safety check to ensure valid hysteresis range
if (thOn1 >= thOff1) thOn1 = thOff1 - 5;
if (thOn2 >= thOff2) thOn2 = thOff2 - 5;
if (thOn3 >= thOff3) thOn3 = thOff3 - 5;
if (thOn4 >= thOff4) thOn4 = thOff4 - 5;
Serial.println("Calibration complete.");
}
/* ================== HELPERS ================== */
// Applies hysteresis to prevent flickering detection
bool updateDetectWithHysteresis(int sample, bool prevDetect, int thOn, int thOff) {
if (!prevDetect) {
return (sample < thOn); // turn ON
} else {
return !(sample > thOff); // stay ON until safely above OFF threshold
}
}
// Sets a section of LEDs to blue
void setSegmentBlue(int startIndex, int endIndex) {
if (startIndex < 0) startIndex = 0;
if (endIndex >= NUM_LEDS) endIndex = NUM_LEDS - 1;
for (int i = startIndex; i <= endIndex; i++) {
colors[i] = (rgb_color){ BLUE_R, BLUE_G, BLUE_B };
}
}
// Turns off all LEDs
void clearStrip() {
for (int i = 0; i < NUM_LEDS; i++) {
colors[i] = (rgb_color){0, 0, 0};
}
}