Project: Waterverbruik monitoren met SMS-alarm bij lekkage

11 juni 2019, 10:05

Er zijn twee soorten mensen: zij die al eens een grote waterlekkage hebben gehad en zij die er (nog) geen hebben gehad... Het risico wordt hopelijk door de verzekering gedekt, maar het is handiger om voorzorgsmaatregelen te nemen met een systeem dat waarschuwt bij de eerste tekenen van een lek. De hier beschreven schakeling is gebaseerd op een print met een ESP32-microcontroller die zorgt voor de WiFi-verbinding en een OLED-display dat de informatie ter plaatse laat zien.

Voorkomen is beter dan genezen!

Alles wat aan uw kant van de watermeter gebeurt valt onder uw verantwoordelijkheid. In het geval van een lek is het extra verbruik dus voor uw rekening, en dat kan behoorlijk in de papieren lopen:
  • druppelend: 4 l/h, 35 m³ per jaar, ongeveer € 125;
  • een lekkende stortbak: 25 l/h, 220 m³ per jaar, ongeveer € 800;
  • een breuk in de ondergrondse leiding tussen de watermeter en het huis: meerdere m3 per uur, enkele duizenden euro’s per week!
Figuur 1. De impulsgever ‘in situ’.


De waterleidingbedrijven zijn begonnen met het installeren van systemen om de meter op afstand uit te lezen, en deze slaan ook alarm in het geval van een mogelijk lek. Maar de uitrol ervan gaat langzaam en in de meeste kleine dorpen zijn deze systemen nog niet geïnstalleerd. Er bestaan daarentegen ook watermeters met een impulsgever die bij iedere verbruikte liter een signaal afgeeft, en sommige meters kunnen ook achteraf van zo’n impulsgever worden voorzien. Het hier beschreven systeem maakt gebruik van deze laatste mogelijkheid en zorgt voor een continue bewaking van uw verbruik.
Binnen een tijdsbestek van een paar maanden hebben drie van mijn buren bij de ontvangst van hun waterrekening ontdekt dat er een lek zat tussen de watermeter en het huis. Het lek had wekenlang bestaan zonder te zijn ontdekt, en dit had een enorm extra verbruik veroorzaakt met als gevolg een rekening van duizenden euro’s! Omdat ik bang was dat dit mij ook zou overkomen, ben ik op zoek gegaan naar methoden om mijn waterverbruik te monitoren. Gelukkig zijn veel meters, waaronder de mijne, uitgerust met een telwerk met cijferrollen. De rol voor de eenheden bevat bij het cijfer nul een magneetje, waarmee een rondgang kan worden gedetecteerd die overeenkomt met een verbruik van één liter. Er zijn in de handel impulsgevers verkrijgbaar (figuur 1) die op de meter worden geklikt en draadloos of via een kabel een signaal versturen als de magneet een Hall-sensor passeert. Deze impulsgevers worden gevoed uit een lithiumbatterij met een levensduur van ongeveer vijftien jaar en hebben dus geen externe voeding nodig.

Draadloos of niet?

Ik heb mij eerst beziggehouden met de overdracht van de informatie van de impulsgever naar het intelligente gedeelte van het systeem. De draadloze versie van de impulsgevers zag er aantrekkelijk uit, maar helaas is het gebruikte protocol niet openbaar, en ondanks verschillende zoekpogingen heb ik geen betrouwbare informatie over dit onderwerp kunnen vinden (als u hier meer over weet, hoor ik het graag). Omdat de inspectieput van mijn watermeter dicht bij die van mijn telefoonlijn ligt, heb ik hiervan geprofiteerd door eenvoudig via de kabelgoot van de telefoonlijn een tweeaderige kabel van de sensor naar mijn huis aan te leggen. Bij andere installaties bleek dat de telecomprovider bij de aanleg van glasvezel de oorspronkelijke telefoonkabel had laten liggen, en hoefde ik geen aparte kabel aan te leggen omdat ik een van de bestaande aderparen kon gebruiken.

