my ece1100 discovery project

Apr 16, 2025 Updated on Apr 21, 2025

🚨 Update (April 21, 2025)

Since completing the initial version of this project, I’ve successfully integrated the IoT garage door opener with Apple HomeKit using HomeSpan. Now, whenever I arrive home and connect to my Wi-Fi, the device automatically triggers and opens the garage — no remote needed. It’s a seamless experience powered by ESP32, and a small but satisfying win in home automation!

completed project on the wall
the completed project attached to my wall (using premium, sticky material)

Discovery Project Idea

The idea for my Discovery Project started with a simple but frustrating daily inconvenience: opening my garage without a dedicated remote. I wanted a smarter, more personalized solution—something I could control directly from my phone. That’s when I came up with the Garage Door Button Pusher.

My goal was to build a device that physically presses the garage door button on command using a small servo motor. Instead of purchasing an expensive smart garage system or dealing with a clunky remote, I envisioned a setup where a compact servo-driven arm would be attached next to the garage button and activated over Wi-Fi. This way, I could trigger it remotely from my phone using a Home Assistant dashboard or a similar interface.

I chose this project not only because it solves a real problem in my daily life, but also because it gave me a hands-on opportunity to explore microcontrollers, wireless communication, and IoT design. With a few core components—a servo motor, an ESP32 board, and a mobile power source—I planned to create a seamless and affordable alternative to commercial garage systems.

Project Demo Video

Here’s a short demo of the Garage Door Button Pusher in action. The video shows how the servo motor presses the garage button when triggered through the custom web interface hosted by the ESP32. This demonstration captures the core functionality and highlights how the system responds in real time to user input over Wi-Fi.

Project Progress

Over the course of the semester, I brought my Garage Door Button Pusher from concept to functional prototype. The first step was finalizing the overall design and creating a circuit diagram to visualize how the servo, ESP32 microcontroller, and power source would interact. I also ensured that my design could eventually integrate with Home Assistant for wireless control.

Once the design was set, I began gathering materials—primarily an ESP32 dev board, a mini servo motor, jumper wires, adhesive materials, and a power bank. After securing all the necessary hardware, I assembled the prototype by mounting the ESP32 onto a breadboard and connecting it to the servo motor. I carefully positioned the servo so it could press the garage button with enough force and precision.

Programming came next. I wrote and uploaded the code to the ESP32 to rotate the servo on command. After a few tests and iterations, I refined the angles and delays to ensure the button was pressed and released smoothly. With the mechanical portion working reliably, I then moved on to the networking portion—developing a simple Wi-Fi-based protocol that allowed me to trigger the button press from my phone over my local network.

Throughout the process, I tested each component individually and as part of the full system. I debugged small mechanical issues, such as the servo slipping or misaligning, and resolved Wi-Fi connectivity hiccups. By the end of the timeline, I was able to press the garage door button from my phone—fulfilling the main goal of my project.

zoomed out photo of the project
the completed project showcasing the breadboard, the microcontroller, some wires, a power bank, and the servo (held up by premium, sticky material)
breadboard and power bank that powers the esp32
the esp32 microcontroller is powered by a portable anker power bank (because i dont have a usb cable long enough to connect to a wall socket)
the simple html function page
the simple gui for the website using html

Successes and Failures

Like any engineering project, my Garage Door Button Pusher went through a few unexpected turns. One of the early ideas I had was to integrate the ESP32 directly with the Amazon Alexa app on my phone. The goal was to be able to say a voice command like “Alexa, open the garage,” and have the ESP32 receive the instruction via Wi-Fi. Despite successfully connecting the ESP32 to my home network, I ran into a major roadblock: the Alexa app could not detect or recognize the ESP32 as a smart device. After troubleshooting compatibility issues and searching for workarounds, it became clear that this route required more complex integration than expected—possibly involving custom Alexa skills or certification processes.

Rather than continuing down that path, I pivoted and built a dedicated webserver hosted by the ESP32 itself. This ended up being one of the biggest wins of the project. By serving a lightweight HTML interface over the local network, I was able to access the garage opener from any device connected to Wi-Fi, including my phone, tablet, and laptop. This not only met my original goal of remote control, but it also provided more flexibility and transparency over what the ESP32 was doing in real time.

This shift in approach—from relying on a third-party ecosystem like Alexa to developing my own web-based control interface—was a key learning moment. It pushed me to better understand how web servers, local IP addressing, and embedded networking protocols work, which ultimately made the project more robust and platform-independent.

What I Learned: ECE Skills Gained

Throughout this project, I developed a wide range of hands-on ECE skills that extended beyond what I’ve learned in the classroom. One of the biggest areas of growth was in embedded systems programming—specifically, writing Arduino code for the ESP32 microcontroller to control a servo motor and manage input/output through GPIO pins. I became more comfortable using libraries and managing timing and precision, especially in coordinating the servo’s movements with external triggers.

I also gained experience in circuit design and prototyping, wiring up components like the servo motor, ESP32 board, and power supply on a breadboard. Understanding how to route power safely and ensure stable voltage—especially when powering both the ESP32 and the servo—was critical for consistent operation.

On the networking side, I explored wireless communication protocols by programming the ESP32 to host a web server and respond to HTTP requests. This gave me a foundational understanding of how IoT devices communicate over Wi-Fi, as well as how to build and serve dynamic web content from a microcontroller.

Finally, I strengthened my debugging and troubleshooting skills. From identifying servo misalignments to figuring out why my device wasn’t appearing on Alexa, I had to think critically, research potential solutions, and adjust my design along the way. The iterative, real-world nature of this project made it a great exercise in applying ECE principles to solve a personal problem.

Final Thoughts

Completing this project was both rewarding and eye-opening. It was the first time I applied so many elements of what I’ve learned in my ECE courses to solve a real-world problem of my own, and it gave me a deeper appreciation for the intersection between hardware and networking systems. As someone focusing on computing hardware and systems architecture threads, this project helped me strengthen my understanding of embedded systems, Wi-Fi communication protocols, and real-time control—all areas directly tied to my academic and career interests.

While the initial version of the Garage Door Button Pusher met my goals, I don’t see the project as finished. I plan to continue developing it when I have time. One idea I’m excited to explore is automating the garage door to open automatically when my phone connects to the home Wi-Fi, but only during a specific time window—say between 6–8 PM—using a combination of scripting and network detection. I also want to experiment with a bit of creative flair: attaching a silicone “finger” to the servo arm so that it literally looks like a finger pressing the button, just for fun.

Overall, this experience reinforced my interest in embedded systems and IoT design. It was a great way to combine technical skills, problem-solving, and creativity, and I’m looking forward to continuing work on it and seeing where it takes me next.