mardi 8 novembre 2022

Octobre 2022 : Actualité des Blogs du Mois

  


Actualité des Blogs du Mois


Sur  Framboise 314 :

Sur  MCHobby :


Cordialement

Henri 

 

ESP32 : Micro-irrigation Connectée (1ère partie)

 


 

ESP32 : Micro-irrigation Connectée (1ère partie)

 

J'avais présenté il y a deux ans une centrale d'irrigation automatisée :

https://riton-duino.blogspot.com/2019/06/arduino-micro-irrigation-automatisee.html

Certains besoins personnels m'ont conduit à étudier une nouvelle version :

  • changement d'habitation et présence de plusieurs jardins
  • création d'une zone framboisiers et groseilles
  • tomates sous serre, donc abritées de la pluie

Le précédent jardin, devant la maison précédente, n'était pas à proprement parler un potager. La plantation était assez diversifiée (tomates, courgettes, plantes aromatiques, fleurs), mais il est devenu un jardin uniquement floral suite à la création du potager à l'arrière de la maison. L'ancienne centrale continuera à l'irriguer.

Auparavant l'arrosage était conditionné par l'humidité du sol. Mais il arrive fréquemment que certaines plantes, tomates en particulier soient intentionnellement abritées (sous serre), et nécessitent un arrosage quotidien, tandis que d'autres plantes bénéficient d'un apport en eau par la pluie, et ne doivent pas être arrosées systématiquement.

Le nouveau système doit donc comporter plusieurs voies, et pour chaque voie l'arrosage peut être systématique ou conditionné par l'humidité du sol, au choix de l'utilisateur.

Les principales fonctions du précédent système sont conservées :

  • capteur de débit
  • capteur d'humidité
  • plages d'arrosage automatique
  • arrosage manuel

Pour ceux qui seraient intéressés, il existe un projet open-source analogue : OpenSprinkler.

Le contrôleur vaut un peu plus de 200€, mais on peut le réaliser soi-même.

Les sources sont disponibles ici : https://github.com/opensprinkler 

Apparemment les schémas sont développés à l'aide de EagleCAD. EagleCAD est gratuit si l'on se contente de développer de petites cartes (80cm²).

1. Les besoins

Le but de cette nouvelle version est d'apporter quelques améliorations :

  • 12 voies possibles par défaut
  • paramétrage par une page WEB

Le nombre de voies peut être augmenté par l'adoption de modules relais ou MOSFETs commandables par I2C.

Voir mes articles récents sur ces sujets :

Modules à relais DIY

Piloter des Relais ou des MOSFEts à l'aide d'un Module MCP23008 ou MCP23017

Plusieurs voies peuvent être mises en eau, séparément ou simultanément, à différents moments de la journée. On pourra ainsi arroser plusieurs zones, et chaque zone peut se voir attribuer une ou plusieurs voies.

Comment attribuer les différentes voies ? voici un exemple :

  • zone 1 :
    • tomates sous serre : voie 1
    • le reste : voie 2
  • zone 2 :
    •  plantes abritées (avancée de toiture par exemple) : voie 3
    •  le reste : voie 4
  • zone 3 :
    • jeunes arbres : voie 5

Dans cet exemple 5 voies sont nécessaires.

Plusieurs arrosages par jour sont possibles pour chaque voie, pendant une certaine durée. Cette durée doit être fixée en fonction des besoins des plante les moins gourmandes en eau, qui seront arrosées avec un goutteur à faible débit (2 litres / heure par exemple). Les plantes nécessitant plus d'eau recevront un goutteur ayant un débit plus élevé, ou un goutteur réglable.

On peut également espacer les arrosages de plusieurs jours, par exemple pour arroser de jeunes arbres nécessitant une quantité d'eau importante pendant quelques mois après leur plantation, tous les 5 à 10 jours par exemple.

Chaque arrosage peut être systématique ou conditionné par l'humidité du sol. Dans l'exemple précédent les voies 1 et 3 seront irriguées systématiquement, les autres uniquement si le sol est sec.

Le paramétrage se fera par une page WEB, car proposer une interface homme-machine sur un écran TFT demanderait un travail assez conséquent. Une simple page HTML / JavaScript sera beaucoup plus rapide à développer.

Un simple téléphone mobile pourra être utilisé pour configurer le système, ou un PC.

Un ESP32 est utilisé pour ses capacités de communication WIFI.

1.1. Petits rappels

Un petit rappel concernant les diamètres de tuyaux et raccords :

  • 1/2" (15/21) ou 3/4" (20/27) : matériel de plomberie fileté 1/2 pouce ou 3/4 de pouce
    • raccords
    • nez de robinets
    • vannes
    • électrovannes
    • petites pompes
  • 1" (26x34) : matériel de plomberie fileté 1 pouce
    • raccords (généralement pour des tuyaux d'arrosage de 25mm)
    • pompes
  • 12.5mm et 15mm : tuyaux d'arrosage courants
  • raccords rapides : on trouve différents modèles :
    • 12.5mm / 15mm
    • 15mm / 19mm
    • 25mm
  • tuyau d'arrosage goutte à goutte (polyéthylène noir) :
    • 13mm intérieur, 16mm extérieur
    • 4mm intérieur, 6mm extérieur (dit capillaire)

Pour ma part j'utilise un tuyau principal 12.5mm, amplement suffisant pour une cinquantaine de goutteurs.

2. Description

2.1. Circuit hydraulique

Le circuit hydraulique retenu est le suivant :

  • une seule vanne principale située à proximité de la centrale
    • motorisée ou non
    • 12V, 24V ou 220V
  • plusieurs secondaires situées aux abords du ou des jardins (zones)
    • 12V ou 24V de préférence
  • un tuyau entre la vanne principale et chaque zone d'arrosage

Si une seule voie au total est utilisée, les vannes secondaires sont inutiles.

L'utilisation d'une vanne principale et de plusieurs vannes secondaires permet de réduire le coût. Si l'on désire utiliser des vannes motorisées, une seule est nécessaire. Les vannes simples sont bon marché.

On pourrait penser qu'en multi-voies la vanne principale est inutile. En effet on pourrait laisser uniquement les vannes secondaires, mais cela aurait une conséquence : le tuyau d'arrosage qui alimente les vannes resterait en permanence sous pression, ce que je ne souhaite pas.

2.1.1. Les vannes

Les vannes sont de préférence des modèles 12V ou 24V, pour des raisons de sécurité.

Si elles sont à l'abri et au sec, on peut éventuellement opter pour des modèles 220V. Mais en général ces vannes sont équipées de cosses plates de 6mm (sauf les vannes motorisées), ce qui pose tout de même un problème de sécurité vis à vis des personnes, à moins de les enfermer dans un coffret fermé.

Les électrovannes que l'on trouve sur les sites chinois (certaines valent 1€) supportent en général jusqu'à 0.8 Mpa (mégapascal), ce qui correspond à 8 bars. Elles conviennent à la plupart des réseaux de distribution d'eau, étant donné que la pression du réseau public n'excède pas 5 bars.

2.1.2. Commande des vannes

Ces vannes doivent être commandées par des modules à relais ou à MOSFETs.

Le plus simple pour l'amateur ne désirant pas se lancer dans la conception d'une carte à MOSFETs est d'utiliser des modules à relais.

Si des vannes 12V ou 24V sont utilisées, il serait préférable d'utiliser des modules relais fonctionnant sous la même tension, ce qui simplifiera l'alimentation.

Des modules relais récents sont nécessaires, car ils sont étudiés pour pouvoir être commandés sous 3.3V ou 5V :

Module relais 2 voies

Module relais 8 voies

Ces modules possèdent un connecteur d'entrée :

  • GND
  • IN1, IN2, etc.
  • VCC)

Un connecteur d'alimentation des bobines est également présent :

  • GND
  • JD-VCC (12V, ou 24V en fonction des relais)

Les modules ancienne génération ne conviennent pas. J'ai essayé celui-ci :

Module inadapté

Une vanne principale motorisée possède 3 fils (commun, ouverture et fermeture), elle aura donc besoin de deux voies, une vanne simple se contentera d'une voie.

Exemples : 

  • module relais 1 voie :
    • vanne principale non motorisée sans vanne secondaire
  • module relais 2 voies :
    • vanne principale motorisée sans vanne secondaire
  • module relais 4 voies :
    • vanne principale non motorisée + 3 vannes secondaires
    • vanne principale motorisée + 2 vannes secondaires
  • module relais 8 voies :
    • vanne principale non motorisée + 7 vannes secondaires 
    • vanne principale motorisée + 6 vannes secondaires 
  • etc.

Bien entendu on peut combiner plusieurs modules :

  • 1 module relais 1 voie + 1 module relais 2 voies :
    • vanne principale non motorisée + 2 vannes secondaires
  • 2 module relais 2 voies :
    • vanne principale motorisée + 2 vannes secondaires
  • 1 module relais 1 voie + 1 module relais 4 voies :
    • vanne principale non motorisée + 4 vannes secondaires
  • 1 module relais 2 voies + 1 module relais 4 voies :
    • vanne principale motorisée + 4 vannes secondaires
  • etc.

Si des vannes 12V ou 24V sont utilisées, les modules relais peuvent être remplacés par des modules à MOSFET. Des modèles adaptés à une commande en 3.3V (dits "logic level") sont impératifs (IRLR7843, AOD4184, etc.) :

Module MOSFET logic level

Exemple : aliexpress.com

Il faut éviter les modules du genre IRF520, IRF540, etc.

L'avantage du module MOSFET est l'absence de bruit, la fiabilité, et ils ne nécessitent aucune alimentation, donc ne consomment rien.

  • 2 modules seront nécessaires pour une vanne motorisée, un pour ouvrir, l'autre pour fermer
  • 1 module sera nécessaire pour chaque vanne non motorisée

L'inconvénient est que l'on ne trouve pas de modules à MOSFET multi-voies dans le commerce. Mais on peut éventuellement en fabriquer un :

MODULE 8 MOSFETs IRLZ44N

MODULE 16 MOSFETs AO3400

Cet article explique comment faire :

https://riton-duino.blogspot.com/2020/07/un-module-16-mosfets.html

Même s'il est techniquement possible de placer les modules relais ou MOSFET près des vannes, ces cartes sont susceptibles de s'oxyder dans un environnement humide. Il est préférable de les installer au sec, près de la centrale d'irrigation.

2.1.2. La vanne principale

Comme dans la version précédente la vanne principale peut être un modèle motorisé ou non :

Vanne motorisée 230V 3/4" (20/27)

Électrovanne 12V 1/2" (15/21)

La vanne motorisée permet une montée en pression plus progressive et permet souvent d'éviter des ruptures de circuit ou l'éjection de goutteurs.

Une vanne simple est suffisante si la pression est faible ou si l'on utilise un réducteur de pression.

Si l'ensemble du système est alimenté en eau du réseau public (en moyenne 3.5 bars) il est déconseillé d'utiliser un tuyau d'arrosage en amont de la vanne principale. La pression pourrait être trop forte, et le risque d'inondation élevé. Privilégier une arrivée d'eau et des raccords cuivre ou PER, à visser ou souder :

Arrivée d'eau de l'irrigation actuelle

Ma centrale d'irrigation actuelle est alimentée à l'aide de cuivre Ø14mm :

  • vanne principale : raccords 3/4 mâles
  • capteur de débit : raccords 1/2 femelles

Tous les raccords sont brasés car les écarts de température peuvent être importants. La soudure à l'étain serait moins résistante et pourrait occasionner des fuites.

Une installation à base de tube PER sera certainement plus aisée à réaliser si l'on ne dispose pas d'un poste à souder à acétylène.

2.1.3. Les vannes secondaires

Les vannes diamètre 1/2 (15/21) sont préférables, pour des raisons de coût des raccords et d'encombrement général. Mais on peut également tout réaliser en 3/4 (20/27).

Si une seule voie est utilisée, les vannes secondaires sont inutiles.

Si plusieurs voies sont nécessaires un collecteur du type sanitaire peut être utilisé. Normalement chaque zone devrait avoir besoin au maximum de 2 voies :

Collecteur 2 départs 15/21

L'arrivée est en diamètre 3/4 (20/27).

Pour le raccordement du tuyau d'arrivée on peut utiliser un nez de robinet 20/27 :


Le raccordement des vannes sur le collecteur peut être fait à l'aide de raccords femelle 15/21 :

Raccord 15/21 femelle

En sortie de vanne on trouve des raccords 15/21 sur lesquels on pourra directement brancher les tubes d'arrosage 13mm :

Raccord Claber 20/27 ou 15/21 - 13mm

On trouve même des modèles permettant de raccorder directement un tube capillaire 4mm :

Raccord Claber 20/27 ou 15/21 - 4mm

Ces raccords sont compatibles 20/27 et 15/21. Pour les raccorder en 20/27 il suffit de retirer l'adaptateur orange.

L'ensemble peut être mis à l'abri dans un élément de pilier béton enterré, avec un couvercle :

élément de pilier 32x32x25

2.2. Câblage

Un câble sera nécessaire pour relier la centrale aux vannes secondaires de chaque zone :
  • un câble à 2 conducteurs pour 1 vanne
  • un câble à 3 ou 4 conducteurs pour 2 vannes
  • etc.

Si l'on choisit un câble à 3 conducteurs pour deux vannes, un des 3 conducteurs devra supporter le double du courant si les vannes sont alimentées simultanément. Dans ce cas il est préférable d'opter pour un câble à deux conducteurs par vanne, à moins de doubler la section.

Il est important de choisir un câble de section suffisante. Un câble de 0.5mm² de longueur de 10 mètre a une résistance non négligeable :

R = 0,0175 ∙ 10 / 0,5 = 0.35Ω

Cette résistance est à multiplier par 2 : 0.7Ω. La chute de tension sur une vanne 12V consommant 500mA sera de :

U = R * I = 0.7Ω * 0.5A = 0.35V

Si les longueurs sont faibles, une section de 75mm² ou même 0.5mm² sera donc amplement suffisante pour véhiculer le courant nécessaire à chaque vanne.

Si l'installation est enterrée, il faut prévoir une gaine de diamètre suffisant pour passer le tuyau et le câble.

Sinon, le tuyau d'arrivée devra être facilement débranché en cas de besoin, tondre le gazon par exemple. Un raccord rapide doit être prévu.