Specificaties

Voordat met het ontwerpen van het systeem kon worden begonnen, moesten eerst de specificaties worden vastgelegd:
  • ophalen en verwerken van de verbruiksimpulsen;
  • weergave van het verbruik per uur, per dag, en het totaalverbruik;
  • algoritme voor de detectie van een mogelijk lek;
  • bewaakte voeding;
  • opslag van de gegevens in niet-vluchtig geheugen;
  • netwerktoegang via WiFi en tijdsynchronisatie via NTP;
  • webserver voor uitlezing en besturing op afstand;
  • systeem voor alarmering via SMS. 

Hardware

Deze specificaties hebben geleid tot de in figuur 2 weergegeven architectuur. De schakeling is gebaseerd op een Lolin-module van WeMos (pinning in figuur 3), die naast een System-on-Chip (SoC) ESP-WROOM-32 ook een OLED-display van 128 × 64 pixels bevat. Dit board is in verschillende versies voor weinig geld via het internet en in de Elektor-shop verkrijgbaar. De ESP32 beschikt over WiFi en heeft voldoende geheugencapaciteit voor toepassingen die hiervan gebruikmaken. Bovendien is de ESP32 compatibel met de Arduino-IDE en hierdoor erg eenvoudig te gebruiken.
 
Figuur 2. Schema van de waterverbruikmonitor.
Figuur 3. Pinning van de WeMos Lolin-module.

De voeding wordt verzorgd door een Li-Ion-accu met een lader die via een micro-USB-aansluiting van 5 V wordt voorzien. Deze speciaal voor Li-Ion-accu’s ontworpen lader (figuur 4) onderhoudt de lading van de accu en beschermt deze tegen te ver laden en ontladen. De lader is onder verschillende namen op het internet te vinden (zoek op ‘3.7 V Li-ion Battery Mini USB To USB A Power Supply Module’). Als de netspanning wegvalt kan de accu het systeem minimaal 36 uur voeden.

Figuur 4. Voedings-/acculadermodule.

De sensorpulsen worden aangeboden via een open collector-uitgang die bij iedere verbruikte liter naar massa wordt kortgesloten. Het ontvangen van deze pulsen gaat erg eenvoudig: een pull-up weerstand verbindt de datalijn met de 3,3V-aansluiting van het board; een condensator van 1 µF onderdrukt eventuele storingen op de lijn. De datalijn is verbonden met GPIO 25 van de ESP32 en de massalijn met de GND-aansluiting. De interface is opgebouwd op een stukje experimenteerprint dat op de pinheader van de module wordt gesoldeerd (figuur 5).

Figuur 5. Interface-print aangesloten
op de pennen GND en GPIO25 van de Lolin-module.

Software

Het hart van het systeem wordt uiteraard gevormd door de software. Deze kan worden gedownload van de pagina bij dit artikel. We zijn hierbij natuurlijk niet bezig om het wiel opnieuw uit te vinden, want veel zaken bestaan al en zijn beschikbaar gesteld door de maker-community.

De meeste functies die we nodig hebben, worden door de volgende bibliotheken geleverd:
  • WiFi, ESPmDNS, WiFiUdp en Arduino OTA voor de WiFi-toegang en het draadloos updaten van de software;
  • TimeLib voor tijdsynchronisatie via NTP (Network Time Protocol);
  • ESP32WebServer en WiFiClient voor de webserver;
  • Wire, SSD1306 en OLEDDisplayUi voor het OLED-display;
  • en natuurlijk de functies van de ESP32 Arduino Core.

    Na het includen van al deze bibliotheken en het definiëren van de structuren en constanten van het programma volgt de gebruikelijke Arduino-architectuur, te weten een initialisatieroutine setup() en een hoofdlus loop(). De routine IRAM_ATTR handleInterrupt() zorgt voor de verwerking van de interrupt die wordt veroorzaakt door een overgang van hoog niveau naar laag niveau op de datalijn die met GPIO 25 is verbonden. Deze routine doet niets anders dan het ophogen van de waarde van de teller voor het aantal verbruikte liters. Een software-filter beschermt tegen ongewenste schakeleffecten op de lijn.

    De hoofdlus is verantwoordelijk voor de volgende acties:
     
Figuur 6. De drie pagina’s van het OLED-scherm.
  • Weergave op het OLED-scherm

Met de bibliotheek OLEDDisplayUi kan de gewenste weergave eenvoudig worden gerealiseerd: er zijn drie pagina’s gemaakt die elkaar elke vijf seconden opvolgen (figuur 6). De eerste pagina geeft de datum, het dagverbruik en de status van de lekdetectie weer (de tijd wordt op alle pagina’s rechtsboven aangegeven). Op de tweede pagina ziet u de huidige meterstand, de stand bij de laatste meteropname en het verbruik sinds die meteropname. Op de derde pagina vindt u het gebruikte IP-adres en de status van de WiFi-verbinding.

  • Webserver

De server luistert op een poort die tijdens de initialisatie is gedefinieerd en waarvan u de doorgifte in uw router (box) hebt ingesteld. Als een gebruiker via een browser verbinding maakt, dan laat de server een pagina zien met drie tabs (figuur 7). Onder de tab Visualisation (display), waarvan de informatie iedere 5 seconden wordt ververst, vindt u naast de informatie van het OLED-scherm een tabel met het verbruik voor ieder uur van de afgelopen 24 uren. Onder de tab Saisie (instellingen) kunnen verschillende parameters worden gedefinieerd: de initiële meterstand, de waarde van de officiële laatste meteropname en de waarde van de alarmdrempel voor het dagelijks verbruik (zie hieronder). De toegang tot deze tab is beveiligd met een gebruikersnaam en wachtwoord. Onder de tab A propos (info) worden de systeemfuncties en de softwareversie weergegeven.

Figuur 7. De (Franstalige) webserver.
  • Lekdetectie

Ieder uur bekijkt het programma het verbruik per uur en bepaalt aan de hand van de volgende criteria of er een lek is:
- het verbruik van de afgelopen 24 uur ligt boven een drempel;
- er zijn geen twee opeenvolgende uren zonder verbruik geweest.

Zonder lek moeten er, met name ’s nachts, minstens twee opeenvolgende uren zonder verbruik verlopen. Als dit niet het geval is, dan is er een grote kans dat het ergens lekt.

Bij het vermoeden van een lek wordt het soort lek op de eerste pagina van het OLED-scherm en op de webpagina weergegeven, en wordt er via IFTTT een SMS verstuurd naar een vooraf ingesteld nummer. 

  • IFTTT

If This Then That is een gratis dienst die een actie uitvoert op basis van een gebeurtenis (zo’n combinatie wordt een ‘applet’ genoemd). In dit geval is de gebeurtenis het verzenden van een specifiek ‘POST’-verzoek naar de website maker.ifttt.com, die vervolgens een SMS zal versturen naar het nummer dat bij het maken van de applet is aangegeven. Als er een lek is gedetecteerd zal de software ieder uur een SMS versturen, maar omdat IFTTT het aantal SMS-berichten per maand beperkt, verzendt het programma geen berichten meer als deze limiet is bereikt. 

  • Tijdinstelling en backup

De juiste tijd wordt ieder uur automatisch ingesteld via het NTP (Network Time Protocol). De klok wordt bijgehouden door de realtime-klok (RTC) van de ESP32. De overgang van zomer- naar wintertijd gebeurt ook automatisch.

Ieder uur maakt het programma een backup van de actuele verbruiksgegevens in niet-vluchtig geheugen (EEPROM).

Bouw

