dimanche 5 juillet 2020

Porte Motorisée de Poulailler (le bilan)




Porte Motorisée de Poulailler (le bilan)


Il est temps de faire le bilan de ce projet et de donner quelques chiffres.

Pour rappel la partie électronique est composée de deux cartes. Leur largeur est identique, elles sont donc empilables :

Carte de puissance

Carte de commande

1. Configuration retenue

1.1. Moteur continu

Voici le moteur utilisé :

Moteur JGA25-370 60 tours / minute

La configuration est la suivante :

  • alimentation : 2 batteries 18650 (2000mAH au total)
  • panneau solaire 18V 4W
  • moteur à courant continu 12V 60 tours / minute
  • pas de contact de fin de course
  • module radio NRF24L01 + liaison serveur DOMOTICZ
  • module RTC DS3231
  • ouverture et fermeture par calcul de l'heure de lever et de coucher du soleil
  • module SHT31D
  • temps de sommeil : 5 minutes
  • demande de l'heure au serveur DOMOTICZ : une fois par mois

Comme je le disais en 1ère partie, un petit motoréducteur de ce type conviendrait parfaitement :

J'ai réussi à trouver deux vis de fixation de Ø1.6mm. Il me reste à trouver un petit manchon pour l'axe moteur Ø3mm pour l'adaptation de la poulie à alésage Ø4mm.

Après adaptation d'un manchon de cuivre Ø3mm / Ø4mm voici le résultat :

Ce moteur semble avoir une vitesse inférieure à ce qui est annoncé. De plus il n'a pas résisté bien longtemps. Au bout de quelques ouvertures les engrenages ont lâché sur un blocage moteur en fin de course.

Ce moteur est à déconseiller lorsque l'on utilise une détection de fin de course par mesure du courant.

1.2. ServoMoteur

Le fait que j'aie adopté une solution à moteur continu ne veut pas dire qu'une configuration à base de servomoteur n'est pas viable, bien au contraire.

Entre le 24 avril et le 20 juin celle-ci a donné entière satisfaction.

On utilisera de préférence un contact de fin de course haut, un contact REED + aimant par exemple :

En cas de besoin on trouve des servomoteurs ayant un couple plus élevé que le MG996R, le TD-8120MG (20kg.cm) :

TD-8120MG


2. Problème

Il est important que le couple moteur soit suffisamment faible afin d'éviter que les dents de la poulie ne forcent trop sur celles de la courroie. C'est une histoire de compromis entre la puissance du moteur, le diamètre de la poulie et la vitesse d'ouverture.
Avec le moteur que j'utilise (60 tours / minute) et une poulie de 10mm (16 dents), la valeur minimale du PWM pour que le moteur puisse soulever la porte de 250g est de 100 (le maximum est de 255). En choisissant une valeur de 120 le temps d'ouverture est de 22 secondes.

La valeur du PWM appliqué au moteur a donc été réduite car la puissance moteur est encore trop importante. La courroie est soumise à une tension trop importante en fin de course et a tendance à sauter.

Il est possible aussi que la courroie se soit légèrement détendue du fait que la température est plus élevée qu'en avril. J'ai donc ajouté un tendeur réalisé dans un morceau de fil d'acier galvanisé d'un diamètre de 3mm et un petit morceau de tube aluminium :

La courroie passe à 1mm de la poulie de renvoi située plus bas. Il est préférable qu'elle ne la touche pas, afin d'éviter toute usure.

Avec ce dispositif, outre le fait que la courroie est tendue, le nombre de dents en prise sur le pignon est légèrement supérieur. Le comportement est excellent.

Reste à voir ce que cette solution donnera en fonction de la saison.

3. Comportement

En pilotant le moteur en PWM le courant est irrégulier et il y a des pics allant  jusqu'à 220mA.

On pourrait filtrer ces pics en ajoutant un condensateur en parallèle sur la résistance shunt du L293D (R8). Pour filtrer un PWM à 500Hz sur une résistance de 1Ω ou 1.5Ω il faudrait une capacité de quelques milliers de µF .

Dans la dernière version du schéma j'ai ajouté une cellule RC 1KΩ / 22µF. Le fonctionnement est optimal.

Avec un rapport PWM de 120 les temps d'ouverture et de fermeture sont de 22 et 17 secondes.
L'arrêt moteur est réglé sur 100mA, grâce à la cellule RC.

4. Mesure du courant du panneau solaire

Le module de mesure du courant du panneau a été ajouté. Il s'agit d'un module équipé d'un INA138 décrit ici :

https://riton-duino.blogspot.com/2020/07/lina138-current-monitor.html

Il est enfiché sur un connecteur DUPONT femelle 7 points soudé sur la carte afin de pouvoir être retiré après la phase de tests.

