Je vais essayer de vous expliquer comment j’ai réalisé un système pour ouvrir automatiquement la porte d’un poulailler, en utilisant une carte Arduino, une horloge DS3231 et sans oublier les conseils trouvés au Fablab.

Je me suis énormément inspiré de ce site:

http://seb.lobo.pagesperso-orange.fr/Porte-poulailler/motorisation-porte-eco.html

J’utilise une porte guillotine en métal et un contre-poids pour soulager le moteur, la porte coulisse dans des rails, et des capteurs de position pour arrêter l’ouverture ou la fermeture de la porte. Comme je n’ai pas le secteur 220V près de mon poulailler, pour économiser la batterie, je mets en veille l’Arduino et le réveille via une interruption, celle-ci sera générée par une horloge ou manuellement. L’ouverture et la fermeture dépendra des saisons.

Matériel utilisé :

    • moteur pas à pas 28BYJ_48 avec circuit de puissance ULN2003.
    • carte Arduino pro mini.   
    • horloge temps réel RTC DS3231.
    • batterie plomb 12 volts, car absence de secteur à proximité de mon poulailler.
    • régulateur de tension 5V L7805, 2 condensateurs qui vont avec.
    • capteurs de fin de course.
    • transistor 2N2222.
    • résistances.
    • panneau solaire.

Panneau solaire pour recharger la batterie.

Au début, j’ai installé un seul panneau puis un deuxième s’est révélé nécessaire pour l’hiver à cause du faible ensoleillement. J’habite en Saône et Loire (71). Des régulateurs existent sur le Net, celui-ci permet de charger la batterie par les panneaux et d’alimenter le système.

Bibliothèques utilisées pour la réalisation du projet.

Programmes dont j’ai eu besoin pour la réalisation du projet.

    • un scanner du bus i2c pour connaitre l’adresse de mon horloge.

Scanner i2c https://gist.github.com/tfeldmann/5411375 Version 5, March 28, 2013

    • NotePad++ pour lire les bibliothèques et les modifier si nécessaire.

Notepad++ https://notepad-plus-plus.org/fr/  version 7.5.4

    • Fritzing pour dessiner le câblage de mon montage et le futur circuit imprimé de ce système.

Fritzing http://fritzing.org/home/

Téléverser dans un arduino pro mini.

Comme il n’y pas de port USB sur la carte arduino pro mini, voici un petit paragraphe pour expliquer comment j’ai fait pour téléverser. J’ai utilisé une carte arduino uno, j’enlève le microcontrôleur et j’utilise juste RX, TX et RST, que je branche simplement :

  • le RX arduino        ->   RX pro mini
  • le TX arduino        ->   TX pro mini
  • le RST arduino      ->   RST pro mini

Il y a d’autres solutions pour téléverser dans un arduino pro mini (une bonne recherche indique FTDI, sinon rendez-vous dans le Fablab le plus proche de chez vous).

Programmation arduino :

    • mise en veille et réveil de l’Arduino.
    • l’utilisation des interruptions.
    • tableau à 3 dimensions.
    • bibliothèques pour moteur pas à pas et horloge DS3231.

PROBLÈMES

Problèmes rencontrés lors de la mise en œuvre :

  • Réaliser le programme d’un seul coup, résultat rien ne fonctionnait et je n’arrivais pas à savoir où ça n’allait pas.

Alors j’ai fait un programme pour chaque éléments qui composent mon projet. Par exemple un programme pour le moteur avec sa librairie, le faire tourner dans un sens, puis dans l’autre sens, une fois réussi je sauvegarde, puis je rajoute par exemple les capteurs et ainsi de suite, jusqu’à faire fonctionner le programme entièrement. A mon avis les habitués du bricolage trouvent cela évident…

  • Problème rencontré avec l’horloge DS3231, impossible de rentrer en communication avec l’horloge.

Pour me simplifier la vie (pour la rédaction de mon programme) j’utilise une bibliothèque pour l’horloge DS3231, lien voir ci dessus, et l’utilisation des exemples.

Après avoir lu la doc technique : https://datasheets.maximintegrated.com/en/ds/DS3231.pdf  je découvre qu’il utilise la communication i2c. On découvre pas mal de cours sur Internet si l’on veut connaitre plus de détails sur ce mode de communication.

