Tuto

Poulailler connecté

Pouvons nous surveiller nos enfants 24h/24 ? vous avez 2h. Bon cette question sera au programme du Bac 2027 mais aujourd’hui nous allons voir comment connecter votre poulailler et surveiller vos poules, elles ne diront rien elles.

Ceci est le projet de Matthieu : Contrôle automatisé de l’ouverture du poulailler, et remontée d’informations

Pourquoi connecter un poulailler ?

Suite à l’envie d’avoir quelques poules, je me suis documenté sur Internet sur les avantages et les contraintes.

Une des contraintes était d’enfermer les poules chaque nuit pour les protéger des prédateurs. Bien qu’habitant en région parisienne, j’ai une forêt juste à côté, et donc potentiellement des renard & fouines.

Il existe de nombreuses solutions qui permettent d’automatiser la fermeture et l’ouverture d’une porte de poulailler, qui se basent sur la luminosité et/ou l’heure, pour un budget non négligeable (entre 100 et 150€, sans compter la porte en alu), par exemple Chickenguard.

Je trouve ce tarif très exagéré compte tenu des faibles fonctionnalités et du coût modique des composants nécessaires à fabriquer le boîtier.

En regardant les différents projets “homemade” qui existent sur Internet, et le coût des composants, je suis arrivé à la conclusion que je pouvais avoir beaucoup mieux pour le même prix.

Avant de me lancer j’ai parcouru de nombreux sites pour m’aider dans la réflexion et le design de la solution.
Malheureusement je n’ai pas conservé les urls. Un site en particulier m’a beaucoup aidé pour le choix du moteur et du pont L298N.
La plupart des projets étaient basés sur Arduino. Certains projets de voitures radio-commandés utilisant le Rpi0 ont également été utiles.

En revanche, je n’ai pas vu de projets regroupant comme le mien un Rpi0w + cam + L298N + sunwait + jeedom

Fonctionnalités recherchées :

Je souhaitais un certain nombre de fonctionnalités que je ne retrouvais pas avec les solutions commerciales :

  • non pas basé sur la luminosité ou l’heure, mais sur l’heure réelle de lever et coucher du soleil
  • pilotable à distance
  • retour vidéo avec vision nocture, pour s’assurer que tout le monde est bien rentré dans le poulailler
  • compatible jeedom

Ce qu’il faut acheter :

  • Rpi zero w avec sa boite, 22€ chez Gearbest
  • Carte SD, environ 15€ chez Amazon
  • Caméra pour pi zero, 11.30€ chez Aliexpress
  • Pont L298N, 1.26€ chez Aliexpress
  • Moteur 12 V 25 RPM, 6.76€ chez Aliexpress
  • Coupleur d’axe 6mm/6mm, 5€ sur ebay
  • Capteur de fin de butée, 2.41€ les 10 chez Aliexpress
  • convertisseur 12V vers USB 5V, 0.66€ chez Aliexpress
  • Alimentation 12V 3A, 11€ chez Amazon
  • Boîte en plastique, 7€ chez Amazon
  • Porte coulissante en alu, 35€ chez Amazon
  • Divers : wago, petit fil, bobine de cable, ficelle, petites poulies, gaines thermorétractables, soudure, diodes, etc…, environ 35€

Total : 130€

Bonus : caméra de surveillance supplémentaire, payé 19e en promo sur Gearbest

Selon ou vous achetez le délai est plus ou moins long mais prévoyez un mois pour tout recevoir, avant de pouvoir commencer l’assemblage.

Schéma logique moche :

Photo de la boîte avec tous ses composants (le fil d’ouverture de porte sort à la verticale) :

Des capteurs de fin de course associés à des diodes permettent de stopper le moteur lorsque la porte est tout en haut ou tout en bas.

Par fainéantise, je n’ai finalement installé qu’un seul capteur de fin de course, le plus important : celui de porte ouverte.

Coté Rpi0, des fils ont été soudés sur 3 gpio, masse, et 2 data

La caméra a été raccordée au Rpi0.

Raspbian a été installé, mis à jour, et configuré.

