J'ai un bassin de 800 litres que j'utilise pour arroser le potager. Ce bassin se remplit avec l'eau du puits via un surpresseur qui déclenche la pompe lorsque j'ouvre le robinet. Il m'arrive régulièrement d'oublier de fermer ce robinet (il faut environ 15 minutes pour que le bassin soit rempli), ce qui fait que l'eau déborde régulièrement. D'où l'idée d'automatiser la fermeture et l'ouverture de la vanne.
Mon choix s'est finalement porté vers un système mécanique afin de pouvoir agir manuellement si l'électronique ne répondait pas (il faudra pouvoir débrayer ou déplacer le servomoteur pour agir manuellement sur la vanne).
I- Cahier des charges :
- Pouvoir toujours manœuvrer le robinet manuellement. -> Ceci élimine l'utilisation d'une électrovanne au profit d'un système de ce genre basé sur un servomoteur https://www.amazon.fr/compatible-Assistant-t%C3%A9l%C3%A9commande-automatisation-r%C3%A9gulateur/dp/B08YYMLT4C. Mais il faudra pouvoir le débrayer en écartant le servomoteur de la vanne à actionner et même mieux avoir un interrupteur pour choisir la position du servomoteur (2 possibilités à étudier).
- Il n'y a pas de ligne électrique proche du bassin et j'aimerai éviter d'avoir à en tirer une. -> Il faudrait donc que le système fonctionne sur batterie autour des 5 volts.
- Piloter la vanne via la domotique serait un plus en utilisant un firmware libre comme Tasmota (ne pas passer par Tuya, Smart Life par exemple). -> Via un module ESP32.
Mon choix s'est donc porté vers un système mécanique utilisant un servomoteur en m'inspirant du schéma suivant (source : https://github.com/arendst/Tasmota/discussions/10443) :
II- Choix du matériel :
- Un servomoteur d'une force de 35 kg afin de pouvoir manipuler la vanne 1/4 de tour car celle-ci peut se gripper lorsqu'on l'utilise peu. Exemple ici (16€) : https://fr.aliexpress.com/item/1005003529427455.html?mp=1&gatewayAdapt=glo2fra.
J'ai opté par la suite pour un servomoteur d'une force de 80 kg à 25€ (taille plus grande) car le modèle précédent avait du mal à débloquer la vanne : https://fr.aliexpress.com/item/32240916087.html?gatewayAdapt=glo2fra. Ce modèle travaille de façon optimale sous 7.4 Volts et est plus gros (pièce d'impression 3D à agrandir). Il tourne aussi dans le sens inverse des aiguilles d'une montre contrairement au servo de 35 kg. - Un relais 5V permettant d'alimenter le servomoteur lorsqu'on l'active : https://www.aliexpress.com/item/1005002581052782.html. En fait, mon module ESP 32 ne peut délivrer que du 3,3 volts, il faut donc des relais adaptés à ce voltage... J'ai réutilisé du coup un module que j'avais déjà sinon ceux-ci conviendraient aussi bien : https://www.amazon.fr/iHaospace-Channel-Optocoupler-Trigger-Development/dp/B07PLQNSW2.
- Un module ESP 32 : j'utiliserai un "vieux" clone du Wemos Lolin 32 Lite que j'ai en stock et sur lequel j'ai flashé le firmware Tasmota comme expliqué dans cet article.
- 2 régulateurs de tension à base de module MP1584 (8€ les 10) : https://fr.aliexpress.com/item/1005002639123831.html?mp=1&gatewayAdapt=glo2fra
- Une batterie de 12 volts comme celle-ci (40 €) : https://www.amazon.fr/gp/product/B00I8PSK0Q avec un chargeur de ce type (32 €) : https://www.amazon.fr/gp/product/B07X5RGTZ6
- Pièces diverses pour joindre le servomoteur à la poignée de la vanne, fixations, ... fabriquées à l'imprimante 3D. Voir le principe de cette vanne intelligente : https://fr.aliexpress.com/item/4000627730182.html
- Un interrupteur extérieur pour actionner le servomoteur "manuellement".
- 1 capteur flotteur de ce style (6€ les 2) : https://fr.aliexpress.com/item/4000288107978.html?gatewayAdapt=glo2fra pour enclencher automatiquement la fermeture de la vanne quand le bassin est plein.
III- Branchements :
IV- Paramètrage dans la console de Tasmota :
Info sur les commandes Tasmota : https://tasmota.github.io/docs/Commands/#setoptions
- Pour alimenter le module ESP 32 en 5 volts, j'ai récupéré un câble micro-USB que j'ai relié aux bornes + et - du module MP1584. J'ai essayé aussi via la connexion pour batterie Lipo en 3,7 volts mais sans succès.
- Pour couper le circuit rapidement, j'ai rajouté un interrupteur "général" après la borne + de la batterie 12 volts.
-
Pour afficher dans la Web UI, l'adresse IP et le nom d'hôte :
SetOption53 1
- Avec ce montage, le servomoteur est toujours sous tension. Par contre, si l'on veut que le relais soit activé à l'allumage du module, il faut taper cette commande :
PowerOnState 1
- Commandes à faire au départ :
SetOption80 1
// enable Shutters support.
Shuttermode 5
// enable Shutter mode for servo.
PWMfrequency 240
// this is a global variable for all Servos, pour le servo de 35 kg. Pour le servo de 80 kg, PWMfrequency 50 (50 Hz correspond à 20 ms).
SetOption15 0
// to control the storage of values. - Pour le servo de 35 kg tournant à 180° :
Avec Tasmota, il y a un problème avec la configuration "Shutter" : pour déplacer le servo, il faut utiliser la commande "pwm1 xxx" où xxx prend des valeurs de 80 à 560 (le milieu se situera donc à 320) pour mon servomoteur (déterminé en le testant). Attention aussi à la valeur de "PwmFrequency" qui permet d'actionner le moteur (pour mon servo, la valeur est autour de 240).
Pour cela, il faut dans la console Tasmota, taper la commande "ShutterPWMRange1 80, 560" indiquant les valeurs minimale et maximale pour faire tourner le servo de 0° à 180°. - Pour le servo de 80 kg tournant à 270° (et dans les sens anti-horaire) :
Avec Tasmota, il y a un problème avec la configuration "Shutter" : pour déplacer le servo, il faut utiliser la commande "pwm1 xxx" où xxx prend des valeurs de 120 à 615 (un déplacement de 90° se fera par pas de 165) pour mon servomoteur (déterminé en le testant). Attention aussi à la valeur de "PwmFrequency" qui permet d'actionner le moteur (pour mon servo, la valeur est autour de 50).
Pour cela, il faut dans la console Tasmota, taper la commande "ShutterPWMRange1 120, 615" indiquant les valeurs minimale et maximale pour faire tourner le servo de 0° à 270°. - Du coup, on peut éliminer la gestion shutter avec la commande :
SetOption80 0
- J'ai rajouté aussi un interrupteur ON/OFF (en fonctionnement "toggle" pour qu'il informe à chaque changement d'état même s'il aurait mieux valu un bouton poussoir) pour pouvoir changer manuellement la position du servo moteur en appuyant dessus. Voir la "rule" plus bas.
- Lorsque l'eau atteint la sonde, celle-ci doit renvoyer un signal pour que le servo actionne la fermeture de la vanne.
- Mise en place de règles pour automatiser la fermeture et l'ouverture du servo de 35 kg :
- Le Switch1 (inter 1) correspond à la sonde flotteur reliée au GPIO 12, avec le réglage :
Switchmode1 1
. De cette façon, lorsque le flotteur est en haut (bassin plein), cela met le servo moteur à la position "pwm1 80" (vanne fermée). - Le Switch2 (inter 2) correspond à l'interrupteur sur le GPIO 15. Dès qu'on appuie dessus, cela inverse la position du servomoteur : soit à la position "pwm1 80" (vanne fermée), soit à la position "pwm1 320" (vanne ouverte 1/4 de tour).
- Il y a 2 relais virtuels sur les GPIO 16 (relais 2 qui est actionné avec POWER2) et 17 (relais 3 qui est actionné avec POWER3) afin de pouvoir agir à partir de la WebUI.
- Pour effacer une règle :
Rule1 ''
- Le Switch1 (inter 1) correspond à la sonde flotteur reliée au GPIO 12, avec le réglage :
- Pour le servo de 35 kg tournant à 180° :
Pour fermer la vanne dès que le flotteur est en haut, inverser le servo via l'interrupteur manuel ou fermer/ouvrir la vanne à partir de la WebUI de Tasmota :Rule1 ON Switch1#state=0 DO Backlog Pwm1 80;Var1 0; POWER2 0; POWER3 0 ENDON ON Switch1#state=1 DO POWER2 1 ENDON ON Switch2#state=2 DO if (Var1==0) Pwm1 320;Var1 1; POWER3 1 endif ENDON ON Switch2#state=2 DO if (Var1==1) Pwm1 80;Var1 0; POWER3 0 endif ENDON ON POWER3#state==1 DO backlog Pwm1 320;Var1 1 ENDON ON POWER3#state==0 DO backlog Pwm1 80;Var1 0 ENDON
Ne pas oublier d'activer la règle avec :rule1 1
Décortiquons un peu ce code :
- La variable Var1 sert à indiquer la position du servo (et donc la position de la vanne). Var1 0 correspond à la position vanne fermée alors que Var1 1 correspond à la position vanne ouverte.
ON Switch1#state=0 DO Backlog Pwm1 80;Var1 0; POWER2 0; POWER3 0 ENDON
Lorsque le flotteur (Switch1) passe en position haute (OFF ou 0), cela ferme le servo avec la commande Pwm1 80, donne à la variable Var1 la valeur 0 (vanne fermée), et ajuste l'affichage de la WebUI de Tasmota en mettant le relais 2 (POWER2) à 0 ce qui indiquera pour le bouton "FLOTTEUR" la valeur OFF et en mettant le relais 3 (POWER3) à 0 ce qui mettra le bouton "SERVO" à OFF.ON Switch1#state=1 DO POWER2 1 ENDON
Lorsque le flotteur (Switch1) repasse en position basse (ON ou 1), cela ajuste l'affichage de la WebUI de Tasmota en mettant le relais 2 (POWER2) à 1 ce qui indiquera pour le bouton "FLOTTEUR" la valeur ON.ON Switch2#state=2 DO if (Var1==0) Pwm1 320;Var1 1; POWER3 1 endif ENDON
Lorsque l'interrupteur (Switch2) est actionné, si la vanne est fermée (Var1==0), cela ouvre le servo d'1/4 de tour avec la commande Pwm1 320, donne à la variable Var1 la valeur 1 (vanne ouverte), et ajuste l'affichage de la WebUI de Tasmota en mettant le relais 3 (POWER3) à 1 ce qui mettra le bouton "SERVO" à ON.ON Switch2#state=2 DO if (Var1==1) Pwm1 80;Var1 0; POWER3 0 endif ENDON
Lorsque l'interrupteur (Switch2) est actionné, si la vanne est ouverte (Var1==1), cela ferme le servo avec la commande Pwm1 80, donne à la variable Var1 la valeur 0 (vanne fermée), et ajuste l'affichage de la WebUI de Tasmota en mettant le relais 3 (POWER3) à 0 ce qui mettra le bouton "SERVO" à OFF.- ON POWER3#state==1 DO backlog Pwm1 320;Var1 1 ENDON
Lorsque que dans la WebUI de Tasmota, on appuie sur le 3e bouton SERVO pour le passer à ON pour ouvrir la vanne, cela ouvre le servo d'1/4 de tour avec la commande Pwm1 320 et donne à la variable Var1 la valeur 1 (vanne ouverte). - ON POWER3#state==0 DO backlog Pwm1 80;Var1 0 ENDON
Lorsque que dans la WebUI de Tasmota, on appuie sur le 3e bouton SERVO pour le passer à OFF pour fermer la vanne, cela ferme le servo avec la commande Pwm1 80 et donne à la variable Var1 la valeur 0 (vanne fermée).
- Pour le servo de 80 kg tournant à 270° (mais dans le sens inverse du servo à 35 kg... soit le sens anti-horaire) :
Pour fermer la vanne dès que le flotteur est en haut, inverser le servo via l'interrupteur manuel ou fermer/ouvrir la vanne à partir de la WebUI de Tasmota :Rule1 ON Switch1#state=0 DO Backlog Pwm1 340;Var1 0; POWER2 0; POWER3 0 ENDON ON Switch1#state=1 DO POWER2 1 ENDON ON Switch2#state=2 DO if (Var1==0) Pwm1 175;Var1 1; POWER3 1 endif ENDON ON Switch2#state=2 DO if (Var1==1) Pwm1 340;Var1 0; POWER3 0 endif ENDON ON POWER3#state==1 DO backlog Pwm1 175;Var1 1 ENDON ON POWER3#state==0 DO backlog Pwm1 340;Var1 0 ENDON
Ne pas oublier d'activer la règle avec :rule1 1
- Une fois le montage en place, il a été nécessaire d'affiner les valeurs d'ouvertures et de fermeture (les angles n'étant pas parfaitement respectés, par exemple ici la position fermée de la vanne est passée de 340 à 360) :
Rule1 ON Switch1#state=0 DO Backlog Pwm1 360;Var1 0; POWER2 0; POWER3 0 ENDON ON Switch1#state=1 DO POWER2 1 ENDON ON Switch2#state=2 DO if (Var1==0) Pwm1 150;Var1 1; POWER3 1 endif ENDON ON Switch2#state=2 DO if (Var1==1) Pwm1 360;Var1 0; POWER3 0 endif ENDON ON POWER3#state==1 DO backlog Pwm1 150;Var1 1 ENDON ON POWER3#state==0 DO backlog Pwm1 360;Var1 0 ENDON
- Lorsqu'on branche la batterie, la vanne s'ouvre automatiquement. Or, je ne veux pas ce comportement par défaut mais on contraire que la vanne soit en position fermée. Pour cela on va agir sur le paramètre "PowerOnState" : https://tasmota.github.io/docs/PowerOnState/
PowerOnState 0
- Il serait possible de modifier le texte au-dessus du bouton "Flotteur" pour que ça soit plus parlant (par exemple "Bas" et "Haut" plutôt que "On/Off") en agissant sur le paramètre "StateTxt" : https://tasmota.github.io/docs/Commands/#statetext. Par contre, cela change aussi les valeurs transmises par MQTT... À creuser éventuellement...
V- Fonctionnement :
- GPIO 0 -> permet d'allumer le relais 1 servant à commander le servomoteur. On peut donc désactiver ou activer le système en appuyant sur le 1er bouton ON/OFF.
- GPIO 2 -> permet de piloter le servomoteur avec la commande Pwm1 ayant soit 80 (position fermée) soit 360 (position 1/4 ouvert).
- GPIO 12 -> Branchement du flotteur qui lorsqu'il est en position haute (niveau d'eau maximum) va déclencher la fermeture de la vanne avec le servo. Dans l'interface WebUI de Tasmota, c'est le deuxième bouton qui n'a aucune action (relais virtuel sur le GPIO 16), c'est juste un indicateur de l'état du flotteur : ON (flotteur en position basse) et OFF (flotteur en position haute).
- GPIO 15 -> Branchement de l'interrupteur manuel permettant d'inverser la position du servo.
- GPIO 16 -> Relais 2 virtuel qui permet d'avoir un 2e bouton dans la WebUI de Tasmota. Dans la règle de Tasmota (rule1), ce bouton correspond au POWER2. Il permet d'indiquer la position du flotteur.
- GPIO 17 -> Relais 3 virtuel qui permet d'avoir un 3e bouton dans la WebUI de Tasmota. Il permet d'actionner la vanne à distance dans la "rule1" via POWER3. Il permet aussi d'indiquer la position de la vanne : OFF (vanne fermée) et ON (vanne ouverte).
- Pour changer l'intitulé des boutons dans WebUI, il faut utiliser la commande "webbutton" comme par exemple :
WebButton2 FLOTTEUR
WebButton3 SERVO
Ci-dessous une vidéo décrivant le fonctionnement :
VI- Pièces de fixation :
- Ces pièces ont été conçues sous FreeCAD et fabriquées à l'aide de mon imprimante 3D. Elles sont disponibles au bas de cette page pour ceux et celles intéressées.
- Il y a le berceau qui maintient le servomoteur avec une partie en forme de cercle à l'intérieur afin de pouvoir l'insérer puis le faire pivoter.
- Il y a le support à fixer sur le tuyau (ou ailleurs) permettant de faire profiler l'axe du servomoteur avec l'axe de la vanne. Vu le montage de ma vanne (ouverture vers le haut), il faudra fixer au-dessous de la vanne pour laisser le champ libre au-dessus.
- Il y a la "fourche" qui permet d'enserrer la poignée de la vanne pour pouvoir l'actionner. Pour faciliter son déplacement, il y aura 2 rouleaux de part et d'autre de la poignée.
- Pour le boîtier étanche, voir sur Thingiverse cette page avec un modèle OpensCAD paramétrable : https://www.thingiverse.com/thing:4921568https://www.thingiverse.com/thing:4921568