Porte Motorisée de Poulailler (3ème Partie)
Ceci est la suite des articles précédents :
Porte Motorisée de Poulailler (1ère Partie)
Porte Motorisée de Poulailler (2ème Partie)
Nous allons parler aujourd'hui plus en détail de la réalisation électronique. Celle-ci va être découpée en deux parties :
- la carte alimentation
- la carte de commande
1. Les schémas
1.1. La carte de puissance
1.1.1. Alimentation sur batterie
Carte alimentation |
Pour récupérer le projet voir plus bas : 5. Téléchargements.
En fonction de l'option choisie (moteur continu ou servomoteur) cette carte sera pourvue de différents composants.
Les composants suivants sont communs aux deux solutions :
- batterie
- TP4056
- MP1584 5V (sauf panneau solaire 5V ou 6V)
- Q2 : transistor de commande de puissance
- XR2981 : convertisseur 5V pour l'ARDUINO
- P1 connecteur panneau solaire
- P2 : connecteur pour la carte de commande
- Q3 + Q4 : transistors de commande du chargeur
- FP6293-5V : convertisseur 5V pour le servomoteur
- P3 : connecteur MG996R
- MT3608 ou SX1308 : convertisseur de tension pour le moteur
- L293D : pont en H
- R8 : résistance de mesure du courant moteur
- P4 connecteur moteur
- Q1 : transistor de commande de l'alimentation VCC1 du L293D
Les deux transistors Q3 et Q4 permettent de connecter ou déconnecter le panneau solaire du chargeur TP4056. Le chargeur est coupé pendant la mesure de la tension du panneau solaire.Si l'option LDR est choisie ces deux transistors sont inutiles, on court-circuitera les pins 2 et 3 de Q3.
Un emplacement est prévu pour un circuit de mesure du courant du panneau, un INA138 suivi d'un amplificateur opérationnel :
Ce module me sera utile pour remonter les informations de courant de charge au serveur DOMOTICZ. Si cette option n'est pas envisagée il faudra court-circuiter les pins 5 et 6 sur la carte (U2 sur le schéma).
On voit également un jumper sur la borne + de la batterie. C'est un simple connecteur DUPONT mâle à deux broches. Celui-ci est utilisé pour la mesure du courant consommé à l'aide d'un câble relié au multimètre :
- 0V de l'alimentation
- GND du module L293D
- GND de la carte de commande (broche 4)
- +5V de l'alimentation
- VCC et VIN du module L293D
- +5V de la carte de commande (broche 6)
- IN1 et IN2 du module L293D seront reliés à L293D-1A et L293D-2A de la carte de commande
- le moteur sera relié à A- et A+ du module L293D
Par contre je déconseille totalement de relier un module L293D avec des fils DUPONT. C'est une source évidente de faux contacts. Il est préférable d'utiliser un boîtier DUPONT 8 contacts :
Il faudra une pince à sertir, ou bien souder les contacts sur les fils.
- 0V de l'alimentation
- fil marron du servomoteur
- GND de la carte de commande (broche 4)
- +5V de l'alimentation
- fil rouge du servomoteur
- +5V de la carte de commande (broche 6)
- orange : broche 11 de la carte de commande
1.2. La carte de commande
Voici le schéma retenu pour la partie commande :La carte de commande comporte tous les composants et modules basse puissance :
- ARDUINO PRO MINI 5V 16MHz
- SHT31D (optionnel)
- DS3231 (optionnel)
- NRF24L01 + régulateur HT7533-1 (optionnels)
Les entrées D2 et D3 sont réservées aux boutons d'ouverture et fermeture. Ce sont les seules à pouvoir réveiller le PRO MINI par interruption.
Sur l'entrée A3 on voit un capteur de fin de course pour la version à servomoteur, avec une résistance de PULL-UP de 1MΩ. Cette résistance remplace la PULL-UP interne de l'ATMEGA328, car la valeur de ces résistances internes est trop faible (20kΩ à 50kΩ) et cela occasionnerait une surconsommation lorsque le contact est fermé.
Sur l'entrée A0 un pont diviseur permet de mesurer la tension du panneau solaire. Ce pont est adapté à la mesure d'un panneau 12V (tension à vide environ 20V).
Sur l'entrée A1 un pont diviseur permet de mesurer la tension de la batterie.
La mesure sur ces entrées analogique est faite en utilisant la référence interne de l'ATMEGA328 : 1.1V. La valeur des ponts diviseurs est calculée pour obtenir une tension inférieure 1.1V :
- 4.4V au maximum sur A0 : OK pour une batterie LITHIUM-ION 4.2V maxi
- 24V au maximum sur A1 : largement suffisant pour un panneau 12V
Cette carte est reliée à la carte alimentation par un connecteur 11 points.
2. Les photos
La carte de commande (photo ajoutée récemment) :
Voici une photo de la carte de puissance :
En haut à gauche : le connecteur du panneau solaire.
Plus bas : le connecteur 11 points pour la carte de commande et le connecteur 3 points pour le MG996R.
Sur la photo la LED bleue du TP456 est allumée. La batterie est pleine.
J'utilise donc deux batteries chinoises. Elles sont vendues pour 6000mAH alors qu'elles n'en font que 1000, c'est dire le niveau de publicité mensongère.
La carte est équipée de tous les composants pour la version servomoteur, hormis la résistance noire 1W de mesure du courant moteur, inutile pour l'instant. Sous la résistance de 1W se trouve l'emplacement du futur L293D et du convertisseur MT3608 ou SX1308.
Les fonctionnalité suivantes sont assurées :
- ouverture / fermeture
- recharge de la batterie
- mesure de la tension de la batterie
- mesure de la luminosité (LDR)
- mesure de la tension du panneau solaire
- utilisation d'un capteur de fin de course haut
La coupure du panneau solaire pendant la mesure de la tension du panneau est particulièrement efficace. La luminosité pourra facilement être déterminée par ce moyen.
Par contre si un éclairage public est présent dans les parages cette solution sera inexploitable, qu'il s'agisse de mesure de luminosité par LDR ou à l'aide du panneau solaire.
Une sécurité a été ajoutée : après l'ouverture de la porte l'état du capteur de fin de course est contrôlé. S'il n'est pas vu en position haute, une deuxième tentative d'ouverture est lancée, et éventuellement une troisième.
Avec cette version sur PCB le couple moteur est nettement plus élevé qu'avec la version sur breadboard. Même en doublant le poids de la porte le moteur ne cale pas.
Ce n'est pas surprenant. La largeur des piste et les composants et connecteurs soudés contribuent grandement à ce résultat.
La tension de la batterie, qui est de 4.18V à vide, chute à 4.07V pendant l'ouverture de la porte. Sur breadboard il est impossible d'obtenir un résultat équivalent.
A noter : le routage de la carte est fait en double face, mais il est également possible de le graver en simple face (à la CNC par exemple) et de souder des straps pour remplacer les pistes de la face supérieure.
La carte se prête particulièrement bien à la gravure à l'anglaise côté recto. Elle est pourvue d'un large plan de masse.
Il est également possible de la réaliser sur une plaquette à pastilles d'environ 100mm x 100mm, avec des fils rigides de section suffisante pour la partie puissance :
- batteries
- TP4056
- convertisseur FP6293
- transistor Q1
- etc.
Les parties faible puissance peuvent se contenter de fil à wrapper.
La carte de commande également peut éventuellement être réalisée sur une plaquette à pastilles, mais elles est plus complexe.
4. Mesures
D'après les premiers essais avec ce servomoteur, j'observe que la batterie fournit une pointe de courant de plus d'1A à mi-ouverture de la porte, lorsque le bras de levier se trouve à l'horizontale, la position où il force le plus. Cela équivaut à environ 4W puisque la batterie a une tension de 4V pendant l'ouverture. Sous 5V le courant moteur devrait donc être de 800mA, c'est qui est très raisonnable.
Comme dit plus haut : même en doublant le poids de la porte le moteur ne cale pas. Il consommera plus de courant mais le temps d'ouverture est suffisamment court pour éviter un échauffement excessif.
Contrairement à ce qui se passait sur breadboard je n'ai pas observé de blocage moteur lors de l'ouverture de la porte.
4. Avancement
4.1. 04/05/2020
Le module RTC DS3231 a été ajouté.Le calcul de l'heure de lever et de coucher du soleil et donc d'ouverture et de fermeture de la porte est effectué à l'aide d'une API disponible dans la librairie standard ARDUINO :
#include <time.h>
time_t sun_rise(const time_t * timer);
time_t sun_set(const time_t * timer);
C'est simple et efficace, et cela peut éviter les aléas liés à une variation de luminosité indésirable, due à un éclairage public par exemple.
Bien entendu on peut changer l'heure et la date à l'aide de la console ou d'un terminal quelconque. Il faut donc un convertisseur USB / série branché sur l'ARDUINO MINI.
Comme l'ARDUINO est en sommeil, pour changer l'heure ou la date il faut le réveiller. Pour cela j'utilise une petite astuce :
Si la porte est ouverte appuyer sur le bouton ouvrir. Si la porte est fermée appuyer sur le bouton fermer. Comme la porte est déjà ouverte ou fermée, le logiciel entre dans un mode éveil pendant un certain temps : 30 secondes, le temps nécessaire pour entrer une petite commande sur la console :
date May 04 2020
time 16:25:00
Attention : bien respecter le format. Le jour doit être sur deux chiffres, tout comme l'heure, les minutes et les secondes.
Le mois doit être entré en abrégé :
Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, ou Dec
L'heure doit être entrée en valeur UTC (GMT). C'est important car il n'y a pas de gestion de changement d'heure été / hiver. De plus la librairie calcule les heures de lever et de coucher du soleil en temps UTC, donc le DS3231 doit obligatoirement donner l'heure UTC.
Il faudra donc entrer l'heure courante moins 2 heures en été, et l'heure courante moins 1 heure en hiver.
Le DS3231 est très précis, il possède un oscillateur interne calibré et compensé en température. Il dérivera très peu. On peut parier que l'heure restera exacte même après un an d'utilisation, à quelques secondes près.
Je n'envisage pas d'alternative du genre PCF8523, DS1307 ou autre. La précision de ces modules est trop dépendante de leur fabrication, en particulier du quartz utilisé, et de plus ils dériveront forcément beaucoup plus qu'un DS3231 en fonction de la température.
4.2. 06/05/2020
- porte ouverte ou fermée
- état de charge de la batterie
- tension du panneau solaire
Historique des ouvertures et fermetures |
Dispositifs |
5. Options
- servomoteur
- pas de capteur de température
- ouverture et fermeture en fonction du panneau solaire
- réveil toutes les 30 secondes
- utilisation du capteur de fin de course haut
- moteur :
- #define MOTOR SERVO_MOTOR : version servomoteur
- #define MOTOR DC_MOTOR : version moteur continu (non disponible actuellement)
- capteur de température :
- #define SENSOR NONE : aucun
- #define SENSOR HDC2080 : utilisation d'un HDC2080
- #define SENSOR SHT31D : utilisation d'un SHT31D
- #define SENSOR HTU21D : utilisation d'un HTU21D
- ouverture et fermeture :
- #define OPEN_CLOSE_METHOD USE_PANEL : utilisation du panneau solaire comme capteur de luminosité
- #define OPEN_CLOSE_METHOD USE_LDR : utilisation d'une LDR comme capteur de luminosité
- #define OPEN_CLOSE_METHOD USE_RTC : utilisation d'un circuit RTC
- #define OPEN_CLOSE_METHOD USE_DOMOTICZ : utilisation d'un circuit RTC + DOMOTICZ
- réveil
- #define SLEEP_TIME 30 : réveil toutes les 30 secondes
- utilisation du capteur de fin de course haut :
- #define USE_LIMIT_SWITCH : avec capteur
- //#define USE_LIMIT_SWITCH : sans capteur
- les horaires été / hiver (France par défaut)
- la latitude et longitude ( à renseigner si l'option RTC est utilisée)
- TIME_REQUEST_PERIOD : la période de demande de l'heure au serveur DOMOTICZ (30 jours par défaut)
- MANUAL_TIMEOUT : le temps maximal au bout duquel l'ouverture et fermeture automatique reprend le contrôle après une action manuelle
- MANUAL_WAKEUP : le temps de réveil pour la saisie de l'heure avec un terminal
6. Téléchargements
Cette troisième version est disponible ici :Le code prévu pour un moteur continu n'est bien entendu pas finalisé.
7. Liens utiles
La quatrième partie : le moteur continuhttps://riton-duino.blogspot.com/2020/06/porte-motorisee-de-poulailler-4eme.html
8. Conclusion
- 74% de l'espace en mémoire FLASH
- 51% de l'espace en RAM
Cordialement
Henri
Bonjour,
RépondreSupprimerTout d’abord un grand merci pour ces articles super et bien très bien détaillés. Mais je ne suis pas un pro de la programmation et j’ai une difficulté de compréhension sur la class L293D. Entre la version 3 et 4 de la class L293D, tu définis dans la fonction public « set » un 2ème paramètre : void (*callback(void)
Peux-tu me dire ce qu’il apporte et comment il fonctionne. Merci d’avance pour ton aide
Pour votre information j’ai fait ce printemps une couveuse automatique en partant avec comme contrôleur un ESP32 qui fonctionne avec pour l’instant un rendement de 50% d’éclosion, et donc maintenant je compte équiper mon poulailler d’une ou 2 portes automatiques pour plus de liberté.
Dans le sketch la méthode motor.set() est appelée avec un paramètre getBattVoltage, qui représente l'adresse d'une fonction qui va mesurer la tension de la batterie pendant l'ouverture ou la fermeture. En fonction de la tension mesurée, une LED rouge clignotera si celle-ci descend en dessous de 3V. Cela peut indiquer une fatigue de la batterie, spécialement en hiver.
SupprimerBonjour et merci pour ce super projet (et tout le site également). Je voudrais me lancer dans la réalisation de ce montage et finalement, plutôt que d'adapter et utiliser des cartes à pastilles, pourquoi pas faire fabriquer le PCB chez jlcpcb ?
RépondreSupprimerJ'ai téléchargé la branche master du projet (celle avec la résistance R9) et vu que je n'ai pas encore étudié la création de PCB avec kicad j'ai procédé comme suit: après avoir dézippé et lancé le fichier projet sous Kicad 6, j'ai ouvert le fichier PCB. Ensuite en cliquant sur Tracer j'ai un premier avertissement à propos du masque de soudure supérieur à 0; là j'avoue ne pas savoir si je dois le mettre à 0 ou ignorer l'avertissement.
En exécutant le DRC comme préconisé, j'ai quelques avertissements concernant des recouvrement de sérigraphie, mais surtout l'erreur "aucun contour trouvé sur la couche Contour", l'avertissement "Trous forés co-localisés" et des pistes avec des extrémités non connectées. Est-ce que ces erreurs et avertissements sont connus et à ignorer ou dois-je effectuer des modifications ?
Merci pour votre aide.
Oui, effectivement, "aucun contour trouvé sur la couche Contour" veut dire que le contour de carte (edge cuts) n'est pas dessiné.
SupprimerComme je grave moi-même ce n'est pas dérangeant, mais JLCPCB ne l'acceptera pas.
Je viens d'ajouter les "edge cuts", y compris sur la carte de puissance. Pour le reste je fonctionne sous KICAD 5 version anglaise. Je ne vois pas d'avertissements en DRC.
A noter que la dimension de la carte de puissance dépasse légèrement les 100mm x 100mm permettant d'avoir des tarifs intéressant chez JLCPCB.
SupprimerRéduire la longueur de la carte pour passer de 100,33 à 100mm, en déplaçant légèrement le support de batterie par exemple.
J'ai fait la modification. La longueur est passée à 99,69mm.
SupprimerMerci pour les modifications. J'ai testé avec Kicad 5.0.2 puis 5.1.9 pour être en phase avec la documentation de jlcpcb et en effet aucune erreur dans le DRC. Il doit y avoir des règles plus strictes dans la version 6 et 7 sortie récemment j'imagine.
SupprimerJ'ai pu générer les fichiers gerber pour la carte principale et la carte d'alimentation et les charger chez jlcpcb sans souci.
Au départ je voulais faire une modification mais j'ai abandonné car il n'y avait plus de pin libre sur l'arduino et je ne me voyais pas me lancer dans de grandes modifications. Suggestion pour une éventuelle nouvelle version: utiliser un bus 1wire pour des sondes de température DS18B20. L'avantage c'est qu'on peut en mettre plusieurs et qu'il existe les modèles étanches avec une bonne longueur de câble. Ceci-dit il est peut-être possible d'utiliser le mcp23008 ?
Oui, le MCP23008 est là pour ajouter des entrées / sorties supplémentaires en cas de besoin.
SupprimerSalut.
SupprimerJ'ai ajouté aujourd'hui une photo de la carte de commande. Cela peut aider à placer les modules dans le bon sens.
Pour ma part j'avais placé le module DS3231 à l'envers, pile apparente. Il était donc à l'envers. J'ai dessoudé son connecteur et l'ai ressoudé de l'autre côté.
Il fonctionne !
Le routage de la carte de commande a été légèrement modifié. Le connecteur 11 broches a été déplacé pour tomber pile en face de celui de la carte de puissance, ce qui permet d'empiler les deux cartes.
La nouvelle version est la v1.1 :
https://bitbucket.org/henri_bachetti/mysensors-gate/src/v1.1/
Je suis en train d'écrire un article qui décrit la mise en oeuvre et l'installation complète.
Dossier très détaillé merci. Question: j’utilise des mosfets sur des modules que je n’active que qd nécessaire. Comment cela se passe avec celui du régulateur en aval du panneau qd on est en deep sleep. ? Comment maintenir un statut sur un GPIO H/B entre 2 cycles de sleep/alive.
RépondreSupprimerBonjour. Il n'y a aucun problème, la GPIO reste dans le même état en mode sleep.
SupprimerC ce que je me disais contrairement à ESP32
RépondreSupprimerMerci
Sur ESP32, je ne saurais rien affirmer. Il faut essayer.
SupprimerDe toutes façons, un ESP32 en deep sleep, lorsqu'on le réveille, redémarre, donc la GPIO va retomber. Cela peut poser un problème, effectivement.
SupprimerPS il y’a un pb de timing sur les posts 4:50 AM/PM ? au lieu de 13:50
RépondreSupprimerJe vais regarder la mise en place de latch.
RépondreSupprimer