{"id":745,"date":"2024-05-27T20:34:59","date_gmt":"2024-05-27T18:34:59","guid":{"rendered":"https:\/\/kev-it.fr\/?p=745"},"modified":"2024-05-27T20:34:59","modified_gmt":"2024-05-27T18:34:59","slug":"mesure-de-niveau-de-puits-v2","status":"publish","type":"post","link":"https:\/\/kev-it.fr\/index.php\/2024\/05\/27\/mesure-de-niveau-de-puits-v2\/","title":{"rendered":"Mesure de niveau de puits v2"},"content":{"rendered":"\n<p>Allez, on passe la seconde. On va directement passer sur un ESP8266 avec ESPHome pour une int\u00e9gration directe dans Home Assistant !<\/p>\n\n\n\n<p>J&rsquo;avais d\u00e9j\u00e0 fabriqu\u00e9, il y a quelques ann\u00e9es un capteur pour mesurer le niveau de mon puits. C&rsquo;\u00e9tait une premi\u00e8re version, bas\u00e9e sur un arduino, un module NRF24 et programm\u00e9 avec la librairie MySensors. Pour ceux qui n&rsquo;ont pas encore lu le premier article, c&rsquo;est ici : <a href=\"https:\/\/kev-it.fr\/xkkq\">Mesure de niveau pour puits<\/a>. Depuis, je suis pass\u00e9 \u00e0 Home Assistant, et avec lui ESPHome. J&rsquo;ai donc bascul\u00e9 des Arduino aux ESP8266 et au no-code &#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Expression de besoin<\/h2>\n\n\n\n<p>Ici rien ne change. On veux mesurer le niveau d&rsquo;un puit. On en profite pour relever la temp\u00e9rature et l&rsquo;humidit\u00e9 de la pi\u00e8ce au passage (qui peut le plus peut le moins :)).<br>Par contre les nouveaux besoins sont :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pas de programmation \u00e0 faire. Le C++ c&rsquo;est vraiment pas mon fort. Je devais avoir des fuites m\u00e9moires car j&rsquo;avais des plantages r\u00e9guliers<\/li>\n\n\n\n<li>Int\u00e9gration directe dans Home Assistant<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Solution technique<\/h2>\n\n\n\n<p>Sur la partie capteur aucun changement :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mesure du niveau \u00e0 l&rsquo;aide d&rsquo;un capteur de pression : <a href=\"http:\/\/www.nxp.com\/files\/sensors\/doc\/data_sheet\/MPX5700.pdf\">MPX5700AP<\/a><\/li>\n\n\n\n<li>Temp\u00e9rature et humidit\u00e9 avec un AM2302 (\u00e7a tombe bien, j&rsquo;en ai en stock)<\/li>\n<\/ul>\n\n\n\n<p>Pour la partie compute, on passe d&rsquo;un arduino \u00e0 un Wemos D1. Il s&rsquo;agit d&rsquo;un ESP8266 courant, peu cher et facile \u00e0 int\u00e9grer sur le circuit. En fait n&rsquo;importe quel appareil support\u00e9 par ESPHome fera l&rsquo;affaire. L&rsquo;important \u00e9tant de disposer d&rsquo;une entr\u00e9e analogique pour le capteur de pression.<\/p>\n\n\n\n<p>Et pour la partie affichage, j&rsquo;ai abandonn\u00e9 l&rsquo;\u00e9cran LCD 2 ligne. Je ne le consultait jamais et il faisait un peu vieillot. Je vais le remplacer par des LED :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Led bleue pour le statut de connexion \u00e0 Home Assistant<\/li>\n\n\n\n<li>Led verte qui clignotera si le niveau est OK<\/li>\n\n\n\n<li>Led rouge qui clignotera si le niveau est trop bas<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Sch\u00e9ma \u00e9lectronique<\/h2>\n\n\n\n<p>J&rsquo;ai fait minimaliste : <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un \u00e9tage d&rsquo;alimentation pour avoir du 5V (pour le circuit) et du 3.3V (pour le capteur de pression)<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"344\" height=\"165\" src=\"https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/image-28.png\" alt=\"\" class=\"wp-image-746\" srcset=\"https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/image-28.png 344w, https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/image-28-300x144.png 300w\" sizes=\"auto, (max-width: 344px) 100vw, 344px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un circuit simple avec des connecteurs pour l&rsquo;alim et le capteur de pression.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"516\" height=\"720\" src=\"https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/image-30.png\" alt=\"\" class=\"wp-image-748\" srcset=\"https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/image-30.png 516w, https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/image-30-215x300.png 215w\" sizes=\"auto, (max-width: 516px) 100vw, 516px\" \/><\/figure>\n\n\n\n<p>Les seules choses \u00e0 retenir sont :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>le filtre RC appliqu\u00e9 sur le capteur de pression conform\u00e9ment \u00e0 sa documentation<\/li>\n\n\n\n<li>la r\u00e9sistance de pull-up sur l&rsquo;AM2302<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">PCB<\/h2>\n\n\n\n<p>Pour la cr\u00e9ation du PCB, rien de bien extraordinaire. J&rsquo;ai juste adapt\u00e9 la taille des pads et des pistes pour la fabrication par une CNC3018 (<a href=\"https:\/\/kev-it.fr\/cma7\">voir les param\u00e8tres que j&rsquo;utilise<\/a>).<\/p>\n\n\n\n<p>J&rsquo;ai int\u00e9gr\u00e9 les contraintes suivantes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>les leds et leurs r\u00e9sistances en CMS pour simplifier la mise dans un boitier<\/li>\n\n\n\n<li>une encoche pour le capteur de temp\u00e9rature afin qu&rsquo;il soit \u00e0 l&rsquo;ext\u00e9rieur du boitier pour limiter le biais<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"887\" height=\"665\" src=\"https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/image-31.png\" alt=\"\" class=\"wp-image-749\" srcset=\"https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/image-31.png 887w, https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/image-31-300x225.png 300w, https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/image-31-768x576.png 768w\" sizes=\"auto, (max-width: 887px) 100vw, 887px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Circuit Assembl\u00e9<\/h2>\n\n\n\n<p>Ce n&rsquo;est pas du grand art, mais \u00e7a fait d\u00e9j\u00e0 plus pro que les plaques d&rsquo;essai o\u00f9 tu soudes fils \u00e0 travers tout \ud83d\ude42<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/IMG_0457-768x1024.jpg\" alt=\"\" class=\"wp-image-751\" srcset=\"https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/IMG_0457-768x1024.jpg 768w, https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/IMG_0457-225x300.jpg 225w, https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/IMG_0457-1152x1536.jpg 1152w, https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/IMG_0457-1536x2048.jpg 1536w, https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/IMG_0457-1024x1365.jpg 1024w, https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/IMG_0457-scaled.jpg 1920w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/IMG_0458-768x1024.jpg\" alt=\"\" class=\"wp-image-752\" srcset=\"https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/IMG_0458-768x1024.jpg 768w, https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/IMG_0458-225x300.jpg 225w, https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/IMG_0458-1152x1536.jpg 1152w, https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/IMG_0458-1536x2048.jpg 1536w, https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/IMG_0458-1024x1365.jpg 1024w, https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/IMG_0458-scaled.jpg 1920w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Boitier<\/h2>\n\n\n\n<p>Pour le boitier, j&rsquo;ai utilis\u00e9 Fusion 360. J&rsquo;ai longtemps utilis\u00e9 Tinkercad, mais je pr\u00e9f\u00e8re le rendu de Fusion:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>TinkerCad<\/strong> permet de d\u00e9marrer tr\u00e8s vite et de faire des choses simple tr\u00e8s rapidement, mais on se retrouve vite \u00e0 gal\u00e9rer avec les placement et les mesures lorsqu&rsquo;on int\u00e8gre des couvercles et des encoches.<\/li>\n\n\n\n<li><strong>Fusion 360<\/strong> demande un gros effort pour comprendre la logique de l&rsquo;outil et la mani\u00e8re de s&rsquo;en servir, mais pass\u00e9 ce cap : les choses qui semblaient insurmontables avec TinkerCad deviennent facile.<\/li>\n<\/ul>\n\n\n\n<p>Apr\u00e8s, chacun sa pr\u00e9f\u00e9rence, je ne juge pas \ud83d\ude09<\/p>\n\n\n\n<p>Note : Fusion 360 pour un usage perso est gratuit. Il a bien des limitation, mais que je n&rsquo;ai jamais atteintes avec mon utilisation.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"648\" src=\"https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/image-32-1024x648.png\" alt=\"\" class=\"wp-image-759\" srcset=\"https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/image-32-1024x648.png 1024w, https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/image-32-300x190.png 300w, https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/image-32-768x486.png 768w, https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/image-32.png 1398w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">ESPHome<\/h2>\n\n\n\n<p>On arrive aux choses int\u00e9ressantes. On a un circuit, il faut quand m\u00eame que \u00e7a fonctionne.<\/p>\n\n\n\n<p>Dans Home Assistant, on peut aller dans la section ESPHome et cr\u00e9er un nouvel appareil. Une fois fait, on peut connecter le nodeMCU en USB et uploader la premi\u00e8re fois le firmware. Les fois suivantes, on pourra pousser les mises \u00e0 jour par le Wifi (OTA). Ah, c&rsquo;est beau la technologie &#8230;<\/p>\n\n\n\n<p>Le fichier de configuration est plut\u00f4t parlant, mais les points \u00e0 noter sont:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>J&rsquo;ai un capteur qui lit l&rsquo;entr\u00e9e analogique et calcule la hauteur d&rsquo;eau du puit en se basant sur la formule fournie dans la documentation du MPX. J&rsquo;ai juste ajout\u00e9 la variable \u00ab\u00a0offset\u00a0\u00bb pour calibrer le niveau z\u00e9ro (avant de plonger le capteur)<\/li>\n\n\n\n<li>J&rsquo;ai capteur fictif (template) qui calcule taux de remplissage du puit en pourcentage (par rapport \u00e0 mon installation) et qui d\u00e9finit le statut (composant \u00ab\u00a0select\u00a0\u00bb) : OK, Low, Out of range<\/li>\n\n\n\n<li>J&rsquo;utilise le composant \u00ab\u00a0interval\u00a0\u00bb pour faire clignoter les Led selon la valeur du statut.<\/li>\n<\/ol>\n\n\n\n<p>Et voici le fichier YAML de mon module<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\n esphome:\n  name: buanderie\n  platform: ESP8266\n  board: d1_mini_pro\n  on_boot: \n    then:\n      - switch.turn_off: led_critical\n      - switch.turn_off: led_heartbeat\n\n# Enable logging\nlogger:\n\n# Enable Home Assistant API\napi:\n\nota:\n  password: &quot;***********************************&quot;\n\nwifi:\n  ssid: !secret wifi_ssid\n  password: !secret wifi_password\n  \n  # Enable fallback hotspot (captive portal) in case wifi connection fails\n  ap:\n    ssid: &quot;Buanderie Fallback Hotspot&quot;\n    password: &quot;*********************&quot;\n\ncaptive_portal:\n\nstatus_led:\n  pin: D5\n\nsensor:\n  - platform: dht\n    pin: D3\n    model: AM2302\n    temperature:\n      name: &quot;Temperature Buanderie&quot;\n      id: temp\n    humidity:\n      name: &quot;Humidit\u00e9 Buanderie&quot;\n      id: hum\n    update_interval: 30s\n  - platform: adc\n    pin: A0\n    name: &quot;Niveau puit&quot;\n    update_interval: 5s\n    id: puits_level\n    filters:\n      - sliding_window_moving_average:\n          window_size: 6\n          send_every: 6\n      - lambda: |-\n          auto offset=0.33;\n          id(puits_level).state = ((((x - 0.04) \/ 0.0012858)- 100)\/10) - offset;\n          id(puit_perc).update();\n          return ((((x - 0.04) \/ 0.0012858)- 100)\/10) - offset;\n    unit_of_measurement: &quot;M&quot;\n    state_class: &quot;measurement&quot;\n    accuracy_decimals: 2\n  - platform: template\n    name: &quot;Remplissage puit&quot;\n    id: puit_perc\n    unit_of_measurement: &quot;%&quot;\n    state_class: &quot;measurement&quot;\n    accuracy_decimals: 0\n    update_interval: 5s\n    lambda: |-\n      auto limitMax=2.9;\n      auto limitLow=0.3;\n      auto call = id(level_status).make_call();\n      if ((id(puits_level).state &lt; limitLow) &amp;&amp; (id(puits_level).state &gt;0)) { \n        call.set_option(&quot;Low&quot;);\n      } else if ((id(puits_level).state &gt;= limitLow) &amp;&amp; (id(puits_level).state &lt;limitMax)) { \n        call.set_option(&quot;OK&quot;);\n      } else { \n        call.set_option(&quot;Out of Range&quot;);\n      }\n      call.perform();\n      return id(puits_level).state * 100 \/ limitMax;\n\nbinary_sensor:\n  - platform: template\n    id: led_alert\n    name: Alerte niveau bas\n\nselect:\n  - platform: template\n    id: level_status\n    name: level_status\n    options: \n      - &quot;OK&quot;\n      - &quot;Low&quot;\n      - &quot;Out of Range&quot;\n    initial_option: &quot;Out of Range&quot;\n    optimistic: true\n\n\nswitch:\n  - id: led_critical\n    platform: gpio\n    pin: D7\n    internal: True\n  - id: led_heartbeat\n    platform: gpio\n    pin: D6\n    internal: True\n\ninterval:\n  - interval: 1s\n    then:\n      - lambda: |-\n          if (id(level_status).state == &quot;OK&quot;) {\n            if (id(led_heartbeat).state) { id(led_heartbeat).turn_off(); } else { id(led_heartbeat).turn_on(); }\n            id(led_critical).turn_off();\n          } else if (id(level_status).state == &quot;Low&quot;) {\n            if (id(led_critical).state) { id(led_critical).turn_off(); } else { id(led_critical).turn_on(); }\n            id(led_heartbeat).turn_off();\n          } else {\n            if (id(led_heartbeat).state) { \n              id(led_heartbeat).turn_off(); \n              id(led_critical).turn_on(); \n            } else { \n              id(led_heartbeat).turn_on(); \n              id(led_critical).turn_off(); \n            }\n          }\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>J&rsquo;esp\u00e8re que cet article vous aura plu &#8230; et surtout inspir\u00e9 pour de nouvelles r\u00e9alisations !<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"240\" height=\"300\" src=\"https:\/\/kev-it.fr\/wp-content\/uploads\/2024\/05\/niveauPuitsV2.gif\" alt=\"\" class=\"wp-image-761\"\/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Allez, on passe la seconde. On va directement passer sur un ESP8266 avec ESPHome pour une int\u00e9gration directe dans Home Assistant ! J&rsquo;avais d\u00e9j\u00e0 fabriqu\u00e9, il y a quelques ann\u00e9es un capteur pour mesurer le niveau de mon puits. C&rsquo;\u00e9tait une premi\u00e8re version, bas\u00e9e sur un arduino, un module NRF24 et programm\u00e9 avec la librairie [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[36,50,45,46,51],"class_list":["post-745","post","type-post","status-publish","format-standard","hentry","category-electronique","tag-electronique","tag-esp8266","tag-esphome","tag-home-assistant","tag-mpx5700ap"],"_links":{"self":[{"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/posts\/745","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/comments?post=745"}],"version-history":[{"count":5,"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/posts\/745\/revisions"}],"predecessor-version":[{"id":762,"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/posts\/745\/revisions\/762"}],"wp:attachment":[{"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/media?parent=745"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/categories?post=745"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kev-it.fr\/index.php\/wp-json\/wp\/v2\/tags?post=745"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}