Pour la caméra, j’ai suivi le tuto suivant:

J’ai installé le programme “sunwait” pour déclencher l’ouverture et fermeture de la porte en fonction des horaires du soleil.

Jeedom a été configuré pour récupérer le flux vidéo et pousser les commandes manuelles.

Etant accro aux capteurs Xiaomi, et heureux propriétaire d’un Zigate, j’ai également “enrichi” le poulailler de quelques capteurs supplémentaires :

  • capteur température & humidité
  • capteur d’ouverture de la trappe donnant accès aux oeufs
  • à venir : capteur d’état de la porte pour détecter des anomalies

Tuto poulailler

Code source

Avertissement : je ne me considère pas comme un développeur, et code beaucoup avec google dans une autre page… donc les scripts suivants fonctionnent, mais je ne peux pas garantir leur stabilité et sécurité. Le serveur ne doit donc pas être accessible depuis Internet.

Sur jeedom : les commandes d’ouverture et fermeture manuelles se font via le plugin script :

Sur le raspberry pi zero w, les pages correspondantes sont très courtes :

open_script.php :

<?php

$command = escapeshellcmd(‘/opt/chickendoor/open_door.py’);

shell_exec($command);

?>

 

close_script.php :

<?php

$command = escapeshellcmd(‘/opt/chickendoor/close_door.py’);

shell_exec($command);

?>

 

Ces deux pages appellent des fichiers pythons :

open_door.py :

#!/usr/bin/env python

# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

import door

#quit()

door.init()

door.open_door()

 

close_door.py :

 

#!/usr/bin/env python

# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

import door

#quit()

door.init()

door.close_door()

 

Ces deux fichiers appellent un autre fichier central : door.py, qui pilote les ports GPIO du RPi, génère des logs, et garde le statut dans un fichier texte. Suite à un problème qui a failli détruire le moteur (une fois la ficelle entièrement déroulée, si on continu à dérouler, ça enroule dans l’autre sens !), j’ai ajouté des sécurités empêchant de fermer ou ouvrir deux fois la porte. Pour des cas particuliers (amorçage), j’ai ajouté des fonctions bypassant la sécurité.

Le code n’est pas du tout documenté (honte à moi), mais il est suffisant simple pour être facilement compréhensible.

 

#!/usr/bin/env python

# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

import RPi.GPIO as gpio

import datetime

import time

import logging

TIME_UP = 45

TIME_DOWN = 36

FILENAME = “/opt/chickendoor/status.txt”

LOGFILE = “/opt/chickendoor/chicken.log”

def init():

gpio.setmode(gpio.BCM)

gpio.setup(17, gpio.OUT)

gpio.setup(22, gpio.OUT)

logging.basicConfig(filename=’chicken.log’, level=logging.DEBUG, format=’%(asctime)s — %(name)s — %(levelname)s — %(message)s’)

def read_status():

file = open(FILENAME,”r”)

status = file.readline()

file.close()

return(status)

def write_status( STATUS ):

file = open(FILENAME,”w”)

file.write(STATUS)

file.close()

def open_door():

if read_status() == “Closed”:

write_status(“Opening”)

logging.info(‘DOOR Opening…’)

gpio.output(17, True)

gpio.output(22, False)

time.sleep(TIME_UP)

gpio.cleanup()

logging.info(‘DOOR Opened !’)

write_status(“Opened”)

else:

gpio.cleanup()

logging.warning(‘ERROR! Action OPEN but door not closed!’)

def force_open_door():

write_status(“Opening”)

logging.info(‘DOOR FORCED Opening…’)

gpio.output(17, True)

gpio.output(22, False)

time.sleep(TIME_UP)

gpio.cleanup()

logging.info(‘DOOR FORCED Opened!’)

write_status(“Opened”)

def close_door():

print read_status()

if read_status() == “Opened”:

write_status(“Closing”)

logging.info(‘DOOR Closing…’)

gpio.output(17, False)

gpio.output(22, True)

time.sleep(TIME_DOWN)

gpio.cleanup()

logging.info(‘DOOR Closed!’)

write_status(“Closed”)

else:

gpio.cleanup()

logging.warning(‘ERROR! Action CLOSE but door not opened!’)

def force_close_door():

write_status(“Closing”)

logging.info(‘DOOR FORCED Closing…’)

gpio.output(17, False)

gpio.output(22, True)

time.sleep(TIME_DOWN)

gpio.cleanup()

logging.info(‘DOOR FORCED Closed!’)

write_status(“Closed”)

 

Autre paramètrage :

  • il faut ajouter www-data dans les utilisateurs habilités à modifier les ports GPIO :

 

$ sudo usermod -a -G gpio www-data

$ sudo groups www-data

$ sudo service apache2 restart

 

  • Il faut créer un fichier status.txt lisible et écrivable par tous dans le répertoire /opt/chikendoor/ et avec un lien symbolique dans le répertoire html où se trouvent les scripts php :

 

touch /opt/chickendoor/status.txt

chmod a+wr /opt/chickendoor/status.txt

ln -s /opt/chickendoor/status.txt /var/www/html/chicken/status.txt

chmod a+r /var/www/html/chicken/status.txt

 

  • il faut paramétrer le crontab (ou tout autre planificateur) pour ouvrir et fermer automatiquement la porte.

Attention : j’avais d’abord utilisé les options de décalage avant/après le levé/coucher du soleil, mais avec ma version de sunwait, cela ne marchait pas !

J’ai trouvé la solution en me basant sur une option de sunwait, qui permet le déclenchement non pas lorsque le soleil est à l’horizon (0°), mais encore caché (-8° de mémoire).

Ainsi, la porte s’ouvre une demie heure avant le levé “officiel” du soleil, et se couche une demie-heure après le coucher.

 

Exemple des différences entre le lever/coucher “normal” et “civil” :

 

root@Rpi-Poulailler:/home/pi# sunwait report 48.735393N 2.430392E

Current Date and Time: 11-Apr-2018 21:12 CEST

Target Information …

Location: 48.735393N,   2.430392E

Date: 11-Apr-2018

Timezone: CEST

Sun directly north/south: 13:51

Twilight angle: -0.83 degrees (daylight)

Day with twilight: 07:08 to 20:34

It is: Night

General Information (no offset) …

Times …         Daylight: 07:08 to 20:34

with Civil twilight: 06:37 to 21:05

with Nautical twilight: 05:57 to 21:45

with Astronomical twilight: 05:15 to 22:27

Duration …    Day length: 13:26 hours

with civil twilight: 14:27 hours

with nautical twilight: 15:47 hours

with astronomical twilight: 17:12 hours

Ce qui me donne les entrées cron suivantes :

00 02   * * *   /usr/bin/sunwait wait civil rise 48.735393N 2.430392E; /usr/bin/python /opt/chickendoor/open_door.py >> /var/log/chicken.log 2>&1

00 13   * * *   /usr/bin/sunwait wait civil set 48.735393N 2.430392E; /usr/bin/python /opt/chickendoor/wait_and_close.py >> /var/log/chicken.log 2>&1

 

Exemple de fonctionnement

  • tous les jours à 2h du matin, le programme sunwait se lance et attend que la condition de lever du soleil soit remplie, puis se termine.
  • La deuxième commande est alors exécutée : l’ouverture de la porte
  • Puis rebelote à 13h, sunwait attend le coucher de soleil, se ferme, et la commande python de fermeture est alors exécutée.

Et les poules dans tout ça ?

Elles se portent à merveille et pondeuse leur oeuf quotidien.

Les premiers jours ont été compliqués, car seule une poule était venue dormir dans le nichoir. Mais après les avoir forcé à s’y rendre une nuit, tout le monde va dormir dans le dortoir chaque soir !

Malheureusement, elles sont un peu trop curieuses, et on va devoir leur couper quelques plumes pour les empêcher de prendre la poudre d’escampette !

 

 

  • ChickenGuard ® Standard Portier Automatique Pour Poulailler
    Écran LCD intégré entièrement équipé, ouvert le matin et fermé le soir automatiquement en réglant la minuterie. ChickenGuard vous permet de rester au lit le matin tout en protégeant vos poulets de M. Renard. Tout en un design, pas de câblage compliqué. Attachez-le à votre poulailler, connectez le cordon à la porte et vous êtes prêt à partir. Appuyez sur un bouton pour ouvrir / fermer manuellement. Porte fermée lumière visible jusqu'à 100 mètres. Le modèle ChickenGuard Standard a une capacité de levage de 1 kg. ChickenGuard fournit un cordon très résistant avec une tension de rupture de 25 kg. Fonctionne avec 4 piles alcalines AA (incluses). Longue durée de vie de la batterie Fabriqué par ChickenGuard au Royaume-Uni avec des matériaux de haute qualité. Electronique étanche. Garantie du fabricant de 3 ans. Plus de 130 000 utilisateurs dans le monde font confiance à ChickenGuard pour assurer la sécurité de leurs poulets.
  • Broco Breuvoir de Poulet, 10 PCS Automatique pour poulailler Distributeurs d'eau Automatique pour Poulet Canard Volaille Eau Potable Tasses Abreuvoir Mangeoire pour Bétail Poule
    【MAT MATÉRIAU DURABLE】 Ce gobelet à eau de volaille est fabriqué à partir de plastique ABS de qualité, résistant à la chaleur, aux basses températures, aux produits chimiques et à la longue durée de vie. La languette jaune permet à votre poulet d'apprendre rapidement à boire avec ces gobelets. 【ÉCONOMIE D'EAU】 switch Commutateur à ressort à soupape à bille de précision avec vis de joint, lorsque les poulets picorent sur la gâchette jaune, la soupape d'abreuvement du poulet libère automatiquement l'eau dans le gobelet en plastique. Chaque partie est étroitement connectée afin qu’aucune fuite ne se produise. 【ÉCONOMISEZ DE L'EFFORT ET DE L'EAU PROPRE】 Ce gobelet pour la volaille fournit de l'eau propre et fraîche à vos poulets. Les tasses ne restent pas remplies, de l'eau coulera lorsque les poules picoreront la languette jaune. Vous n'aurez donc pas à changer ou à remplir l'eau tous les jours, ce qui vous permettra d'économiser beaucoup de temps et d'efforts. 【INSTALL INSTALLATION FACILE】 Très facile à connecter à un seau ou à un tuyau, ces abreuvoirs fonctionnent à basse pression. 【APPLICATION LARGE】 Outil idéal pour les fermes domestiques ou avicoles. Il convient parfaitement aux poulets, oiseaux, canards, cailles, pigeons, perroquets ou autres volailles.
  • ChickenGuard ® Premium Portier Automatique Pour Poulailler
    Écran LCD intégré complet. Ouvrez le matin et fermez le soir automatiquement en utilisant la minuterie ou le capteur de lumière (LUX) réglable. ChickenGuard vous permet de rester au lit le matin et de protéger vos poulets de M. Renard. Tout en un design, pas de câblage compliqué. Attachez-le à votre poulailler, connectez le cordon à la porte, réglez la minuterie et vous êtes prêt à partir. Appuyez sur le bouton pour ouvrir et fermer manuellement. Le modèle ChickenGuard Premium a une capacité de levage de 1 kg. Le cordon est très durable avec une tension de rupture de 25 kg. Fonctionne avec 4 piles alcalines AA (incluses). Longue durée de vie de la batterie et avertissement de batterie faible. Voyant de porte fermé visible jusqu'à 100 mètres. Fabriqué par ChickenGuard au Royaume-Uni avec des matériaux de haute qualité. Electronique étanche. 3 ans de garantie du fabricant. Plus de 130 000 utilisateurs dans le monde font confiance à ChickenGuard pour assurer la sécurité de leurs poulets.
  • ChickenGuard ® Extreme Portier Automatique Pour Poulailler
    Fabriqué par ChickenGuard au Royaume-Uni selon la norme militaire. Électronique résistante aux intempéries ENTIÈREMENT encapsulée dans la résine époxyde. ChickenGuard Extreme peut résister aux éléments dans les environnements les plus difficiles. ChickenGuard Extreme soulève les portes jusqu'à 4kg. Cordon durable, rupture de tension de 25 kg. 3 ans de garantie du fabricant. Plus de 130 000 utilisateurs dans le monde font confiance à ChickenGuard pour assurer la sécurité de leurs poulets. Écran LCD intégré complet. Ouvrez le matin et fermez le soir automatiquement le minuteur ou le capteur de lumière (LUX). ChickenGuard vous permet de rester au lit le matin et de protéger vos poulets de M. Renard. Tout en un design, pas de câblage compliqué. Attachez votre poulailler, connectez le cordon à la porte, réglez la minuterie / capteur et vous êtes prêt à partir. Appuyez sur le bouton pour ouvrir et fermer manuellement. Fonctionne avec 4 piles alcalines AA (incluses). Longue durée de vie de la batterie et avertissement de batterie faible. Voyant porte fermée visible jusqu'à 100m.

29 commentaires

Cliquez ici pour ajouter un commentaire

CommentLuv badge

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

  • Bonjour Matthieu et bravo pour ton tuto.
    J’ai aussi équipé mon poulailler du même système, en plus simple car il n’y a pas de caméra ni de capteur pour le moment.
    Tout fonctionne bien en automatique, sauf que je n’arrive pas à faire communiquer mon jeedom “Maison” avec le RPI poulailler, ni avec le module script, ni avec rien… As tu un peu plus d’information sur le paramétrage utilisé entre les 2 RPI ?

    • Bonjour,

      Je suis vraiment désolé pour le temps de réponse, l’article date de plus de 2 ans, et je ne suis pas notifié des commentaires. Je viens de tomber par hasard sur une dizaine de message qui m’étaient destinés…

      Si votre question est toujours d’actualité, voici mon mail, ça m’évitera de rater votre message ! matthieu.favris[arobase]gmail.com

      Ce que je peux dire, c’est qu’il faut que les deux RPI soient sur le même réseau wifi, et qu’ils arrivent à se pinguer.
      Si ça c’est bon, alors contacte moi pour l’étape d’après 😉

  • Salut,

    Je regarde ton schéma et tes codes mais je ne vois pas comment ton capteur de fin de course arrête de faire tourner le moteur, tu fais ça comment stp?

    • bonjour, pourriez vous m’expliquer svp comment réaliser la partie script sur le Raspberry car je n’y connais rien. je vous remercie beaucoup.

  • Slt, je suis assez novice en programmation de ce genre.
    Peux tu juste me dire ou je tape tout le code dans mon Raspberry ?
    je te remercie, et chapeau pour le boulot !

  • Bonjour, je continu de chercher la marche à suivre mais pas simple.
    en fait, j’aimerais connaître les prérequis à installer et savoir ou et comment éditer les fichier.
    merci beaucoup

  • bonjour, j’aimerais juste savoir précisement la marche à suivre pour éditer le script car je n’y connais rien. Je bute simplement sur ce point. mon montage est correctement réalisé mais je suis bloqué .
    d’avance un grand merci et chapeau pour le travail réalisé.

    • Bonjour,

      Je suis vraiment désolé pour le temps de réponse, l’article date de plus de 2 ans, et je ne suis pas notifié des commentaires. Je viens de tomber par hasard sur une dizaine de message qui m’étaient destinés…

      Si votre question est toujours d’actualité, voici mon mail, ça m’évitera de rater votre message ! matthieu.favris[arobase]gmail.com

  • Bonjour Matthieu,

    Pourrions nous discuter pour concevoir un projet identique?

    Je ne sais pas programmer et ne suis pas du tout geek:) en revanche je suis sélectionneur de poules de races anciennes et j’ai grandement besoin de données effectives et instantanées.

    Pouvons nous en discuter?
    Cordialement
    Willy

      • Bonjour,

        Désolé pour le temps de réponse, l’article date de plus de 2 ans, et je ne suis pas notifié des commentaires.

        Si votre question est toujours d’actualité, voici mon mail, ça m’évitera de rater votre message ! matthieu.favris[arobase]gmail.com

    • Bonjour,

      Je suis vraiment désolé pour le temps de réponse, l’article date de plus de 2 ans, et je ne suis pas notifié des commentaires. Je viens de tomber par hasard sur une dizaine de message qui m’étaient destinés…

      Oui c’est possible ! Mais vu la date de votre message, ça ne doit plus trop être d’actualité…
      Voici mon mail, ça m’évitera de rater votre message ! matthieu.favris[arobase]gmail.com

  • Bonjour,
    Super Tuto merci ! je bloque juste sur l’étape de jeedom pour appeler le script.. l’image stockée sur le site est pixelisé. impossible de lire la syntaxe écrite.
    Si qqn peut l’écrire ce serait parfait 🙂

    • Bonjour,

      Désolé pour le temps de réponse, l’article date de plus de 2 ans, et je ne suis pas notifié des commentaires.

      Si votre question est toujours d’actualité, voici mon mail, ça m’évitera de rater votre message ! matthieu.favris[arobase]gmail.com

  • Bonjour je suis intéressé par ce projet et souhaiterais le mettre en œuvre chez moi. Serait il possible d’avoir la liste du matériel et une notice de mise en service et programlation ?

    Merxi beaucoup

    • Bonjour,

      Désolé pour le temps de réponse, l’article date de plus de 2 ans, et je ne suis pas notifié des commentaires.

      La liste est indiqué dans l’article, de quelle autre précision avez vous besoin ?

      Si vous avez d’autres questions, voici mon mail, ça m’évitera de rater votre message ! matthieu.favris[arobase]gmail.com

  • Bonjour,
    Super projet bien détaillé, cependant j’ai une question que l’alimentation il faut une prise à 220v à proximité ou on peut l’alimenté via batterie + panneau solaire ?
    L’interface vient de jeedom ?

    • Bonjour,

      Désolé pour le temps de réponse, l’article date de plus de 2 ans, et je ne suis pas notifié des commentaires.

      Mon système utilise du 12V (il y a un transfo 220V vers 12V tout bête branché sur une prise de mon garage), mais si vous pouvez fournir du 12V stable à partir d’un panneau solaire et d’une batterie, c’est encore mieux !

      Si vous avez d’autres questions, voici mon mail, ça m’évitera de rater votre message ! matthieu.favris[arobase]gmail.com

  • Salut.
    Je viens de tomber sur ce tuto très intéressant que j’ai seulement parcouru pour l’instant. En voyant la liste de matériel, vous croyez qu’il est possible de fabriquer sa propre porte en métal à moindre coût plutôt qu’acheter celle sur Amazon ? 🤔

    • Bonjour,

      Désolé pour le temps de réponse, l’article date de plus de 2 ans, et je ne suis pas notifié des commentaires.

      Depuis la publication de cet article, j’ai fait évolué mon système, et c’est dorénavant la grande porte qui est automatiquement contrôlée (celle qu’on aperçoit dans l’application mobile). J’ai juste tourné à 90° le boîtier moteur, et inversé les commandes (maintenant c’est en tirant le fil que la porte se ferme, alors qu’avant il fallait relâcher le fil pour faire redescendre la trappe.
      J’ai ensuite ajouté un contrepoids pour que la porte s’ouvre quand le fil est relâché.

      Si vous avez d’autres questions, voici mon mail, ça m’évitera de rater votre message ! matthieu.favris[arobase]gmail.com

  • Bonsoir, je cherche à intégrer les différents codes proposés, mais je n’y connais pas grand chose. Je viens de cabler une RPI Zero W avec 2 sondes de températures, un moteur 12V pour la porte et une caméra IR.
    J’ai installé aussi JEEDOM après avoir essayé DOMOTICZ .
    J’ai bien les DHT11 qui remontent les infos de température et d’humidité, mais pour les reste, je ne sais pas trop comment faire…

    Merci pour votre aide.
    Bien cordialement

    • Bonjour Patrick,
      Comment avez vous raccordé le moteur ?
      Je vous propose de continuer la discussion par mail : matthieu.favris[arobase]gmail.com