Il en va de même pour le ou les câbles. Des connecteurs résistants et fiables doivent être utilisés. Pour quelques € on trouve des tas de choses intéressantes sur AliExpress :

Connecteurs IP68

2.3. L'eau de pluie

J'utilise soit de l'eau du réseau, soit de l'eau de pluie quand celle-ci est disponible.

Un réservoir de 1500 litres récupère l'eau de pluie d'une toiture. Ensuite un surpresseur permet d'augmenter la pression à 2 bar.

2.4. Interface homme machine

2.4.1. Interface WEB

Voici à quoi pourrait ressembler l'interface WEB :

Une autre page permettra de configurer le fonctionnement, et de visualiser certaines données :

  • marche ou arrêt
  • temps d'ouverture et de fermeture de la vanne (si motorisée)
  • durée par défaut de l'arrosage manuel
  • débit maximal autorisé
  • interdire les arrosages simultanés sur plusieurs voies
  • humidité minimale pour autoriser l'arrosage
  • adresse du serveur NTP (*)
  • visualisation de données :
    • affichage de l'heure du prochain arrosage
    • affichage du débit pendant l'arrosage
    • humidité du sol
  • visualisation de la quantité d'eau distribuée
    • journalière
    • hebdomadaire
    • mensuelle
    • annuelle

