Promotional video link:


We want to make a device that will help make people more aware of how much water they are using during the shower.

What it does

First, as you enter the shower, a thermistor will determine when the shower starts by sensing a change in temperature. Your entrance will then activate two things; it will launch a timer and send information via bluetooth to an LCD screen that will print out the current temperature and the time passed. Then, as you exit, the same thermistor will sense the drop in temperature and stop the timer and deactivate the bluetooth. Furthermore, between the entry and exit time, a total time is calculated, thus you are able to see how much time you spend under the shower. This total time is then used to approximate the total liters of water used during your shower. As you exit the shower, you will press a button that will send the total amount of water and time passed through a text to your phone via ethernet.

How we did it

Throughout this project we worked on many different pieces of hardware and software to get the project to work. The hardware for the temperature sensor part included a an Arduino, a thermistor, and a bluetooth modules. The software for this part involved getting information from the thermistor and converting that data to Fahrenheit. Then we installed a threshold that would only activate the bluetooth signal if the thermistor received data of a temperature above 75 degrees, because this would have indicated a sharp rise in temperature given that normal room temperature is normally 70 degrees. If the temperature surpassed the threshold, the bluetooth would activate by sending the current temperature to the slave bluetooth module. There coded delay was at 500 so that it would send the updated approximately every second or so.

The second piece of hardware of the project involved a slave bluetooth module, an LCD shield, an ethernet shieled, and a button. The software of this part indicated that it had to start a timer once it started receiving data from the bluetooth. Both the current temperature and the time passed would then be printed out on the LCD screen. To install the timer, we tried multiple things such as using the function millis(), but what gave the best results was making multiple if loops with delays of 500 to update the seconds every seconds. The ethernet shield an button come into play at the end of the process. The idea is that once the user finishes their shower, they will press a button, which through the ethernet will send a text message stating the total time of the shower and the amount of water used. We did this by using ThingSpeak and Twilio as our webservers for the text message. Twilio is a website that allows you to have an online phone number that can easily send messages to your phone number. ThingSpeak account is an easy server to connect the ethernet to, and we simply had to make a new Thinghttp which took information from our Twilio account to properly program. The thingspeak gave us and API number which we then embeded in our code so we could access that specific http. This made it easy to send a text message that had the information we needed. We ran into a couple of problems when sending the text message. The first was how to send a text only at the end of the shower. At first we were thinking to program if so that it would send a text once the bluetooth stopped receiving information, meaning the temperature had gone back down to room temprerature. But we decided it would be more practical to have the person press a button at the end of their shower to send the text. The other problem we ran into is that once we pressed the button, the program would send about 5 text messages instead of one. We fixed this problem by switching the button port to A5 and analog read it because it gave more accurate information. We also used a system of delays so that it would only read action once every 2 seconds, and therefor not read the same press of the button twice or more. The other problem we ran into with the text message was that the program we downloaded allowed only for a preset text message to be sent, but the whole point of our project was to send updated data each time. To solve that we went on the internet and found a line of code, const char* string1 = message.c_str();, which allowed us to update the string message that we wanted it to print each time.


This was a challenging project that made us put all of our efforts into problem solving and looking for new ways to get the basics of our project to work. We ran into a lot of hardware issues which set us back a great deal, but at the end we were able to solve all of these problems. It was a great experience that taught us the basics of hardware. Overall the project was absolutely worth it, and having our original idea made into a reality was very fullfilling.

Share this project: