With our combined knowledge of embedded systems and Android development we wanted to build an IoT application that would have a positive impact. With growing concerns for water quality we wanted to build a system that would allow you to test and monitor a water supply.

What it does

The Arduino and various sensors measure water flow ( L/min ), temperature ( C ), total dissolvable solids ( ppm ), and pH levels. The Arduino then pushes the observed values to a Firebase realtime database. The Android application sets a listener on the database path and receives all incoming data in realtime. Using observers throughout the UI the app displays incoming values as they appear in the database so that a user can measure their water quality while at home and abroad.

How we built it

Miles interfaced the sensors to the Arduino and wrote the embedded code in C++.

Tyler built the Android application using Kotlin with Android architecture and navigation components.

Both components used Firebase's realtime database feature to push and pull data.

Challenges we ran into


  • Sending a struct of data from Arduino to the ESP 8266 chip ( wifi adapter ).
  • Wiring up sensors without prior experience.


  • Using Robinhood teams SparkView and Ticker libraries for graphing and animated TextViews. Specifically implementing the Scrubber which allows you to move your finger along the graph with values displayed above.

Accomplishments that we're proud of

  • All four sensors working
  • Android application observes and display values in realtime
  • Interfacing wifi chip with Arduino to push to Firebase

What we learned

  • How to interface an Arduino with a wifi chip as well as the sensors used.
  • How to use Robinhoods UI libraries.
  • How to use Androids new navigation and architecture components

What's next for WaterQ

  • Integrate a UV sterilizer
  • Integrate all sensors to an inline device
  • Add auto shutoff solenoid valve
  • Enhancements on theme and styling in application
  • Increase efficiency of application and Arduino
  • Utilize trend analysis to isolate anomalies
  • Add cloud functions to Firebase database to send notifications to user when measurements go out of desired bound.
  • Add preferences for desired units of measure.

Built With

  • android
  • arduino-mega
  • c++
  • esp-8266-wifi-module
  • firebase
  • kotlin
  • ph-senosr
  • realtime-clock-module
  • tds-sensor
  • temperature-sensor
  • water-flow-sensor
Share this project: