Smart Shower

Published

Introduction: Smart Shower

About: I'm a student with a passion for IT

Smart Shower is een project gemaakt door studenten van de Howest.

Het idee achter het product is om de mensen bewust te maken hoeveel water ze verbruiken per douchebeurt.

We willen er zo voor zorgen dat mensen korter onder de
douche staan, en zo minder water verspillen. Dit door de mensen sneller uit de douche te krijgen, of tijdens het inzepen ervoor kunnen zorgen dat ze het water even uit doen.

Het doel van ons product is dus zorgen dat de mensen minder lang onder de douche staan, en zo minder water verspillen. We willen dat de mensen niet enkel stilstaan bij de kosten die ze uitsparen, maar ook hoe goed het is voor onze wereld en de natuur.

We denken hiermee ook mensen te laten inzien hoe duur water wel niet is, en wat ze ermee bereiken voor de natuur eens ze hiermee rekening beginnen houden. Ze helpen zo de natuur te beschermen en hun geld te besparen.

Step 1: Benodigdheden

Voor de kostprijs verwijs ik naar de bom die bij dit document meegeleverd werd.

Hardware

electronica

Led die water simuleert

Voor de ontwikkeling van het prototype SmartShower is, in plaats van water, een led voorzien ter aanduiding wanneer er al dan niet water uit de douchekop stroomt. De reden hiervoor is de hoge kostprijs van een industriele waterpomp. Ook was er tijdens de bouw van het project geen rekening gehouden met de fysica der over- en onder-druk.

Arduino UNO

Een simpele Arduino UNO (mag ook andere uitvoering zijn) volstaat om de data van de sensoren uit te lezen.

Potentiometer voor Water

Bij het prototype wordt gebruik gemaakt van een potentiometer om het waterverbruik te bepalen. De bedoeling is om bij een prototype die werkt op water, dat de potentiometer vervangen wordt door een effectieve waterkraan. De berekingen voor het water kunnen als volgt worden geimplementeerd: de stand van de waterkraan bepaald de druk op het water. Hoe hoger de druk, hoe meer water er door de kraan vloeit. Deze waarde x aantalSecondenPerSessie = totaalWaterVerbruik.

Rotary Encoder Temperatuur

Gezien de start temperatuur vooraf ingesteld wordt per gebruiker, heeft elke gebruiker een andere start waarde. Om de stand van de temperatuur manueel te verhogen/verlagen maken we gebruik van een Rotary Encoder en niet de alomwelbekende potentiometer. We hebben gekozen voor een Rotary Encoder omdat deze geen limiet kent.

Noot: wanneer men het project uitvoert met een werkende waterkkraan is een temperatuursensor voorzien. Gezien bij het prototype er geen water aanwezig is en er dus geen materie is om de temperatuur van te meten, is besloten dat de stand van de Rotary Encoder gelijkstaat aan de werkelijke watertemperatuur.

Rotary Encoder Profiel selecteren

Voor de gebruiker van start gaat met zijn douche, zal deze zijn profiel selecteren. Dit gebeurd aan de hand van een Rotary Encoder. Aan de Rotary Encoder hangt een RGBled die telkens een andere kleur weergeeft per profiel. Zo weet de gebruker wanneer zijn profiel geselecteerd is.

Noot: voor het prototype smartShower is hier gebruik gemaakt van een potentiometer in plaats van een rotarty encoder. Merk op dat een rotarty encoder gebruikersvriendelijker was geweest.

WS2812B 5050 RGB Led strip (1m, 30 leds) voor selectie profielen

Aan de douchekraan zelf hangt een ledstrip in cirkelvorm. Zo weet de gebruiker welk profiel geselecteerd is.

Raspbery Pi 3 Model B + Voedingadapter (output: +5V gelijkstroom 2A)

Dit model is de krachtigste in de reeks. Een Raspberry Pi 2 zou eventueel ook werken, maar dit is niet uitgetest.

USB kabel voor seriele communicatie

We hebben gekozen voor seriele communicatie tussen de Arduino en Raspberry Pi 3. Eerst was gedacht om data door te sturen via bluetooth maar de USBkabel lag in handbereik en hielp ons lichtjes de kostprijs van het project te dalen.

Jump-wire kabels M-M, M-F + (optioneel breadboard)

Kabels om de electronische schakeling te bouwen.

behulzing

PLA Plastic

Bij het prototype is PLA materiaal gebruikt om de print van de douche uit te voeren. In productie omgeving zal wellicht gebruik worden gemaakt van een proffesionele douche die voorzien is om water te leveren.

Extra handige benodigheden

om de ontwikkeling van de applicatie te kunnen voorzien:

Een windows machine

De software is ontwikkeld op een Windows 10 machine.

SD kaartlezer en een SD moederkaart

Dit hebben nodig om de raspberry pi correct te configureren

Een ethernet kabel

Voor toegang tot internet bij problemen. Alsook de ssh communcatie naar de raspberry Pi.

noot: voor een overzicht van de totale kostprijs verwijs ik u naar de bij dit document geleverde BOM.

Software

De software van de applicatie staat op Github

Vanuit Visual Studio kan de applicatie op een android toestel worden geladen.

Voor de ontwikkeling van de software smartShower zijn volgende tools gebruikt:

· Visual Studio 2017 (Cross-Platform App Xamarin.forms & Azure Functions)

· Android SDK Tools

· Microsoft Azure

· Arduino IDE

· Microsoft SQL Server Management Studio 17

· PyCharm 2017.2.3

· SQL DOC4 (datagenerator voor testdata)

Step 2: Schakeling

Opbouw schakeling

In de bijlage vindt u een fritzing schema waarbij vermeld staat op welke pinnen van de Arduino Uno de componenten geplaatst zijn. Om de Arduino te laten communiceren met de raspberry pi is gebruik gemaakt van seriele communicatie. Hiervoor moeten we de USB kabel van de arduino aansluiten op de Raspberry Pi

We hebben de keuze gemaakt om de componenten te solderen en deze vervolgens met isolatietype af te typen.

Nadat we de schakeling hebben gemaakt hebben we een plank (110x60) op maat gezaagd. Een gat geboord van 44mm, dit is de breedte van onze kraan. Hierna hebben we de kraan door de opening gestoken en vastgemaakt. Vervolgens monteerden we een ophangstuk voor de douchekop aan de plank.

Dit is de opbouw van het product.

Step 3: Setup

Configuratie Aruino (UNO)

De eerste stap is het dowloaden van de Arduino Ide. Vervolgens kan u de software installeren. Tijdens de installatie kunt u de arduino aansluiten via de usb met de computer. Eenmaal de installatie is voltooid kan u het arduino.ino[1] bestand uploaden.

Mogelijke problemen

Problemen bij het uploaden naar het board

Navigeer onder het tabblad hulpmiddelen >> poort en selecteer de aangeven poort bv COM3.

Configuratie raspberry pi 3

Voor de Raspberry Pi is de laatste versie van Debian[2] gebruikt geweest als besturingsysteem. Met behulp van Win32DiskImager dient de SD kaart met dit besturingsysteem geinstalleerd te worden. Eenmaal de image geinstalleerd is kan men zich aanmelden op de raspberry pi met standaard credentials username = pi password= raspberry. Voor een correcte installatie verwijs ik naar de officele documentatie[3].

Eenmaal de raspberry pi geconfigureerd is en de gebruiker zich in de home folder bevindt, kan de volgende stap ondernomen worden:

git clone https://github.com/VanheeTimothy/projectSmartShower/tree/master/

In de map waar Arduino.py zich bevindt zullen we eerst een map log aanmaken. Hierin komen alle errors die voorkomen bij het opstarten. Dit is optioneel maar helpt ons bij het opsporen van eventuele fouten .

Mkdir logs

belangrijk hierbij is de file arduino.py rechten krijgt, dit omdat het script moet runnen bij opstart. De u kunt de file de juiste rechten geven door volgend commando

sudo chmod +x
arduino.py

vervolgens maken we een opstartscript aan op volgende locatie /bin/. Het aanmaken van het opstart script gebeurd als volgt:

sudo nano
smartShower.sh

in het bestand kopieer je volgende tekst:

#!/bin/sh
sleep 15
sudo python3 /home/pi/Documents/SmartShower/arduino.py

noot: het pad van het .py file kan anders zijn dan deze van uw pi om de juiste directory te vinden navigeer naar Arduino.py en gebruik volgend commando pwd.

Sla smartShower.sh op door crtl+x y in te typen.

sudo chmod 755 smartShower.sh

Tot slot moeten we de crontab aanpassen

Sudo crontab -e

kopieer volgende tekst en plak deze onderaan de file:

@reboot sh /bin/smartShower.sh > /home/pi/Documents/SmartShower/logs 2>&

Indien problemen zich hiervoor doen, kan men ook kiezen voor volgende optie om het script te laten runnen at start up. Doch prefereer ik de voorgaande optie.

sudo nano /etc/profile
sudo python3 /home/pi/Documents/SmartShower/arduino.py &

Noot: een wanneer deze optie wordt gebruikt moet het script lichtjes aangepast worden. Hier wordt het script telkens onderbroken en krijgt een read error.

Gezien arduino.py gebruikt maakt van een packages die niet standaard met python is meegeleverd moeten we deze zelf in de terminal toevoegen. Gelukkig is pip wel standaard op de debian image geinstalleerd. Om de ontbrekende packages toe te voegen run volgende commando’s:

pip install pyserial
pip install requests

mogelijke problemen

Indien bij de configuratie[4] een map logs en de crontab juist configureerd is kunnen errors bij het opstarten geraadpleegd worden door volgend commando:

cd /home/pi/Documents/SmartShower/logs
cat cronlog

Het opstart script start niet op en print volgende error

File "Documents/SmartShower/arduino.py", line 19, in

line = ser.readline() # read a '\n' terminated line

File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 490, in read

'device reports readiness to read but returned no data '

serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)

Zorg ervoor dat de USB-kabel, tussen de Arduino en Raspberry Pi, goed en correct in de juiste poort zit. Indien het probleem nog niet is verholpen, type volgend commando in de terminal:

ls /dev/serial/by-id

Nu wordt er een id van de poort afgeprint. Kopieer het id samen met de locatie ernaar toe. Indien er geen id wordt afgeprint, controleer of de USB-kabel correct is aangesloten. Indien het probleem zich nog blijft voordoen, test voorgaande stap opnieuw met een andere USB-kabel.

We moeten nu onze arduino.py file open:

sudo nano /home/pi/Documents/SmartShower/arduino.py

Verwijder de de tekst in de serial.Serial()[5] en plak de voorgaande gekopieerde tekst.

Script start niet op door ImportError:

Traceback (most recent call last):

File "Documents/SmartShower/arduino.py", line 1, in

import asyncio

ImportError: No module named asyncio

Asyncio is een python library en is compileerbaar met python3 en hoger. Zorg ervoor dat dus in je opstartscript python3 staat en niet python

sudo python3 /home/pi/Documents/SmartShower/arduino.py

Kleurcodes bij de Raspberry Pi

Om de gebruiker een kleine indicator te geven en als gemak bij troubleshooting is er een RGB-led aan de Raspberry Pi bevestigd. Merk dus op dat dit niet noodzakelijk is om een correcte werking van de het product te hebben.

Succes code

Wanneer het script opstart, brandt een groene led. Indien de groene led knippert, is een gebruiker zich aan het douchen en wordt de data doorgestuurd naar de cosmosdb. Wanneer de gebruiker klaar is met douchen wordt de data van zijn sessie opgehaald om berekeningen te doen. Eenmaal de berekingen klaar zijn wordt de nieuwe data doorgestuurd naar de SQLDb. Als de status code succes 200 is zal de led kort blauw knipperen.

Error code

Als er een probleem is en het script het bericht niet kan decoderen zal de led Magneta kleuren, het script zal vanzelf terug opstarten.

Bij een ander error zal de led rood kleuren.Normaal hoeft u niets te ondernemen maar indien de led langer dan 5 seconden rood blijft branden, sluit de raspberry af en start deze opnieuw op.

Intterupt

Wanneer de gebruiker het script handmatig stop zet zal de led oranje branden. Zo weet de gerbuiker dat het script uit is maar de raspberry pi nog aan staat.

Tip: Voor een betere monitoring van het script, is het handig om een file met de naam error.txt aan te maken in dezelfde map waar arduino.py zich bevindt. Zo zal het script elke error met timestamp wegschrijven.

Indien deze stap wordt overgeslaan dienen de lijnen (106,107,117,118,128,129) in commentaar geplaatst te worden!

[1] Dit script is meegeleverd met dit document en bevindt zich in de serial_test2 map

[2] https://www.raspberrypi.org/downloads/raspbian/

[3] https://www.raspberrypi.org/documentation/configuration/raspi-config.md

[4] Zie Setup configuratie Raspberry Pi

[5] Code line: 9 Arduino.py

Step 4: Databases

Er is gebruik gemaakt geweest van een MSQL database alsook een cosmosDB. Deze is aangemaakt en staat online. Voor een dieper inzicht van het technisch aspect verwijs ik u naar de technische documentatie, bijgeleverd in deze instructable.

Step 5: Handleiding Applicatie

Voor meer informatie over de werking van de applicatie is een handige online video.

Share

    Recommendations

    • Oil Contest

      Oil Contest
    • Water Contest

      Water Contest
    • Clocks Contest

      Clocks Contest

    Discussions

    Nice project,but your Github drawer seems empty.