Have you ever realized you left something behind but were too far along to turn back? I once nearly missed a flight because I left my passport at home. Other times, I’ve forgotten to buy essential ingredients and wished I had a way to quickly record what I need in the moment. To prevent situations like these, I wanted to create a reminder system at the door that tells me exactly what I need based on where I’m going. Also, forgetting something at door is a real psychological effect; * Doorway effect * is a phenomenon of short-term memory loss when passing through a doorway or moving from one location to another.
Previous projects provided a foundation for this work, particularly in using OLED and ESP32 devices for interactive displays. However, resources specific to TFT ILI9341 displays, especially with ESP32 Xiao, were limited. Key references included prior How to Make (Almost) Anything projects, YouTube tutorials on ESP32 dev boards, and datasheets for hardware components. I also initially tried to use Xiao ESP32 board, but the pinouts were limited to deal with complex TFT modules. These sources helped guide decisions about wiring, firmware setup, and integrating TFT displays with ESP32 systems. While much of the groundwork in IoT and microcontroller displays has been explored, combining these elements into a streamlined, Wi-Fi-enabled checklist system with proximity-triggered activation represents an innovative extension of these ideas
I designed a wireless reminder system featuring a TFT touchscreen display controlled by an ESP32 microcontroller. The system allows users to manage a real-time checklist that can be updated wirelessly via Wi-Fi. The checklist syncs seamlessly with a server, which can be accessed from anywhere while running. It continuously exchanges information with the display, ensuring updates are instantly reflected. Users can also delete items from the checklist directly. Additionally, I designed a durable, aesthetically pleasing case to house the components, using aluminum, plastic filaments, and custom vinyl stickers. The case is modular, with mounting points for the display, microcontroller, and IR sensors, ensuring stability and functionality. The system activates only when hands are detected nearby, optimizing energy efficiency.
For my case, I used Aluminum, plastic filaments, and metal screws/washers to mount all components together. I created it so that every components of the board (display, ESP32, IR sensors) can be screwed and fit together. I also made stickers with vinyl cutter to decorate the case.
$5 (ESP32) + $11(TFT ILI9341) + $1 (IR sensor) = Total $17
+ FabLab resources: milling machines, breadboard, wires, aluminum, screws
I used most of the input device & output device week to design something that is directly related to my final project. In the meantime, I also looked into different modules that can include audio input and output.
I designed and hosted two real-time websites with local storage using node.js and HTML, programmed using Arduino IDE to be used on ESP32, created PCB from scratch using KiCad, mods.com, Carvera, and designed a case for both bottom and the cover using Solidworks, water-jet cutting machine, 3D printer, and vinyl cutter. Throughout my final project, I tried to do subtractive and additive computer-controlled design and vinyl and water-jet cutting as well as used learnings from networking & communication systems, embedded systems, and electronics production to create the final product!
Click below to download the code for the device, retrieving information live and updating display!
DOWNLOAD ARDUINO CODEClick below to download the code for the web, user interface for checklists!
DOWNLOAD CHECKLIST HTML CODEClick below to download the code for the web, user interface for tracking all the checklists
DOWNLOAD DAILY TRACKER HTML CODEClick below to download the code for the web, user interface for hosting web, sending, and retrieving and sending information to device
DOWNLOAD DAILY TRACKER JSON CODEFor each components to be perfectly mounted, I had to do some modifications. This was because when you move from digital to physical, especially with soldering and how the components are mounted using pin headers that are not completely vertical, the final product could be slightly different from what you designed!
I designed a case to house the ingredient list display system. Systems: - I developed a webpage that will keep track of and editable ingredient list.
To test logic and programming, I used Arduino IDE and a breadboard to verify functionality. For PCB fabrication, I used Carvera. To create nc file, I first used gerber2img converter made by Quentin. mods that will calculate Carvera milling path made by FabLab. For the case design, I initially used Fusion 360 but switched to Solidworks, which I found faster for simpler designs.
Initially, I planned to include audio output to announce the required ingredients. However, I ran into compatibility issues between the ESP32S3 and the I2S library, which caused delays. Despite troubleshooting and testing multiple speakers, I couldn’t get the I2S signal to work. Using an oscilloscope, I was able to detect pre-I2S signals, but the audio never made it to the speakers. With time running out, I decided to shift my focus to a display-based solution instead. Integrating the TFT displays with the ESP32 boards also came with its own set of challenges. I had to modify existing projects to make them compatible and relied on a breadboard for prototyping. This approach saved time and reduced errors compared to jumping straight to PCB iterations.
For the case design, I initially worked off PCB measurements, but I ran into issues with pin header orientation. To fix this, I switched to a physical model to fine-tune the measurements and used a 2D paper prototype to refine the design before moving on to the final CAD model and 3D printing.
Unfortunately, at the last minute, my display stopped working—it had been fine just 20 minutes earlier and the day before. I suspect two possible reasons. First, I had been using both a battery and a USB connection to my computer at the same time, which might have caused a high-voltage issue. My Mac even showed an error message saying it was rejecting the USB connection due to excessive voltage. I tried running the display on battery power alone, using the code I had already uploaded, but it still wouldn’t turn on.
Later, I discovered that pressing on a specific part of the display made it work again, which suggests there might be a soldering issue. It’s also possible that something got scratched or damaged while I was mounting the components.
I didn’t have enough time to fully debug the issue, but I’ve ordered a new TFT display so I can keep working on the project and refine it further.
Below shows some of my trials and error boards (there were plenty more before haha)
For all parts of my design, I tried to use multimeter so that I can check if there's any shortages during soldering. In addition, for debugging wiring connections, I used breadboard to test it out before printing pcbs. This saved me so much time instead of trying to create entire pcb starting from Kicad, milling, and soldering.
The case design was evaluated using a caliper to ensure accurate dimensions. Physical components were test-fitted to validate stability and functionality. To save time and resources, a 2D paper prototype was used to confirm the layout before finalizing the CAD model and 3D printing the case. This iterative approach ensured the final product was precise and practical!
As a recent Computer Science graduate with no prior engineering classes, this project was a completely new experience for me. Every week brought unique challenges, and figuring out how to work with different machines often felt like an uphill climb. I spent a lot of time troubleshooting alongside TAs and classmates, and while it was frustrating at times, those moments taught me a lot.
One of the biggest lessons was realizing just how different physical design is from working digitally. Things like soldering, debugging microcontroller libraries, and troubleshooting network connections weren’t just time-consuming—they were full of tiny details that could go wrong. It was eye-opening to see how even the smallest mistake could cause a ripple effect, but it also taught me to stay patient and persistent.
What really surprised me was how unpredictable the process could be. Tasks I thought would take minutes ended up stretching into hours, and other things I expected to be hard turned out to be pretty quick. I had to learn how to adapt, take things one step at a time, and not get discouraged when things didn’t go as planned.
Looking back, what stands out the most is how exciting it all was. Sure, it was tough, and there were moments when I felt completely stuck, but every small success felt so rewarding. The whole experience pushed me out of my comfort zone and gave me a new appreciation for hands-on work. I’ve come away from this project with not just new technical skills but also a better understanding of how to approach problems in a practical, step-by-step way.