Inspiration
My mom and sister both love gardening. Regarding their passion, I know two things. Firstly, my mom, when starting out in botany, ended up going through many plants before managing to successfully sustain one, and spent countless hours trying to figure out how to accurately gauge the condition of her plants. The other fact is that in the past month, my sister killed three succulents in her room by over-watering them. What if there was some way to ease this transition, and make entering botany easier? Thus, Vital was born.
What it does
Hardware Our project tracks the ‘vitals’ of a plant by collecting 3 data types from the plant. From there, the data is pushed to enough apps that you can view your data anywhere, be it mobile or a computer. iOS App -Contains Authentication functions to calibrate one’s raspberry pi to iOS app -Reads values from the raspberry pi’s push to the database and determines whether the specific vital is optimal or not for the given plant -Displays the last 100 data points logged from the arduino in a simple graph Android App -Contains Authentication functions to calibrate one’s raspberry pi to iOS app -Reads values from the raspberry pi’s push to the database and determines whether the specific vital is optimal or not for the given plant -Displays the last 100 data points logged from the arduino in a simple graph Website The website starts up with a login/register screen. Once signed in, the user is prompted to open up records of plants. They can also add new plants as well. Once a plant is chosen, the user can see information about ideal temperature, humidity, and moisture conditions for it. Alongside, there is a graph displaying data that was gathered earlier.
How we built it
Hardware We used a capacitive soil moisture sensor and then mapped specific values to it that we determined experimentally. To restate than simply, we scale the output of the sensor on a scale of 0-100 to return percentage. We determined the 0 and 100 values experimentally. Additionally, we also collect ambient temperature and humidity in order to determine whether or not the conditions are ideal. From there, an arduino pushes this data to the RasPi through Serial UART communications, and the RasPi then pushes this data on a selectable interval to Firebase. It logs the past 100 data points on firebase so that the other applications can graph the trends of your plant. iOS App -Coded in swift, Xcode IDE -Using Firebase Auth, we were able to create simple login and sign up features and we used firestore to read the values that the raspberry pi was pushing -We used a scrapable database to retrieve optimal vitals for a given plant and compared them to the values that we were reading from the arduino’s sensors -We used a charts library to plot the recently inputted values in a user-friendly manner Android App -We used Android Studio to build the android app -Using Firebase Auth, we were able to create simple login and sign up features and we used firestore to read the values that the raspberry pi was pushing -We used a scrapable database to retrieve optimal vitals for a given plant and compared them to the values that we were reading from the arduino’s sensors -We used a charts library to plot the recently inputted values Website We created the structure and styles through html and css. However, most of the coding was done in JavaScript. JS was used to communicate with our database - Firebase. User authentication and reading/writing was all done through this database.
Challenges we ran into
Hardware A couple of things, to be honest! To begin, Firebase does not support signing into Firestore with python, but we had all the data collection over serial being done in python. I ended up bypassing this by using the admin SDK in conjunction with REST authentication. Another issue is that we accidentally overvolted our Power Supply Module and our first soil sensor with double the voltage that was considered ‘safe’, and I ended up frying the board. Lucky for us, we bought a 5-pack! The final difficulty was, again, the power delivery module. We were having extremely erratic readings when supplying sensor power with the power delivery module, but we ended up being able to smooth these readings by putting both the power supply pins and the 5 volt/GND pins of the arduino into the breadboard. iOS App Getting the last 100 data points from the arduino’s sensors was challenging as we had to timestamp them to make sure that we were not overloading the firestore. Android App Getting the graph to work and making a single format database for all platforms was tricky and it took time for us to agree on database format. Website The biggest challenges we faced were accessing the Firebase database correctly. The structure is very efficient, but can be very confusing to layout perfectly. Also, designing UI was an obstacle as we tried to make it as user-friendly as possible
Accomplishments that we're proud of
For hardware: The whole thing! We have never coded an arduino, or made hardware projects in general. This hackathon was a huge learning experience for us! For the software: We managed to get a website, android app, and iOS app (website: vitalapp.tech)
What we learned
We think that this hackathon really boosted our team-working spirit. We learnt how to understand everyone’s ideas, and give constructive criticism. Overall, it was an amazing experience. As much as we learnt in technology, we learnt that much about each other.
What's next for Vital
Due to the incompatibilities of Firestore that we had find workarounds for, we ended up no being able to hone our UI as much as we would have liked. One of the first things that we would like to improve with our UI is the Raspberry Pi, as it is possible to make a rather good GUI quickly using TKinter. Right now, the RasPi application operates off the terminal! Another thing that we would like to add is a better plant database application. Right now, we’re using some janky one that we found on a github page, but there are some more comprehensive and accurate ones that could improve the overall cohesiveness and user-friendliness of the data in our application. Finally, one of the features we were unable to implement due to time constraints was plant detection with machine learning, where when you made your new plant, you could just take a picture of the plant to identify it. We had the model complete, but were unable to implement it in our mobile applications.
Built With
- arduino
- c
- c++
- css3
- firebase
- firebaseauth
- firestore
- html5
- java
- javascript
- json
- kotlin
- objective-c
- python
- raspberry-pi
- rest
- swift
- xml
Log in or sign up for Devpost to join the conversation.