Automatisation ouverture poulailler + station météo basée sur ESP32

Ci dessous le système d’automatisation conçu pour l’ouverture quotidienne des deux trappes du poulailler V2 (article sur la construction ici). Ce montage, toutes les options et la programmation associée peuvent faire sourire juste pour ouvrir des portes de poulailler et compter des œufs, mais c’était un prétexte pour moi pour m’initier à l’ESP32, la programmation avec FreeRTOS et l’interfaçage avec une domotique Jeedom 🙂

Vidéo de présentation

Fonctionnalités

  • Ouverture/fermeture indépendante des deux trappes du poulailler selon les 4 modes ci-après :
    • Mode « auto sur seuil de luminosité », dans ce cas les portes s’ouvrent 20 min après le passage au dessus d’un seuil de luminosité, et se ferment 40 min après le passage en dessous de ce seuil
    • Mode « auto horaire », dans ce cas on peut définir les heures d’ouverture et de fermeture de chaque trappe
    • Mode « Manu sur fin de course », ça permet d’ouvrir ou de fermer complètement une trappe à l’aide de la motorisation, quand par exemple on veut isoler une poule
    • Mode « Manu pas à pas », qui permet de monter ou descendre les trappes tant qu’on appuie sur les boutons montée ou descente, en ignorant les fin de course et les surveillance de temps d’opération. Ça peut être utile pour rattraper du mou de câble sur les treuils, ou pour faire des essais.
  • Utilisation d’un seul capteur de fin de course pour la position haute et basse, c’est une manœuvre spéciale des trappes qui permet à l’ESP32 de détecter s’il est en position haute ou basse, lors de la séquence d’initialisation.
  • Surveillance des temps d’opération lors de la manœuvre des trappes, pour détecter un éventuel coincement dans les mécanismes et ne pas tout casser, ça permet également de relever automatiquement la trappe et de reprendre la manœuvre quand une poule se retrouve « guillotinée » (ça a beaucoup servi ça j’en avait une qui se servait du seuil de la trappe comme perchoir, et qui ne se poussait pas quand la trappe descendait…)
  • Enregistrement des paramètres ci dessous toutes les minutes, ils sont tous filtrés par une moyenne glissante sur 15 minutes et sont envoyés tous les 1/4 d’heure par requête HTTP au serveur JEEDOM de ma maison (plugin « virtuel ») :
    • T°C extérieure, hygrométrie et pression atmosphérique par module BME280.
    • Redondance de la mesure de T°C extérieure par une thermistance linéarisée
    • Luminosité par 3 photorésistances corrigées entre elles.
    • Puissance de réception du signal WiFi de l’ESP32
    • T°C interne du boîtier du système électronique mesurée par thermistance
  • Enregistrement des événements ci dessous, ils sont envoyés pour archivage au serveur JEEDOM :
    • Ouverture ou fermeture d’une des trappes, avec son temps d’exécution en secondes
    • Ouverture ou fermeture de la porte du poulailler, du couvercle du pondoir et du coté du poulailler détectés avec des capteurs ampoules « ILS » et des aimants.
    • Reboot de l’ESP32 ou reconnexion WiFi après un tranfert de données vers JEEDOM échoué
  • Présence de 4 boutons « œuf » pour 4 poules, qui comptent un œuf par appui, pour la poule concernée. Le total des œufs pondus est déversé vers le serveur JEEDOM tous les soirs à 23h30, pour alimenter des statistiques et des histogrammes de ponte.
  • Récupération de la date et heure via WiFi et serveur NTP (la box internet de la maison), et affichage permanent sur l’écran du poulailler pour ne pas avoir à chercher la date quand il faut l’écrire au crayon sur l’œuf.
  • Présence d’un journal de bord accessible par navigateur internet directement sur l’ESP32, via une adresse ip locale (192.168.1.5 dans mon cas). Celui est de type « texte simple », d’une capacité de 10 Ko et les messages les plus anciens s’effacent au fur et à mesure. Les valeurs instantanées des capteurs et les messages d’alertes sont quant à eux présents en permanence en tête de journal. Ce journal est utile pour le diagnostic en direct à distance sur l’ESP32, par exemple quand la liaison avec le serveur JEEDOM ne marche pas.
  • Haute fiabilité du fonctionnement en mode « AUTO luminosité » grâce aux 3 capteurs de luminosité fonctionnant en logique 2/3. Un algorithme de détection de dérive de capteur permet d’isoler le défaillant en continuant à fonctionner en logique 1/2. Si les deux capteurs restants divergent également par la suite, le fonctionnement bascule en « AUTO horaire ».
  • Voyant « défaut » bien visible sur le poulailler pour signaler une anomalie (led bleue LED_BUILTIN de l’ESP32). Elle s’allume lors d’une anomalie non bloquante (détection dérive capteur luminosité ci dessus) ou clignote lors d’une erreur bloquante (timeout pour une atteinte fin de course lors d’une manœuvre de trappe).
  • Système de chauffage antigel de l’électronique (2 watts) qui se met en route en dessous de 3°C et s’arrête au dessus de 5°C, pour garder hors gel et hors condensation le système.
  • Alimentation 6V secteur, l’option solaire a été abandonnée au début du projet puisque j’ai eu à tirer une alim électrique jusqu’au poulailler.

Programme

[à venir]

Carte électronique et boitier

La carte électronique est assez simple dans le sens où elle comporte assez peu de composants discrets, elle sert surtout à mettre en communication des modules tout faits.

Le circuit électronique se compose principalement :

  • d’un ESP32 qui dirige tout l’ensemble et gère les communications WiFi
  • D’un bus I2C qui chaine l’écran 4×20 caractères via un PCF8574, le clavier 16 touches via un autre PCF8574 en utilisant sa sortie « interruption » et le capteur BME280 (Temp + humidité + pression)
  • D’un pont en H L298N qui pilote les moteurs des trappes du poulailler et de la volière dans les deux sens
  • De 3 photorésistances pour capter la luminosité de manière redondante en logique « 2 sur 3 », avec détection de malfonction.
  • De deux résistances de chauffage d’une puissance de 2 Watts au total, qui maintien hors gel le boitier quand la T°C extérieur passe < 5°C

Motorisation des trappes version 1 (obsolète pour mémoire)

Ci dessous la première itération du mécanisme d’ouverture. L’idée était d’abriter le mécanisme à l’intérieur du poulailler pour qu’il soit à l’abri des intempéries, et que l’actionnement des trappes se fasse par câbles et poulies de renvoi d’angle. L’utilisation de contrepoids (des pots de confiture remplis de sable) permettaient de limiter l’effort à fournir par les moteurs. Les moteurs utilisés étaient des types JGA25-370, 400RPM @ 6Volts. La démultiplication apportée par la vis sans fin permettait un mouvement suffisamment lent des trappes.

Dans les premières semaines d’utilisation, il s’est avéré que le système de chariot et vis sans fin, ajouté à toutes les poulies, généraient des frottements qui faisaient peiner les moteurs et annulaient complètement le gain apporté par les contrepoids. De plus, les fin de course étant au niveau des contrepoids, la position d’arrêt de ceux ci ne tenait pas compte des variation de longueur de la corde dues à l’humidité. Du coup des fois la trappe se fermait complètement et du mou de câble se produisait quand la corde était longue (humidité), et des fois la trappe était à 1 cm d’être complètement fermée quand la corde était courte (temps sec).

Ce système a été abandonné et remplacé par les treuils du paragraphe suivants, beaucoup plus simples.

Les photos ci dessous sont pour mémoire de cette première version d’essai :

Vue du système

Motorisation des trappes version 2 (définitive)

La motorisation finale des trappes a été réalisée simplement par un treuil à tirage vertical, placé à l’extérieur directement au dessus de la trappe à ouvrir. Par rapport au système précédent ci dessus, il n’y a plus aucun frottement. Les moteurs ont été remplacés par des JBG37-520 6volts 12RPM, tournant très lentement et avec beaucoup de couple, pour pouvoir soulever les trappes (en chêne).

Ci dessous on voit les deux suspentes qui fixent le treuil au plafond, faites en tôle galvanisée fine. De grands trous oblongs permettent un réglage en hauteur d’au moins 20mm de la fixation de chaque palier. Le but est d’avoir de la marge pour fixer l’arbre d’enroulement du treuil bien horizontal, pour que la corde s’enroule bien au milieu de celui ci

Ci dessous, on voit les paliers-rotule type KFL08 et la tige filetée qui fait office d’arbre. Les grandes rondelles plates avaient pour but de servir de « joues » de bobine pour le bon enroulement de la cordelette rose, mais en vrai elles ne servent à rien car l’enroulement se fait toujours bien au centre, grâce à la bonne horizontalité du treuil.

Ci dessous on voit l’accouplement du moteur qui est fait avec une pièce cylindrique (un bout de tige filetée plus gros dans mon cas) percée-taraudée en M8 d’un coté pour se visser sur l’arbre d’enroulement d’un coté, et bloquée par un contre écrou, et percée au diamètre de l’arbre moteur de l’autre, pour qu’il s’enfile dedans. Enfin un perçage radial de l’ensemble accouplement + arbre moteur permet de solidariser les deux avec une goupille bêta.

Vue ci dessous de la patte en alu fixée sur le moteur, et en butée sur une tige filetée M6 fixée à une suspente, qui sert à bloquer en rotation le moteur.

Ci dessus on voit aussi le capot en plastique noir qui a été collé au mastic polyuréthane sur le dos du moteur pour protéger tous les petits interstices qu’il a, là où il peut y avoir de la poussière ou des insectes qui rentrent puisque c’est installé dehors. Le fichier FreeCad de ce capot pour moteur JGB37-520 est ici, le STL est ici.

Ci dessous, entre le treuil et la porte un mousqueton a été mis pour pouvoir décrocher la porte du treuil et passer en manuel au cas où.

Ci dessous, la position haute et basse est détectée par un unique fin de course double effet. Le fait qu’il n’y ait qu’un seul fin de course rend plus complexe la programmation. Notamment il y a une séquence d’initialisation au démarrage du système, qui fait réaliser des séquences de montée et descente successives à la porte, afin de détecter dans quelle position elle se trouve, pour finalement l’initialiser à « ouverte ». Ça fonctionne de manière fiable mais la mise au point de l’algorithme de détection a été trop complexe, si c’était à refaire j’installerais deux fin de course, un en bas et un en haut.

Ci dessous les positions hautes et basse et leur action sur le fin de course unique :

Nomenclature

Tout provient majoritairement de Aliexpress pour les achats neufs, totalisant une 30aine d’€ :

2 x Moteur JBG37-520 6volts 12RPM
2 x contacteurs fin de course à galet type ME-8108
4 x paliers à rotule KFL08 diamètre 8mm
1 x Double pont en H LM258N
1 x ESP32 format 30 pins
1 x capteur environnemental BME280 I2C
3 x photorésistances type 2258
1 x écran 20car x 4 lignes 3,3v + convertisseur I2C
1 x clavier 16 touches + convertisseur I2C

Pour le reste (composants divers, câble et prise DB25…) c’est de la récup

Interfaçage avec JEEDOM

moyenne glissante sur 15 minutes, Requêtes HTTP

Journal de bord

Ci dessous vue du journal de bord du poulailler, accessible par navigateur internet directement sur l’ESP32, via son adresse IP locale. Il reprend les variables principales de fonctionnement du poulailler, deux rubriques de messages « anomalie » et « erreur » pour documenter ce qui arrive, et une partie de « journal des événements ». Celui est de type « texte simple », d’une capacité de 10 Ko et les messages les plus anciens s’effacent au fur et à mesure.

Ce journal de bord étant hébergé directement sur l’ESP32 du poulailler, il est accessible en permanence en se connectant directement dessus, même si la liaison vers JEEDOM ne fonctionne pas.

On peut voir ci dessous notamment l’envoi des stats de ponte tous les jours à 23h30, et la mise à jour quotidienne de l’heure du poulailler par une requête NTP vers ma Freebox.

Affichages interface utilisateur

[à venir]

Câblage interne dans le poulailler

[à venir]

Leçons tirées si c’était à refaire

  • Utiliser deux capteurs « fin de course » pour la position haute et basse, pour simplifier la programmation et améliorer la bonne détection de coincement
  • Faire un fonctionnement en 12V puisque c’est sur secteur, ce qui est plus « standard » que 6V et permet plus de choix de types de motoréducteurs. Le design a été basé sur du 6V, car au début c’était prévu de le faire fonctionner sur panneau solaire + accu li-ion.
  • Faire fonctionner les capteurs ILS en 12V du coup, plutôt qu’en 3,3V, pour améliorer la robustesse aux parasites, malgré qu’il n’y ait pas de souci avec la

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *