Inspiration
We were inspired to embark on this project because of the constant problems and complaints faced by cities from people who are fed up with the parking situation. Whereas there have been many attempts to mitigate these problems through vehicle counting and tracking solutions, we wanted our results to be visible to the person prior to arrival and at any time along the way.
What it does
Our solution utilizes IoT sensors to check the availability of a given parking lot and uploads the status of a parking lot and how many spaces are available to a server. Our website, Parkinglot.tech, pulls the status of the parking lot from our server and provides this information to site visitors, along with other important trip information like the forecast for the day.
How we built it
Given the time limitations inherent in this competition, we built an end-to-end proof-of-concept prototype. We incorporated every step, from the ability to sense whether a car is in a parking space, to pushing that information to an IoT server, to pulling that information onto a built-from-scratch website. Each step was divided into 4 roles that our team members worked on concurrently.
Step 1: (Morgan Gallagher) Use ultrasonic sensors to detect objects in proximity and send a yes/no signal for if a vehicle is present. This was accomplished for our demo using 3 HC-SR04 ultrasonic sensors attached to an Arduino Pro Mini. The Arduino used the NewPing library to detect objects via the sensors. This data was then sent to an ESP32.
Step 2: (Takumi Ito) Use an ESP32 to take in data from the sensors and then send it through a wireless connection to an IoT Server. This required the creation of an IoT server (we used Thingspeak) and then the configuration of all of the IoT server certificates, wireless certificates, and device certificates in order for them to communicate.
Step 3: (Alberto Hernandez) Use Google Cloud Platform and its Compute Engine to create a VM instance to act as a server for our webpage. The VM used Ubuntu 18.04 LTS as the OS and was setup with Node.js to serve the web page and its elements. The configuration of the VM and Node.js was all setup using the Google Cloud Platform dashboard and SSHing into the CLI of the VM. Domain configuration was done using Domain.com and the Google Cloud Platform dashboard.
Step 4: (Andrew Carlson) Use HTML, CSS, and Javascript to create the web page. Access the AccuWeather API with fetch() and display current weather condition and 12-hour forecast JSON strings in a weather widget. Access IoT server and created logic to use that information to display parking lot status. Adjust web page elements to be responsive and work on mobile devices.
Challenges we ran into
There were several difficulties encountered with using a multi-layered implementation. A lot of time and creativity went into finding the solutions while under time constraints.
Step 1: (Morgan Gallagher) One of the biggest challenges was finding a reliable may to detect vehicles using the ultrasonic sensor. This required both the use of a timing formula for greater accuracy and averaging the results to eliminate outliers. The main library used to accomplish this was the NewPing library. However, this library cannot be natively hosted on the ESP32, so it had to be hosted on an Arduino Pro Mini instead, and then the results were transferred to an ESP32 for transmission to the IoT server. The other biggest challenge was getting multiple sensors to run actively on the same device. This was done by transferring control between sensors so that they were all checked within the course of 15 seconds. This was acceptable because the time frames associated with sensing a parked car are fairly large.
Step 2: (Takumi Ito) The challenge was setting up the MQTT server. We tried several different providers trying to set up and IoT server. We tried Google Cloud, AWS, Thingspeak, and we went with Thingspeak after hours of wireless connection debugging and failing to get Google Cloud and AWS to connect. There was some hardware limitation due to available components. Some were brought by our team and some things had to be soldered on site. Time was a huge hurdle as I has to learn a lot of new information and do a lot of deep debugging that I was unfamiliar with.
Step 3: (Alberto Hernandez) A big challenge that we faced was choosing a web hosting platform. We first attempted to use AWS as our web hosting platform but dropped it after we were unable to connect it to the domain we got from Domain.com. We switched over to Google Cloud Platform and were able to get a VM to act as our web server using the Compute Engine. The Google Platform was also compatible with our domain from Domain.com. Another challenge we faced was choosing our software stack for our web server. We debated on several different stacks, such as LAMP and Amazon S3, but settled on Node.js since it worked nicely with the Google VM.
Step 4: (Andrew Carslon) The first big challenge was getting the server hosting figured out. We were able to get the domain registered through Domain.com very easily and assumed that we'd be able to get AWS as our host easily as well, but found that we were not able to actually display any HTML files. We ended up switching over to Google Cloud Platform, and while it gave us troubles at first as well, it worked better for us than AWS and eventually became our solution. After the server was set up, I was able to focus my efforts on building the site. While I had some experience with basic web development before this hackathon, I had never interacted with web API's like AccuWeather's before and had some trouble with figuring out how JSON works before finding the solution. I also worked on designing the site to be as presentable and functional as possible, which took some creative muscles that I don't get to use very often as an engineer.
Accomplishments that we're proud of
We are extremely proud that we were able to get the implementation working from end to end, despite requiring several integrated steps in between. It was a great moment when we triggered our sensors and got to see the website update the parking availability in real time accordingly!
Step 1: (Morgan Gallagher) The biggest accomplishment that i am proud of is having all of the sensors working accurately and simultaneously. The project, while tested on a smaller scale model, is functional at a full size level, and if it was not midnight we would be taping our functionality tests in an actual parking lot with actual vehicles. I think the reliability at the front end is very important because there are inaccuracies and delays associated with the rest of the process, so having as clean of data as possible in the lowest levels of hardware is very important.
Step 2: (Takumi Ito) The best part was finally getting the IoT server to connect after trying so many providers. I spent a lot of Saturday on getting the connection to work and even sat down with mentors. When it finally connected and the first data was stored to the server, I felt a lot of relief. Then it sent to the website and I spent my time making the video and presentation materials.
Step 3: (Alberto Hernandez) I'm really proud of having setup a web server. Although it was a relatively simple setup compared to more powerful and dynamic setups, it was still challenging and a fun and interesting experience. During this challenge I was also reminded of how great it is to be comfortable with terminals and CLIs, and that makes me proud of my CLI skills.
Step 4: (Andrew Carlson) I'm proud of the AccuWeather widget. It's very simple but it's also very functional and something that I could see being used on a professional website. I'm also very proud of my team for setting a goal at the beginning of the event and sticking with it until the end and accomplishing all of the tasks that we set for ourselves. We split our team into the hardware half and the software half, and when the two halves finally came together to make a complete working parking lot monitoring system, it was magical.
What we learned
This was the first hackathon for all of us, so really the entire thing was a learning experience. However, while we tried to split tasks in a way that played to our skills, we all definitely had to learn a lot to get this project from beginning to end.
Step 1: (Morgan Gallagher) One of the most important things I learned was how to perform larger dev projects as a team. The biggest example of this is that I did not know how GitHub was used before this event or how to navigate it, but I was pushing and pulling code with everyone else and I felt I learned a valuable skill there. The other thing I learned while at HackKU is how to change the board interfacing in Arduino and add new device types and libraries that the libraries are often not cross-device compatible. Finally, I helped out with the IoT server, so I understand on a basic level how they are implemented for both Google Cloud and AWS.
Step 2: (Takumi Ito) The biggest thing I learned was how to use data over the internet on a application we built. This was entirely new to me and was also one of the reasons we had so much trouble trying to pick a provider. Everything I learned to successfully make and communicate with an IoT server was new skills. It was also my first time using GitHub with more than two people and figuring out how the sharing and overwriting capabilities worked. Finally, I had to think fast and not get stuck trying to make one thing work because of the time limitation.
Step 3: (Alberto Hernandez) I definitely learned a lot about a lot of different things during the hackathon. Although I knew about web servers, domains, and web development on a basic level, I had very little knowledge or experience with actual implementation. This project helped me learn a lot more about actual components of implementation, like the hosting platform, software stack, domain registration, and APIs. I also learned more on how to work in a team to create a more technical project, and how to coordinates everyone's skill sets towards what they're good at.
Step 4: (Andrew Carlson) I learned a lot about interacting with different APIs from implementing the AccuWeather widget and parsing JSON. I also learned a lot more about how AWS and Google Cloud Platform are used and have some new ideas for future projects. Working on a single project for 36 hours and completing major goals with a team taught me new teamwork and project management skills that will most definitely become useful in my future career. It felt like a long time and a lot of work, but at the same time it went too fast for me to implement everything I wanted to, so this experience has taught me the importance of time management. This was my first hackathon, and I learned that they are really fun and wish I could go to more!
What's next for Parkinglot.tech
It surprised all of us I think how effective our team unit was able to perform. Everyone was able to work both individually and collaboratively in order to achieve all of the success criterion. We were really behind this idea and heard a lot of positive feedback from others when we talked about what we were doing. Even though there are some current parking solutions in vehicle detection and tracking, this has not translated to IoT web interfacing and access in major cities. Since commutes and parking are one of the biggest reported headaches of city dwellers, it stands that the interest and market for this system would exist in several densely populated locations throughout the country. We wanted to test the feasibility of a parking lot status webpage to see if there was some unforseen great hurdle in implementing them, but if we could throw a rough prototype together, then we believe that for places that already have vehicle detection infrastructure it should be entirely possible for them to implement a scaled up version of our solution. I think the coolest part about the project we chose is that it felt like something you wished you had now, and would actually expect to see some years down the road.
Built With
- accuweather
- arduino
- css3
- esp32
- google-cloud
- html5
- newping
- node.js
- thingspeak
- ultrasonic-sensor
Log in or sign up for Devpost to join the conversation.