L'information est remontée au serveur DOMOTICZ, c'est à dire que celui-ci sera capable d'afficher un graphique de la puissance fournie par le panneau solaire.

Ce qui m'intéresse est de connaître le courant et le temps de charge en fonction de la météo.

Voici les premières données affichées :

Pour réaliser ces premiers essais j'ai déchargé la batterie à plusieurs reprises avec une résistance de 10Ω. La puissance maximale débitée par le panneau est de 1.7W.

Le module de mesure ne sera utile que pendant la phase de test du système. Il sera retiré au printemps, quand la puissance journalière sera connue sur une période suffisamment longue, hiver compris, et éventuellement neige comprise.

Il sera remplacé par un cavalier entre les broches 5 et 6 afin que le courant du panneau puisse passer directement.

4. Consommation

Avec cette configuration la consommation totale est de 1mA, essentiellement due au DS3231.

La consommation est donc d'une dizaine de mAH pendant la nuit en été. Cette perte est compensée par le chargeur le matin aussitôt que le soleil se lève.

La capacité des batteries étant d'environ 2000mAH l'autonomie sans recharge sera de 2000 heures, donc 2.7 mois.

Cette capacité peut paraître disproportionnée, mais pendant l'hiver l'efficacité des batteries sera amoindrie, par conséquent je préfère surdimensionner.

Enfin, durant l'hiver il se peut que de la neige recouvre le panneau solaire. La batterie ne sera donc pas rechargée pendant des périodes plus ou moins longues.

5. DOMOTICZ

Le serveur DOMOTICZ permet de récupérer des informations sous forme de graphiques :

Ce matin la porte s'est ouverte à 05:49:26.

La tension du panneau solaire commence à augmenter à 5H25.

A 5H30 le chargeur TP4056 absorbe 0.4W fournis par le panneau solaire pendant une courte période. La consommation de la nuit est donc compensée en très peu de temps.

La porte s'ouvre à 05:49. Le chargeur TP4056 ne juge pas nécessaire de recharger la batterie, car la tension de celle-ci n'est probablement pas descendue suffisamment bas.

Entre 5H30 et 7H25 le système continue à consommer : 1mA.

Ensuite à 7H25 une phase de recharge démarre. La tension de la batterie est donc descendue en dessous du seuil déclenchant la recharge. La puissance absorbée varie entre 0.1W et 0.2W. La charge se termine à 8H45.

A 8H45 la tension du panneau est de 5.65V. Elle monte ensuite brutalement à 16.5V, ce qui est normal car la recharge est terminée et le TP4056 n'absorbe plus de courant, le panneau ne débite donc plus rien.

Les conditions météo ce matin : temps couvert.

Le panneau est à l'ombre jusqu'à environ 10H30.

Comme on le voit le panneau solaire n'a aucun mal à recharger la batterie, même par temps couvert et à l'ombre. La consommation est faible et par conséquent la quantité d'énergie nécessaire est faible également.

Le panneau solaire est utilisé au maximum à 10% de ses capacités. Tout ceci est extrêmement satisfaisant. Un panneau de 1W suffirait probablement.

6. Téléchargements

Cette version finale est disponible ici :

https://bitbucket.org/henri_bachetti/mysensors-gate/src/v1.0/

Depuis le 25 mars 2023 une nouvelle version est disponible : 

https://bitbucket.org/henri_bachetti/mysensors-gate/src/v1.4/

Les modifications hardware sont mineures (déplacement du connecteur 11 broches sur la carte de commande), les modifications logicielles concernent uniquement le paramétrage.

Egalement, une option a été ajoutée (voir options.h : CLOSE_DELAY).

// close delay in minutes
#define CLOSE_DELAY       30

Cette option permet de retarder la fermeture de la porte au coucher du soleil. En effet, lorsque le soleil  se couche la luminosité est loin d'être nulle, et les poules ne ressentent pas forcément la nécessité de rentrer dans le poulailler, en tous cas, pas toutes. Cela peut prendre plus d'un quart d'heure.

Enfin, l'activation du shell change. Il faut appuyer sur les deux boutons simultanément, et les relâcher pour que l'on puisse modifier l'heure et la date à l'aide du serial monitor. Pour en sortir, si par exemple on a appuyé sur les deux boutons par mégarde, il suffit d'appuyer sur un des deux boutons.

7. IDE ARDUINO

Quelques librairies sont nécessaires :

LowPower : https://github.com/rocketscream/Low-Power.git

Celles-ci sont optionnelles en fonction des options choisies dans options.h :


8. Évolutions

Dans sa dernière version le schéma a évolué : 

8.1. Filtrage de la mesure du courant moteur

Une cellule RC de 1KΩ / 22µF a été ajoutée en parallèle sur la résistance de mesure de courant moteur R8 (version moteur continu). Cette cellule permet de lisser la tension aux bornes de la résistance et d'obtenir une mesure plus stable, et donc de régler le courant de blocage du moteur plus finement. 

La mesure de courant moteur est elle-même moyennée dans le logiciel, afin de lisser la mesure. D'autre part la mesure n'est pas effectuée pendant 1 seconde au démarrage du moteur, afin d'éviter le pic de courant.

8.2. Servomoteur sans fin de course

Dans sa version servomoteur il est possible de se passer de contact de fin de course. Un servomoteur est composé d'un moteur continu, d'un certain nombre d'engrenages et d'un potentiomètre qui est utilisé par un circuit électronique afin de déterminer la position.

Il faut ouvrir le servomoteur et souder un fil sur le curseur du potentiomètre de celui-ci. Sur un MG996R c'est facile :

Il faut dévisser les 4 vis du servomoteur, enlever le capot du côté câble, et souder un fil sur le point milieu du potentiomètre (le fil blanc ci-dessus). Avant de refermer il faut agrandir de 1mm l'ouverture réservée au passage du câble, et refermer le tout.

Il vaut mieux éviter de retirer le capot du côté axe moteur, les engrenages risquent de tomber, et il serait dommage de perdre le petit axe du pignon central.

Le potentiomètre délivre environ 0V en position ZÉRO et 2.5V en position 180°.

On pourra ainsi mesurer la tension du curseur afin de déterminer la position du servomoteur. Le fil doit être branché en lieu et place du contact fin de course sur la broche 13 de l'ARDUINO.

Il suffit d'activer une option USE_SERVO_POT dans le code (options.h), et de désactiver l'option USE_LIMIT_SWITCH :

// limit switch is used (recommanded in a servomotor version)
//#define USE_LIMIT_SWITCH

// use the servomotor potentiometer voltage (needs a modification of the servo)
#define USE_SERVO_POT


Remarque : on peut aussi acheter un servomoteur avec retour de position analogique, si l'on en trouve un qui convient. En général il s'agit plutôt de petits modèles.

8.3. Ports auxiliaires

Un expander MCP23008 a été ajouté. Il permettra d'ajouter des entrées / sorties supplémentaires, pour de future évolutions :

  • distributeur de nourriture
  • approvisionnement en eau
  • chauffage
  • etc.

Ce composant est une option.

A savoir : en fonction des évolutions prévues le poulailler pourra difficilement se passer d'une alimentation secteur.

Si l'on ne veut pas s'encombrer de ce MCP23008 et de la place supplémentaire qu'il occupe sur le PCB, on peut télécharger la version v0.4 : 

https://bitbucket.org/henri_bachetti/mysensors-gate/src/v0.4/

Tout en conservant la carte puissance de la dernière version, afin de bénéficier du filtrage de la mesure du courant moteur, que la v0.4 ne possède pas.

9. Liens utiles

Après deux ans et demi, suite à un déménagement, la suite : l'installation

https://riton-duino.blogspot.com/2023/04/porte-motorisee-de-poulailler.html

10. Conclusion

Ce projet est certes complexe du fait de ses nombreuses possibilités :

  • moteur
    • courant continu
    • servomoteur
  • alimentation
    • secteur
    • batterie + panneau
  • méthode d'ouverture / fermeture
    • grâce à la luminosité
      • LDR : idéal en cas d'alimentation secteur
      • panneau solaire
    • à l'aide d'un calcul de l'heure de lever et de coucher du soleil
      • RTC DS3231 avec saisie manuelle de l'heure
      • RTC DS3231 avec demande d'heure au serveur DOMOTICZ

A partir du moment où l'on a fait les choix principaux le paramétrage est relativement simple. Le fichier options.h regroupe toutes les options et les commentaires sont nombreux.

Les paramètre liés au moteur continu sont expliqués en 4ème partie :

https://riton-duino.blogspot.com/2020/06/porte-motorisee-de-poulailler-4eme.html

Voir 3. Le logiciel

J'espère que cette suite d'articles apportera des réponses suffisantes à qui souhaite mener à bien un projet analogue, qu'il s'agisse de piloter une porte de poulailler ou simplement d'automatiser le pilotage d'un moteur en fonction de l'heure, avec une alimentation autonome ou non.


Cordialement
Henri

10 commentaires:

  1. Bonjour,
    Super boulot. Mes cours d'électronique étant lointains et mon métier actuel sans aucun rapport, j'ai besoin de votre aide pour mettre en place une solution similaire :
    J'envisage un panneau solaire (poulailler éloigné du réseau électrique), une porte motorisée et connectée en wifi à mon serveur Jeedom installé sur Raspberry Pi 4 à mon domicile. J'ai une réception Wifi acceptable au poulailler -64dBm.
    Quels sont les éléments à retenir, enlever ou ajouter à votre système ?

    RépondreSupprimer
    Réponses
    1. Je dirais : remplacer l'ARDUINO+NRF24L01 par un ESP32 (WIFI). Par contre je conseillerais un module ESP32 nu, pas une carte du genre DEVKIT qui consomme pas mal. Un module nu en veille consommera 5µA.
      Le circuit DS3231 devient inutile car l'ESP32 peut obtenir l'heure via NTP.
      Il faut alimenter l'ESP32 sous 3.3V. Un régulateur ME6211 500mA peut faire ce travail.
      Il faut choisir le mode de transmission (servomoteur ou moteur CC) : voir le premier article.

      Supprimer
  2. Bonjour, Je travailler à mon poulailler, comment est-il possible d'envoyer DEPUIS domoticz des données à mon ESP 32 ? Dans le sens inverse c'est facile avec API / JSON mais là je sèche ! je souhaiterais envoyer la commande "ouverture porte" ou "fermeture porte" ainsi que les heures de coucher et lever du soleil à l'ESP de manière à ce qu'il réagisse en conséquence ... Merci beaucoup ;-)

    RépondreSupprimer
    Réponses
    1. Il faut que l'ESP32 embarque un serveur WEB, et soit à l'écoute sur le port 80 (ou 8080 ou 8000). Le serveur doit être capable de traiter des URLs du type http://192.168.X.X/?door=open ou http://192.168.X.X/?door=close (ce n'est qu'un exemple).

      Ensuite il faut ajouter un dispositif virtuel à l'aide du menu "Configuration / matériel", type Dummy, puis lui associer un capteur virtuel du type Interrupteur / Sélecteur.
      Dans l'onglet interrupteurs, régler le type sur On/Off et associer deux URLs aux actions ON et OFF (les mêmes que précédemment).
      Il vaut mieux que l'IP de l'ESP32 soit fixe.

      Supprimer
    2. Le WEB server peut être construit facilement avec la classe WebServer, ou mieux : ESPAsyncWebServer
      https://randomnerdtutorials.com/esp32-async-web-server-espasyncwebserver-library/

      Supprimer
  3. Bonjour Henri, J'ai une question concernant le MT3608. Çà fait le deuxième que je grille pourtant sur le Vin je suis au alentour de 4V donc une tension normale. Vu qu'ils viennent de alie-express je ne suis pas sur de la qualité. Le premier j'ai réussi difficilement a le régler puis il s'est mis a fumer et le deuxième impossible a le régler malgres une 50aine de tours sur le potentiomètre j'oscille entre 3.75 et 3.81 V en tension de sortie donc plus bas que la tension d'entrée. Vu que je dois alimenter un moteur 12V connais tu un module du même type déjà régler en 12V ?
    D'avance merci

    RépondreSupprimer
    Réponses
    1. Sur ce projet j'avais le choix entre le MT3608 et le SX1308 pour alimenter un moteur continu 12V, j'ai essayé les deux avec satisfaction.
      Le SX1308 étant plus petit, c'est lui que j'ai choisi au final. Il tourne depuis plus d'un an sans problème.

      Supprimer
    2. Ok merci je vais regarder de ce côté la alors voir si j en trouve des plus fiable . Merci Henri

      Supprimer
  4. Bonjour Henri, merci pour tous vos précieux partagés. Je souhaite réaliser une porte automatique mais débuté dans tout ce domaine. Je suis programmeur mais n'y connais pas grand chose en elec.
    Je voulais voir si je pouvais réutiliser un moteur d'un ancien scanner et en le démontant j'ai vu qu'il présentait un système de courroie qui ressemble un peu a votre solution.
    De la je me suis posé plusieurs questions. Serait t'il possible de "hacker" le contrôleur du scanner pour lui injecter des commandes. Ou alors récupérer la partie moteur, courroie, pignon (voir d'autres composants sur la carte) et y inclure un Arduino ? Je peux vous transmettre des images par mail au cas où.

    RépondreSupprimer
    Réponses
    1. Bonjour.
      Hacker le contrôleur du scanner me paraît difficile, ou impossible. Il faudrait avoir les schémas et le code, et il est loin d'être évident que le contrôleur mette à disposition des commandes de rotation du moteur.
      Récupérer la partie moteur + pignon + courroie, pourquoi pas, si le moteur est capable de soulever la porte prévue ?
      Par contre comme il y a des chances pour que ce soit un moteur pas à pas, j'ai bien peur que l'alimentation par batterie soit à oublier.

      Supprimer