L'option "interdire les arrosages simultanés sur plusieurs voies" permet de vérifier après programmation que les arrosages ne se chevauchent pas. C'est utile dans deux cas :

  • l'alimentation est peu puissante et ne permet pas d'activer plusieurs voies simultanément (voir plus loin : 4. L'alimentation)
  • la pression en eau est faible et ne permet pas d'alimenter un grand nombre de goutteurs

(*) L'heure et la date courantes seront demandées par le réseau WIFI à l'aide d'une requête sur un serveur NTP.

2.4.2. Interface locale

Sur la centrale l'interface est réduite au strict minimum :

  • bouton d'arrosage manuel
  • bouton fonction
  • afficheur OLED
    • affichage date et heure
    • affichage de l'humidité
    • affichage du débit pendant l'arrosage
    • affichage "ouverture vanne" et "fermeture vanne"
    • affichage "problème de débit"
    • par appui sur le bouton fonction :
      • affichage adresse IP
      • affichage de l'heure du prochain arrosage
  • LED verte
    • arrosage en cours
  • LED rouge
    • débit maximal dépassé (clignotement)

2.4.3. Options

Certaines options sont configurables par modification d'un fichier :

  • SSID et password de la box internet
  • vanne principale motorisée ou non
  • modules relais utilisés
    • relais normaux
      • niveau haut
      • niveau bas
    • relais I2C
  • capteur de débit présent ou non
  • capteur d'humidité présent ou non

3. ESP8266 ou ESP32

3.1. Esp8266

WEMOS D1 MINI

Si l'on utilise une WEMOS D1 MINI les broches utilisable sont :

  • GPIO 0 : réservée
  • écran OLED I2C : GPIO 4, 5
  • vannes : GPIO 2
  • boutons : GPIO 13, 14
  • capteur de débit : GPIO 12
  • capteur d'humidité : A0 (ADC)
  • LEDs verte et rouge : GPIO 15, 16

Avec cette carte nous serions très limités (une seule voie). Il faudrait ajouter un expander I2C pour commander les relais, un MCP23008 ou MCP23017 par exemple. Mais cela reste tout à fait faisable.

3.2. ESP32

ESP32 DevKitC

L'ESP32 a été retenu pour son grand nombre d'entrées / sorties. Il convient de consulter la page suivante avant de décider de leur affectation :

https://randomnerdtutorials.com/esp32-pinout-reference-gpios/ 

Voici un résumé des besoins :

  • GPIOS 0 à 3, 6 à 12 : réservées ou problématiques
  • sorties :
    • écran OLED I2C : GPIO 21, 22
    • vannes : GPIO 4, 5, 13 à 19, 23, 25, 26, 27
    • LEDs verte et rouge : GPIO 32, 33
  • entrées
    • boutons : GPIO 34, 35
    • capteur d'humidité : GPIO 36 (ADC CH0)
    • capteur de débit : GPIO 39

Comme on le voit un ESP32 DevKit ne sera pas de trop. Le nombre de voies possibles est de 11 ou 12 en fonction du type de vanne principale, motorisée ou non. Cela devrait couvrir l'immense majorité des cas. Si les besoins sont supérieurs, lire le paragraphe suivant :

3.3. Le choix

A noter : les GPIOS 34, 35, 36 et 39 sont des entrées. Elles ne peuvent être configurées en sortie.

Également, certaines GPIOS peuvent empêcher le démarrage si elles sont au niveau haut. C'est le cas de la GPIO12. Si l'on connecte un module relais actif au niveau bas, la tension sera positive sur son entrée, et l'ESP32 ne démarrera pas. On pourrait éventuellement utiliser cette broche pour commander une LED, à condition de la connecter, avec sa résistance, entre GPIO12 et GND.

J'ai retenu la version ESP32 DevKitC. C'est une carte à 38 broches très répandue, équipée d'un convertisseur USB / CP2104 et d'un régulateur 3.3V AMS1117 :

Elle provient d'ici : WorldChips. Mais on la trouve un peu partout.

Pour un débutant qui voudrait réaliser ce projet il sera plus facile d'utiliser cette carte précisément, car une seule version de PCB sera étudiée. On peut également réaliser ce projet sur une plaquette à pastilles.

On peut aussi réaliser ce montage à l'aide de pratiquement n'importe quel modèle, à partir du moment où les GPIOs nécessaires sont présentes. Une WEMOS LOLIN32 conviendra parfaitement. Les broches nécessaires existent mais elles sont placées différemment :

Pour les aficionados de la technologie la carte HELTEC WIFI KIT 32 peut être une solution. Elle réunit avec bonheur un ESP32 et un écran SSD1306 :


D'un point de vue WIFI elle est moins performante que l'ESP32 DevKitC ou la WEMOS. Il faudra s'assurer que la couverture WIFI est suffisante dans l'habitation.

J'en parle ici : https://riton-duino.blogspot.com/2021/06/esp32-heltec-wifi-kit-32.html

3.4. Le WIFI

Pour l'instant l'évaluation de la carte ESP32 DevKitC est en cours. Installée à l'endroit prévu elle semble donner toute satisfaction d'un point de vue portée WIFI. La carte HELTEC WIFI KIT 32 ne convient pas, sa portée est insuffisante. Mais elle pourrait convenir à certains.

3.5. Augmenter le nombre de voies

On pourrait difficilement monter à 16 voies avec un ESP32 seul, à moins d'utiliser un module à 16 relais ou MOSFETs commandable par I2C.

Voir mes articles récents sur le sujet :

Modules à relais DIY

Piloter des Relais ou des MOSFEts à l'aide d'un Module MCP23008 ou MCP23017

Un module relais ou MOSFETs équipé d'un expander MCP23017 I2C 16 canaux permettra de bénéficier de 16 voies. Comme le MCP23017 possède 3 broches de sélection d'adresse I2C, on peut connecter jusqu'à 8 modules. Cela permettra d'offrir en tout 128 voies.

4. L'alimentation

Comme dit plus haut l'alimentation principale sera choisie en fonction de la tension acceptée par les vannes, et sa puissance dépendra du nombre de vannes et de relais.

Si les distances entre les relais et les vannes sont importantes, l'adoption de vannes 24V permettra de réduire le courant nécessaire, et donc la section des fils :

  • vanne de 6W sous 12V : 500mA
  • vanne de 6W sous 24V : 250mA

La puissance des vannes est en général de 6W. La consommation des relais est d'environ 450mW pour les modèles courants : SRD-12VDC-SL-C ou SRD-24VDC-SL-C.

Pour une centrale 4 voies nous aurons besoin de :

  • 1 vanne principale + 4 vannes secondaires : 30W
  • 5 relais : 2.5W

A cela il faudra ajouter les besoins de l'ESP32, qui sera alimenté à travers un régulateur du type MP1584 3.3V : 100mA, soit 0.33W.

Le total est de presque 33W. Bien entendu c'est une consommation maximale, en considérant que toutes les vannes sont ouvertes. Au repos, seul l'ESP32 consommera du courant.

Pour 8 voies la consommation maximale monte à 57W.

Il est possible de consommer moins de courant en commandant un seul arrosage à la fois, et en les enchaînant, ainsi 1 seule vanne secondaire sera alimentée :

  • 1 vanne principale + 1 vanne secondaire : 12W
  • 2 relais : 1W

C'est pour cela que l'option "interdire les arrosages simultanés sur plusieurs voies" est prévue. Elle permet de vérifier après programmation que les arrosages ne se chevauchent pas.

Cette option permet d'utiliser une alimentation nettement moins puissante et ainsi de réduire le coût. Une alimentation de qualité coûte cher :

  • MEANWELL RS-15-12 15W : 8.50€
  • MEANWELL RS-35-12 35W : 13.50€
  • MEANWELL RS-75-12 75W : 18.50€

On aurait pu diminuer légèrement cette consommation en adoptant des relais bistables, mais je n'en vois pas trop l'intérêt, étant donné que la puissance des relais est très faible par rapport à celle des vannes.

5. Le schéma

Le schéma est réalisé à l'aide de KICAD :


Le connecteur d'alimentation P2 reçoit la tension de l'alimentation principale : 12V ou 24V, choisie en fonction des électrovannes et des relais.

Comme le capteur de débit est à alimenter sous 5V, il est indispensable d'ajouter un régulateur. J'ai choisi un module MP1584 à tension fixe 5V, qui alimente également la carte DEVKIT-C :

Les MP1584 réglables sont équipés d'un potentiomètre miniature de très mauvaise qualité. A éviter.

Celui-ci provient de chez WorldChips : https://fr.aliexpress.com/item/4000330604568.html?spm=a2g0o.store_pc_groupList.8148356.53.6d06635eIkRNN1

La carte DEVKIT-C est équipée d'un régulateur AMS1117, qui fournit du 3.3V :

  • à l'ESP32
  • à l'écran OLED SSD1306
  • au capteur d'humidité

Deux ponts diviseurs sont présents :

  • R3-R5 : abaisse la tension de sortie du capteur d'humidité (0V à 3.3V) pour la rendre compatible avec la tension maximale de l'ADC : 1.1V
  • R4-R6 : abaisse la tension de sortie du capteur de débit pour la rendre compatible avec la tension maximale d'une entrée digitale: 3.3V

Les auteurs de certains tutoriels ESP32 se permettent de relier directement la sortie d'un capteur de débit 5V à une entrée de l'ESP32. Ce n'est pas recommandé.

Deux connecteurs de sortie sont prévus :

  • P4 permet de commander jusqu'à 13 relais ou MOSFETs
  • P5 permet de relier un ou plusieurs modules à relais ou à MOSFETs I2C
Pour terminer, deux LEDs (rouge et verte) sont présentes, ainsi que deux boutons de commande.

6. Le coût

La centrale d'arrosage de base devrait être très bon marché, en achetant les composants sur AliExpress :

  • ESP32 : 4€ 
  • le module à relais ou MOSFETs :
    • module 8 relais : 6€
  • ou
    • un module à 8 MOSFETs AO3400 à réaliser soi-même : 1€.
  • écran OLED : 2.60€
  • 2 boutons TACT : 0.10€
  • le PCB
    • une plaquette à pastilles 100x100 : 5€ les 5 pièces
  • ou
    • un PCB réalisé par JLCPCB : 9€ les 5 pièces
  • l'alimentation 15W : 8.50€
  • quelques connecteurs DUPONT : 0.15€
  • capteur de débit : 7€
  • capteur d'humidité capacitif : 1.70€

A cela il faudra ajouter les vannes :

  • vanne simple : 1€ pièce
  • vanne motorisée : 20€

A la louche une centrale 8 voies devrait coûter 60€ avec une vanne principale motorisée, 40€ sinon. On peut gagner encore 5€ si on remplace la carte 8 relais par une carte à 8 MOSFETs.

En comparaison, une centrale d'arrosage minimaliste à 4 voies, sans capteurs de débit et d'humidité, coûte environ 80€.

En commandant le maximum de matériel chez le même revendeur on peut réduire fortement le coût de transport (attention ce n'est pas le cas chez tous les marchands).

Chez WorldChips, par exemple, c'est le cas. Ma dernière commande chez eux (58€ de matériel) s'est vue attribuer 15€ de réduction sur 21€ de coût de livraison.

7. Le code

Le code actuel implémente les parties suivantes :

  • configuration des relais
  • connexion au réseau WIFI 
  • page HTML principale
  • page HTML de test des relais

7.1. La configuration

La configuration reprend le principe décrit dans cet article :

ESP32 & ESP8266 : les Fichiers de Paramètres

Il faut bien lire le paragraphe suivant : 2. Le chargement dans SPIFFS

Le fichier de configuration fourni est un exemple permettant d'utiliser un module relais ou MOSFETs sur 8 GPIOS et un module à 16 relais ou MOSFETs sur bus I2C :

https://bitbucket.org/henri_bachetti/esp32-sprinkle-timer/src/master/arduino/esp32-sprinkle-timer/data/config.ini

[WIFI]
access-point=SSID:ABCDEFGHIJ

[relays]
modules=gpio-1, mcp23017-1(0x20)
gpio-1=GPIO-L(4), GPIO-L(5), GPIO-L(13), GPIO-L(14), GPIO-L(15), GPIO-L(16), GPIO-L(17), GPIO-L(18)
mcp23017-1=I2C-H(0-15)
main=gpio-1.0

[zones]
zones=massif1, potager, courges, massif2, massif3, montmorency, moissac, mirabellier, pommier

[massif1]
voie1=mcp23017-1.0
voie2=mcp23017-1.1

[potager]
voie1=mcp23017-1.2
voie2=mcp23017-1.3
voie3=mcp23017-1.4
voie4=mcp23017-1.5

[courges]
voie1=mcp23017-1.6

[massif2]
voie1=mcp23017-1.7

[massif3]
voie1=mcp23017-1.8

[montmorency]
voie1=mcp23017-1.9

[moissac]
voie1=mcp23017-1.10

[mirabellier]
voie1=mcp23017-1.11

[pommier]
voie1=mcp23017-1.12

La section WIFI donne le SSID et le PASSWORD du réseau.

La première ligne de la section [relays] déclare deux modules :

  • GPIO
  • un MCP23017 à l'adresse I2C 0x20
Le module gpio-1 est ensuite décrit. Il utilise les GPIOS 4, 5, et 13 à 18.

Le module mcp23017-1 utilise les GPIOS 0 à 15 du MCP23017.

La syntaxe de description des relais est la suivante :

  • GPIO ou I2C
  • tiret
  • L ou H selon le niveau de commande du relais ou du MOSFET
  • (X) représente le N° physique de la sortie

Exemples :

  • GPIO-L(4) : un relais activable par un niveau bas sur GPIO4
  • GPIO-H(4) : un relais activable par un niveau haut sur GPIO4
  • GPIO-H(4+5) : un relais bistable activable par un niveau haut sur GPIO4 et GPIO5
  • I2C-L(0) : un relais I2C activable par un niveau bas sur GPIO0 d'un MCP23008 ou MCP23017
  • I2C-H(0) : un relais I2C activable par un niveau haut sur GPIO0 d'un MCP23008 ou MCP23017
  • I2C-H(0+1) : un relais I2C bistable activable par un niveau haut sur GPIO0 et GPIO1 d'un MCP23008 ou MCP23017
  • I2C-H(0-15) : 16 relais I2C activables par un niveau haut sur GPIO0 à GPIO15 d'un MCP23017

Après lecture de la configuration chaque relais est nommé comme suit :

  • nom du module
  • point
  • index du relais

Les relais gérés par le module gpio-1 sont donc nommés gpio-1.0 à gpio-1.7

Les relais gérés par le module mcp23017-1 sont nommés mcp23017-1.0 à mcp23017-1.15

Cette manière de procéder ajoute un niveau d'abstraction. Cela évite d'avoir à se préoccuper des N° physiques des GPIOs.

Ensuite, le relais pour la vanne principale (main) est décrit. Il utilise la voie gpio-1.0

La description des différentes zones d'irrigation occupe plusieurs sections :

  • [zones] donne la liste des zones
  • [massif1] se réserve les voies mcp23017-1.0 et mcp23017-1.1
  • [potager] se réserve les voies mcp23017-1.2 à mcp23017-1.5
  • etc.

7.1.1. Ajouter un module

Ajouter un module est relativement facile. Bien entendu deux modules ne peuvent porter le même nom.

Actuellement seuls les modules GPIO, MCP23008 et MCP23017 sont gérés. On pourrait facilement ajouter la gestion d'autres composants (PCF8574, PCF8575, 74HC595, etc.).

Deux modules I2C MCP23008 ou MCP23017 ne peuvent cohabiter sur la même adresse I2C. Il faudra donc configurer les modules pour qu'ils utilisent des adresses différentes, et utiliser les mêmes adresses dans la configuration.

Sur cette photo on voit comment configurer un module MCP23017 :

 

3 résistances 0Ω sont présentes en bas à droite (A0, A1, A2). Il faut déplacer les résistances en fonction de l'adresse désirée :

  • A0, A1, A2 à GND : 0x20
  • A0 à VCC, A1, A2 à GND : 0x21
  • A1 à VCC, A0, A2 à GND : 0x22
  • A0 et A1 à VCC, A2 à GND : 0x23

C'est binaire.

7.1.2. Ajouter un module sur GPIO

Il serait facile d'ajouter un deuxième module à 4 relais :

modules=gpio-1, gpio-2, mcp23017-1(0x20)
gpio-1=GPIO-L(4), GPIO-L(5), GPIO-L(13), GPIO-L(14), GPIO-L(15), GPIO-L(16), GPIO-L(17), GPIO-L(18)
gpio-2=GPIO-L(19), GPIO-L(23), GPIO-L(25), GPIO-L(26)

Pour rappel, seules les GPIO 4, 5, 13 à 19, 23, 25, 26, 27 de l'ESP32 sont utilisables.

7.1.3. Ajouter un module MCP23008

On pourrait ajouter également un module I2C MCP23008 à 8 relais :

modules=gpio-1, mcp23017-1(0x20), mcp23008-1(0x21)
gpio-1=GPIO-L(4), GPIO-L(5), GPIO-L(13), GPIO-L(14), GPIO-L(15), GPIO-L(16), GPIO-L(17), GPIO-L(18)
mcp23017-1=I2C-H(0-15)
mcp23008-1=I2C-H(0-7)

Le mcp23008-1 est déclaré à l'adresse I2C 0x21.

7.1.4. Ajouter un module MCP23017

On pourrait ajouter de la même façon un deuxième module I2C MCP23017 à 16 relais :

modules=gpio-1, mcp23017-1(0x20), mcp23017-2(0x21)
gpio-1=GPIO-L(4), GPIO-L(5), GPIO-L(13), GPIO-L(14), GPIO-L(15), GPIO-L(16), GPIO-L(17), GPIO-L(18)
mcp23017-1=I2C-H(0-15)
mcp23017-2=I2C-H(0-15)

Le deuxième module mcp23017-2 est déclaré à l'adresse I2C 0x21.

7.1.5. Modification de la configuration online

La configuration sera modifiable par une page WEB :

  • ajout de modules
  • affectation des voies aux différentes zones
  • horaires d'arrosage
  • etc.
Ces modifications seront enregistrées dans un deuxième fichier de configuration.

8. Librairies

Les librairies suivantes sont nécessaires :

https://github.com/yurilopes/SPIFFSIniFile

https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library

https://github.com/adafruit/Adafruit_BusIO

Elles sont installables depuis l'IDE ARDUINO. 

Dans ses dernières version (2.0.0 et suivantes) la librairie Adafruit-MCP23017-Arduino-Library gère le MCP23008 et le MCP23017, y compris les versions SPI MCP23S08 et le MCP23S17. Le sketch ne pourra pas être compilé avec les anciennes versions des librairies Adafruit-MCP23008-Arduino-Library et Adafruit-MCP23017-Arduino-Library.

9. Téléchargements

Pour télécharger le projet :

https://bitbucket.org/henri_bachetti/esp32-sprinkle-timer

Cette page vous donne toutes les informations nécessaires :

https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html

10. Conclusion

Ce nouveau projet est en cours d'étude. D'un point de vue matériel il est déjà suffisamment mature pour que l'on puisse s'en inspirer.

Du côté logiciel, tout ou presque reste à faire. Mais j'ai tout l'hiver pour le mener à terme.


Cordialement

Henri


jeudi 16 juin 2022

Contrôle de Niveau d'Eau Connecté

 

Contrôle de Niveau d'Eau Connecté

 

Dans un article précédent j'ai présenté la réalisation d'un surpresseur.

Ce surpresseur est alimenté en eau de pluie. Comme il est situé en cave, ainsi que les réservoirs, et qu'aucune possibilité d'évacuation du trop-plein n'est possible, j'ai décidé de lui adjoindre un circuit de contrôle du niveau dans le réservoir.

Ce circuit a trois fonctions :

  • pouvoir contrôler le niveau d'eau à distance
  • fermer ou ouvrir l'arrivée d'eau à l'aide d'une vanne motorisée
  • gestion du manque d'eau dans le réservoir

Le choix des réservoirs hors sol est motivé uniquement pas le coût beaucoup plus faible (120€ pour 1500 litres) et la facilité de mise en oeuvre, par rapport à une solution à base de cuve enterrée (300€ pour 1500 litres, sans les travaux).

Avec une cuve enterrée, en général, une évacuation du trop-plein est prévue, et le dispositif décrit ici n'a aucun intérêt, sauf bien sûr si l'on veut connaître le niveau d'eau sans avoir à soulever le couvercle.

Avant tout, dans tous les cas, la couverture WIFI à l'endroit où se trouve la cuve doit être vérifiée, car ce montage utilise un ESP8266 (WEMOS D1 MINI). Dans mon habitation, le système est en cave, et le niveau du signal est correct (-83dBm).

Si l'ESP8266 ne parvient pas à se connecter à la box, il est possible de le configurer en point d'accès avec un SSID de son choix, on pourra ainsi consulter le niveau en se connectant à ce SSID avec son téléphone.

Malgré la taille réduite de ce projet un certain nombre de sujets seront abordés :

    • mesure de distances à l'aide d'un capteur à ultrasons
    • implémentation d'un serveur WEB ASyncWebServer
      • utilisation des templates
      • servir un fichier JavaScript
      • servir des images
    • utiliser la classe Ticker
    • reconnexion automatique au réseau WIFI

Ce projet pourra également être utilisé pour mesurer la quantité de liquide restant dans une cuve quelconque, fioul par exemple.

1. Description

1.1. Le capteur

Il existe plusieurs possibilités :

1.1.1. Capteur à contact

On peut monter un ensemble de capteurs de niveau de ce type le long de la paroi de la cuve :

Cela implique pas mal de câblage si les capteurs sont nombreux.

1.1.2. Capteur de pression

On peut également utiliser un capteur de pression :

Mais la pression dans un réservoir d'eau est faible, environ 0.1 bar pour une hauteur de 1 mètre, difficilement mesurable, à moins de disposer d'un capteur ultra-sensible. L'autre inconvénient est qu'un capteur de ce type pourra difficilement être monté sur une cuve enterrée.

1.1.3. Capteur à ultrasons

Il reste une solution : le capteur à ultrasons, fixé sous le couvercle du réservoir. Il en existe plusieurs modèles :

1.1.3.1. HC-SR04

Celui-ci est le plus connu :

Capteur HC-SR04

Le problème est que la condensation sous le couvercle du réservoir est importante, et il serait étonnant qu'un capteur de ce type résiste bien longtemps. Mais on peut prévoir une rehausse suffisamment aérée pour qu'il ne souffre pas trop de l'humidité.

Ce capteur donne d'excellents résultats de mesure.

1.1.3.2. JSN-SR04T

En cherchant un peu j'ai découvert qu'il existe un modèle étanche, utilisé souvent comme capteur de distance pour fabriquer des radars de recul pour véhicule :

Capteur JSN-SR04T

Le capteur est déporté à l'aide d'un câble, et la carte électronique peut être installée au sec, à côté d'un ARDUINO ou d'un autre microcontrôleur.

Un des avantages de ce module est que l'on peut l'alimenter sous 3.3V ou 5V.

Il ne m'a pas donné satisfaction. Voir plus loin : 5. Essais

1.1.3.3. DYP-A02YY

Ce troisième modèle, étanche également, est aussi sur la liste des candidats :

Capteur DYP-A02YY

Le câble est court, il nécessitera une rallonge. Son prix est assez élevé, une vingtaine d'euros, par contre son fonctionnement est aussi satisfaisant que celui du HC-SR04.

1.2. Le microcontrôleur

Comme je désire pouvoir consulter facilement le niveau d'eau, le microcontrôleur choisi est une carte WEMOS D1 MINI, disposant du WIFI :

Le but est d'en faire un serveur WEB, consultable à distance.

A noter : le logiciel est petit et peut aisément se contenter de 1Mb de mémoire FLASH. Une WEMOS D1 MINI LITE suffit amplement.

1.3. La vanne

La vanne est un modèle motorisé :

Elle se commande à l'aide de trois fils, en 230V : 

  • jaune : neutre
  • bleu : ouverture
  • marron : fermeture

Pour ouvrir ou fermer il suffit d'appliquer du 230V sur le fil bleu ou marron pendant une dizaine de secondes.

Une vanne de ce type équipe déjà mon arrosage automatisé depuis plus de 5 ans. Je ne peux que constater sa grande fiabilité.

Elle est commandée par deux relais du type SONGLE SRD-05VDC-SL-C :

Bien entendu, si l'on a besoin d'une simple surveillance de niveau, sur une cuve enterrée par exemple, sans commande de vanne, la vanne et ses relais sont inutiles.

1.4. Sécurité

Afin d'apporter une sécurité supplémentaire, un capteur de niveau optionnel est installé en haut du réservoir :

 

Lorsque le niveau maximal est atteint, le contact ILS se ferme, et le microcontrôleur ferme la vanne.

Ici aussi, si l'on a besoin d'une simple surveillance de niveau, sur une cuve enterrée par exemple, ce capteur est inutile.

1.5. Gestion du manque d'eau

Lorsque le réservoir est presque vide, il faut éviter que le pressostat puisse enclencher la pompe, car celle-ci tournerait indéfiniment.

Cette gestion peut également être confiée à ce montage, qui est équipé d'un relais de coupure du surpresseur. Ce relais est bistable, car j'ai horreur de laisser une bobine de relais sous tension en permanence, pour des raisons de consommation et de dissipation calorique.

Le modèle choisi est un OMRON G5RL-K1A-E-5DC (SPST). On peut également adopter un OMRON G5RL-K1-E-5DC (SPDT), en coupant les pattes NF (contact Normalemant Fermé).

Cette gestion peut aussi être réalisée classiquement à l'aide d'un flotteur à bille, en série avec le surpresseur, donc de manière totalement indépendante :


Pour les personnes possédant un surpresseur du commerce, cette gestion est normalement assurée par celui-ci.

2. Le schéma

Celui-ci est assez simple :


Le schéma est réalisé à l'aide de KICAD.

Le choix des GPIOs n'est pas fait au hasard. Ni GPIO0 ni GPIO2 ne peuvent être utilisées pour le pilotage des relais, car si elles sont ramenées à GND par les résistances de base des transistors pendant le démarrage, l'ESP8266 ne démarrera pas :

https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/

La carte accepte les trois modules JSN-SR04T, DYP-A02YY et HC-SR04.

Le connecteur du module JSN-SR04T est directement implanté sur la carte. Il sera donc relié à son capteur à l'aide du câble livré (longueur 2m). Il est alimenté sous 3.3V. Mais comme dit plus haut, ce capteur n'est pas assez fiable. Je conserve tout de même cette possibilité, au cas où une version plus fiable soit mise sur le marché.

Le module HC-SR04 ou DYP-A02YY est raccordé via un câble à 4 fils sur le connecteur J1. Il est alimenté sous 5V et un pont diviseur R5/R6 abaisse le signal ECHO à 3.3V, pour qu'il soit acceptable sans problème par l'ESP8266.

Les relais K1 et K2 permettent l'ouverture et la fermeture de la vanne. Le relais K3 permet de couper le surpresseur au cas où le niveau d'eau est trop bas. Il s'agit d'un relais bistable 16A, qui devrait être suffisant pour la majeure partie des pompes (3KW grand maxi).

Trois varistances 275V absorbent les surtensions éventuelles du moteur de la vanne et de la pompe.

Si l'on a besoin d'une simple surveillance de niveau, sur une cuve enterrée par exemple, sans commande de vanne, ni détecteur de niveau, il suffit de ne pas raccorder les relais et le capteur.

2.1. La réalisation avec PCB

Si l'on désire réaliser le PCB fourni dans le dossier KICAD, celui-ci intègre une alimentation HI-LINK HLK-PM01 5V d'une puissance de 3W, très courante : 3.50€ sur AliExpress :

La carte est étudiée pour être logée dans un boîtier pour rail DIN KRADEX Z110 :


Mais on peut utiliser n'importe quel boîtier ayant des dimensions intérieures d'au moins 100mm x 100mm.

2.2. La réalisation sans PCB

Pour une réalisation sans PCB, on peut adopter une alimentation USB fiable et la relier au connecteur USB de la D1 MINI :

MeanWell SGA12E05-USB 5V 2.4A

On pourra remplacer les 2 relais et leurs transistors de commande par un module du commerce :

 

Par contre il sera difficile de trouver un module relais bistable pour la gestion du manque d'eau. Il est facile d'en réaliser un :

Modules à relais DIY

Voir le paragraphe 3.2.1. Module relais bistable double bobine

Les connexions 230V, vanne, surpresseur et capteur pourront être réalisées en utilisant un bloc DOMINO ou un bornier à vis, qui pourront aussi accueillir les varistances :

Le module capteur et les modules relais peuvent être reliés à la D1 MINI par des fils DUPONT. Ce n'est certainement pas la solution la plus fiable, mais si l'on vérifie bien la bonne tenue des fils sur les connecteurs, elle peut l'être.

3. L'IDE ARDUINO

Il faut bien entendu installer le package ESP8266, si ce n'est pas déjà fait : 

https://arduino-esp8266.readthedocs.io/en/latest/installing.html

Ensuite il faudra installer les librairies suivantes :

ESPAsyncWebServer : https://github.com/me-no-dev/ESPAsyncWebServer 

NewPingESP8266 : https://github.com/jshaw/NewPingESP8266.git

Pour récupérer le projet voir plus bas :  7. Téléchargements.

4. Le code

Le code se compose de 6 fichiers :
  • commande de la vanne : valve.cpp + valve.h
  • mesure de distance : jsnsr04t.cpp.cpp + jsnsr04t.cpp.h
  • affichage à la console: debug.h
  • l'application : level-control.ino

4.1. AsyncWebServer

L'unique page HTML est créée non pas à l'aide de lignes de code, ni à l'aide d'une chaîne de caractères constante, comme on le voit souvent, mais à l'aide d'un fichier HTML stocké dans le système de fichiers SPIFFS. Ce fichier comporte des balises %VOLUME%, %REMAIN%, %VALVE% (volume total, volume restant, état de la vanne), qui seront remplacées par leur valeur par un template processor. Cet outil est fourni par le serveur AsyncWebServer.

Voici le template processor :

String templateProcessor(const String& var)
{
  if (var == "BOOT") {
    return timeBuffer;
  }
  if (var == "CONNECTIONS") {
    return String(connections);
  }
  if (var == "VOLUME") {
    return String(TOTAL_VOLUME);
  }
  if (var == "RSSI") {
    return String(WiFi.RSSI());
  }
  if (var == "REMAIN") {
    return String((int)remainingVolume);
  }
  if (var == "VALVE") {
    return valve.state() == IS_OPEN || valve.state() == IS_OPENING ? "/open.jpg" : "/closed.jpg";
  }
  return "";
}

Et voici le handler traitant l'URL principale :

  server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
    request->send(SPIFFS, "/index.html", "text/html", false, templateProcessor);
  });

Une seule ligne de code permet d'indiquer au serveur que la page /index.html située dans le système de fichiers SPIFFS doit être renvoyée au client, en la traitant au préalable à l'aide de la fonction templateProcessor().

Quand on a goûté aux templates il est difficile de s'en passer. On trouve beaucoup de tutoriels :

https://techtutorialsx.com/2018/07/22/esp32-arduino-http-server-template-processing/

4.2. Ticker

L'ouverture et la fermeture de la vanne motorisée dure une dizaine de secondes. Lorsque l'ouverture ou de fermeture est commandée, il faut activer un des deux relais pendant au moins dix secondes, avant de la désactiver.

Si cette temporisation est implémentée à l'aide de delay(), cela bloque le microcontrôleur pendant la durée de la temporisation, et le serveur WEB sera inaccessible. On pourrait envisager une implémentation à l'aide de millis(), mais cela implique d'appeler en boucle une fonction de surveillance du temps dans la fonction loop(). Ce n'est pas très élégant ni efficace, car cela mobilise une grande partie du temps CPU.

Nous allons voir comment coder cette temporisation de manière élégante à l'aide d'un timer. Prenons comme exemple l'ouverture :

Ticker timer;

void Valve::open(void)
{
  log_printf(">>>> OPEN VALVE (valve is %s)\n", valveStateName[m_state]);
  if (m_state == IS_CLOSED) {
    m_state = IS_OPENING;
    digitalWrite(OPEN_PIN, HIGH);
    timer.attach(OPEN_TIME, changeState, this);
  }
}

  • si la vanne est dans l'état IS_CLOSED
    • l'état de la vanne est modifié : IS_OPENING
    • la sortie OPEN_PIN est activée (commande du relais)
    • un timer de 20 secondes est démarré en lui donnant comme argument la durée, l'adresse de la fonction à appeler, et l'adresse de l'objet concerné (this)
Lorsque le timer arrive à échéance la fonction changeState() est appelée :

void changeState(Valve *v)
{
  if (v->state() == IS_OPENING) {
    v->isOpen();
  }
  else if (v->state() == IS_CLOSING) {
    v->isClosed();
  }
  timer.detach();
}

  • la méthode isOpen() est appellée
  • le timer est désactivé

void Valve::isOpen(void)
{
  log_println(">>>> VALVE is OPEN");
  m_state = IS_OPEN;
  digitalWrite(OPEN_PIN, LOW);
}

  • l'état de la vanne est modifié : IS_OPEN
  • la sortie OPEN_PIN est désactivée

Avec un ESP8266, Ticker est une manière très élégante d'implémenter des temporisations efficaces, sans pour autant surveiller le temps à l'aide des techniques ARDUINO habituelles (delay, millis).

4.3. Reconnexion automatique

La reconnexion au réseau WIFI est automatique, grâce à la mise en place de handlers dans la fonction Setup() :

  stationConnectedHandler = WiFi.onStationModeConnected(onStationConnected);
  stationDisconnectedHandler = WiFi.onStationModeDisconnected(onStationDisconnected);
  stationGotIpHandler = WiFi.onStationModeGotIP(onStationGotIP);

Voir cet article :

ESP8266 & ESP32 : Connexion au Réseau WIFI

4.4. Personnalisation

Le sketch comporte un certain nombre de constantes :

#define TANKS           3       // number of tanks
#define TOTAL_VOLUME    1530    // total tank volume
#define MAX_VOLUME      1400    // maximal tank admitted volume
#define MIN_VOLUME      200     // minimal tank volume
#define TOTAL_HEIGHT    100.0   // height of the tank in cm
#define TOP_RADIUS      45.0    // tank's top radius in cm
#define BOTTOM_RADIUS   35.0    // tank's bottom radius in cm
#define MIN_DISTANCE    22.0    // distance between tank's top level and JSNSR04T in cm. must be > minimal JSNSR04T distance

TANKS représente le nombre de réservoirs, 3 dans mon cas.

TOTAL_VOLUME est le volume total des réservoirs.

MAX_VOLUME est le volume d'eau maximal admis.

MIN_VOLUME est le volume d'eau minimal en dessous duquel il faut couper le surpresseur.

TOTAL_HEIGHT est la hauteur d'un réservoir.

TOP_RADIUS est le rayon supérieur du réservoir.

BOTTOM_RADIUS est le rayon inférieur du réservoir.

MIN_DISTANCE est la distance mesurée entre le capteur à ultrasons et la surface de l'eau, lorsque le réservoir est plein. S'il s'agit d'un JSN-SR04T elle ne peut être inférieure à 20cm, car c'est la distance minimale mesurable par ce capteur. Les autres capteurs acceptent une distance minimale de 2 à 3cm.

La mesure du volume d'eau est adaptée à des réservoirs coniques. Si l'on dispose d'un réservoir parallélépipédique, il suffit d'adapter le calcul effectué dans la fonction getVolume(). Toutes les dimensions sont exprimées en cm.

La fermeture de la vanne est ordonnée lorsque le volume d'eau est supérieur à MAX_VOLUME, et l'ouverture lorsque le volume d'eau est inférieur à 95% de MAX_VOLUME. Il s'agit d'un hystérésis, qui permet d'éviter de commander la vanne en boucle ouverture/fermeture si le niveau est aux alentours de la valeur de consigne, et donc de palier aux imprécisions de mesure.

Enfin, il faudra bien entendu remplacer les valeurs des variables ssid et password par ses propres identifiants d'accès au réseau WIFI :

const char* ssid = "........";
const char* password = "........";

4.5. Ressources WEB

Le projet comporte également un répertoire data, contenant un certain nombre de fichiers :

  • index.html : la page HTML
  • gauge.js : le code source de la jauge
  • open.jpg, close.jpg : les images

Ces ressources doivent être chargées dans la mémoire FLASH de l'ESP8266 à l'aide du menu "Outils/Sketch Data Upload".

Avant cela, si ce n'est pas déjà fait, il faut installer le plugin :
https://github.com/esp8266/arduino-esp8266fs-plugin

5. Essais

Un premier essai sur table permet de constater que l'on peut facilement mesurer une distance avec le capteur JSN-SR04T ou HC-SR04, et ceci avec le même code.

La mesure à l'aide du HC-SR04 s'avère beaucoup plus stable. D'autre part pour un objet situé à 30cm le JSN-SR04T annonce des valeurs aberrantes, ZÉRO ou supérieures à 2 mètres, de temps à autre. Mon exemplaire est-il défectueux ? C'est pour cette raison que les valeurs sont filtrées dans le code, seules les valeurs comprises entre 5cm et 150cm sont retenues.

La distance minimale mesurable par le JSN-SR04T est de 20cm. s'il est situé trop près de la surface de l'eau, la mesure sera égale à ZÉRO. Il faut donc pratiquer une ouverture de grand diamètre (15cm) dans le couvercle et surélever le capteur.

Après quelques heures de fonctionnement correct avec le JSN-SR04T, la distance mesurée est systématiquement ZÉRO. Je préfère abandonner le JSN-SR04T au profit du HC-SR04 ou du DYP-A02YY.

Capteur HC-SR04

La distance minimale mesurable par le HC-SR04 est de 2cm, moins problématique. Mais il faudra prévoir tout de même une rehausse bien aérée, afin qu'il ne soit pas trop exposé à l'humidité.

Il faudra probablement fabriquer un support adapté, avec deux trous de 11mm et le poser sur la rehausse, sans fermer celle-ci, afin d'éviter la condensation. Une application de vernis de tropicalisation est également conseillée.

Le DYP-A02YY, étanche, donne un résultat aussi bon que le HC-SR04. La distance de mesure minimale est de 3cm. C'est donc le capteur que j'ai choisi. Avantage supplémentaire : il n'aura pas besoin d'être rehaussé.

Pour le JSN-SR04T et le HC-SR04 j'ai utilisé une rehausse de 15cm de diamètre et de 12cm de longueur, et monté le capteur sur un support percé, posé sur cette rehausse. Comme le couvercle a une hauteur de 10cm, la distance entre le capteur et la surface de l'eau est donc de 22cm :

Sur une cuve enterrée, on fixera le capteur directement dans deux trous pratiqués dans le couvercle. En général l'ouverture d'accès est suffisamment haute et garantira une distance minimale de 50 à 60 cm entre le capteur et la surface de l'eau. Si ce n'est pas le cas il faudra également prévoir une rehausse.

Le problème avec une cuve enterrée est que certaines sont équipées d'un pré-filtre du type panier suspendu sous l'arrivée d'eau, dans l'ouverture d'accès, qui empêchera le passage des ultrasons. Si possible il vaut mieux déporter ce pré-filtre en amont, à côté de la cuve, afin de laisser l'ouverture d'accès libre.

6. Photos

Voici le montage que j'avais utilisé pour le JSN-SR04T. Une boîte de fromage blanc, en polyéthylène assez épais, sert de rehausse, après en avoir éliminé le fond. La rondelle découpée dans le couvercle est utilisée comme support pour le capteur. Il ne reste qu'à coller le tout, par exemple à la colle chaude :

Voici une photo du résultat sur le navigateur du smartphone :

A titre d'information, un objet JavaScript gauge est utilisé. Il provient de ce site :

https://www.cssscript.com/customizable-gauge-canvas/

Le fichier JavaScript gauge.js est déjà dans le dossier data du projet. Il n'y a aucun besoin de le télécharger.

Une image est affichée en dessous de la jauge, indiquant que la vanne est fermée. Une autre image sera affichée si elle est ouverte :

7. Téléchargements

Pour télécharger le projet : https://bitbucket.org/henri_bachetti/rainwater-tank

Cette page donne toutes les informations nécessaires :

https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html

Le projet contient un répertoire level-control, dans lequel se trouvent les dossiers KICAD et ARDUINO.

8. Conclusion

Ce petit système fonctionne parfaitement bien, et ceci pour un prix de revient relativement modique, surtout si l'on n'a pas besoin de vanne d'arrivée d'eau, ni de capteur de niveau, ni de relais de coupure du surpresseur.

Il ne reste plus qu'à réaliser le PCB et intégrer celui-ci dans un boîtier. Quelques photos seront publiées sous peu.

Dernier point : j'espère en avoir convaincu plus d'un qu'utiliser AsyncWebServer était un bon moyen d'économiser son temps.


Cordialement
Henri