{"id":9489,"date":"2023-01-04T18:29:05","date_gmt":"2023-01-04T17:29:05","guid":{"rendered":"https:\/\/fablab21.fr\/?page_id=4708"},"modified":"2026-10-19T19:00:51","modified_gmt":"2026-10-19T17:00:51","slug":"irrigation-automatique","status":"publish","type":"page","link":"https:\/\/www.association-ore.fr\/fr\/tutos\/jardin-connecte\/irrigation-automatique\/","title":{"rendered":"Irrigation automatique"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Syst\u00e8me d&#039;irrigation automatique<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Montage Arduino<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Montage complet<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.association-ore.fr\/fr\/wp-content\/uploads\/2023\/01\/irrigation-auto.png\" alt=\"\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Principe<\/h4>\n\n\n<p>L&rsquo;irrigation<strong> est d\u00e9clench\u00e9e de deux fa\u00e7ons diff\u00e9rentes.<\/strong><br \/>Dans un premier temps, en utilisant un <strong>bouton<\/strong>.<br \/>Dans un deuxi\u00e8me temps, en utilisant un <strong>capteur d&rsquo;humidit\u00e9 du sol<\/strong>. Nous prenons comme seuil de d\u00e9clenchement une valeur de 30% d&rsquo;humidit\u00e9. La pompe \u00e0 eau se mettra donc en marche pour une valeur d&rsquo;humidit\u00e9 du sol inf\u00e9rieure \u00e0 30%.<br \/><br \/><\/p><p>Le d\u00e9clenchement de la pompe \u00e0 eau se fait par l&rsquo;interm\u00e9diaire d&rsquo;un relai. <br \/>lorsque celui-ci est en <strong>\u00e9tat haut (HIGH)<\/strong>, la pompe \u00e0 eau <strong>se met en marche.<br \/><\/strong>lorsque celui-ci est en<strong> \u00e9tat bas (LOW)<\/strong>, la pompe \u00e0 eau <strong>s&rsquo;<\/strong><b>arr\u00eate<\/b>.<strong><br \/><\/strong><\/p>\n\n\n<h3 class=\"wp-block-heading\">Les diff\u00e9rents composants utilis\u00e9s<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Une platine de connexion<\/h4>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.association-ore.fr\/fr\/wp-content\/uploads\/2023\/01\/breadboard.png\" alt=\"\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Un microcontr\u00f4leur &#8211; esp8266<\/h4>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.association-ore.fr\/fr\/wp-content\/uploads\/2023\/01\/esp8266.png\" alt=\"\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Un microcontr\u00f4leur &#8211; esp8266<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">Un capteur d&#039;humidit\u00e9 du sol<\/h4>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.association-ore.fr\/fr\/wp-content\/uploads\/2023\/01\/moisture.png\" alt=\"\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Un relai<\/h4>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.association-ore.fr\/fr\/wp-content\/uploads\/2023\/01\/relai-srd.png\" alt=\"\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Une pompe \u00e0 eau<\/h4>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.association-ore.fr\/fr\/wp-content\/uploads\/2023\/01\/water-pump.png\" alt=\"\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Un bouton<\/h4>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.association-ore.fr\/fr\/wp-content\/uploads\/2023\/01\/btn.png\" alt=\"\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Le code<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">D\u00e9clenchement de l&#039;irrigation \u00e0 partir d&#039;un bouton<\/h3>\n\n\n<p>Le montage Arduino correspond au montage complet pr\u00e9sent\u00e9 au <a href=\"#montage-complet\"><span><strong>d\u00e9but du tutoriel<\/strong><\/span><\/a>\u00a0<strong>sans le capteur d&rsquo;humidit\u00e9<\/strong>.<\/p>\n\n<p>Les deux premi\u00e8res lignes de code correspondent \u00e0 la d\u00e9claration des pins de l&rsquo;esp8266 sur lesquels sont branch\u00e9s le bouton et le relai. Ces 2 composants doivent \u00eatre branch\u00e9s sur un port digital (D1, D2, D3 &#8230;) du microcontr\u00f4leur.<br \/>Attention, dans le code, il ne faut pas entrer le num\u00e9ro du pin mais son \u00e9quivalent que vous trouverez en cliquant sur le lien suivant\u00a0<a href=\"https:\/\/images.app.goo.gl\/Gppz7Px9NKETdNiS9\" target=\"_blank\" rel=\"noopener\">GPIO ESP8266<\/a>.\u00a0<\/p><p>Au final :<br \/>Le bouton est branch\u00e9 sur le pin D2 correspondant \u00e0 <b>4<\/b> dans le code Arduino -&gt; cable <b>vert<\/b> sur le <b>montage complet <\/b>vu au <a href=\"#montage-complet\"><span><strong>d\u00e9but du tutoriel<\/strong><\/a><\/span>.<br \/>Le relai est branch\u00e9 sur le pin D4 correspondant \u00e0 <b>2<\/b> dans le code Arduino -&gt; cable <strong>violet\u00a0<\/strong>sur le <b>montage complet<\/b>\u00a0vu au <a href=\"#montage-complet\"><span><strong>d\u00e9but du tutoriel<\/strong><\/a>.<\/span><\/p>\n\n<pre onmousedown=\"return false\" onselectstart=\"return false\"><code>\n#define btnPin 4\n#define relayPin 2 \n\nvoid setup() {\n\n}\n\nvoid loop() {\n\n}\n<\/code><\/pre>\n\n<p>Dans la fonction setup(), nous rajoutons 2 lignes permettant de d\u00e9clarer le bouton en <b>INPUT_PULLUP\u00a0<\/b>(le microcontr\u00f4leur re\u00e7oit une information envoy\u00e9e par le bouton) et le relai en <strong>OUTPUT<\/strong> (Le microcontr\u00f4leur envoie une information au relai).<br \/>Le mode du bouton est d\u00e9clar\u00e9 en INPUT_PULLUP et non en INPUT pour nous \u00e9viter de rajouter une r\u00e9sistance et d&rsquo;utiliser celle int\u00e9gr\u00e9e \u00e0 cet effet dans le microcontr\u00f4leur. Dans cette configuration, l&rsquo;\u00e9tat du bouton est \u00e0 l&rsquo;\u00e9tat bas (valeur <b>0<\/b>) lorsqu&rsquo;il est appuy\u00e9 et \u00e0 l&rsquo;\u00e9tat haut (valeur <b>1<\/b>) lorqu&rsquo;il est relach\u00e9.<\/p>\n\n<pre onmousedown=\"return false\" onselectstart=\"return false\"><code>\n#define btnPin 4\n#define relayPin 2 \n\nvoid setup() {\n  pinMode(btnPin, INPUT_PULLUP);\n  pinMode(relayPin, OUTPUT);\n}\n\nvoid loop() {\n  \n}\n<\/code><\/pre>\n\n<p>Nous d\u00e9clarons \u00e0 l&rsquo;aide des 3 lignes suppl\u00e9mentaires ins\u00e9r\u00e9es avant la fonction setup(), l&rsquo;\u00e9tat du relai et du bouton. 2 \u00e9tats pour le bouton sont n\u00e9cessaires afin de d\u00e9tecter un appui sur celui-ci.<\/p>\n\n<div onmousedown=\"return false\" onselectstart=\"return false\">\n<pre><code>\n#define btnPin 4\n#define relayPin 2 \n\nbool oldBtnState;\nbool btnState;\nbool relayState = 0;\n\nvoid setup() {\n  pinMode(btnPin, INPUT_PULLUP);\n  pinMode(relayPin, OUTPUT);\n}\n\nvoid loop() {\n  \n}\n<\/code><\/pre>\n<\/div>\n\n<p>Ensuite, les 2 lignes ins\u00e9r\u00e9es dans la fonction loop() nous permettent de d\u00e9tecter un appui sur le bouton en comparant les 2 variables\u00a0 oldBtnState et btnState.<\/p><p>La fonction digitalRead(btnPin) nous sert \u00e0 lire l&rsquo;\u00e9tat du bouton (<b>0<\/b> ou <b>1<\/b> comme vu pr\u00e9c\u00e9demment).\u00a0<\/p>\n\n<div onmousedown=\"return false\" onselectstart=\"return false\">\n<pre><code>\n#define btnPin 4\n#define relayPin 2 \n\nbool oldBtnState;\nbool btnState;\nbool relayState = 0;\n\nvoid setup() {\n  pinMode(btnPin, INPUT_PULLUP);\n  pinMode(relayPin, OUTPUT);\n}\n\nvoid loop() {\n  oldBtnState = btnState;\n  btnState = digitalRead(btnPin);\n}\n<\/code><\/pre>\n<\/div>\n\n<p>Le reste du code permet de changer l&rsquo;\u00e9tat du relai lors d&rsquo;un appui sur le bouton. L&rsquo;\u00e9tat ne change <strong>que lorsque le bouton est appuy\u00e9.\u00a0<\/strong>Il ne doit pas changer lorsque le bouton est rel\u00e2ch\u00e9 (condition<em> if (btnState == 0)<\/em>).<\/p>\n\n<div onmousedown=\"return false\" onselectstart=\"return false\">\n<pre><code>\n#define btnPin 4\n#define relayPin 2 \n\nbool oldBtnState;\nbool btnState;\nbool relayState = 0;\n\nvoid setup() {\n  pinMode(btnPin, INPUT_PULLUP);\n  pinMode(relayPin, OUTPUT);\n}\n\nvoid loop() {\n  oldBtnState = btnState;\n  btnState = digitalRead(btnPin);\n\n  if (btnState != oldBtnState) {\n    if (btnState == 0) {\n      relayState = !relayState;\n      digitalWrite(relayPin, relayState);\n    }\n  }\n\n  delay(300);\n}\n\n<\/code><\/pre>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">D\u00e9clenchement de l&#039;irrigation \u00e0 partir du capteur d&#039;humidit\u00e9 du sol<\/h3>\n\n\n<p>Le montage Arduino correspond au montage complet pr\u00e9sent\u00e9 au <a href=\"#montage-complet\"><strong>d\u00e9but du tutoriel<\/strong><\/a> <strong>sans le bouton.<\/strong><\/p>\n\n<p>Les deux premi\u00e8res lignes de code correspondent \u00e0 la d\u00e9claration des pins de l&rsquo;esp8266 sur lesquels sont branch\u00e9s le capteur d&rsquo;humidit\u00e9 et le relai. Le relai est branch\u00e9 sur un port digital (D1, D2, D3 &#8230;) et le capteur sur le port analogique AO du microcontr\u00f4leur.<br \/>Comme indiqu\u00e9 pr\u00e9c\u00e9demment, pour le port digital, il ne faut pas entrer le num\u00e9ro du pin mais son \u00e9quivalent que vous trouverez en cliquant sur le lien suivant <strong><a href=\"https:\/\/images.app.goo.gl\/Gppz7Px9NKETdNiS9\" target=\"_blank\" rel=\"noopener\">GPIO ESP8266<\/a><\/strong>.\u00a0<\/p><p>\u00a0<\/p><p>Au final :<br \/>Le relai est branch\u00e9 sur le pin D4 correspondant \u00e0 <strong>2<\/strong> dans le code Arduino -&gt; cable <b>violet<\/b>\u00a0sur le <b>montage complet <\/b>vu au <a href=\"#montage-complet\"><span><strong>d\u00e9but du tutoriel<\/strong><\/a><\/span>.<br \/>Le capteur d&rsquo;humidit\u00e9 est branch\u00e9 sur le pin <strong>A0<\/strong>\u00a0dans le code Arduino -&gt; cable <strong>jaune <\/strong>sur le <b>montage complet<\/b>\u00a0vu <span>au <a href=\"#montage-complet\"><span><span><strong>d\u00e9but du tutoriel<\/strong><\/span><\/a><\/span>.<\/span><\/p>\n\n<div onmousedown=\"return false\" onselectstart=\"return false\">\n<pre><code>\n#define moisturePin A0\n#define relayPin 2 \n\nvoid setup() {\n\n}\n\nvoid loop() {\n  \n}\n<\/code><\/pre>\n<\/div>\n\n<p>Dans la fonction setup(), nous rajoutons la ligne permettant de d\u00e9clarer le relai en <b>OUTPUT <\/b>(le microcontr\u00f4leur envoie une information au relai).<\/p>\n\n<div onmousedown=\"return false\" onselectstart=\"return false\">\n<pre><code>\n#define moisturePin A0\n#define relayPin 2 \n\nvoid setup() {\n  pinMode(moisturePin, INPUT);\n  pinMode(relayPin, OUTPUT);\n}\n\nvoid loop() {\n  \n}\n<\/code><\/pre>\n<\/div>\n\n<p>La nouvelle ligne de code saisie dans la fonction loop() nous sert \u00e0 calibrer notre capteur. Pour cela, nous utilisons la fonction <strong>map. <br \/><\/strong><\/p><p>Celle-ci prend 5 arguments.<\/p><ul><li>Le <strong>premier argument<\/strong>\u00a0(analogRead(moisturePin)) correspond \u00e0 la valeur renvoy\u00e9e par le capteur d&rsquo;humidit\u00e9.<\/li><li>Le <strong>deuxi\u00e8me argument<\/strong> est la valeur renvoy\u00e9e par le capteur lorsque celui-ci est plong\u00e9 dans l&rsquo;eau (<strong>4eme argument<\/strong> correspondant \u00e0 <strong>100<\/strong>% d&rsquo;humidit\u00e9).<\/li><li>Le <strong>troisi\u00e8me argument<\/strong> est la valeur renvoy\u00e9e par le capteur lorsque celui-ci est hors de l&rsquo;eau (<strong>5eme argument<\/strong> correspondant \u00e0 <strong>0<\/strong>% d&rsquo;humidit\u00e9).<\/li><\/ul>\n\n<p><strong>Calibrage du capteur d&rsquo;humidit\u00e9<\/strong><\/p><p>Pour calibrer le capteur d&rsquo;humidit\u00e9, il faut afficher dans le moniteur en s\u00e9rie la valeur renvoy\u00e9e par le capteur en entrant les lignes de codes suivantes :<\/p><p><strong>Dans la fonction setup()<br \/><\/strong>Serial.begin(9600);<\/p><p><strong>dans la fonction loop()<\/strong><br \/>Serial.println(analogRead(moisturePin));<br \/>delay(500);<\/p><p>La valeur affich\u00e9e dans le moniteur en s\u00e9rie lorsque le capteur est immerg\u00e9 dans l&rsquo;eau doit remplacer la valeur 280 dans le code ci-dessous.<br \/>La valeur affich\u00e9e dans le moniteur en s\u00e9rie lorsque le capteur est hors de l&rsquo;eau doit remplacer la valeur 640 dans le code ci-dessous.<\/p>\n\n<div onmousedown=\"return false\" onselectstart=\"return false\">\n<pre><code>\n#define moisturePin A0\n#define relayPin 2 \n\nvoid setup() {\n  pinMode(moisturePin, INPUT);\n  pinMode(relayPin, OUTPUT);\n}\n\nvoid loop() {\n  int moisture = map(analogRead(moisturePin), 280, 640, 100, 0);\n}\n<\/code><\/pre>\n<\/div>\n\n<p>Les derni\u00e8res lignes de code \u00e0 int\u00e9grer nous permettent de d\u00e9finir pour quelle valeur d&rsquo;humidit\u00e9 la pompe se d\u00e9clenchera.\u00a0<br \/>Litt\u00e9ralement, nous indiquons que si la temp\u00e9rature est inf\u00e9rieure ou \u00e9gale \u00e0 30% (if(moisture &lt;= 30%)), le relai se d\u00e9clenche (donc la pompe se met en marche) sinon (temp\u00e9rature strictement sup\u00e9rieure \u00e0 30%), la pompe s&rsquo;arr\u00eate.<\/p>\n\n<div onmousedown=\"return false\" onselectstart=\"return false\">\n<pre><code>\n#define moisturePin A0\n#define relayPin 2\n\nint humidityRate = 30; \n\nvoid setup() {\n  pinMode(moisturePin, INPUT);\n  pinMode(relayPin, OUTPUT);\n}\n\nvoid loop() {\n  int moisture = map(analogRead(moisturePin), 280, 640, 100, 0);\n  if (moisture &lt;= humidityRate) {\n    digitalWrite(relayPin, 1);\n  } else {\n    digitalWrite(relayPin, 0);\n  }\n\n  delay(300);\n}\n<\/code><\/pre>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Syst\u00e8me d&#039;irrigation automatique Montage Arduino Montage complet Principe L&rsquo;irrigation est d\u00e9clench\u00e9e de deux fa\u00e7ons diff\u00e9rentes.Dans un premier temps, en utilisant un bouton.Dans un deuxi\u00e8me [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":9472,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-tutoriel","meta":{"footnotes":""},"class_list":["post-9489","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.association-ore.fr\/fr\/wp-json\/wp\/v2\/pages\/9489","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.association-ore.fr\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.association-ore.fr\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.association-ore.fr\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.association-ore.fr\/fr\/wp-json\/wp\/v2\/comments?post=9489"}],"version-history":[{"count":1,"href":"https:\/\/www.association-ore.fr\/fr\/wp-json\/wp\/v2\/pages\/9489\/revisions"}],"predecessor-version":[{"id":11526,"href":"https:\/\/www.association-ore.fr\/fr\/wp-json\/wp\/v2\/pages\/9489\/revisions\/11526"}],"up":[{"embeddable":true,"href":"https:\/\/www.association-ore.fr\/fr\/wp-json\/wp\/v2\/pages\/9472"}],"wp:attachment":[{"href":"https:\/\/www.association-ore.fr\/fr\/wp-json\/wp\/v2\/media?parent=9489"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}