Check out the web-app here
In this post, I’m going to share and reflect on the project I spent several months working on. I’ll go over the motivations, stages of design, and results to my final year engineering capstone project: the wireless window opener.
My responsibilities in the project was the design and development of the software, the design of the enclosure, and integration with the firmware.
My team was sponsored to create a device that:
- Opens windows
- Can be controlled remotely
- Is wireless
- Is solar powered
We were successful in creating the device and the accompanying software, which can be seen in the pictures below:
2. Motivations
Our sponsor was looking for an automated solution to open or close windows. I was thrilled to work on this project as it presented a great opportunity to keep developing my skills in web development, firmware, and 3D design.
Our capstone solution aimed to satisfy the gap in the market for a device with the following features:
Existing Solutions | Our solution |
---|---|
Not solar powered | Solar powered |
Only for push-style windows | Works on crank-style windows |
Has to be wired | Works wirelessly |
Operated by remote only | Operated by remote and app |
Remote operates max 1 window | App operates many windows |
3. Design
I made initial design renderings in blender, though they were slightly different from the final physical result:
The website was planned to be done (and ended up being done) “serverlessly” using AWS:
Tech stack:
Frontend:
I planned to use Vue.js to create a progressive web app which would work across all devices. The styling would be done using TailwindCSS.
Backend:
The backend for this project was “serverless” by building it on AWS. This project gave me lots of experience build on AWS’s most popular tools such as Lambda, API Gateway, and DynamoDB. To get started, I found the serverless framework valuable to get up and running quickly.
AWS’s IoT Core was valuable in providing secure communication to and from our device’s microprocessor, which was an ESP32. I explored using AWS Cognito as authentication for our App, but decided I would simply authorize using Google’s OAuth authentication API for google accounts.
4. Completed Design and Implementation
4.1 Progressive Web App Design and Implementation
As planned, I created a cross-platform app created in Vue.js to control the window opener remotely and allow for smart features like temperature monitoring and scheduling.
The Webapp has the following features:
-
Cross-platform: the app can be downloaded on Android, iOS, or simply used in a browser on any device.
-
Secure with google authentication: by using a google account, the user’s credentials are stored securely by google. This protects the device from being controlled by unauthorized users.
-
Can control multiple devices from a single app: by adding the devices through a unique code, a user can control multiple devices from a single page. They can rename the devices for easier identification of which device they are controlling.
-
Shows real-time data about the devices state and sensors: The device measures temperature and always reports whether it’s open or closed, which can be seen in the dashboard.
-
The device can be scheduled to open or close at any time using a time selector.
4.2 Enclosure Design and Implementation
The enclosure was designed by me in fusion360.
The enclosure had to satisfy the following objectives:
Objective | Solution |
---|---|
Easy to access internals | Sliding front cover |
Securely fastened to window | Screw holes on sides of enclosure |
Needs to hold solar panel | Solar panel spot angled towards window |
Motor needs to be secured | Designed with motor attachment spot in place |
Cheap to produce | 3D Printed |
The first version of the enclosure. Designed quickly to test 3D printing capabilities and get a rough idea of what we’d need.
Version 2. The first version showed me the tolerances I had left for the sliding door were not enough. Fixing that and a few similar issues gave me more experience performing rapid iteration on my design.
The final version (version 3). By this point in the project, our team had made final decisions on the parts we were using, allowing me to make precise measurements on the dimensions for the final enclosure.
I incorporated feedback from our sponsor in this version to make the screw holes on the sides into a longer slot so that it would work on different sized windowsills.
Although these changes were the largest from the original version, I was able to finish this version in minimal time due to the knowledge I had gained through making the earlier versions.
5. Conclusions and Lessons Learned
I found this project to be immensely successful and rewarding. Our team was able to deliver a useful IoT device that integrates with a full-stack application.
I had a great time working on this project as I learned a lot of valuable skills. From frontend design with modern JavaScript frameworks to integrating it with AWS and making it all work with the device itself, I was able to use this project to apply what I’ve learned in software, firmware, and design courses I have taken during my degree.
Working together with others in a team had a lot of advantages in this project – by having others coordinate meetings and work on hardware design, I was able to focus on the application and the enclosure without worrying about other parts of the project.
Working with a team was difficult at times due to challenges in coordinating everyone’s work and ensuring communication happened often. Communication between teammates and our sponsors was difficult specifically because this project was worked on mainly online due to COVID restrictions at the university.