Utilisation de la bibliothèque Wire.h pour permettre la communication i2c, toujours rien. Comme la communication i2c à besoin d’une adresse je ne sais pas quelle adresse a l’horloge DS3231. Je vais donc utiliser un scanner de bus i2c pour connaitre l’adresse de mon horloge. J’ai utilisé ce programme là :  https://gist.github.com/tfeldmann/5411375 .

Je téléverse le programme dans un arduino Uno puis connecte l’horloge DS3231 à cette carte Arduino.

J’obtiens l’adresse de mon horloge, ensuite j’ouvre avec Notepad++ la bibliothèque DS3231.h qui a été installé, je cherche la ligne qui définit l’adresse de mon horloge et vérifie que se soit la même adresse. Si ce n’est pas la même adresse trouver lors du scan, changer l’adresse et sauvegarder.

Une fois cette modification faite l’horloge DS3231 a marché.

  • Problème rencontré la batterie 12V se vide, et ne tient pas la durée.

C’est en mesurant la consommation en courant du circuit que je me suis rendu compte que le circuit puissance du moteur pas à pas, l’ULN2003 consomme en continue du courant, que le moteur tourne ou pas, même avec la mise en veille de l’Arduino. Je décide de commander avec un transistor 2N2222 l’alimentation de l’ULN2003, pour que le moteur fonctionne seulement quand j’en ai besoin, c’est à dire pour ouvrir et fermer la porte. Depuis cette modification, je n’ai plus de problème de décharge de la batterie.

J’ai aussi enlevé les LEDs qui sont sur le circuit imprimé où il y a l’ULN2003.

L’autre problème rencontré avec la batterie, c’est en hiver avec le froid. Celle-ci se décharge. Là, je n’ai pas cherché à corriger ce problème pour l’instant, peut-être faire couver la batterie par les poules à voir… 🙂

  • Problème rencontré avec le contre-poids.

L’ensemble du système étant entièrement en extérieur, les aléas climatiques perturbent le système : le vent fort fait balancer le contre-poids qui de ce faite ne touche plus les capteurs fin de course. Correction du problème en faisant un guide pour le contre poids, afin qu’il ne puisse que coulisser de haut en bas, bref qu’il ne se balance plus au vent.

  • Problème rencontré avec la porte guillotine.

Il y a de la paille à l’intérieur du poulailler, je ne sais pas pourquoi mais les poules se débrouillent toujours pour qu’il y ait de la paille sous la porte, empêchant le contre-poids de toucher le capteur fin de course. Dans le fond c’est pas grave sauf que le moteur tourne sans fin et vide la batterie. Pour corriger ce problème, je ne ferme plus complètement la porte, je laisse un espace (≈ 1/2 cm) pour que la paille ne gêne plus la fermeture. C’est avec le positionnement des capteurs fin de course que je règle la hauteur d’ouverture/fermeture de la porte.

Programme arduino.

Voilà le programme téléversé dans l’arduino j’ai deux versions :

  • une version pour communiquer avec l’ordinateur afin de voir ce que l’Arduino exécute avec un ordinateur :

Poule_global_08_final_aveccom

  • une version sans communication avec l’ordinateur pour alléger le programme supporté par Arduino et c’est celui là qui fait fonctionner mon système:

Poule_global_08_final_sanscom

Explication sur la rédaction du programme:

Le programme est aussi inspiré par les exemples des bibliothèques, et le site cité en début d’article.

Par simplicité je déclare toutes mes variables en début de programme pour être tranquille lors de la rédaction du programme.

Utilisation d’un tableau pour définir les horaires d’ouverture avec le tableau appelé « reveilal1[12][2][2] » et pour les horaires de fermeture avec le tableau appelé « endortal2[12][2][2] ». Ce sont des tableaux à trois dimensions [12] pour les mois de l’année, [2] pour un horaire début de mois et l’autre pour la fin du mois j’ai fait comme ça car selon le mois de l’année l’augmentation ou la diminution d’ensoleillement est plus ou moins important, [2] pour définir l’heure et les minutes.

Je suis un débutant dans la programmation Arduino. Alors je vais vous conseiller de chercher comment marchent les interruptions et comment fonctionne la bibliothèque avr/sleep.h. Je me permet de faire simple car il y a pas mal d’informations sur la toile. S’il le faut je rajouterai des liens pour trouver ces informations.

Pour compléter le tout, voilà un fichier Fritzing pour le câblage réalisé, c’est une ébauche il n’est pas totalement terminé, les valeurs des composants ne sont pas correctes.

cablage poule

Pour l’instant tout fonctionne correctement, j’espère que tout se passera bien pour vous.

Jean-François.