Meet het niveau van je regenwaterput

Meet het niveau van je regenwaterput

Om niet plots zonder regenwater te vallen, is het nuttig om te weten wanneer je regenwaterput bijna leeg is. En dit zonder telkens het deksel op te tillen.

Om het niveau te bepalen, maken we gebruik van een HC-SR04 ultrasone sensor. Deze sensor bepaalt door middel van geluidsgolven de afstand tot het water.

Nodig

  • Raspberry Pi. Ik gebruik een raspberry pi 3.
  • HC-SR04 ultrasone sensor
  • Breadboard
  • Een aantal jumper kabels (met Dupont connectoren)
  • Een weerstand van 1kΩ en een weerstand van 2,2kΩ

Hardware

Connecteer alles als volgt:

Schematische voorstelling:

Dit is mijn test opstelling:

Detail van de raspberry pi aansluiting:

Detail van de HC-SR04 sensor aansluiting:

Software

Door onderstaande stappen te volgen, maak je een applicatie die je kunt aanspreken vanuit je browser en waarbij je het resultaat van de meting te zien krijgt. Deze applicatie start automatisch op bij het opstarten van de raspberry pi en biedt de mogelijkheid om meerdere sensoren en andere functies te integreren.

Zorg dat je een sd-kaartje met een Raspbian versie hebt voor gebruik met je raspberry pi. Heb je dit nog niet? Download dan Raspbian (de lite versie volstaat) en plaats dit met bvb. Win32DiskImager op de sd-kaart.

De broncode van de bestanden die je hieronder moet aanmaken, vind je ook terug op GitHub.

1. Installeer flask

sudo pip install flask

2. Maak een Python flask applicatie aan

Maak een directory share aan. Het is aan te raden om een algemene directory aan te maken voor als je straks meerdere raspberry pi projecten zou maken.

mkdir /home/pi/share

Maak een subdirectory sensor aan:

mkdir /home/pi/share/sensor

Verander de eigenaar van deze directory:

sudo chown www-data /home/pi/share/sensor

Maak een bestand sensor.py aan:

sudo nano /home/pi/share/sensor/sensor.py

Voeg de volgende code toe aan dit bestand:

import RPi.GPIO as GPIO
import time

def measure():
    GPIO.setmode(GPIO.BCM)

    TRIG = 23 
    ECHO = 24

    GPIO.setup(TRIG,GPIO.OUT)
    GPIO.setup(ECHO,GPIO.IN)

    GPIO.output(TRIG, False)
    time.sleep(2)

    GPIO.output(TRIG, True)
    time.sleep(0.00001)
    GPIO.output(TRIG, False)

    while GPIO.input(ECHO)==0:
        pulse_start = time.time()

    while GPIO.input(ECHO)==1:
        pulse_end = time.time()

    pulse_duration = pulse_end - pulse_start

    distance = pulse_duration * 17150

    distance = round(distance, 2)

    GPIO.cleanup()

    return '{"param":' + str(distance) +'}'

Bewaar het bestand door op Ctrl-X te klikken en dan Y in te tikken.

Maak nu een bestand sensorapp.py aan:

sudo nano /home/pi/share/sensor/sensorapp.py

Voeg de volgende code toe aan dit bestand:

from flask import Flask, render_template
from sensor import measure

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

@app.route('/api/sensor/')
def sensor():
    return measure()

if __name__ == '__main__':
    app.run(host='0.0.0.0')

Bewaar dit bestand met Ctrl-X en kies Y.

3. Testen flask app

Uitvoeren van de flask app:
sudo /usr/bin/python /home/pi/share/sensor/sensorapp.py
Ga met je smartphone of laptop naar volgende URL om de meting te zien:
http://[IP ADRES RASPBERRY PI]:5000/api/sensor
Om het IP adres van je raspberry pi te weten, kun je volgend commando gebruiken:
ifconfig
Je moet dan ergens een stukje zoals hieronder te zien krijgen waarbij je let op wat er bij ‘eth0’ staat als je raspberry pi via de kabel verbonden is met je netwerk. Is je raspberry pi verbonden via wifi, kijk dan naar wat er staat bij ‘wlan0’:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.201 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::6a35:cba8:2f53:232d prefixlen 64 scopeid 0x20<link>
In dit geval is het ip adres 192.168.0.201.

4. User interface

Als alles goed verlopen is, zie je nu de ruwe gegevens. Je kunt een html pagina aanmaken om alles wat beter (en leesbaarder op een smartphone) voor te stellen.

Maak een directory templates aan:

mkdir /home/pi/share/sensor/templates

Maak een bestand index.html aan:

sudo nano /home/pi/share/sensor/templates/index.html

En voeg volgende code toe aan dit bestand:

<html>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<head>
<title>Niveau meting</title>
</head>
<body>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.2.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/knockout/knockout-2.2.1.js"></script>
<h1>Meting sensor</h1>

<p>Meting: <span class="lead" data-bind="text: hcsr04"></span> cm</p>
</body>

<script type="text/javascript"> 
var SensorViewModel = function() {
var self = this;
self.hcsr04 = ko.observable("");
};

$(function() {
var viewModel = new SensorViewModel();

jQuery.getJSON("/api/sensor", function (data) { 
viewModel.hcsr04(Math.round(data.param * 100) / 100);
});

ko.applyBindings(viewModel); 

});

</script>
</html>

Bewaar dit bestand met Ctrl-X en kies Y.

Pas het bestand sensorapp.py aan (dit bestand heb je al aangemaakt in stap 2):

sudo nano /home/pi/share/sensor/sensorapp.py

Voeg dit stukje toe onder de lijn @app.route(‘/api/sensor/’):

@app.route('/stand/')
def stand(name=None):
return render_template('index.html', name=name)

Bewaar dit bestand met Ctrl-X en kies Y.

Je kunt deze user interface nu testen door de python applicatie opnieuw uit te voeren:
sudo /usr/bin/python /home/pi/share/sensor/sensorapp.py
Ga met je smartphone of laptop naar volgende URL om de meting te zien:
http://[IP ADRES RASPBERRY PI]:5000/stand

Nu krijg je je eigen gemaakte html pagina te zien. Wil je de lay-out  optimaliseren, volstaat het om de html pagina index.html verder aan te passen.

5. Automatisch opstarten

Het volgende wat handig is, is dat de python applicatie automatisch opstart bij het opstarten van je raspberry pi. Om dit te realiseren, kun je gebruik maken van een NGINX webserver en een uWSGI server.

Je installeert de NGINX webserver met volgend commando:

sudo apt-get install nginx

Vervolgens start je de nginx webserver:

sudo service nginx start

Nu installeer je uWSGI:

sudo apt-get install build-essential python-dev

en hierna:

sudo pip install uwsgi

Maak een bestand uwsgi_config.ini aan:

sudo nano /home/pi/share/sensor/uwsgi_config.ini

Voeg de volgende code toe aan dit bestand:

[uwsgi]
http= :9090
chdir = /home/pi/share/sensor
module = sensorapp:app

master = true
processes = 1
threads = 2

uid = www-data 
gid = www-data
socket = /tmp/sensorapp.sock
chmod-socket = 664
vacuum = true

die-on-term = true

Het nummer dat na http= staat is het poortnummer waarop de applicatie straks bereikbaar zal zijn.

Bewaar dit bestand met Ctrl-X en kies Y.

Pas de eigenaar aan van je directory naar gebruiker www-data:

sudo chown www-data /home/pi/share/sensor

Geef de www-data gebruiker toegang op de raspberry pi GPIO pinnen:

sudo adduser www-data gpio

Pas het bestand /etc/rc.local aan om de python applicatie automatisch op te starten:

sudo nano /etc/rc.local

Voeg volgend lijntje code toe vóór de lijn met ‘exit 0‘:

/usr/local/bin/uwsgi --ini /home/pi/share/sensor/uwsgi_config.ini --uid www-data --gid www-data --daemonize /var/log/uwsgi.log

Start nu je raspberry pi opnieuw op en ga met je smartphone of laptop naar volgende URL om de meting te zien:

http://[IP ADRES RASPBERRY PI]:9090/stand

Volgende stappen

Hieronder een aantal ideetjes van wat je nu verder kunt doen.

  • Een behuizing kopen of zelf maken voor zowel de Raspberry Pi als de HC-SR04 sensor.
  • Extra sensoren toevoegen. Zo zou je bijvoorbeeld een temperatuursensor kunnen toevoegen.
  • Automatisch je regenwaterput bijvullen als het niveau te laag komt.
  • Een andere toepassing: de afstand meten tussen je auto en de garagemuur. Handig als je geen parkeersensoren hebt! Of een detectie of je auto al dan niet in de garage staat. Zo zijn er tal van andere toepassingen mogelijk. Waarvoor zou jij het gebruiken?

Bronnen

2 gedachten over “Meet het niveau van je regenwaterput”

  1. Supertoffe toepassing!
    Als er wat tijd over is zal ik die zeker eens testen!

    Echter zou ik nooit een elektronische sensor of eender wat met elektronica in m’n stookolieketel plaatsen…

    1. Klopt! Het is in theorie mogelijk om je stookolieniveau hiermee te meten, maar niet aan te raden omwille van de veiligheid.
      Er zijn echter talloze andere toepassingen mogelijk.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *