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. Cette réalisation fait partie du projet GreenMine.
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 |
---|---|---|---|---|---|
2 | Mamelon MM 26x34/20x27 | Leroy Merlin | 3,65 | 7,3 | |
D3900 | 3 | Raccord rapide 13/15mm | Leroy Merlin | 1,2 | 3,6 |
3 | Nez robinet geolia 15x21 20x27 | Leroy Merlin | 1,5 | 4,5 | |
8357-29 | 1 | Lot 2 robinets d'arret Ø 4.6 mm | Leroy Merlin | 6,55 | 6,55 |
8329-29 | 1 | Lot 2 Tes Ø 16mm | Leroy Merlin | 4,5 | 4,5 |
8324-29 | 1 | Lot 5 bouchons 13mm gardena | Bricorama | 4,9 | 4,9 |
Bobine fillasse | 0 | ||||
1365-29 | 4 | Lot 5 mircro-asperseurs 360° | Leroy Merlin | 5,69 | 22,76 |
8382-29 | 3 | Lot 2 jonctions L Ø 13mm | Leroy Merlin | 3,89 | 11,67 |
8333-20 | 2 | Lot 5 réducteurs T Ø 13/4.6mm | Leroy Merlin | 7,49 | 14,98 |
1350-20 | 1 | Tuyau micro conduit 15m Ø 4.6mm | Leroy Merlin | 7,99 | 7,99 |
1346-26 | 1 | Tuyau polyethylène 15m Ø 13mm | Leroy Merlin | 10,7 | 10,7 |
1355-20 | 1 | Centrale irrigation 1000l/h | Leroy Merlin | 14,9 | 14,9 |
Gardena | 1 | Clé montage | Bricorama | 5,45 | 5,45 |
1 | Tuyau arrosage souple 25 m Ø 15mm | Bricorama | 8,9 | 8,9 | |
01.24VHP | 1 | Transformateur mural 220/24V AC | Arrosage Distribution | 40,1 | 40,1 |
02.59030 | 2 | Connexion étanche Rainbird | Arrosage Distribution | 2,5 | 5 |
"02.100DV | |||||
" | 1 | Electrovanne 100 DV 1'' F 24V Rainbird | Arrosage Distribution | 15 | 15 |
Total | 188,8 |
Fixations
Ref | Qte | Nom | Fournisseur | Prix unit TTC | Prix total TTC |
---|---|---|---|---|---|
1 | Lot 20 attache clipsable tube 16-20mm -cheville 6mm | Bricorama | 7,4 | 7,4 | |
1 | 25 chevilles grappes 6mm | Leroy Merlin | 4,1 | 4,1 | |
1 | 30 boulons t cycl. fendue 3x16 zinc | Leroy Merlin | 3,17 | 3,17 | |
1 | Découpe chute plexi 210x170x80 | Leroy Merlin | 4 | 4 | |
2 | Raccord rapide 13/15mm bricorama | Leroy Merlin | 2,55 | 5,1 | |
Total | 23,77 |
Électricité
Ref | Qte | Nom | Fournisseur | Prix unit TTC | Prix total TTC |
---|---|---|---|---|---|
1 | Bobine 100m cable multi-brin 0.2mm | e44 électronique | 12,9 | ||
1 | Domino 0.5mm | Bricorama | 1,8 | 1,8 | |
2 | Boitier étanche IP 55 85x85x85 | Leroy Merlin | 1,16 | 2,32 | |
1 | 15m cable Ø 0.75mm paire multibrins | Leroy Merlin | 8,9 | 8,9 | |
1 | Boitier étanche IP 55 210x170x80 | Leroy Merlin | 14,25 | 14,25 | |
1 | Gaine icta Ø 20mm noir 25m | Leroy Merlin | 7,3 | 7,3 | |
Total | 47,47 |
Informatique
Ref | Qte | Nom | Fournisseur | Prix unit TTC | Prix total TTC |
---|---|---|---|---|---|
1 | RaspberryPi | Kubii | 36,5 | 36,5 | |
1 | Alimentation Micro USB 5V 2.5A EU avec Interrupteur | Kubii | 8,9 | 8,9 | |
1 | Carte SD 16 Go | Kubii | 13,9 | 13,9 | |
1 | Carte extension PiFace Digital2 | Gotronic | 35,2 | 35,2 | |
2 | Cable reseau RJ45 5M , CAT 5E | Kubii | 4,74 | 9,48 | |
Total | 103,98 |
Total global : 364,02 € TTC
2 - Installation
2.1 - Arrivée d'eau
- 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
- 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 :
- 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 :
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 :
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.