Het systeem is ondergebracht in een speciaal hiervoor ontworpen 3D-geprinte behuizing (figuur 8 en figuur 9). Deze behuizing heeft openingen voor het OLED-scherm, het SoC (koeling) en de ruimte rond de WiFi-antenne. Er is ook een golfmotief uitgesneden, dat er niet alleen fraai uitziet maar tevens als ventilatie-opening dient voor de afvoer van de warmte die bij het laden van de accu vrijkomt. Aan de binnenzijde bevat de behuizing montagesteunen voor de Lolin-module en de accu. De lader is simpelweg met dubbelzijdig plakband bevestigd.
 
Figuur 8. Foto van het complete systeem, ingebouwd in de behuizing.
Figuur 9. Het functionele systeem in zijn 3D-geprinte behuizing.

Eerst wordt de kabel van de impulsgever aangesloten, vervolgens een standaard netadapter met een micro-USB-kabel. Een USB/micro-USB-kabel van 10 cm verbindt de Lolin-module met de lader.

Ingebruikname

Het systeem wordt geprogrammeerd met de Arduino-IDE, die vooraf is geconfigureerd voor gebruik met ESP32-boards en met name het type WeMos Lolin32. Ook moeten alle hierboven beschreven bibliotheken zijn geladen. Voor de eerste upload moet de module op de pc worden aangesloten. De volgende uploads kunnen dankzij de OTA-functie (Over The Air) via WiFi plaatsvinden.

Zodra de spanning wordt ingeschakeld start het systeem, zoekt het verbinding met het ingestelde WiFi-netwerk, zet zijn klok gelijk, begint met het verwerken van de meterimpulsen en wacht op de verbinding met een gebruiker. U kunt nu de webpagina opzoeken met het adres op de derde pagina van het display, en er de actuele meterstand, de laatste opgenomen meterstand en de alarmdrempel voor het dagelijks verbruik bekijken.

Conclusie

De halfjaarlijkse officiële meteropname laat bij een verbruik in de orde van grootte van 50 m³ een verschil met de door dit systeem gemeten waarde zien van slechts enkele liters, en dat is nauwkeurig genoeg. Er zijn in de afgelopen tijd een paar alarmmeldingen geweest waarmee we beginnende lekken hebben kunnen ontdekken voordat deze serieuze problemen opleverden.

Ik heb dit systeem bij een aantal van mijn buren geïnstalleerd, en deze hebben mij allemaal verteld dat ze het ook hebben gebruikt om hun verbruik te monitoren en zelfs te optimaliseren doordat ze konden zien hoeveel het verbruik is van de douche, het doen van de was, de vaatwasser, het bijvullen van het zwembad enzovoort. Ziehier een andere interessante functie die oorspronkelijk niet was voorzien! Ik ben benieuwd naar uw ervaringen!

Bladwijzer(s) naar de webpagina

Gebruikers kunnen op hun smartphone een bladwijzer naar de webpagina aanmaken. Als uw netwerkprovider een router met loopback-functie aanbiedt hebt u maar één enkele bladwijzer nodig met het externe adres van uw router gevolgd door het nummer van de gekozen poort. Zonder loopback is ook nog een tweede bladwijzer nodig met het IP-adres van de server op uw lokale netwerk (bijvoorbeeld 192.168.1.234:4321). Sommige providers leveren standaard (of op verzoek) een vast IP-adres. Andere providers veranderen dit adres periodiek, en dit vereist een regelmatige update van de bladwijzer of het gebruik van een dynamische domeinnaamserver (DynDNS), waarvan sommige gratis zijn. Hoe u hierbij te werk moet gaan valt buiten het kader van dit artikel, maar alles wat u hiervoor nodig hebt is op het internet te vinden.
(180694)
 
Wilt u meer ElektorLabs artikelen lezen? Word dan nu lid van Elektor!
Reacties worden ingeladen...
gerelateerde items