Front view of the kiosk, showing differing amounts of food at the stations
Kiosk IoT controller on a breadboard
Touch sensor secured to kiosk
PiCamera CV Setup
Sign Up form
Log in form
Dropdown menu for selecting station to donate to
Map overview at system launch, all stations are empty
The idea started when one of our members attended a program oriented towards social impact and justice, in which a main focus was the issue of hunger. This spurred a group conversation on what we could do to help combat this global crisis.
As students at schools with many student organizations focused on sustainability, we wanted to come up with a way to tackle the source of the food waste problem. Roughly 805 million people go undernourished on a daily basis, but enough food is produced to feed everyone. Poor food allocation and distribution is a cause for both environment and health crises.
What it does
FREE(Food Distribution Effort for Everyone) is composed of three components: a web application, a network of interactive kiosks, and a cluster of computer-vision enabled cameras. The web application allows any vetted user to deposit food at any of our designated drop-off/pick-up stations(kiosks). The current implementation allows a user to donate and deposit food at any of the 10 drop-off stations in the Cambridge, Massachusetts area. This information is then sent to the kiosk(s) in the area, which displays live information about the food stations in its’ zone. Each station is represented by an RGB LED that changes color on a spectrum from red to green, giving quick information about which stations have more food than others. More in-depth information is displayed on an information panel at the bottom. When a user wants to get food from a station, they only need to tap on the station that they desire. Currently, only stations 1-5 have touch support due to a lack of available hardware. Lastly, the kiosks automatically enter standby mode when the user walks away to save power. The computer-vision enabled cameras, which have not been fully implemented, will recognize when a particular type of food is placed in a food station, automatically send that information to the kiosks, and give an approximate date of expiry for when the food needs to be removed from the station.
How we built it
Due to time constraints, the kiosk is constructed out of cardboard, paper, packing tape, and prototyping electronics. Despite the low-grade construction materials, all functionality on the kiosk works as expected. The software was created with a React/Webpack/Flask/SQL stack on the localhost. We also used version control with Git
Challenges we ran into
Difficulties with the WiFi made testing the hardware and debugging very time-consuming and frustrating. Attempted connections to the kiosk, web app and cameras would often fail. The kiosk was also faced challenges with intermittent connectivity, as the wire available to us was too small to fit well in the breadboards. The ESP32 DevKit V1 used on the kiosk also needed to be re-flashed before it could be used, a difficult and unfamiliar task. In regards to software development specifically, we had very limited experience with SQL and back-end frameworks such as Flask. Connecting front-end to the back-end and database proved to be much more difficult than anticipated.
Accomplishments that we're proud of
We were very proud of the fact that most of us had never created a full and scalable web-application from scratch before. Although we had difficulties developing the back-end since we didn’t have much experience at all with Flask or SQL, we were able to get through it. When we were able to use Axios and Flask to send data to the kiosk, we were extremely excited. We were also proud of using an unfamiliar IoT platform, the DOIT ESP32 DevKit V1, and successfully implementing it.
What we learned
Completing this project within 24 hours from scratch was very challenging but just as rewarding. Setting up multiple software developer environments on different operating systems and doing developer operations was just as challenging as creating the codebase itself. We definitely should have spent the time to set up virtual environments. It would’ve saved us from some dependencies problems later on in our code. However, early and diligent planning saved us a lot of time in regards to integrating the components of our project together (Front-end, Back-end, and Hardware). The features we planned for the minimum viable product were implemented much easier than features we came up with along the way. We learned a lot about fully connecting a front-end based on React.js with a back-end consisting of Flask/SQL through online resources, the kind HackMIT mentors, and lots of trial and error. Focusing on smaller components of our project one at a time and learning to constantly communicate allowed us to maximize the time of four individuals.
What's next for FREE: Food Redistribution Effort for Everyone
FREE is designed for rapid and global deployment. It serves to combat immediate food shortages caused by natural disasters, political strife, or even poor public policy. FREE kiosks will be energy self-sufficient by means of solar panels, with the current WiFi configuration replaced by cellular (LTE/5G). These advancements will enable global deployment and communication between the kiosks and the internet. The current web-app interface would include more features, such as the specific details of food at a given location, account vetting, and increased information from the kiosk/camera setups to increase the versatility, safety, and overall efficacy of the system as a whole. The camera units would be implemented to allow anyone to deposit food at a station, have the food be quality checked, and easily obtain food. Lastly, the FREE kiosks and camera units would be made of weather-resistant and durable materials suitable for use anywhere on the globe.