Arrosage de jardin automatisé avec une électrovanne et un Raspberry-Pi

Réalisation de l'installation d'un arrosage automatique pour jardin avec du matériel d'arrosage Gardena, une électrovanne et un Raspberry-Pi + carte PiFace.

Publié le 26/09/2018

Objectifs

Ce tutoriel permet de réaliser l'installation d'un arrosage automatique pour jardin avec du matériel d'arrosage Gardena, une électrovanne et un Raspberry-Pi + carte PiFace.

L'objectif est d'obtenir une automatisation de l'arrosage et une gestion de la consommation d'eau pour le jardin.

Ce tutoriel traite l'installation de l'électrovanne. La partie application gestion de consommation d'eau fera l'objet d'un autre tutoriel.

La source d'arrosage est un robinet de jardin avec une pression de 3 bar. Afin de connaitre le débit de l'installation, on réalisera une série de mesure au compteur pour connaitre ce dernier.

Les relais de la carte PiFace sont en charge de la mise sous tension de l'électrovanne, raccordée à un robinet de jardin. Les relais de la carte PiFace disposent d'une interface en python. On utilisera un script Python afin de piloter le relais.

On réalisera un boitier qui hébergera le RaspberryPi et les connexions vers les différents éléments.

L'exemple d'implantation choisis comprend une surface d'arrosage qui est composée de trois massifs en bandes.

L'installation comprend trois zones :

  • - Arrivée d'eau [extérieur]
  • - Surface arrosage [extérieur]
  • - Boitier de contrôle [intérieur]

1 - Liste du matériel

Bricolage

  • - Perceuse à percussion
  • - Outils multi-fonction Bosch PMF 250
  • - Mèche béton 6mm
  • - Mèche acier 4mm, 2mm
  • - Pince à dénuder
  • - Pince coupante
  • - Kit tourne vis iFixit
  • - Pince multi fonction plomberie
  • - Etaux

Arrosage

Ref Qte Nom Fournisseur Prix unit TTC Prix total TTC
 2Mamelon MM 26x34/20x27Leroy Merlin3,657,3
D39003Raccord rapide 13/15mmLeroy Merlin1,23,6
 3Nez robinet geolia 15x21 20x27Leroy Merlin1,54,5
8357-291Lot 2 robinets d'arret Ø 4.6 mmLeroy Merlin6,556,55
8329-291Lot 2 Tes Ø 16mmLeroy Merlin4,54,5
8324-291Lot 5 bouchons 13mm gardenaBricorama4,94,9
  Bobine fillasse  0
1365-294Lot 5 mircro-asperseurs 360°Leroy Merlin5,6922,76
8382-293Lot 2 jonctions L Ø 13mmLeroy Merlin3,8911,67
8333-202Lot 5 réducteurs T Ø 13/4.6mmLeroy Merlin7,4914,98
1350-201Tuyau micro conduit 15m Ø 4.6mmLeroy Merlin7,997,99
1346-261Tuyau polyethylène 15m Ø 13mmLeroy Merlin10,710,7
1355-201Centrale irrigation 1000l/hLeroy Merlin14,914,9
Gardena1Clé montageBricorama5,455,45
 1Tuyau arrosage souple 25 m Ø 15mmBricorama8,98,9
01.24VHP1Transformateur mural 220/24V ACArrosage Distribution40,140,1
02.590302Connexion étanche RainbirdArrosage Distribution2,55
"02.100DV
"1Electrovanne 100 DV 1'' F 24V RainbirdArrosage Distribution1515
Total    188,8

Fixations

Ref Qte Nom Fournisseur Prix unit TTC Prix total TTC
 1Lot 20 attache clipsable tube 16-20mm -cheville 6mmBricorama7,47,4
 125 chevilles grappes 6mmLeroy Merlin4,14,1
 130 boulons t cycl. fendue 3x16 zincLeroy Merlin3,173,17
 1Découpe chute plexi 210x170x80Leroy Merlin44
 2Raccord rapide 13/15mm bricoramaLeroy Merlin2,555,1
Total    23,77

Électricité

Ref Qte Nom Fournisseur Prix unit TTC Prix total TTC
 1Bobine 100m cable multi-brin 0.2mme44 électronique 12,9
 1Domino 0.5mmBricorama1,81,8
 2Boitier étanche IP 55 85x85x85Leroy Merlin1,162,32
 115m cable Ø 0.75mm paire multibrinsLeroy Merlin8,98,9
 1Boitier étanche IP 55 210x170x80Leroy Merlin14,2514,25
 1Gaine icta Ø 20mm noir 25mLeroy Merlin7,37,3
Total    47,47

Informatique

 
Ref Qte Nom Fournisseur Prix unit TTC Prix total TTC
1RaspberryPiKubii36,536,5
 1Alimentation Micro USB 5V 2.5A EU avec InterrupteurKubii8,98,9
 1Carte SD 16 GoKubii13,913,9
 1Carte extension PiFace Digital2Gotronic35,235,2
 2Cable reseau RJ45 5M , CAT 5E Kubii4,749,48
Total    103,98

Total global : 364,02 € TTC

2 - Installation

2.1 - Arrivée d'eau

fig. 1
  • 1 - Couper deux sections de tuyau d'arrosage Ø15mm d'une longueur permettant d'aller du robinet à l'électrovanne et de cette dernière vers le réducteur de pression.
  • 2 - Fixer le nez de robinet à l'arrivée d'eau.
  • 3 - Ajouter aux extrémités de tuyau d'arrosage coupés, des raccords rapides Ø15mm.
  • 4 - Enrouler de la filasse autour des filetages des mamelons pour assurer l'étanchéité des jointures.
  • 5 - Fixer les mamelons aux extrémités de l'électrovanne.
  • 6 - Fixer les nez de robinet aux extrémités des mamelons.
  • 7 - Fixer les raccord clips des tuyaux du robinet à l'électrovanne et de cette dernière vers le réducteur de pression.

À cette étape, on va effectuer un contrôle de fonctionnement de l'électrovanne en branchant un interrupteur après son alimentation.

Une fois le contrôle effectué, on peut passer à la phase de câblage de l'installation. On va poser un boitier de dérivation à proximité de l'électrovanne.

  • 1 - Effectuer les métrés pour la découpe du câblage et des gaines.
  • 2 - Passer le cable multi-brin Ø 0.75mm dans la gaine.
  • 3 - Poser le boitier de dérivation.
  • 4 - Dans le boitier, connecter les fils de l'électrovanne aux connecteurs étanches et relier au cable d'alimentation passé dans la gaine.
  • 5 - Fixer la gaine jusqu'à l'habitation à l'aide des fixations pour tubes et chevilles.

Remarque : L'électrovanne est alimentée par un courant alternatif d'une tension de 24V et une intensité de 0,3 A soit 7,2 VA. La section de cable la plus petite est de Ø 0,2 mm et supporte un courant une tension maxi : 60 V et un courant maxi : 4,3 A. Le relais de la carte Pi-Face sont largement dimensionné pour cette charge.

On va ensuite passer à l'installation de la surface d'arrosage.

2.2 - Surface arrosage

fig. 2
  • 1 - Réaliser les métrés de la surface afin de déterminer les sections de tuyaux à découper.
  • 2 - Raccorder les sections à l'aide de T et ajouter des bouchons aux extrémités.
  • 3 - Effectuer des trous dans le tuyaux Ø13mm avec l'outils Gardena pour y ajouter les asperseurs 360° dans les zones d'arrosage.
  • 4 - Raccorder la section principale au réducteur de pression.
  • 5 - Tester l'installation pour s'assurer du bon fonctionnement de l'ensemble.

2.3 - Boitier de contrôle

Le boitier de contrôle sera situé à l'intérieur de l'habitation et va héberger le RaspberryPi ainsi que la connexion à l'électrovanne.

2.3.1 - Montage du boitier de contrôle

On va fixer une plaque de plexiglas dans le boitier qui va servir de support au Raspberry-Pi.

Avant de réaliser le montage du boitier de contrôle, on va procéder à l'installation du RaspberryPi [cf. section 3].

Montage :

fig. 3
  • 1 - Réaliser une découpe de la plaque de plexiglas aux dimensions du boitier de contrôle.
  • 2 - Dessiner sur la plaque l'emplacement du Pi. On voit ici la présence d'un Arduino, qui aura le rôle d'interface avec des sondes orientées météo. La mise en place de celui-ci fera l'objet d'un autre tutoriel/
  • 3 - Faire des trous dans le boitier du Raspberry-Pi afin de le fixer à la plaque de fixation.
  • 4 - Connecter la carte PiFace sur le Raspberry-Pi.
  • 5 - Visser le RaspberryPi et l'Arduino à la plaque avec les vis, rondelles et écrous.
  • 6 - Visser la plaque au boitier de contrôle.
2.3.2 - RaspberryPi + PiFace / Électrovanne

Schéma de principe :

fig. 4

On utilisera le relais 0 (situé à gauche de la carte) de la PiFace. La phase de l'alimentation 24v sera reliée à la dernière borne à droite de la rangée de connexion des relais.

Important [sécurité] :

Le pilotage d'un effecteur depuis un système informatique induit une couche de complexité comparé à un interrupteur. Afin de parer à une panne qui engendrerait une inondation, l'alimentation de l'électrovanne est branchée sur un minuteur électromécanique [donc décorelé du SI]. Le minuteur définit les plages horaires d'alimentation de l'électrovanne. Donc si jamais l'ordre d'arrêt la vanne n'arrive pas à destination, le minuteur coupera cette dernière et limitera les dégâts.

Cette installation est destinée à un arrosage extérieur.

Schéma connexions :

fig. 5
2.3.3 - Fixation boitier de contrôle

    1 - Fixer le boitier de raccord.

    2 - Relier le cable d'alimentation de la gaine au boitier de raccord.

    3 - Relier la gaine du boitier de raccord au boitier de contrôle.

    4 - Connecter le Raspberry-Pi à son alimentations et port ethernet vers le switch.

3 - Installation Raspberry-Pi + Piface

Pour installer le RaspberryPi, il va être nécessaire de le connecter au préalable à un écran et un clavier.

  • 1 - Préparer l'installation de l'OS Raspbian Wheezy sur la carte SD à partir d'un ordinateur [Linux, macOS, Win].
  • 2 - Se logger sur le pi à l'aide de l'utilisateur "pi" et du mot de passe par défaut "raspberry"
  • 3 - Entrer la commande sudo raspi-config
  • 4 - Activer le stockage étendu, l'interface SPI et SSH. Puis passer la mémoire vidéo à 16Mo.
  • 5 - Redémarrer le Pi, il sera accessible sur le réseau via SSH [sudo reboot].

3.1 - Installation des pilotes PiFace

Changer le mot de passe de l'utilisateur pi :

sudo passwd

- Mettre à jour l'OS :

sudo apt-get update && sudo apt-get upgrade

- Installation des libs PiFace

sudo apt-get install python3-pifacedigitalio
 sudo reboot

Procéder à la configuration réseau.

Cf tutoriel : Installation et mise en place d'un serveur web sur Linux Debian LAMP partie1

3.2 - Installation d'un serveur web Apache2

Cf. tutoriels : Installation d'apache2 LAMP partie 4

3.3 - Installation de PHP 5.6

Cf. tutoriel : Installation de PHP5 LAMP partie 6

On installera les paquets suivants à la place de ceux du tutoriel :

sudo apt-get install libapache2-mod-php5 php5 php5-common

3.4 - Création d'un VHOST pour l'API électrovanne

Cf. tutoriel : Configuration des vhosts sur apache2 et pointage DNS LAMP partie 5

VHOST :


<VirtualHost *:80>
        ServerName watering-api.fresh.local
        ServerAdmin admin@fresh.local

        DocumentRoot /var/www/watering-api
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/watering-api/>
                DirectoryIndex app.php
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Activation du VHOST :


sudo a2ensite watering-api.fresh.local.conf
sudo service apache2 reload

3.5 - Sources commandes électrovannes [Python]

ON :

sudo nano /var/www/watering-api/pi-face/garden_watering_on.py

#!/usr/bin/env python3
import pifacedigitalio as pfio
import pifacecommon.mcp23s17

pfio.init()
pfio.digital_write(0,1)

mcp = pifacecommon.mcp23s17.MCP23S17(0)  #  piface 0

print(mcp.gpioa.bits[0].value)

OFF :

sudo nano /var/www/watering-api/pi-face/garden_watering_off.py

#!/usr/bin/env python3
import pifacedigitalio as pfio
import pifacecommon.mcp23s17

pfio.init()
pfio.digital_write(0,0)

mcp = pifacecommon.mcp23s17.MCP23S17(0)  #  piface 0

print(mcp.gpioa.bits[0].value)

TEST :

sudo nano /var/www/watering-api/pi-face/garden_watering_test.py

#!/usr/bin/env python3
import pifacecommon.mcp23s17

mcp = pifacecommon.mcp23s17.MCP23S17(0)  #  piface 0

print(mcp.gpioa.bits[0].value)

3.6 - Sources API arrosage [PHP]

sudo nano /var/www/watering-api/app.php

<?php

function buildMessage($output, $message) {
    // clean output string and convert to bool

    $output = substr($output, 0, 1);

    if ($output == 0) {
        $status = false;
    } else {
        $status = true;
    }

    $jsonMessage = [
        'data' => [
            'message' => $message,
            'status' => $status
        ]
    ];

    return json_encode($jsonMessage);
}

switch ($_GET['watering']) {
    case 1:
        $command = escapeshellcmd('sudo python3 /var/www/watering-api/pi-face/garden_watering_on.py');
        $output = shell_exec($command);
        $jsonMessage = buildMessage($output, 'Arrosage jardin démarré.');
        header('Content-Type: application/json');
        echo $jsonMessage;
        break;
    case 0:
        $command = escapeshellcmd('sudo python3 /var/www/watering-api/pi-face/garden_watering_off.py');
        $output = shell_exec($command);
        $jsonMessage = buildMessage($output, 'Arrosage jardin arrêté.');
        header('Content-Type: application/json');
        echo $jsonMessage;
        break;
    case 2:
        $command = escapeshellcmd('sudo python3 /var/www/watering-api/pi-face/garden_watering_test.py');
        $output = shell_exec($command);
        $jsonMessage = buildMessage($output, 'Arrosage jardin test.');
        header('Content-Type: application/json');
        echo $jsonMessage;
        break;
    default:
        $_GET['watering'] = null;
}

3.7 - Test de l'API arrosage

Le serveur web du RaspberryPi expose maintenant notre API d'arrosage.

Si on a associé l'adresse IP du RaspberryPi à un résolveur DNS local, ce dernier va répondre à la FQDN watering-api.fresh.local

Si l'on ne dispose pas d'un résolveur DNS local alors on va ajouter une entrée au fichier host du client qui va dialoguer avec l'API d'arrosage.

sudo nano /etc/hosts 192.168.0.x watering-api.fresh.local

S'assurer que le poste client résoud la FQDN :

ping watering-api.fresh.local

Depuis un navigateur web, on va pouvoir solliciter l'API d'arrosage.

ON : http://watering-api.fresh.local/?watering=1

OFF : http://watering-api.fresh.local/?watering=0

TEST : http://watering-api.fresh.local/?watering=2

On constate qu'en passant les différentes valeurs au paramètre watering, on allume, arrête et teste l'état du relais pilotant l'électrovanne à l'aide du script garden_watering_test.py.

Notre API est prête à être consommée par un client Curl de l'application web gérant le jardin et son arrosage.

Important : Les sources de l'api d'arrosage ont été écrit en RAD, afin de la sécuriser, il sera nécessaire d'ajouter une couche de nettoyage des paramètres et d'ajouter une règle de firewall désignant un seul poste autorisé pour l'accès de l'API. On s'assurera que les droits sur le dossier de l'application web ne permette pas l'écriture de fichiers. Seul l'utilisateur www-data aura le droit d'exécution sur les fichiers de commandes Python.

Ne pas exposer sur le web tel quel ! L'exposition du service sur le web demandera quelques recommandations de durcissement.