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 !

 

 

  • Kerbl Commande pour porte de poulailler automatique
    Contrôle de l'ouverture automatique et de la fermeture du contrôle de la porte de poulet avec des fonctions de sécurité contrôle à la lumière du jour sur le capteur de lumière Contrôle dépendant du temps sur la programmation en semaine Contrôle manuel sur l'appareil ou via un bouton-poussoir possible Portée de la livraison: contrôle avec moteur intégré et câble, adaptateur secteur, batteries, capteur de lumière, jeu de rouleaux de déflexion, mode d'emploi - sans porte d'alimentation: 230 volts Opération (alimentation pour 12 volts) ou fonctionnement de la batterie (4 x AA) Dimension du contrôleur: 24 x 16 x 11 cm contrôle de remplacement pour la vanne de poulet KERBL 70546 et 70547
  • Porte automatique poulailler programmable heure et luminosité extérieure
  • S SMAUTOPAutomatique Ouvre-porte de poulailler - Capteur de lumière et contrôle du temps (algorithme), porte à poulet en métal robuste / porte à trou pop résistant aux prédateurs
    [Conception de contrôleur innovante] : L'ouvre-porte automatique de poulailler dispose d'une minuterie programmable, selon les habitudes des poulets, ouvre ou ferme automatiquement la porte de votre poulailler au lever et au coucher du soleil. [Induction infrarouge] : Avec mise à niveau du contrôle photoélectrique infrarouge.Si votre poulet / canard / oie reste coincé sous la porte, le moteur arrêtera automatiquement la porte pour protéger vos canards ou oies contre l'écrasement à mort, offrant une protection pratique et sûre. [Porte de poulailler robuste et durable]: Utilisez des portes en aluminium robustes et des bras de vérin linéaire pour aider les poulets à résister aux prédateurs la nuit, forts et robustes sans se plier ni se casser. [Simple et facile à installer]: aucun câblage ou connexion de câble compliqué n'est requis. Après avoir installé la porte du poulailler comme indiqué sur la figure, il vous suffit de faire une simple connexion électrique avec le contrôleur et de l'utiliser immédiatement. [Pour diverses utilisations]: L'ouvre-porte automatique convient à toutes les races de poulets, poules et canards de taille standard sans risque! Vidéo d'installation: https://www.youtube.com/watch?v=xuf11l_G4Eo.
  • Kerbl Automatisme pour porte de poulailler - 24 x 16 x 11 cm

32 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

  • Bonjour,
    Débutant dans ce genre de montage, serait-il possible d’avoir le détail des diodes utilisées pour actionner le moteur et utilisées pour le capteur de la porte ?

    D’avance merci.
    Christophe

  • merci ton projet va beaucoup nous aider pour notre projet d’étude en Science de l’ingénieur
    A la prochaine dans la basse cours 😉