Last Updated on 16 november 2024 by Syds
Sommige waterontharders zijn al slim, en sturen een notificatie wanneer het zout bijgevuld moet worden. Die van mij is totaal niet slim, dus met enige regelmaat vergeet ik tijdig het zout bij te vullen. En dan heeft die dure waterontharder totaal geen functie. Een leuk projectje om een “dom” apparaat slimmer te maken.
Mijn waterontharder is een E-duo compact van Amysoft. Deze bestaat uit twee gescheiden componenten, een zoutreservoir (links) en harstank (rechts).
Om het zoutreservoir bij te vullen kun je het deksel van het zoutreservoir afnemen. Hier staat geen waterdruk op, het reservoir functioneert ook prima zonder deksel. Mijn plan is om in dit deksel een gaatje te boren, hier een afstandssensor met een Wemos D1 mini op te bevestigen, en op die manier de afstand van deksel tot zoutvoorraad te meten.
Deze meetgegevens worden doorgegeven naar een virtuele afstand sensor in Domoticz van waaruit vervolgens een notificatie wordt verstuurd zodra de gemeten afstand groter is dan de diepte van het zoutreservoir + een marge van 3 tot 5 cm.
Onderdelenlijst
Aantal | Onderdeel | Te bestellen bij | Kosten |
1 | Wemos D1 mini | www.aliexpress.com | € 2,75 |
1 | vl53l0x of vl6180x ToF Sensormodule | www.bitsandparts.nl | € 3,95 |
2 | 8-pins male header | Uit voorraad | |
1 | 6-pins female stackable header | Uit voorraad | |
1 | 6-pins male header | Uit voorraad | |
2 | 8-pins female header | Uit voorraad | |
1 | 2-pins male header | Uit voorraad | |
1 | Optioneel: 2-pins jumper | Uit voorraad | |
1 | 2-pins screwterminal | Uit voorraad | |
1 | PCB | www.nextpcb.com | $ 10,55 (per 5) |
20cm | Dubbelzijdig klevende tape | Uit voorraad | |
1 | 5v voeding | Uit voorraad | |
26 gram | PLA | Uit voorraad |
Keuze afstandssensor:
Het zoutreservoir van mijn E-duo compact is 36,5cm diep. Proeven met de vl6180x afstandssensor, die volgens de datasheet tot 100mm de afstand zou kunnen meten, maar volgens div. websites tot 200 en zelfs tot 300mm, leverden bij mij maximale afstanden tot 170mm op. Voordeel van de vl6180x is dat deze begint te meten bij 0mm, en tot 10cm zeer nauwkeurig is. Dus mocht de diepte van je zoutreservoir pak hem beet onder de 200mm liggen, kies dan voor de vl6180x. Ik heb gekozen voor de vl53l0x, volgens de datasheet kan deze nauwkeurige metingen doen van 50 tot 1200mm. Omdat je toch nooit het zoutreservoir zover vult dat het deksel er niet meer oppast is de onnauwkeurigheid onder de 5cm geen probleem. Gezien het zout wit is, heb je een goede reflectie en accurate metingen. Saillant detail is dat de SDA en SCL pins van de vl53l0x en vl6180x net omgedraaid zitten, gelukkig is dat softwarematig te ondervangen.
Benodigdheden:
- Soldeerbout met tin
- Boormachine met 6mm boortje en piramideboor
- 3D printer
- Stanley mes of schaar
Note 15-11-2024: Om Salt wat beter te kunnen beheren heb ik er voor gekozen om Tasmota te installeren op de Wemos D1 mini, zie ook Stap 2a. Dit werkt echter alleen in combinatie met de vl51l0x TOF sensor, voor de VL6180X is er geen driver beschikbaar binnen Tasmota. Daarom heb ik de MicroPython variant laten staan in stap 2b.
Stap 1. Domoticz configureren
We voegen eerst een virtuele sensor toe aan Domoticz. Kies voor Instellingen, Hardware en op de regel “Virtuele devices” voor “Maak virtuele sensoren”:
Het volgende scherm verschijnt:
Geef de virtuele sensor een logische naam, bijvoorbeeld “Zout niveau Waterontharder” en als Sensor Type “Afstand”, en klik op OK:
Kies in het hoofdmenu van Domoticz voor het tabblad “Overige”, en zoek de virtuele sensor op die je net aangemaakt hebt. Klik op “Aanpassen”, het volgende scherm verschijnt:
Pas de Weergave aan naar “Centimeters”. Noteer het IDX-nummer voor de volgende stap, in mijn geval dus 336. En klik op “Aanpassen”. Je keert terug naar het overzicht met je sensors, klik nu op de knop “Notifications” van je virtuele sensor, het volgende scherm verschijnt:
Configureer het volgende, de rest blijft default:
Attribuut | Tasmota | Micropython |
Wanneer | Groter of Gelijk | Minder of Gelijk |
Waarde | 25 | 5 |
Aangepast bericht | Zout waterontharder bijvullen | Zout waterontharder bijvullen |
Zet al niet actieve systemen uit. Raadpleeg de Domoticz handleiding hoe je email, pushsafer of andere notificatie systemen kunt configureren. Mijn instellingen zien er dan als volgt uit:
Klik op Toevoegen. Dit zorgt ervoor dat je een notificatie krijgt wanneer het niveau van je zoutvoorraad in de waterontharder lager of gelijk is aan 5cm. Wil je eerder of later een notificatie ontvangen, verander dan het niveau door de “Waarde” hoger of lager te zetten.
Je bent klaar met het configureren van Domoticz.
Stap 2a. Tasmota flashen op de Wemos D1 mini en configureren
Let op !! Tasmota ondersteund de vl6180x TOF sensor niet, onderstaande methode werkt alleen met de vl51l0x TOF sensor waarvoor Tasmota een driver beschikbaar heeft.
Installeer Tasmota m.b.v. de webtool op https://tasmota.github.io/install/. Kies voor de Tasmota Sensors release, de rest wijst zich zelf dit inclusief het instellen van je WiFi SSID en Password.
Nadat je de WiFi hebt geconfigureerd en de Wemos geherstart is kom je het op hoofdmenu uit. Kies hier voor Configuration en daarna voor Configure module, het volgende scherm verschijnt:
Toelichting op niet default waarden:
Attribuut | Waarde | Toelichting |
Module type | Generic (18) | Verander deze waarde eerst en sla deze op, de wemos reboot en daarna kun je onderstaande waarden aanpassen |
D2 GPIO4 | I2C SCL | Clock van Seriële bus |
D1 GPIO5 | I2C SDA | Serial data |
D5 GPIO14 | VL53LXX XSHUT 1 | Enable XSHUT (vergeet niet de jumper te plaatsen) |
Save de aangepaste waarden en de Wemos reboot en je komt terug in het hoofdmenu. Kies hier wederom voor Configuration en daarna voor Configure WiFi. Het volgende scherm verschijnt:
Toelichting op niet default waarden:
Attribuut | Waarde | Toelichting |
WiFi Network | SSID van je WiFi netwerk | Heb je al aangepast na het flashen van Tasmota |
WiFi Password | Password van je WiFi netwerk | Heb je al aangepast na het flashen van Tasmota |
Hostname | salt | Of kies een andere herkenbare hostname |
Save de aangepaste waarden en de Wemos reboot en je komt terug in het hoofdmenu. Kies hier wederom voor Configuration en daarna voor Configure MQTT. Het volgende scherm verschijnt:
Toelichting op niet default waarden:
Attribuut | Waarde | Toelichting |
Host | ip-address of FQDN van je MQTT server | Vul hier het ip-address of FQDN in van je MQTT server |
Save de aangepaste waarden en de Wemos reboot en je komt terug in het hoofdmenu. Kies hier wederom voor Configuration en daarna voor Domoticz. Het volgende scherm verschijnt:
Toelichting op niet default waarden:
Attribuut | Waarde | Toelichting |
Sensor idx 5 Illuminance | <idx> | Vul hier het idx in van de Domoticz Zoutontharder sensor die je in stap 1. hebt aangemaakt |
Save de aangepaste waarden en de Wemos reboot en je komt terug in het hoofdmenu. Kies nu voor Console Het volgende scherm verschijnt:
Type op de command regel de volgende commando’s, en bevestig ze stuk voor stuk met enter:
TelePeriod 3600
backlog i2cdriver16 0;i2cdriver40 0;i2cdriver31 1;i2cdriver54 0
Toelichting:
Commando | Toelichting |
TelePeriod 3600 | Zorgt er voor dat er iedere 3600 seconden (1 uur) een meting wordt gedaan |
backlog i2cdriver16 0;i2cdriver40 0;i2cdriver31 1;i2cdriver54 0 | Disabled de TSL2561 (driver 16), TSL2591 (driver 40) en VL53L1X (driver 54) drivers en enabled de VL53L0X (driver 31) |
Klik op Main Menu om terug te keren naar het Hoofdmenu, en reboot de wemos door op Reboot te klikken. Nadat de Wemos opnieuw opgestart is zie je de gemeten waarde van de VL53L0X sensor op het hoofdscherm:
Je bent nu klaar met Tasmota en kunt stap 2b overslaan.
Stap 2b. Micropython flashen op de Wemos D1 mini en installatie python-code
Flash Micropython op de Wemos D1 mini conform mijn blog “MicroPython flashen op Wemos D1 mini“.
Installeer ampy.py middels het DOS-commando: pip install adafruit-ampy
Download de source code van “salt.py” hier: https://drive.google.com/file/d/1qfGHaxPTnLpMtX5vw9IXX2l3OrhnaFNT/view?usp=drive_link, en unzip de bestanden op je laptop/desktop.
Open je favoriete editor (bijv. kladblok) en open de file “config.py”. Verander hierin minimaal de waarden van heightBin, DOM_Host, SensorIDX, wlan_id en wlan_pass naar de waarden van je eigen configuratie en apparaat en sla op. Hieronder een korte toelichting op de settings:
Setting | Default waarde | Toelichting |
sampleFreq | 86400 | Frequentie dat er een meting wordt gedaan in seconden, default van 86400 is één keer per dag een meting |
heightBin | 30.0 | Hoogte van je zoutreservoir in cm, met 1 decimaal achter de komma |
sensorType | vl53l0x | Vul afhankelijk van je gekozen TOF senor hier vl53l0x of vl6810x in |
offSet | 0.5 | Afstand tussen lens afstandsensor en onderkant van deksel zoutreservoir, in cm |
DOM_Host | <ip-address or FQDN> | Vul hier het IP-address of FQDN van je Domoticz Server in |
DOM_Port | 8080 | Pas hier eventueel het poortnummer van je Domoticz server aan, de defaultwaarde is 8080 |
DOM_username | “” | Als je de toegang tot Domoticz beveiligd hebt, vul hier de username in welke je de virtuele sensor wilt laten bijwerken, laat leeg als je de toegang tot Domoticz niet hebt beveiligd. |
DOM_password | “” | Als je de toegang tot Domoticz beveiligd hebt, vul hier het password in van de user welke je de virtuele sensor wilt laten bijwerken |
SensorIDX | <IDX> | Vul hier het IDX-nummer van je virtuele sensor in die je in Stap 1. hebt aangemaakt |
wlan_id | <SSID> | Vul hier het SSID in van je 2.4Ghz WiFi netwerk |
wlan_pass | <wlan_secret> | Vul hier het wachtwoord in van je 2.4Ghz WiFi netwerk |
Open de opdrachtprompt door in je zoekbalk cmd.exe in toetsen. Ga naar de directory waarin je de files geunzipped hebt en installeer de bestanden op de Wemos D1 mini met behulp van:
install <com-poort>
verander <com-poort> in de com-poort waarop je de Wemos D1 mini hebt aangesloten, dus bijvoorbeeld als de Wemos D1 mini op com-poort 6 is aangesloten:
install com6
De software wordt nu naar je Wemos D1 mini gekopieerd en na reboot automatisch gestart.
Stap 3. Assembleer de PCB
Bestel de PCB bij je favoriete (chinese) PCB fabrikant, de Eagle & gerber files kun je hier downloaden:
De PCB ziet er als volgt uit:
Benodigd:
- 1x Wemos D1 mini
- 2x 8-pins male header
- 1x vl53l0x of vl6810x afstandsensor
- 1x 6-pins male header
- 2x 8-pins female header
- 1x 6-pins female header
- 1x 2-pins male header
- 1x 2-pins screwterminal
- 1x PCB
- optioneel: 1x 2-pins jumper
Soldeer de 2 8-pins male headers op de Wemos D1 mini. Soldeer de 6-pins male header op de afstandsensor. Soldeer vervolgens alle resterende headers en screwterminal op de PCB, wat waar komt wijst zich zelf. Indien je de vl53l0x gebruikt, plaats dan de stackable female header iets hoger op de PCB, ongeveer 5mm tussen PCB en header. Druk de Wemos D1 mini en afstandsensor op de PCB. Het eindresultaat ziet er dan zo uit:
Note: Mijn plan is om na het doen van een meting de Wemos D1 en sensor in deepsleep modus te laten gaan, en 1x per dag door de RTC chip te laten wekken en een nieuwe meting uit te laten voeren. Dit om de power consumptie zo laag mogelijk te houden. Heb deze functionaliteit zowel in de hardware als software ingebouwd, maar nog niet getest en geïmplementeerd. Hardware matig heb ik een jumper geplaatst tussen de GPIO14 (D5) van de Wemos en de XSHUT pin van de sensor, dit om “vreemd” gedrag tussen de Wemos D1 mini, software en de sensor te voorkomen. Maar hierover later meer.
Stap 4. Casing printen
Heb m.b.v. FreeCad een casing met deksel voor de PCB ontworpen
De CAD en STL bestanden zijn te downloaden:
Hieronder de onderdelen, printtijd, kleur en verbruik van PLA
Onderdeel | Kleur | Doorlooptijd in minuten | Gram | File |
Casing | Grijs | 119 | 18 | Salt-Case.stl |
Deksel | Grijs | 46 | 8 | Salt-Lid.stl |
Het eindresultaat:
Note: Alleen een casing ontworpen voor de vl53l0x sensor. Je kunt het bijgevoegde CAD bestand downloaden en zelf met behulp van FreeCAD een casing ontwerpen voor de vl6108x.
Stap 5. Montage op deksel zoutreservoir
In het midden van het deksel van het zoutreservoir m.b.v. een piramideboor een gat gemaakt van 6mm. De contouren van de casing, met het gat van de sensor boven het in het deksel geboorde gat, overgenomen m.b.v. een watervaste stift. Vervolgens op de randen van de onderkant van de casing de dubbelzijdige tape geplakt en de casing vastgeplakt op het deksel van het zoutreservoir.
Haal de draad van je voeding/transformator door het gaatje in de zijkant van de casing, en schroef deze vast op de terminal. Links is ground en rechts is 5v. Plaats nu de PCB in de casing.
Draai het deksel van het zoutreservoir om en meet m.b.v. een (digitale) schuifmaat de afstand van de lens van de sensor tot de onderkant van het deksel.
In mijn geval bedroeg die afstand 8.8mm. Dit is je waarde voor de configuratie parameter “offSet”. Default staat deze op 0.5cm. Pas m.b.v. een editor de config.py file aan, en pas de configuratie parameter aan naar jou gemeten waarde. In mijn geval dus:
...
offSet = 0.88 # Distance in cm between lens sensor and bottom lid watersoftener
...
Haal de PCB uit de casing en sluit middels een USB-kabel aan op je laptop/desktop. Upload de aangepaste config file m.b.v. ampy, pas <com-poort> aan naar jou toegepaste com poort:
ampy --port <com-poort> --baud 115200 put config.py
Plaats de PCB terug in de casing, en druk het 3D geprinte deksel op de casing. Plaats het deksel van het zoutreservoir terug op het zoutreservoir en doe de voeding/transformator in het stopcontact.
Resultaat in Domoticz:
Voorbeeld uit PushSafer:
Eindresultaat: