Arduino et Porte automatique de poulailler

Qwffauusvzg4rhptjwim

Difficulté:

Bonjour,
Mes parents possèdent un poulailler et m’ont demandé si je pouvais leur réaliser une porte automatique pour celui-ci.
J’ai donc réfléchi à une solution à base d’arduino et facile à réaliser.
Mes parents voulaient pouvoir facilement modifier les heures d’ouverture et de fermeture, j’ai donc penser à un écran LCD avec des touches.


Je partage donc ma réalisation pour ceux que ça intéresse.


Certains matériels que j’ai utilisés sont de la récupération de pièces que j’avais en stock.
Cela me permet d’optimiser mon budget d’achat.


Le prix que j’ai indiqué tient compte de tout le matériel listé.


Mise à jour 8/04/2018:

- correction d'une erreur dans mon code pour modifier le seuil de luminosité auto.

- suppression de l'inertie du moteur à l'ouverture/fermeture de la porte


Mise à jour du matériel 8/04/2018:

Mon tuto datant d'avant la migration du site en V2, je ne peux pas modifier la liste du matériel car le tuto est bugué depuis cette migration.
En attendant la correction du site (et tuto) par les administrateurs, prenez en compte le matériel mis à jour ci-dessous plutôt que ceux listés dans la section "Matériel nécessaire":

résistances 1kohm: lien
moteur (avec renvoi d'angle) 25rpm: lien
coupleur d'axe 4mm-6mm: lien
axe 20cm 4mm: lien

Sources fichiers techniques: http://dl.free.fr/getfile.pl?file=/DMWawlZ4


Mise à jour 28/04/2018:

- prise en compte des éphémérides pour l'actionnement de la porte

- passage heure été/hiver automatique

-corrections de quelques bugs

Matériel

Medium uq48a5l8brbelffpdvty

Budget:

80 €

  • Arduino Pro Mini (j’avais celui là sous la main), (Arduino à base d’ATMEGA328P) : Disponible ici
  • LCD avec Keypad : Disponible ici
  • RTC DS1307 : Disponible ici
  • driver moteur : Disponible ici
  • convertisseur 5V (régulateur 5V) : Disponible ici avec 4 ports usb
  • moteur : Disponible ici
  • axes
  • coupleurs d’axes
  • engrenages
  • boite de dérivation étanche : Disponible ici
  • câbles
  • photorésistance : Disponible ici
  • résistances 1Kohm : Disponible ici
  • interrupteur micro-switch :Disponible ici
  • planche de bois
  • glissière U
  • vis, clous, fil nylon

    Etape 1 : Découpage et assemblage des pièces en bois

    Chaque poulailler ayant des tailles différentes, les mesures et les découpes sont à adapter.
    Mon poulailler a une porte de dimension 27x20cm, il faut donc une hauteur d’environ 60cm pour gérer la porte.

    Malheureusement je n’ai pas pris de photos au cours du découpage et de l’assemblage des éléments de bois mais les photos du résultat final sont assez significatives des étapes à entreprendre:
    – découper l’ouverture d’une largeur un peu plus grande que celle du panneau de la porte pour que cette dernière est un peu de jeu,
    – placer des tasseaux de part et d’autre de l’ouverture et y punaiser/coller les glissières,
    – glisser la porte,
    – placer les interrupteurs de fin de course en haut et en bas, les protéger par un petit morceau de bois,
    – mettre en place le système d’engrenages, axes, moteur et poulie (j’ai utilisé un 2ème engrenage avec un bouchon de liège traversé par l’axe),
    – faire le coffret protégeant tout le système mécanique.
    – relier la porte et la poulie par un fil de nylon

    J’ai utilisé un système de vis sans fin pour 2 raisons:
    – la porte ne peut pas redescendre par son propre poids
    – réduction de la vitesse de 1/18ème ce qui augmente un peu le couple pour lever la porte.


    Mise à jour 28/04/2018:

    Pour utiliser les éphémérides, aller dans le menu "Auto Ephemeride"
    le réglage du delta sert à ouvrir la porte à N minutes avant le lever du soleil, et fermer la porte à N minutes après le coucher du soleil.
    Dès que vous mettez un delta supérieur à 0 minute, la fonctionnalité s'active et désactive les heures fixes d'ouverture/fermeture ainsi que la luminosité auto.

    En revenant à l'écran principal, vous aurez l'heure d'ouverture soustrait du delta, ainsi que l'heure de fermeture additionné du delta.
    Les 2 symboles @@ indiquent que c'est la fonction Auto Ephéméride qui est active.

    Le calcul des éphémérides est basé sur le site IMCCE: https://www.imcce.fr/services/ephemerides/
    un calendrier des éphémérides: https://www.ephemeride.com/calendrier/solaire/19/

    Pour le code de calcul, je me suis basé sur celui de Bricoleau que je remercie: https://forum.arduino.cc/index.php?topic=275902.0

    Au niveau du code et des fichiers contenu dans le zip:
    Bien copier la librairie (à extraire) caculEphemeride dans le dossier libraries du dossier Arduino.

    Niveau code:
    au début, vous pouvez modifier quelques paramètres:
    timeout_porte: c'est le délai maxi d'action de la porte avant de se mettre en sécurité (message à l'écran "Erreur Porte").
    les coordonnées longitude, latitude: j'ai mis la Tour Eiffel. Que vous soyez au Nord-Ouest ou au Sud-Est de la France ne changera pas grand chose sur les heures des Ephémérides.
    ligne 79 à 84, ce sont mes valeurs obtenues lorsque j'appuie sur les boutons de l'écran. Il est possible que vous ayez des valeurs différentes, donc à adapter au besoin.



    Mise à jour 16/02/2016:

    Le système de vis sans fin en plastique s'est usé au fil du temps, la porte ne s'ouvrait plus correctement.

    J'ai donc remplacé la partie moteur et moto-réduction avec un trouvable sur Internet qui intègre directement le système de vis sans fin. J'ai vérifié l'étage de moto-réduction: intégralement en métal, donc bien plus solide ! :)

    Je garde une vitesse finale comme précédemment soit 25t/min.


    A l'origine (plus d'actualité):
    (J’ai choisi ce moteur MFA 918D151-12 car il est équipé d’un motoréducteur offrant une vitesse de sortie de 472t/min à 12V et un couple de 219 g.cm. Avec la vis sans fin, la vitesse finale est de 26t/min pour un couple d’environ 3900g.cm ce qui est largement suffisant pour la porte pesant environ 300g.)

    Etape 2 : assemblage boitier de commandes / branchements

    j’ai utilisé une boite de dérivation pour y mettre toute la partie électronique et commandes.
    J’ai fait une découpe sur la face avant du boitier pour le LCD ainsi que des trous pour les boutons.
    Le LCD est fixé par des entrecroises derrière la face avant de la boite.

    Le reste des branchements est détaillé dans le schéma.
    vous avez également le brochage sur l’image de la plaque d’essai à bandes cuivrées.

    N'hésitez pas à ouvrir le schéma sous Fritzing pour voir en gros plan le nom des pins de chaque composant. Ce sera plus facile d'identifier les connexions.

    Le bus SDA/SCL pour communiquer avec le module RTC DS1307 utilise les pins A4 et A5 de l’arduino. Sur l’arduino pro mini, ces 2 pins se trouvent au milieu du circuit, il faut souder 2 pin header supplémentaires pour les utiliser.
    Avec un arduino nano, il n’y a pas cet ajout à effectuer: toutes les pins sont sur les cotés du circuit.

    Les interrupteurs de fin de courses sont au repos en position ouverte.

    Le convertisseur 5V USB que j’ai utilisé pour alimenter l’arduino est de la récupération.
    Vous pouvez prendre n’importe quel autre convertisseur DC-DC 5v.

    Pour l’alimentation, j’ai opté pour une batterie de voiture (12V), ce qui donne une très grande autonomie au système.
    Elle est reliée par un connecteur d’alimentation type jack.

    Etape 3 : programmation de l’arduino

    Avant tout chose, pour ceux qui ne connaissent pas Arduino, je vous recommande de lire ces guides d'utilisation (il y en a de nombreux sur Internet):

    http://www.locoduino.org/spip.php?article210
    http://www.locoduino.org/spip.php?article71

    Cela vous évitera bien des erreurs lors de la compilation et téléchargement dans l'ATMega.


    L’arduino pro mini est un peu spécial: il utilise une liaison série pour être programmé. J’ai donc dû utiliser un programmeur USB avec.
    Sur un arduino nano, le connecteur USB est présent donc aucun problème. Le brochage des pins reste le même.

    Le fichier menu.h est à mettre dans le même dossier que poulailler.ino. Il est utilisé en tant que librairie pour les menus.
    Il vous faudra également installer les librairies RTClib-master, CalculEphemeride et les mettre dans le dossier “librairies” de votre IDE Arduino. Ces librairies sont utilisé pour communiquer avec le module DS1307 et le calcul des éphémérides.

    Il est possible que la librairie RTC existe déjà dans celles de l'IDE Arduino. Dans ce cas, remplacez là.

    fonctionnalités:
    – modifier la date et l’heure courante
    – programmer les heures d’ouverture et de fermeture de la porte

    – configurer en mode auto par éphéméride
    – configurer en mode automatique par gestion de la luminosité
    – mode forcer pour ouvrir ou fermer la porte

    J’ai créé un menu déroulant pour faciliter la programmation des heures d’ouverture et de fermeture de la porte.
    Les boutons en façade:
    – les flèches servent à naviguer,
    – le bouton OK (Select) sert à aller dans un sous-menu, valider un choix ou une modification,
    – le bouton Reset sert à allumer le rétro-éclairage (10s) du LCD afin de lire l’écran.

    Les valeurs de vos boutons peuvent être différentes des miennes. Il faudra ajuster le code ligne 31 à 37 avec les bonnes valeurs sinon le comportement des boutons sera étrange.

    Le module RTC DS1307 possède une pile de sauvegarde. En cas de coupure de l’alimentation principale, la date et l’heure courante ainsi que les heures programmées sont sauvegardées en mémoire.

    Avant de brancher la partie driver-moteur, vérifiez que le sens du branchement corresponde bien au sens voulu du moteur.
    Faire un essai sans relier la porte et la poulie avec le fil de nylon.

    Utilisation:
    Au démarrage la date et l’heure s’affiche. Au bout de 10s, l’écran s’éteint.
    Appuyer sur les flèches haut ou bas pour allumer l’écran et ouvrir le menu déroulant.
    Naviguer dans le menu déroulant avec les flèches haut/bas.
    Appuyer sur OK pour entrer dans un des menus.
    Les flèches droite/gauche servent à se déplacer sur les différentes valeurs que l’on veut modifier.
    Les flèches bas/haut servent à changer les valeurs.
    Appuyer sur OK pour valider les modifications.
    Si vous appuyez sur flèche gauche alors que vous êtes déjà sur la valeur la plus à gauche de l’écran, vous retournez au menu supérieur.
    Pour la gestion forcée, les flèches haut/bas servent à ouvrir ou fermer la porte. La porte restera dans cet état tant que vous ne quitterez pas le menu gestion forcée.
    En quittant la gestion forcée, les heures programmées reprennent leurs droits et actionneront la porte selon son état.

    La gestion par luminosité automatique est sécurisée par les heures d’ouverture et fermeture:
    La porte ne s’ouvrira que si l’heure d’ouverture est passée et que la valeur de la luminosité est supérieure au seuil choisi.
    La porte ne se fermera que si l’heure de fermeture est passée et que la valeur de la luminosité est inférieure au seuil choisi.

    Cette sécurité permet d’éviter les fausses valeurs reçues par la cellule photoélectrique:
    par exemple si vous passez devant la cellule en pleine journée.

    Si vous avez des erreurs à la compilation avec les librairies LiquidCrystal, Wire, ou RTCLib-master, vérifiez que vous n'êtes pas en conflit avec ces dernières et que vous ne les avez pas en doublon dans votre dossier "libraries", ou dans celui situé dans ProgramFiles.

    Etape 4 : Mise marche

    Etape 5 : Ouverture


    http://www.youtube.com/watch?v=IvfoXd7qGZQ

    Sur la vidéo de l’ouverture, je modifie pour l’exemple l’heure de fermeture en la mettant plus tard que l’heure actuelle ce qui a pour effet d’ouvrir la porte puisque l’heure du couché n’est pas encore arrivé.

    Etape 6 : Fermeture

    http://www.youtube.com/watch?v=jF93cIud7C8

    J’espère que mes explications sont assez claires pour vous.

    Si vous avez des questions n’hésitez pas à me le faire savoir.

    Regardez les commentaires: des réponses y sont apportées.

    Sources:


    Vous aimez ce tutoriel ?


    BLANCHARD

    07 juil. 2016 à 10:37

    Super idee!!!

    Je partage sur fb!

    Osteres

    07 juil. 2016 à 10:37

    Superbe ! Ça donne des idées de projets ! =)

    jack18

    07 juil. 2016 à 10:37

    tres bonne idée le menu pour choisir les heures 🙂

    helenema

    07 juil. 2016 à 10:37

    Est-ce que ça peut fonctionner avec une l'arduino uno ?

    bagou91

    07 juil. 2016 à 10:37

    Oui c'est bon. Vérifies juste les pins pour le SDA/SCL qu'elles correspondent bien.

    Valknut

    07 juil. 2016 à 10:37

    Bravo à la concurrence quand même ^^ J'ai aucune chance à coté de ça !

    bagou91

    07 juil. 2016 à 10:37

    Merci 🙂

    MichelLemoine

    07 juil. 2016 à 10:37

    Merci pour ce tutoriel !

    J’essaierai de le reproduire chez moi pour mes poules !

    moi2

    07 juil. 2016 à 10:38

    le logiciel arduino me mets plein d’erreur

    sinon c’est super

    bagou91

    07 juil. 2016 à 10:38

    je viens de me rendre compte que j’avais oublié d’inclure en PJ la librairie RTClib pour la programmation.

    c’est corrigé.

    moi2

    07 juil. 2016 à 10:38

    merci mais j'ai encore des problème

    surtout cette ligne :

    bool erreur = false;

    bagou91

    07 juil. 2016 à 10:38

    je ne vois pas le problème.

    j'ai repris mon programme dans un nouveau sketch, il s'est compilé sans erreurs.

    peux tu me donner le message d’erreur exact ?

    moi2

    07 juil. 2016 à 10:38

    vola le long message d'erreur :


    In file included from sketch_feb18a.ino:2:

    C:UsersordiDocumentsArduinolibrariesMenu/Menu.h:33:22: error: WProgram.h: No such file or directory

    In file included from C:UsersordiDocumentsArduinolibrariesMenu/Menu.h:34,

    from sketch_feb18a.ino:2:

    C:UsersordiDocumentsArduinolibrariesMenu/interfaces/MenuInterface.h:41: error: 'byte' has not been declared

    C:UsersordiDocumentsArduinolibrariesMenu/interfaces/MenuInterface.h:47: error: 'byte' has not been declared

    In file included from C:UsersordiDocumentsArduinolibrariesMenu/SubMenu.h:35,

    from C:UsersordiDocumentsArduinolibrariesMenu/MenuItem.h:35,

    from C:UsersordiDocumentsArduinolibrariesMenu/Menu.h:36,

    from sketch_feb18a.ino:2:

    C:UsersordiDocumentsArduinolibrariesMenu/interfaces/SubMenuInterface.h:43: error: 'byte' has not been declared

    C:UsersordiDocumentsArduinolibrariesMenu/interfaces/SubMenuInterface.h:48: error: 'byte' has not been declared

    In file included from C:UsersordiDocumentsArduinolibrariesMenu/MenuItem.h:35,

    from C:UsersordiDocumentsArduinolibrariesMenu/Menu.h:36,

    from sketch_feb18a.ino:2:

    C:UsersordiDocumentsArduinolibrariesMenu/SubMenu.h:46: error: 'byte' has not been declared

    C:UsersordiDocumentsArduinolibrariesMenu/SubMenu.h:51: error: 'byte' has not been declared

    C:UsersordiDocumentsArduinolibrariesMenu/SubMenu.h:53: error: 'byte' does not name a type

    C:UsersordiDocumentsArduinolibrariesMenu/SubMenu.h:54: error: 'byte' does not name a type

    C:UsersordiDocumentsArduinolibrariesMenu/SubMenu.h:55: error: 'byte' does not name a type

    In file included from sketch_feb18a.ino:2:

    C:UsersordiDocumentsArduinolibrariesMenu/Menu.h:51: error: 'byte' has not been declared

    C:UsersordiDocumentsArduinolibrariesMenu/Menu.h:59: error: 'byte' has not been declared

    C:UsersordiDocumentsArduinolibrariesMenu/Menu.h:62: error: 'byte' does not name a type

    C:UsersordiDocumentsArduinolibrariesMenu/Menu.h:63: error: 'byte' does not name a type

    C:UsersordiDocumentsArduinolibrariesMenu/Menu.h:64: error: 'byte' does not name a type

    sketch_feb18a:10: error: 'Button_t' does not name a type

    sketch_feb18a:11: error: expected ',' or '…' before '&' token

    sketch_feb18a:11: error: ISO C++ forbids declaration of 'Menu_t' with no type

    sketch_feb18a:32: error: 'Menu_t' does not name a type

    sketch_feb18a.ino: In function 'void loop()':

    sketch_feb18a:90: error: 'readPushButton' was not declared in this scope

    sketch_feb18a:90: error: 'BP_NONE' was not declared in this scope

    sketch_feb18a:94: error: 'MAIN_MENU' was not declared in this scope

    sketch_feb18a.ino: At global scope:

    sketch_feb18a:169: error: 'Button_t' does not name a type

    sketch_feb18a:186: error: expected ',' or '…' before '&' token

    sketch_feb18a:186: error: ISO C++ forbids declaration of 'Menu_t' with no type

    sketch_feb18a.ino: In function 'void displayMenu(int)':

    sketch_feb18a:191: error: 'Button_t' was not declared in this scope

    sketch_feb18a:191: error: expected `;' before 'buttonPressed'

    sketch_feb18a:200: error: 'menu' was not declared in this scope

    sketch_feb18a:205: error: 'readPushButton' was not declared in this scope

    sketch_feb18a:205: error: 'BP_NONE' was not declared in this scope

    sketch_feb18a:208: error: 'buttonPressed' was not declared in this scope

    sketch_feb18a:208: error: 'readPushButton' was not declared in this scope

    sketch_feb18a:208: error: 'BP_NONE' was not declared in this scope

    sketch_feb18a:219: error: 'readPushButton' was not declared in this scope

    sketch_feb18a:219: error: 'BP_NONE' was not declared in this scope

    sketch_feb18a:222: error: 'buttonPressed' was not declared in this scope

    sketch_feb18a:223: error: 'BP_UP' was not declared in this scope

    sketch_feb18a:229: error: 'BP_DOWN' was not declared in this scope

    sketch_feb18a:235: error: 'BP_LEFT' was not declared in this scope

    sketch_feb18a:239: error: 'BP_SELECT' was not declared in this scope

    sketch_feb18a.ino: In function 'void doMainMenuAction(byte)':

    sketch_feb18a:305: error: 'Button_t' was not declared in this scope

    sketch_feb18a:305: error: expected `;' before 'buttonPressed'

    sketch_feb18a:320: error: 'buttonPressed' was not declared in this scope

    sketch_feb18a:320: error: 'readPushButton' was not declared in this scope

    sketch_feb18a:320: error: 'BP_NONE' was not declared in this scope

    sketch_feb18a:326: error: 'buttonPressed' was not declared in this scope

    sketch_feb18a:327: error: 'BP_UP' was not declared in this scope

    sketch_feb18a:333: error: 'BP_DOWN' was not declared in this scope

    sketch_feb18a:339: error: 'BP_SELECT' was not declared in this scope

    sketch_feb18a:342: error: 'BP_LEFT' was not declared in this scope

    sketch_feb18a:359: error: 'Button_t' was not declared in this scope

    sketch_feb18a:359: error: expected `;' before 'buttonPressed'

    sketch_feb18a:364: error: 'buttonPressed' was not declared in this scope

    sketch_feb18a:364: error: 'readPushButton' was not declared in this scope

    sketch_feb18a:364: error: 'BP_NONE' was not declared in this scope

    sketch_feb18a:376: error: 'buttonPressed' was not declared in this scope

    sketch_feb18a:377: error: 'BP_UP' was not declared in this scope

    sketch_feb18a:384: error: 'BP_DOWN' was not declared in this scope

    sketch_feb18a:391: error: 'BP_SELECT' was not declared in this scope

    sketch_feb18a:394: error: 'BP_LEFT' was not declared in this scope

    sketch_feb18a.ino: In function 'uint8_t menu_fleches(uint8_t*, uint8_t, uint8_t)':

    sketch_feb18a:410: error: 'Button_t' was not declared in this scope

    sketch_feb18a:410: error: expected `;' before 'buttonPressed'

    sketch_feb18a:417: error: 'buttonPressed' was not declared in this scope

    sketch_feb18a:417: error: 'readPushButton' was not declared in this scope

    sketch_feb18a:417: error: 'BP_NONE' was not declared in this scope

    sketch_feb18a:423: error: 'buttonPressed' was not declared in this scope

    sketch_feb18a:424: error: 'BP_UP' was not declared in this scope

    sketch_feb18a:437: error: 'BP_DOWN' was not declared in this scope

    sketch_feb18a:441: error: 'BP_LEFT' was not declared in this scope

    sketch_feb18a:445: error: 'BP_RIGHT' was not declared in this scope

    sketch_feb18a:449: error: 'BP_SELECT' was not declared in this scope

    sketch_feb18a:453: error: 'BP_RST' was not declared in this scope

    bagou91

    07 juil. 2016 à 10:38

    tes erreurs sont dû au fait qu'il manque le fichier menu.h

    mon fichier librairie menu.h doit être dans le même dossier que poulailler.ino

    moi2

    07 juil. 2016 à 10:38

    c’est bon, j’ai trouvé

    moi c’est :

    #include “Menu-2.h”

    et pas

    #include “Menu.h”

    bagou91

    07 juil. 2016 à 10:38

    ok. je crois que c'est à cause du dossier Menu qui se trouve dans ton dossier C:UsersordiDocumentsArduinolibraries. Il est en conflit avec mon fichier.

    supprimes ce dossier momentanément et réessayes de compiler

    bagou91

    07 juil. 2016 à 10:38

    c'est à cause du site…

    certains fichiers uploadés sont renommés.

    moi2

    07 juil. 2016 à 10:39

    si on a une carte arduino uno on peut y alimenter en 9v ou en 12v sans soucis ?

    comme ça a la place le moteur est alimenter en 12v directement

    bagou91

    07 juil. 2016 à 10:39

    oui tu peux jusqu'à 12V d'après les spécifications officiels Arduino

    https://www.arduino.cc/en/Main/ArduinoBoardUno

    moi2

    07 juil. 2016 à 10:39

    une arduino uno doit surement avoir un horloge interne pour les delay

    bagou91

    07 juil. 2016 à 10:39

    non pas d'horloge au sens propre date, heure…

    il a une vitesse d'horloge pour compter des cycles. les delay sont calculés par rapport à ces cycles d'horloges.

    tu peux regarder la doc complète de l'ATMEGA328P pour en savoir plus:

    http://www.atmel.com/devices/atmega328p.aspx

    moi2

    07 juil. 2016 à 10:39

    on doit pouvoir facilement pouvoir mettre un témoin quand c'est ouvert et un témoin quand c'est ferme en reprenant sur les microshitch

    bagou91

    07 juil. 2016 à 10:39

    oui tu peux tout à fait. sur l'arduino pro mini, il reste la pin A0 de libre.

    sur un arduino nano il reste plusieurs pins de libre au choix..

    moi2

    07 juil. 2016 à 10:39

    quand les interrupteur ne sont pas appuyé il faut que le courant passe ou pas

    si on y met en gestion forcée, il faut appuyé sur quel touche pour que ça s’ouvre

    bagou91

    07 juil. 2016 à 10:39

    lorsque les interrupteurs de fin de course sont appuyés, le courant passe, et la pin d'entrée sur l'arduino se trouve à l'état haut.

    pour la gestion forcée, utilises les fleches haut/bas pour ouvrir ou fermer la porte.

    moi2

    07 juil. 2016 à 10:39

    la carte arduino est alimenté sur son 5v et son gnd?

    bagou91

    07 juil. 2016 à 10:39

    oui puisqu'il y a le convertisseur (régulateur) 5V en amont.

    moi2

    07 juil. 2016 à 10:39

    je voudrai adapté le code pour que quand c'est en gestion forcé il faut appuyé trois fois pour que ça se ferme et y mettre en auto pour que ça s'ouvre.

    quelle modification doit-je faire?

    bagou91

    07 juil. 2016 à 10:39

    pourrais tu ouvrir un sujet sur le forum ?

    il va falloir remanier plusieurs lignes de codes…

    moi2

    07 juil. 2016 à 10:39

    voila :

    http://ouiaremakers.com/topic/objectif-poulailler/

    Ipxav

    07 juil. 2016 à 10:39

    Excellent comme tuto ! Comment ça se passe si une poule ne rentre pas à l'heure programmée ? 😉

    bagou91

    07 juil. 2016 à 10:39

    Elle resterait dehors…

    Mais!

    J'ai vérifié le dicton “se coucher à l'heure des poules” et je les ai toujours vu rentrer à la tombée du jour. Elles vivent au rythme du soleil.

    Par sécurité je mets une heure de fermeture après le coucher du soleil.

    nanard_baudon

    07 juil. 2016 à 10:42

    Bon projet, mais le top serait de contrôler que toutes les poules sont bien rentrées…sinon gare la belette ou le renard!

    palou72

    07 juil. 2016 à 10:44

    Bonjour, super, j'ai envisage de faire cela pour mon poulailler, cela va bien me servir. J'ai penser de mettre un comptage de poules pour voir si toutes étaient bien rentrées.

    Question, pour ne pas avoir pris un moteur pas à pas?

    merci à plus

    bagou91

    07 juil. 2016 à 10:44

    Bonjour et merci pour ton appréciation.

    Je me suis naturellement orienté vers un moteur DC avec motoréducteur sans trop me poser de questions par rapport à un pas à pas 🙂 La seule chose à laquelle j'ai pensé était son couple suffisant pour remonter la porte.

    palou72

    07 juil. 2016 à 10:44

    Bonjour, quelle différence entre le programme poulailler 2 et le 3, est ce cela peut marcher avec un arduino 2560 mega.

    Merci

    A plus

    bagou91

    07 juil. 2016 à 10:44

    je ne vois pas de quoi tu parles: programme poulailler 2 et 3 ??

    oui ça fonctionnera aussi avec un arduino 2560 mega.

    palou72

    07 juil. 2016 à 10:44

    http://ouiaremakers.com/wp-content/uploads/formidable/poulailler-2.ino,

    et

    http://ouiaremakers.com/wp-content/uploads/formidable/poulailler-3.ino,

    il y a ces deux programmes dans ton tuto, je n'ai pas regarder en détail si il y avait une différence. Merci

    A plus

    alex85

    25 juil. 2016 à 18:04

    bonjour
    tres beau tuto !
    Auriez vous les code a mettre dans l'arduino ?
    les liens ne fonctionne pas.
    merci d'avance

    Manu1

    26 juil. 2016 à 12:05

    Bonjour, merci pour le partage ! Est-il possible d'avoir également le fichier Fritzing ?

    Manu1

    26 juil. 2016 à 13:17

    Une autre petite question, je teste avec une version plus ancienne du fichier poulaillier.ino et lorsque je téléverse sur l'Arduino nano, j'ai l'erreur suivante :

    poulailler:36: error: 'doMainMenuAction' was not declared in this scope
    & doMainMenuAction

    Faut-il déclarer "doMainMenuAction" à un endroit spécifique ?
    Merci

    bagou91

    12 août 2016 à 11:21

    Manu, alex85:
    j'ai corrigé le tuto et remis les fichiers sources.
    Suite à la mise en ligne de la nouvelle version du site, le tuto était corrompu.

    ayachemaxime

    13 sept. 2016 à 11:16

    Bonjour,
    Je n'arrive pas à accéder aux liens des fichiers corrigés, pourrais tu me les envoyés par mail: ayachemaxime@gmail.com. Sinon super idée !

    gersoiis

    19 sept. 2016 à 17:04

    Bonjour, j'ai également le meme probleme
    poulailler:36: error: 'doMainMenuAction' was not declared in this scope
    & doMainMenuAction
    J'ai essayé avec poulailler et poulailler 3 et cela ne change rien
    peux tu s'il te plait remettre les liens ?
    c'est vraiment sympa ton idée d'écran programmé pour le poulailler merci

    c.drik.pub

    27 sept. 2016 à 20:15

    Bonjour,
    J'avais dans l'idée de me faire une porte automatique avec un arduino.
    En faisant quelques recherches je suis tombé sur ta réalisation. Vraiment très chouette.
    Même problème pour moi.
    J'ai retélécharger à nouveau les fichiers. poulailler3 et menu3.h et obtiens l'erreur cité plus haut :

    oulailler:36: error: 'doMainMenuAction' was not declared in this scope

    &doMainMenuAction

    ^

    Utilisation de la bibliothèque LiquidCrystal version 1.0.5 dans le dossier: C:\Program Files (x86)\Arduino\libraries\LiquidCrystal
    Utilisation de la bibliothèque Wire version 1.0 dans le dossier: C:\Users\cdrik\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.14\libraries\Wire
    Utilisation de la bibliothèque RTClib-master version 1.0.0 dans le dossier: C:\Program Files (x86)\Arduino\libraries\RTClib-master
    exit status 1
    'doMainMenuAction' was not declared in this scope

    J'ai également tenté avec le zip "poulailler_sources" mais idem (sauf qu'au lieu de l'erreur "poulailler:36:" c'est "poulailler:37:" le reste l'erreur est la même.
    Une idée d’où provient cette erreur ?
    Merci par avance.

    c.drik.pub

    28 sept. 2016 à 14:31

    Après quelques recherche l'erreur du 'doMainMenuAction' was not declared in this scope vient simplement du fait que j'étais sur la derniere version de l'IDE arduino.
    J'ai rétrogradé ma version à la 1.5.7 et ça roule au poil !
    Il en me reste plus qu'a tout cabler et installer !
    Merci pour le programme, je laisserai un nouveau commentaire pour vous dire si tout est OK.
    Encore merci.

    bagou91

    30 sept. 2016 à 14:10

    je viens de voir les derniers commentaires:
    renommez bien les fichiers de cette manière: poulailler.h et menu.h
    normalement ca devrait bien compiler.

    bagou91

    30 sept. 2016 à 14:14

    prenez le zip qui se trouve dans la section Fichiers Techniques.

    c.drik.pub

    06 oct. 2016 à 09:13

    Bonjour,
    Désolé mais pour ma part même avec le fichier sources.zip qui se trouve dans fichiers techniques cela ne veut pas se compiler avec la version 1.6.10 de l'IDE Arduino. Si je tente avec la version 1.5.7 cela se compile bien mais le comportement des boutons du LCD est incohérent.
    Quelle version de l'IDE Arduino utilisez vous ?
    Pourriez vous nous mettre une copie en zip de vote répertoire libraries ? (on ne sait jamais vous avez put-être une librairies qui diffère).
    Merci par avance.

    bagou91

    06 oct. 2016 à 11:54

    Je ne saurais te dire dans quelle ancienne version j'avais compilé.
    Depuis la publication du tuto, j'ai mis à jour mon IDE arduino en version 1.6.9, et je n'avais pas retenté une compilation. J'ai également l'erreur en v1.6.9

    Je viens de corriger la source, ça compile bien.
    En fait il faut remonter toutes les fonctions en haut du fichier juste après les déclarations de variables.
    Seul setup() et loop() doivent être en fin de fichier.

    c.drik.pub

    06 oct. 2016 à 13:19

    Super.
    Merci pour le test.
    Je viens donc d'installer la version 1.6.9 et de retester avec les nouvelles sources.
    Je n'ai plus l'erreur mais j'en ai une concernant RTClib (que je n'avais pas avant avec les vieilles version de l'IDE). Voici l'erreur :

    Arduino : 1.6.9 (Windows 10), Carte : "Arduino Pro or Pro Mini, ATmega328 (5V, 16 MHz)"

    libraries\RTClib-master\RTClib.cpp.o: In function `DateTime::DateTime(unsigned long)':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:58: multiple definition of `DateTime::DateTime(unsigned long)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:58: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `DateTime::DateTime(unsigned long)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `DateTime::DateTime(unsigned int, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `DateTime::DateTime(unsigned int, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `DateTime::DateTime(DateTime const&)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `DateTime::DateTime(DateTime const&)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `DateTime::DateTime(char const*, char const*)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `DateTime::DateTime(char const*, char const*)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `DateTime::DateTime(__FlashStringHelper const*, __FlashStringHelper const*)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `DateTime::DateTime(__FlashStringHelper const*, __FlashStringHelper const*)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `DateTime::dayOfWeek() const'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `DateTime::unixtime() const'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `DateTime::secondstime() const'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `DateTime::operator+(TimeSpan const&)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `DateTime::operator-(TimeSpan const&)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `DateTime::operator-(DateTime const&)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `TimeSpan::TimeSpan(long)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `TimeSpan::TimeSpan(long)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `TimeSpan::TimeSpan(int, signed char, signed char, signed char)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `TimeSpan::TimeSpan(int, signed char, signed char, signed char)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `TimeSpan::TimeSpan(TimeSpan const&)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `TimeSpan::TimeSpan(TimeSpan const&)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `TimeSpan::operator+(TimeSpan const&)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `TimeSpan::operator-(TimeSpan const&)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `RTC_DS1307::begin()'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `RTC_DS1307::writeSqwPinMode(Ds1307SqwPinMode)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `RTC_Millis::adjust(DateTime const&)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `RTC_Millis::offset'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `RTC_Millis::now()'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `RTC_DS1307::isrunning()'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `RTC_DS1307::now()'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `RTC_DS1307::readSqwPinMode()'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `RTC_DS1307::readnvram(unsigned char*, unsigned char, unsigned char)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `RTC_DS1307::readnvram(unsigned char)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `RTC_DS1307::adjust(DateTime const&)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `RTC_DS1307::writenvram(unsigned char, unsigned char*, unsigned char)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib-master\RTClib.cpp.o: In function `date2days':

    C:\Program Files (x86)\Arduino\libraries\RTClib-master/RTClib.cpp:40: multiple definition of `RTC_DS1307::writenvram(unsigned char, unsigned char)'

    sketch\RTClib-master\RTClib.cpp.o:sketch\RTClib-master/RTClib.cpp:40: first defined here

    collect2.exe: error: ld returned 1 exit status

    exit status 1
    Error compiling for board Arduino Pro or Pro Mini.

    Je n'ai pas affiché plus de détail dans les préférences de l'IDE mais je peux activer les détails et te renvoyer plus d'infos si besoin.

    bagou91

    06 oct. 2016 à 13:23

    tu as la librairie RTCLib en doublon. Elle existe à la fois dans C:\Program Files (x86)\Arduino\libraries\ et dans MesDocuments\Arduino\libraries
    il faut supprimer l'un des 2 dossiers

    c.drik.pub

    06 oct. 2016 à 14:26

    OK merci.
    J'ai vu ça après le post...
    Du coup ça compil bien.
    Par contre j'ai le même problème avec le comportement du LCD. C'est assez étrange....
    Lorsque je l'allume j'ai :
    Votre choix ?
    Config Date/heure

    Si je ne touche à rien il se met sur :
    00:00 01/01/2000
    auto: 105 lum:24

    Si je clic sur "LEFT" :
    Config Date/heure
    00:00 01/01/00
    là je peux modifier l'heure avec la flèche du haut, me déplacer vers la droite avec "RIGHT", par contre pour me déplacer vers là gauche je dois utiliser "DOWN" (car si j'utilise "LEFT" je reviens au menu précédent "Votre choix ? Config Date/heure")
    Si je met l'heure un cran trop haut, par exemple 15h00 au lieu de 14h00, je ne peux pas déscendre la valeur car le bouton "DOWN" me fait aller vers la gauche.
    Sinon le bouton "SELECT" n'a pas l'air de me donner quoi que ce soit...

    J'ai vu que ce shield avait la particularité d'avoir des résistance pour différencier les boutons (sinon ça ne serait pas géré uniquement par la A0). Penses tu que cela pourrait venir de là ?

    J'ai testé mon shield dfrobot avec le code d'exmple sur ce site au cas ou mon shield aurait un problème mais mes boutons ont bien tous été reconnus : http://tiptopboards.free.fr/arduino_forum/viewtopic.php?f=2&t=36

    c.drik.pub

    06 oct. 2016 à 14:32

    Je me répond à moi même :)
    Je t'ai dit qu'en faisant le test pour mon shield ça fonctionnait...
    J'ai donc juste repris les valeurs du site qui vont bien pour mon shield :)
    Mes valeurs sont :
    unsigned int val = analogRead(buttons);
    //Serial.println(val);
    if (val > 1000) return BP_NONE;
    if (val < 50) return BP_RIGHT;
    if (val < 195) return BP_UP;
    if (val < 380) return BP_DOWN;
    if (val < 555) return BP_LEFT;
    if (val < 790) return BP_SELECT;
    //if (analogRead(bpReset) < 10) return BP_RST;

    Et là ça roule !
    Si ça peut en aider d'autre !
    Plus qu'à monter tout ça et voir si le résultat est OK :)

    bagou91

    06 oct. 2016 à 14:30

    les valeurs sont surement différentes par rapport à celles que j'utilise dans mon code.
    lignes 31 à 37 à modifier selon tes propres bonnes valeurs

    c.drik.pub

    07 oct. 2016 à 21:01

    Bonjour,
    Je suis en train de finir d'assembler les composants.
    Il ne me reste que le driver moteur.
    Je me posait une question (idiote surement).
    Ou brancher tout ça :)
    J'ai le même driver moteur que sur tes photos (L298N).
    J'ai en sortie : OUT 1, OUT2, OUT3, OUT4
    En entrée j'ai : +12V, GND, 5V, FNA(avec un jumper dessus), IN1, IN2, IN3, IN3, et un autre jumper sans rien de noté.
    Pour l'entrée 12V je mets le + sur le 12V et le - sur le GND.
    Pour le 5V et les commandes là je pèches un peu...
    Le 5V vient de l'arduino ou du régulateur 5V ou les 2 ? j'ai beau regardé sur le fichier fritzing et je ne vois pas. En fait j'ai l'impression que ça viens des 2...
    Pour les commandes sur le fichiers fritzing je vois 1INa, 1INb et 1Diag/EN... ou les mettre sur mon driver ?
    Je reprécise le driver est le même que sur tes photos : https://www.amazon.fr/Bheema-double-commande-contr%C3%B4leur-Arduino/dp/B00Q6WPVU0/ref=sr_1_11?s=electronics&ie=UTF8&qid=1475866851&sr=1-11&keywords=driver+moteur+l298N

    Merci beaucoup par avance.

    bagou91

    07 oct. 2016 à 21:56

    moteur sur OUT1 OUT2, IN1 = 1INa, IN2 = 1INb, ENa = 1Diag/EN, régulateur alimente l'arduino et l'entrée en 5V.
    Bien vérifier que le moteur tourne dans le bon sens lorsque tu essaieras, sinon inverser le branchement du moteur.
    OUT3 OUT4 IN3 IN4 ne servent pas ici.

    c.drik.pub

    07 oct. 2016 à 22:22

    Super t'es trop génial :)
    Et sinon j'ai pris des interrupteurs à 3 broches.
    J'ai la possibilité en appuyant sur le contact soit de fermer le circuit avec 2 broches soit d'ouvrir avec 2 autres. Sur ton schéma il faut que le circuit soit ouvert ou fermé sur les interrupteur ?

    bagou91

    08 oct. 2016 à 08:03

    Il faut utiliser les broches des interrupteurs qui fermeront le circuit.
    Au repos, l'interrupteur est en "position normalement ouvert" dans le jargon électronique

    c.drik.pub

    08 oct. 2016 à 13:20

    Merci pour l'info.
    Je rencontre encore un problème que je n'arrive pas à expliquer.
    Pour simplifier la distribution du courant en sortie du régulateur j'ai fait des barettes de distribution.
    Mes barettes se composent ainsi :
    - Arduino
    - RTC
    - LCD
    - Cellule photoelec
    - InterHaut
    - InterBas

    Je n'arrive pas à comprendre le fonctionnement des interrupteurs car si j'appuie sur un des interrupteur (n'importe lequel) tout le montage s’éteint. Si je relâche tout se rallume. Pourtant tout est connecté en sortie de régulateur... je n'arrive pas à comprendre pourquoi les interrupteur coupe le reste du circuit.
    Mes interrupteurs sont fixé sur un bornier qui est elle même sur une platine. J'ai connecté comme ceci :
    - Inter => Bornier + => Platine ou est fixé le bornier => Barrette de distribution
    - Inter => Bornier - => Platine ou est fixé le bornier => Barrette de distribution et broche A10
    Je pense que mon branchement est mauvais mais je n'arrive pas à voir ou ....
    Pourrais tu me redonner un petit coup de main ?
    Merci d'avance.

    bagou91

    08 oct. 2016 à 17:44

    Tu as surement fait des courts-circuit !
    sSur les interrupteurs: 1 patte vers le +5V, l'autre patte vers l'entrée arduino approprié (D9 ou D10). Pas de patte vers la masse.

    c.drik.pub

    08 oct. 2016 à 18:39

    OK, en voyant le fichier fritzing je pensait que c'était raccordé à la masse (ça semble logique que ce ne le soit pas pourtant :) ).
    Par contre quand je met une patte sur le +5V et l'autre patte sur une des entrée, je n'arrive pas à utiliser le menu pour forcer l'ouverture ou la fermeture....
    Si je débranche un des interrupteur, je peux forcer la fermeture, si j'enlève l'autre je peux forcer l'ouverture et bien sur si j'enlève les 2 je peux forcer ouverture et fermeture. J'ai essayé en faisant contact ou non sur les interrupteurs et pas mieux...
    Je sent que je suis pas loin du bout :)

    bagou91

    08 oct. 2016 à 19:18

    es tu bien sûr d'avoir correctement raccorder les pattes des interrupteurs ?
    la 2eme patte va à une entrée de l'arduino mais aussi à un résistance qui à sa 2ème patte à la masse (cf schéma) (principe du pull-down resistor)

    jergui

    02 mai 2018 à 12:47

    Bonjour,
    je suis tombé sur votre projet qui m'a beaucoup plu. J'ai donc commandé les composants nécessaires. Je suis actuellement à l'assemblage et je suis bloqué sur le branchement des résistances. En effet, j'ai commandé les résistances que vous avez listé, il s'agit de résistance potentiométrique donc à 3 broches. Comment je dois faire le montage?
    Merci pour votre retour et bravo pour cette réalisation

    bagou91

    02 mai 2018 à 14:09

    Bonjour,
    Il y a une erreur dans le compostant listé: il faut de simple résistance 1kohm.
    Je remonte le problème aux admins du site car je ne peux pas modifier mon tuto pour corriger.

    Sinon, tu peux quand même utiliser tes potentiomètres 1k en utilisant les 2 broches situés près des coins (aux extrémités). Cela te donnera 1kohm en valeur. La 3ème patte (au milieu) ne sert pas, tu peux la supprimer.

    jergui

    02 mai 2018 à 18:17

    Ok et merci pour cette réponse rapide! ;-)

    jergui

    04 mai 2018 à 15:17

    bonjour,
    j'ai fini le montage des composants mais je n'arrive pas ouvrir tes fichiers via le lien en haut de page...

    bagou91

    04 mai 2018 à 15:44

    bonjour,
    décidément, ouiaremakers bug beaucoup....
    voici un lien alternatif: http://dl.free.fr/getfile.pl?file=/DMWawlZ4

    jergui

    04 mai 2018 à 17:06

    Super merci!

    jergui

    04 mai 2018 à 18:36

    Je suis encore novice dans les montages Arduino et rencontre ces messages d'erreur lors du téléversement:
    Arduino : 1.8.5 (Windows Store 1.8.10.0) (Windows 10), Carte : "Arduino Nano, ATmega328P"
    C:\Users\ZOUZOU~1\AppData\Local\Temp\cciwqJRc.ltrans1.ltrans.o: In function `setup':

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:582: undefined reference to `RTC_DS1307::begin()'

    C:\Users\ZOUZOU~1\AppData\Local\Temp\cciwqJRc.ltrans1.ltrans.o: In function `loop':

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:594: undefined reference to `RTC_DS1307::readnvram(unsigned char*, unsigned char, unsigned char)'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:641: undefined reference to `RTC_DS1307::now()'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:643: undefined reference to `DateTime::dayOfWeek() const'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:643: undefined reference to `DateTime::dayOfWeek() const'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:649: undefined reference to `DateTime::dayOfWeek() const'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:649: undefined reference to `DateTime::dayOfWeek() const'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:686: undefined reference to `calculEphemeride::leverSoleil(int, int, int, bool)'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:691: undefined reference to `calculEphemeride::coucherSoleil(int, int, int, bool)'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:706: undefined reference to `DateTime::DateTime(unsigned int, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:707: undefined reference to `DateTime::DateTime(unsigned int, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:712: undefined reference to `TimeSpan::TimeSpan(long)'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:712: undefined reference to `DateTime::operator-(TimeSpan const&)'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:713: undefined reference to `TimeSpan::TimeSpan(long)'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:713: undefined reference to `DateTime::operator+(TimeSpan const&)'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:742: undefined reference to `DateTime::secondstime() const'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:742: undefined reference to `DateTime::secondstime() const'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:742: undefined reference to `DateTime::secondstime() const'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:742: undefined reference to `DateTime::secondstime() const'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:748: undefined reference to `DateTime::secondstime() const'

    C:\Users\ZOUZOU~1\AppData\Local\Temp\cciwqJRc.ltrans1.ltrans.o:C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:748: more undefined references to `DateTime::secondstime() const' follow

    C:\Users\ZOUZOU~1\AppData\Local\Temp\cciwqJRc.ltrans1.ltrans.o: In function `loop':

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:646: undefined reference to `DateTime::unixtime() const'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:646: undefined reference to `DateTime::DateTime(unsigned long)'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:646: undefined reference to `RTC_DS1307::adjust(DateTime const&)'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:653: undefined reference to `DateTime::unixtime() const'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:653: undefined reference to `DateTime::DateTime(unsigned long)'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:653: undefined reference to `RTC_DS1307::adjust(DateTime const&)'

    C:\Users\ZOUZOU~1\AppData\Local\Temp\cciwqJRc.ltrans2.ltrans.o: In function `__static_initialization_and_destruction_0':

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:19: undefined reference to `calculEphemeride::calculEphemeride(int, int, int, int, int, int)'

    C:\Users\ZOUZOU~1\AppData\Local\Temp\cciwqJRc.ltrans0.ltrans.o: In function `ouvrir_porte()':

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:512: undefined reference to `RTC_DS1307::now()'

    C:\Users\ZOUZOU~1\AppData\Local\Temp\cciwqJRc.ltrans0.ltrans.o: In function `fermer_porte()':

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:475: undefined reference to `RTC_DS1307::now()'

    C:\Users\ZOUZOU~1\AppData\Local\Temp\cciwqJRc.ltrans0.ltrans.o: In function `doMainMenuAction(unsigned char)':

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:168: undefined reference to `RTC_DS1307::now()'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:184: undefined reference to `DateTime::DateTime(unsigned int, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:184: undefined reference to `RTC_DS1307::adjust(DateTime const&)'

    C:\Users\zouzouille\Desktop\poulailler\poulailler.ino/poulailler.ino.ino:328: undefined reference to `RTC_DS1307::writenvram(unsigned char, unsigned char*, unsigned char)'

    collect2.exe: error: ld returned 1 exit status

    exit status 1
    Erreur de compilation pour la carte Arduino Nano

    Pourrais-tu me guider?

    bagou91

    05 mai 2018 à 07:58

    Bonjour,
    As tu bien extrait les 2 bibliothèques dans le dossier Arduino\libraries de tes Documents ?
    Je t'invite à lire les guides d'utilisation sur le logiciel
    quelques guides:
    http://www.locoduino.org/spip.php?article210
    http://www.locoduino.org/spip.php?article71

    c.drik.pub

    19 oct. 2016 à 19:08

    Bonjour,
    Navré de revenir à la charge....
    J'ai (enfin) fini d'installer le tout sur le poulailler.
    Je me heurte à un problème.... la porte s'ouvre à l'heure configurée comme prévue mais elle se ferme toute seul au bout de quelques seconde.
    Comment fais tu pour que la porte reste ouverte ?

    bagou91

    19 oct. 2016 à 22:14

    Rien de plus que le code donné....
    Vérifies ton heure de fermeture et que tu as mis la luminosité configurée à 0 en valeur.

    c.drik.pub

    20 oct. 2016 à 08:21

    OK.
    En fait je n'ai pas fait la partie mécanique comme toi. Mon moteur est à l'horizontal en haut de la porte un axe est raccordé dessu et un fil s'enroule autour de l'axe se qui fait se lever la porte. Lorsque la porte monte, ça appuie sur l'interrupteur qui coupe le moteur. Mais au bout de quelques seconde c'est comme si la porte se refermait sous son propre poids (pourtant c'est une porte aussi légère qu'un bout de carton :), type bois de cagette). Est ce que ton moteur se "bloque" d'un sens ou de l'autre ?

    bagou91

    20 oct. 2016 à 08:35

    Ah je comprends...
    Relis ce que j'ai écris dans mon choix de moteur et système d'engrenage.
    Le moteur n'étant plus sous tension, ton axe de moteur libre se retrouve entraîné par le poids de la porte.

    c.drik.pub

    20 oct. 2016 à 08:39

    Oui c'est bien ce que je pensait...
    Bon et bien il va falloir que je m'achète tout ça :)
    Merci beaucoup.

    c.drik.pub

    10 oct. 2016 à 08:43

    Super c’était bien ça.
    Merci beaucoup !

    c.drik.pub

    06 oct. 2016 à 14:34

    oui en effet :)
    mon message précédent à été tronqué.
    Je remet les valeurs au cas ou d'autre auraient le même soucis :

    if (val > 1000) return BP_NONE;
    if (val < 50) return BP_RIGHT;
    if (val < 195) return BP_UP;
    if (val < 380) return BP_DOWN;
    if (val < 555) return BP_LEFT;
    if (val < 790) return BP_SELECT;

    c.drik.pub

    06 oct. 2016 à 14:37

    le code doit être interprété par le site et me tronquer le message...
    je les donne donc différemment :
    - Right 50
    - Up 195
    - Down 380
    - Left 555
    - Select 790

    Voila !

    toutypasse

    17 oct. 2016 à 11:16

    bonjour pouvez vous m'envoyer des photos du cablage plus net car j'ai réussi à cabler le lcd keypad mais pas le restant les photos sont flous et je ne sais pas ou raccorder. Merci beaucoup voila mon adresse toutypasse@live.fr

    bagou91

    17 oct. 2016 à 11:32

    télécharger le schéma au format fritzing dans la partie fichiers techniques.
    en l'ouvrant avec Fritzing (gratuit), vous verrez les connexions avec le nom des pins.

    alex85

    18 oct. 2016 à 17:40

    bonjour
    voici ce que me marque arduino lors du televersement du programme
    Les options de compilation ont été modifiées, tout sera recompilé
    poulailler.ino.ino:2:18: fatal error: Menu.h: No such file or directory
    compilation terminated.
    Erreur lors de la compilation.

    Que se passe t il ?
    Merci d'avance pour vos réponse
    cdt

    enzoibanez

    17 déc. 2016 à 17:53

    Bonjour, je suis tombé sur votre superbe projet et ca m'a donné envie de me lancer pour mon poulallier, lachement attaqué par une fouine..
    J ai pris les composants que vous recommandiez, j 'ai placé dans un dossier le poulallier.ino et le menu.h, j'ai fait le montage sur la breadboard, j 'ai compilé les programmes sans erreur, et j'ai téléversé sans problème.
    mais voilà, j 'ai l'écran LCD qui s'allume d'un beau bleu immaculé sans aucune insciption du menu et au bout de 10 s il s'éteint sans aucune action moteur ou autre. comme si il manquait qq chose, je me creuse la tete, c'est la meilleure facon d'apprendre. A tout hazard, si ca vous parle comme non fonctionnement merci de me le dire, pour un coup de pouce :o) ca serait sympas. je précise que je suis débutant en arduino, mais j 'ai suivi scrupulesement le fritzing..et la compile est bonne.. arggG...

    bagou91

    29 déc. 2016 à 14:23

    Bonjour, désolé pour le retard de ma réponse...
    À priori si la compilation s'est bien fait, je ne vois qu'un possible problème dans le câblage...
    Le programme a l'air de fonctionner vu qu'il eteind l'écran au bout de 10s ce qui est prévu dans le code.

    bagou91

    29 déc. 2016 à 14:25

    PS: avez vous ajuster le contraste avec le potentiomètre du LCD ?

    CEGE

    29 déc. 2016 à 13:27

    Bonjour.
    Comme beaucoup, je suis débutant, et je cherche quel est le code idéal pour faire fonctionner cette tant souhaitée porte automatique. Quelqu'un a t'il réussi finalement à trouver le bon compromis ? j'aimerais bien me lancer dans quelque chose qui reste abordable pour quelqu'un qui n'est pas un expert.

    enzoibanez

    08 jan. 2017 à 21:18

    Bonsoir, incroyable j ai tourné pedant 30 secondes la vis du contraste et miracle le texte de commande est apparu. Merci bagou pour votre aide. Bon maintenant que je vois les commandes j ai un probleme avevc les boutons pour regler les heures levé et couché, le bp select ne onne rien je ne peix que naviguer dans le menu, choix marche forcé, gestion auto etc... c est peut etre une devlaration des boutons qui est pas bonne. ? Merci. Enzo

    bagou91

    09 jan. 2017 à 07:58

    Super!
    Regardes le commentaire de C.drik.pub: certaines valeurs ont dû être modifiées. Je l'indique également dans l'étape 3

    enzoibanez

    25 jan. 2017 à 15:25

    hello bagou91, merci pur le conseil j 'ai modifié les valeurs avec celle données dans le commentaire a cdricpub, mais rien n'y fait. j 'ai un shield lcd keypad de marque DIYMALL et je n'arrive pas à trouver une doc donnant les valeurs des boutons associés....une idée ? merci beaucoup de votre aide.

    bagou91

    25 jan. 2017 à 15:42

    tu peux récupérer la valeur des boutons en connectant A0 du lcd sur une entrée analogique d'un arduino. et à l'aide d'un sketch lisant l'entrée tu pourras déterminer les valeurs des boutons.

    enzoibanez

    25 jan. 2017 à 16:38

    merci j 'essaye ca.

    enzoibanez

    26 jan. 2017 à 22:38

    bonsoir, le sketch m 'a retourné ces valeurs. bizzare d'avoir 0 pour le boutton RIght :
    unsigned int val = analogRead(buttons);
    //Serial.println(val);
    if (val > 1000) return BP_NONE;
    if (val < 0) return BP_RIGHT;
    if (val < 102) return BP_UP;
    if (val < 258) return BP_DOWN;
    if (val < 410) return BP_LEFT;
    if (val < 639) return BP_SELECT;
    //if (analogRead(bpReset) < 10) return BP_RST;
    mais meme avec ces valeurs le fonctionnement du menu et des bouttons n 'est pas normal et je n'arrive pas à configurer les heures levé et couché. je continu ma quete ;o)

    enzoibanez

    26 jan. 2017 à 22:42

    je reprends car ca m 'a coupé le message :


    val 1000 BP_NONE;
    val 0 BP_RIGHT;
    val 102 BP_UP;
    val 258 BP_DOWN;
    val 410 BP_LEFT;
    val 639 BP_SELECT;

    mais meme avec ces valeurs le fonctionnement du menu et des bouttons n 'est pas normal et je n'arrive pas à configurer les heures levé et couché. je continu ma quete ;o)

    bagou91

    27 jan. 2017 à 10:04

    0 pourrait être une valeur plausible. Essayes de mettre des Serial.println() un peu partout pour débugguer.

    vegetalswarning

    28 jan. 2017 à 23:08

    bonjour je voudrais savoir l'autonomie de votre système ? vous devez recharger la batterie de voiture tout les combien de temps ?

    bagou91

    29 jan. 2017 à 10:03

    Je recharge la batterie 1 fois par mois

    Geekoid

    17 fév. 2017 à 12:39

    Super projet très bien documenté! Bravo à toi!

    chartxu

    05 mar. 2017 à 16:17

    Bonne soir,
    Merci beaucoup pour votre projet de porte automatique au poulailler.
    J'ai construit et il fonctionne très bien. Cependant, je dois garder le moteur en marche pendant 2 secondes, une fois activé le capteur bas.
    Vous pourriez me dire comment entrer dans un délai de 2 secondes?.
    Merci beaucoup,
    José Antonio Salazar

    chartxu

    05 mar. 2017 à 16:19

    Le delay est nécessaire pour faire fonctionner la sécurité des joints mécaniques ont installé. Merci.

    bagou91

    06 mar. 2017 à 10:18

    ligne 495, après la boucle while(), tu peux ajouter un delay(2000). le moteur restera actif encore 2 secondes après que le capteur du bas soit enclenché.
    par contre ça va donner du "mou" au fil nylon qui tient la porte: attention à ce qu'il ne sorte pas trop de sa poulie.

    chartxu

    06 mar. 2017 à 17:48

    Merci pour la réponse. Fait les modifications, la performance parfaite. Pas de problème avec un fil de nylon, car portant un petit contrepoids. Si vous voulez, je peux envoyer des photos de ma porte (mon mail: pedresadearlanza@gmail.com).

    vico74

    26 mar. 2017 à 16:11

    salut, merci de partager ton idée. Je n'arrive pas a faire fonctionner le programme (avec une arduino uno).
    Tout fonctionne mais impossible de faire tourner le moteur, j ai essayé avec une autre programme et la le moteur marche.

    bagou91

    26 mar. 2017 à 21:20

    Bonjour. Vérifies tes branchements. Il n'y a aucune raison pour que ça ne fonctionne pas. Le Uno et le Pro Mini ont le même microprocesseur donc le programme fonctionne sur les 2 cartes.

    Bidji

    07 avr. 2017 à 20:27

    Bonjour, j'admire le travail que tu as réalisé! J'aimerai bien le réaliser chez moi mais j'ai un problème sur arduino:

    Arduino : 1.8.1 (Windows 10), Carte : "Arduino/Genuino Uno"

    C:\Users\hp pavilion\Desktop\Poulailler\poulailler.ino:2:18: fatal error: Menu.h: No such file or directory

    #include "Menu.h"

    ^

    compilation terminated.

    exit status 1
    Erreur de compilation pour la carte Arduino/Genuino Uno

    Ce rapport pourrait être plus détaillé avec
    l'option "Afficher les résultats détaillés de la compilation"
    activée dans Fichier -> Préférences.

    Merci de bien vouloir m'aider.

    bagou91

    08 avr. 2017 à 08:01

    As tu bien mis mon fichier menu.h dans le même dossier que poulailler.ino ?
    L'erreur informe que le fichier n'est pas trouvé.
    Lis bien tous les commentaires, tu y trouveras des réponses à tes possible interrogations et problèmes.

    Bidji

    08 avr. 2017 à 09:31

    Oui justement après avoir lu les commentaires j'ai mis les deux fichiers ensembles...

    Godbutcher

    16 avr. 2017 à 22:14

    Merci pour ton tuto. c'est vraiment super :) c'est exactement ce que je recherchais
    j’espère y arriver car je débute pour être franc. un pot m'a filé un driver moteur différent du tient. le successeur du L298N m'a t'il dit...
    http://www.ebay.fr/itm/281838858571?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
    Mais du coup j'ai du mal a m'y retrouvé sur les branchements étant donné que je n'ai pas les mêmes intitulé.
    D'un coté jai: PWMA / AIN2 / AIN1 / STBY / BIN1 / BIN2 / PWMB / GND
    et en face: VM / VCC / GND / A01 / A02 / B02 / B01 / GND
    et pas de 1Diag/EN ou ENa..
    Pourrais tu m'aider? :))
    ou dois je plutôt commander le même driver que toi?
    Un grand merci d'avance

    bagou91

    17 avr. 2017 à 16:55

    bonjour. Ce module utilise le même principe: un pont en H.
    Utilisez la partie A. Ensuite PWMA = Vcc 5V, AIN1 = 1INa, AIN2 = 1INb, STBY = 1Diag/EN. VM = 12V, A01 et A02 = moteur., GND = GND.
    N'utilisez pas les pins pour la partie B.

    Godbutcher

    18 avr. 2017 à 23:07

    ok super ;) merci beaucoup.
    si j"ai bien compris je dois utiliser les pins PWMA, AIN2, AIN1, STBY et GND d'un coté et les pins VM, GND, A01 et A02 de l'autre.
    Question surement bête mais a quoi sert le pin VCC présent sur le driver??
    merci pour ton aide

    bagou91

    19 avr. 2017 à 08:41

    Oui. J'avais oublié : Vcc = 5V

    Philibert31

    21 avr. 2017 à 13:00

    Merci pour ce superbe tuto.
    J'ai une question sur la surveillance de la batterie. J'ai vu que tu surveilles le niveau de ta batterie et que tu utilises les pin A6 et A7. Quel est ton montage, stp ? Merci par avance.

    bagou91

    21 avr. 2017 à 15:01

    Bonjour,
    Depuis la publication du tuto, j'ai mis à jour, et finalement je n'utilise plus cette surveillance de la batterie.
    Mais si tu souhaites le faire, il faut utiliser le principe du pont diviseur de tension pour mesurer la tension entre les 2 résistances mise en série et qui permettra d'en déduire la tension de la batterie.
    On ne peut pas mesurer directement la batterie, car l'arduino ne supporte que jusqu'à 5V max sur ces entrées.
    doc ici: https://fr.wikipedia.org/wiki/Diviseur_de_tension
    Si U=12V, R1=2,2kohm, R2=1kohm, alors U2=3.75V maximum.
    Quand la batterie se décharge, sa tension baisse et donc U2 baisse également.
    Dans la fonction loop() du sketch, tu peux ajouter:
    //calcul de la tension U2 (0 à 5Vmax) sur la pin A6, puis re-mapper pour connaitre la tension de la batterie (3.2 correspond à (R1+R2)/R2 ).
    float Ubatterie = (analogRead(A6) * 5 / 1023) * 3.2;
    if ( Ubatterie < 10.8) {
    analogWrite(A7, 120); //on allume la led rouge (2V) sur la pin A7 pour indiquer que la batterie est déchargée (batterie plomb déchargée <= 10,8V)
    }
    else {
    analogWrite(A7, 0);
    }

    J'espère que ce condensé d'explications et code te suffira, sinon n'hésites pas à demander plus d'explications.

    bagou91

    21 avr. 2017 à 15:02

    Dans la fonction loop() du sketch, tu peux ajouter:
    //calcul de la tension U2 (0 à 5Vmax) sur la pin A6, puis re-mapper pour connaitre la tension de la batterie (3.2 correspond à (R1+R2)/R2 ).
    float Ubatterie = (analogRead(A6) * 5 / 1023) * 3.2;
    if ( Ubatterie < 10.8) {
    analogWrite(A7, 120); //on allume la led rouge (2V) sur la pin A7 pour indiquer que la batterie est déchargée (batterie plomb déchargée <= 10,8V)
    }
    else {
    analogWrite(A7, 0);
    }

    J'espère que ce condensé d'explications et code te suffira, sinon n'hésites pas à demander plus d'explications.

    bagou91

    21 avr. 2017 à 15:11

    commentaire tronqué à chaque fois au même endroit :(
    voici mon explication entière: https://1fichier.com/?03nbtnht3y

    Philibert31

    30 avr. 2017 à 18:09

    Bonjour,
    Lors de la compilation du dernier fichier poulailler.ino, j'ai l'erreur suivante :
    poulailler:36: error: 'doMainMenuAction' was not declared in this scope
    &doMainMenuAction
    ^
    exit status 1
    'doMainMenuAction' was not declared in this scope

    Pourtant la fonction doMainMenuAction est bien présente et déclarée ???
    Peux-tu m'aider, stp.
    Merci par avance.

    Philibert31

    01 mai 2017 à 20:58

    Bonjour,
    Je viens de me rendre compte que c'est la version de l'IDE 1.8.1 qui pose problème. J'ai été obligé de retourner vers la version 1.5.7 pour que le compilateur fonctionne !
    Y a-t-il un moyen de compiler ce programme dans la dernière version du l'IDE en faisant des modifs ?
    J'utilise une arduino nano et je suis sous windows10 64 bits.
    Merci pour ce superbe tuto.

    bagou91

    04 mai 2017 à 08:44

    Bonjour,
    j'ai utilisé l'IDE 1.6.9 lorsque j'ai créé mon sketch.
    tu peux rester sur cette ancienne version qui convient bien.
    Il me semble que tu peux télécharger la version portable (zippé) qui n'a pas besoin de s'installer pour être utiliser. Cela te permet d'avoir plusieurs versions de l'IDE sur ton PC.

    DAM74

    06 mai 2017 à 13:39

    Bonjour, super tuto vraiment sympathique.
    Jai juste un problème lord de la compilation, impossible pour moi de le résoudre.
    Jai le message d'erreur suivant :
    'doMainMenuAction' was not declared in this scope
    &doMainMenuAction
    j'utilise la version 1.6.9

    merci d'avance.

    bagou91

    19 mai 2017 à 19:06

    as tu bien pris les bonnes sources ? Elles sont dans la rubrique Fichiers Techniques et se nomme: poulailler_sources_06102016.zip

    je compile avec l'IDE 16.9

    cocolapin

    07 mai 2017 à 16:50

    bonjours
    merci pour ce tuto bien utile
    je suis novice sur l'arduino et j'ai biensur rencontré tous les problemes possible
    que j'ai pu resoudre grace a vos commentaire
    il m'en reste un
    l'affichage du lcd s'arrete apres quelque seconde mais le retroeclairage lui reste permanent
    merci d'avance

    vw67

    13 mai 2017 à 23:15

    Bonjour,
    Je me suis lancé dans l'aventure Arduino pour le poulailler. J'avais déjà un systeme avec un programmateur de recup, mais suite a un orage j'ai du tout démonter.
    J'en ai profité pour faire un support de moteur et une boite à la mesure en impression 3D.
    Par contre j'ai un soucis de compilation. C'est lié au menu pas au fichier menu.h.
    L'erreur que me remonte l'ide est lié aux librairies temboo. Mais je comprends pas à quoi elles servent dans ton programme.

    bagou91

    19 mai 2017 à 19:09

    je n'utilise pas de librairie "temboo". Je pense qu'il y a un conflit avec certains fichiers contenu dans cette librairie installée sur votre PC.

    Mes sources (les bonnes) sont dans la rubrique Fichiers Techniques et se nomment: poulailler_sources_06102016.zip
    je compile avec l'IDE 16.9

    vw67

    19 mai 2017 à 20:19

    Hello,
    Il s'est passé un truc bizarre en effet, j'ai récupéré un code qui n'était pas le votre. Et cela à plusieurs reprises dans la même soirée. Je l'ai rechargé 2 jours après et là c'était le bon.
    Du coup mon automatisme est terminé, je partagerais ma version (ouverture latérale) ainsi que les adaptations faites depuis votre code. Je suis débutant en code, et j'ai apprécier de lire votre programme très bien commenté. J'ai ajouté une fonction voltmètre pour surveiller l'état de la batterie.

    DAM74

    26 mai 2017 à 19:15

    bonjour je vous remercie pour votre réponse de l'autre jour j'ai fini par réussir a compiler le programme.
    j'ai fini de réaliser toute la partie câblage et meca. il me reste juste un petite pépin quad je vais le menu heure coucher ou heure levée sur le lcd, l'afficheur m'affiche 3 chiffre pour les heures et 3 chiffre pour les minutes. Je ne sur pas parvenue a trouver d'où cela viens. je suis sur la version 1.8.2 et jai l'afficheur que vous avez reccomendé merci d'avance.

    bagou91

    27 mai 2017 à 23:38

    Vous êtes le 1er à avoir ce problème...
    Si vous essayez d'incrémenter les chiffres, que cela donne t il ? Essayez de compiler avec la version 1.6.9 la version portable (sans installation) est téléchargeable sur le site officiel Arduino.

    Grofilou

    22 jan. 2018 à 09:15

    Bonjour,
    J'ai exactement le même problème que DAM74. La version 1.6.0 n'arrange rien, l'incrémentation non plus. Carte UNO et même version du LCD. Sinon c'est une belle réalisation.
    Question : est-il possible de programmer 2 ou 3 ouvertures/fermetures par jour ?
    Mille fois merci et bonne journée.

    bagou91

    22 jan. 2018 à 09:30

    Bonjour,
    Certains ont aussi eu ce problème qui se produit aléatoirement. Après plusieurs accès au menu, le bug a disparu (voir commentaire de Philibert31 juste un peu plus bas)
    Pour faire plusieurs ouvertures/fermetures par jour, il faut revoir et modifier le programme en conséquence...

    Grofilou

    23 jan. 2018 à 10:47

    Bonjour et merci de votre réponse,
    Cependant, malgré les essais de Philibert31, et quelques tentatives de changement de valeur, mon affichage me propose toujours 165:165 165/165/
    Si l'on peut solutionner ce problème, j'envisagerai la modification du programme pour mes besoins personnels.
    De toute façon, merci et bonne journée.

    DAM74

    28 mai 2017 à 09:20

    Bonjour merci de votre réponse rapide. J'ai essayer sur la version 1.6.9 rien à faire ca ne change rien.
    De quelle valeur parlé vous quand vous dites d'incrémenter ?

    bagou91

    28 mai 2017 à 21:06

    fleche haut ou bas pour changer les valeurs des heures, minutes.
    que cela donne t il sur l'affichage ?

    Philibert31

    28 mai 2017 à 20:49

    bonjour,
    J'ai eu le meme problème et avec la flèche bas j'ai affiché sur les 2 premier chiffre la bonne heure, idem pour les minutes. après être sortie du menu, attente des 10 secondes puis retour sur le réglage de l'heure levée ou couché, plus de problème. Ensuite tout est OK.
    J'ai une question bagou91. tout d'abord merci pour tes réponses rapides à mes problèmes précédents, tout est ok maintenant, sauf pour la fermeture de la porte et l'ouverture, la porte s'rrête avant d'atteindre le contact haut bas selon le cas et le lcd indique "erreur porte".
    Je suppose que dans la fonction "Fermer porte" ou dans "Ouvrir porte" il faut que j'augmente la valeur du timeout. Pas exemple en mettant : long timeout = millis() + 17000; par exemple ?
    Merci par avance pour ton aide.

    bagou91

    28 mai 2017 à 21:45

    Oui tout à fait: il faut augmenter le timeout.
    J'ai mis cette protection au cas où un problème surviendrai comme par exemple la porte qui se bloque à mis parcours. Le moteur ne tournerai ainsi plus en forçant pour terminer l'action de la porte.

    DAM74

    28 mai 2017 à 22:51

    oui c'est toute à fait ça en bidouillant sur l'afficheur j'ai fini par réussir merci bien pour votre aide. Et en tout cas super tuto, je trouve ca vraiment sympathique d'échanger de cette façon.

    dj jeff1

    30 juil. 2017 à 00:39

    vraiment genial le tuto mais comme je debute dans le domaine je n'arrive pas a compilé. j'ai une erreur:Arduino : 1.8.3 (Windows 7), Carte : "Arduino/Genuino Uno"

    C:\Users\Dj.jeff1\Documents\Arduino\MyBlink\poulaill__base\poulaill__base.ino:3:18: fatal error: Menu.h: No such file or directory

    #include "Menu.h"

    ^

    compilation terminated.

    exit status 1
    Erreur de compilation pour la carte Arduino/Genuino Uno

    Ce rapport pourrait être plus détaillé avec
    l'option "Afficher les résultats détaillés de la compilation"
    activée dans Fichier -> Préférences.
    et si je supprime la ligne j'ai la même erreur pour le RTC.
    Merci d'avance.

    ylan go

    18 sept. 2017 à 20:40

    bonjour, j'ai commandé le driver moteur avec votre lien et j'ai reçu celui ci :
    http://www.ebay.fr/itm/L298N-Double-Pont-H-Driver-de-Moteur-pas-a-pas-Module-de-Carte-du-Controleur-WT/272270942099?_trkparms=aid%3D222007%26algo%3DSIM.MBE%26ao%3D1%26asc%3D46118%26meid%3D6bb6610c4dd649b3a412026363be6839%26pid%3D100011%26rk%3D2%26rkt%3D6%26sd%3D252728107755&_trksid=p2047675.c100011.m1850
    serait t'il possible de savoir comment le brancher ( 1DIAG/EN, 1INa, 1INb sur le driver moteur)
    Merci d'avance.

    bagou91

    18 sept. 2017 à 21:58

    Bonsoir,
    J'ai déjà répondu à cette question un peu plus haut dans les commentaires...
    Merci de prendre le temps de les lire.
    Ils apportent bon nombre de réponses à des questions supplémentaires posées par chacun.
    Voir les messages du 7 octobre 2016

    sim

    23 sept. 2017 à 10:35

    bonjour j'ai instale ton systeme chez moi.Il marche bien malgre quelques probleme que je regle au fur et a mesure. En cherchant tu peux trouver des produits beaucoup moins cher: j' ai investi seulement 40 euros dans ce projet. Juste une question: combien de temps mets ta porte a remonter, moi j' ai achete un autre motoreducteur(car il etaita 2 euros) , ca marche mais ma porte mais un bonne minute a remonter ce qui est source de probleme . Merci bcp pour ce projet

    bagou91

    24 sept. 2017 à 15:44

    Bonjour. Ma porte met environ 15s pour remonter. Cela dépend entièrement de ta vitesse en sortie de motoréducteur ainsi que de la grandeur de ta porte (distance à parcourir)..

    ylan go

    28 sept. 2017 à 20:41

    Bonjour, j'ai branché toute l’installation et mit le code, je rencontre un problème au niveau du moteur, il marche bien en gestion forcée mais pour l'heure de fermeture et d'ouverture il fait des des à-coups
    et au bout de 5 seconde si le capteur de fin de course n'ai pas enclenché l'écran indique erreur porte.
    Merci d'avance pour votre réponse.

    ylan go

    28 sept. 2017 à 20:49

    Oups, j'avais oublier une résistance, maintenant sa marche.

    gilpil

    29 sept. 2017 à 15:00

    Bonjour,
    Tout d'abord un grand merci pour ce partage :-)
    J'ai en stock un moteur 6 v conventionnel donc pas de pas à pas.
    Un modification du programme est elle nécéssaire pour la commande du du moteur via un pont en H type L293 en branchant la pin 12 pour ouvrir et la pin 11 pour fermer.?
    Très cordialement.
    Gilles

    bagou91

    29 sept. 2017 à 15:39

    Tu as un moteur du même type que le mien, donc tu le branches comme sur mon schéma.
    Evidemment le pont en H devra être alimenté en 6V.
    Par contre le fait de ne pas avoir d'étage de moto-réduction avec vis sans fin: tu risques de voir ta porte retomber toute seule par son propre poids dès que l'alimentation du moteur sera coupée car il n'y aura pas de blocage opérer par la vis sans fin.
    De même je ne sais pas si ton moteur aura assez de force sans moto-réduction pour lever la porte.

    ylan go

    11 oct. 2017 à 13:45

    Bonjour,
    Est-il possible de rallonger le temps dans le code de l'Arduino pour que la porte est le temps de s'ouvrir et de se fermer sans que le LCD affiche "porte erreur".
    Merci d'avance.

    bagou91

    11 oct. 2017 à 14:47

    Bonjour,
    Comme je te l'ai déjà dit précédemment: merci de prendre le temps de lire les commentaires qui donneront des réponses supplémentaires.
    voir commentaire de Philibert31 le 28 mai 2017 à 20:49.

    djgui56

    06 nov. 2017 à 18:38

    Bonjour et tout d'abord merci de faire partager ton projet.
    Je me lance aussi dans la conception d'un poulailler dans un jardin partager. Du coup, je ne pourrais pas aller ouvrir et fermer tout les jours le poulailler, donc ton idée est super intéressante!!!

    Est ce que l'on peut mettre un autre moteur ou moto-réducteur qui ferai l'affaire? un qui soit sur amazon?

    Je vous remercie par avance

    guillaume

    bagou91

    06 nov. 2017 à 19:37

    Bonjour,
    Oui Du moment que le moteur avec moto-réducteur à assez de force pour lever la porte. Et également qu'il puisse bloquer la porte en position ouverte: le système avec vis sans fin est idéal pour ça.

    djgui56

    06 nov. 2017 à 20:53

    Bonjour,
    merci de votre réponse.
    Est ce que ce moteur ferai l'affaire :
    https://www.amazon.fr/400RPM-couple-Alimentation-electrique-VITESSES/dp/B0080DLFIA/ref=pd_sim_263_1?_encoding=UTF8&psc=1&refRID=1V811CENAW5AM422HMJN

    Merci

    bagou91

    06 nov. 2017 à 21:50

    Il faudrait connaître le poids de ta porte pour déterminer le couple nécessaire.
    Et une motoreduction à vis sans fin serait mieux pour bloquer la porte afin qu'elle ne retombe pas par son propre poids.
    Sur le lien il manque l'info du couple.

    Auré76Ibiza

    09 nov. 2017 à 12:52

    Bonjour
    J'envisage de réaliser ma porte auto de mon poulailler. Pouvez vous me donner un lien différent pour le convertisseur régulateur 5v car faut-il nécessairement les 4 ports usb et à quoi servent-ils ?

    bagou91

    09 nov. 2017 à 14:14

    Bonjour,
    Comme je l'ai indiqué, j'ai utilisé certaines pièces de récupération: le convertisseur 5v usb en faisait partie.
    L'usb en soit ne sert à rien, je me sers uniquement de la partie alimentation 5V.
    N'importe quel convertisseur régulateur 5v fait l'affaire.
    ex: http://www.ebay.com/itm/2PCS-DC-DC-9V-12V-24V-5V-3A-Step-Down-Power-CAR-Charger-Mobile-power-/351883114568?hash=item51edde3848
    ou sinon en composant électronique, régulateur type L7805 si vous avez des connaissances en électronique.

    djgui56

    09 nov. 2017 à 23:11

    Bonsoir,

    Je suis nouveau dans le monde de l'arduino et de l'électronique...
    Est ce que ce genre de régulateur suffit?
    Pour ce projet, est ce qu'avec 1 seul relais ca suffit ou il en faut 4?

    Merci

    djgui56

    09 nov. 2017 à 23:11

    https://www.ebay.fr/itm/Carte-relais-5v-Arduino-PIC-ARM-AVR-DSP-1-2-4-8-relais-au-choix-relay/291952750563?hash=item43f9bd6fe3:m:mECvTw1qGdYMyljP-Aor1pA

    bagou91

    10 nov. 2017 à 08:50

    Bonjour,
    Tu peux utiliser une carte 2 relais pour alimenter le moteur dans les 2 sens moyennant des modifications dans le code et le branchement (à toi de les faire).
    Mais si tu es nouveau dans ce monde, je te conseille de t'en tenir au matériel que j'ai utilisé.
    Bien lire tout mon tuto ainsi que les commentaires où tu y trouveras également des réponses.

    djgui56

    10 nov. 2017 à 09:18

    Bonjour,

    effectivement je ne vais pas m'amuser à modifier le code car je ne connais pas la programmation ...
    Je vais donc prendre le matos que tu as indiqué, pour le relais, est ce qu'une carte 4 relais sans USB peut faire l'affaire sans modif du code? ou il faut prendre exactement celui que tu as mis?
    https://www.ebay.fr/itm/222484565629

    Merci

    bagou91

    10 nov. 2017 à 10:17

    Apparemment tu ne lis pas correctement mon tuto ni mon commentaire... un peu d'effort !
    Je n'utilise pas de carte relais mais un pont en H type L298N.
    Et si tu veux absolument utiliser une carte relais, il y a des modifications de code et de branchement à faire.

    djgui56

    10 nov. 2017 à 11:40

    En faite je crois que je me trompe de terme.
    pour l'alimentation du moteur pas de soucis avec le pont en H que tu cite plus haut.
    En faite je voulais remplacer le convertiseur USB par ce que j'ai cité plus haut, mais en faite ce n'est pas la meme choses?

    bagou91

    10 nov. 2017 à 11:52

    LIRE mon commentaire du 09 nov. 2017 à 14:14...

    sim

    18 nov. 2017 à 11:24

    slt

    sim

    18 nov. 2017 à 11:25

    je cherche un moteur alimentable en 5v et qui ai plus de 300rpm et 500g de couple
    Si qqun a une idee dites le moi car je ne trouve pas
    merci

    Macramé

    18 nov. 2017 à 21:52

    Bonsoir et merci pour ton partage. Je debute totalement avec arduino, et je ne serai jamais arrivé à élaborer le programme.
    Premier essai de branchement, ça fonctionne! Hormis le lcd qui s'allume mais rien d'inscrit. Il faut régler le contraste en tournant longuement la vis de réglage.
    Il ne restd plus qu'à faire un cablage définitif dans une boite etanche, et réaliser la partie mécanique de la porte.

    Macramé

    20 nov. 2017 à 22:48

    Cablage definitif réalisé ce soir, et là j'ai tout de même un petit soucis : le reglage de l'heure d'ouverture et fermeture s'affiche comme ceci 255:255
    En appuyant sur fleche bas j'arrive à afficher par exemple 020:030 et si je valide et reviens au réglage l'heure sauvegardée est bien 20:30.
    Par contre le réglage de l'heure et de la date s'affiche 165:165 165:165:165 et rien a faire, je n'arrive pas à afficher un format valide. Une idée?

    bagou91

    21 nov. 2017 à 07:47

    Bonjour. D'autres personnes ont rencontré ce même problème d'affichage. De mon côté j'ai essayé de reproduire ce problème, mais je n'ai pas réussi à l'avoir. J'ai tenté de debugguer mais comme je n'ai pas reproduit ce cas, je ne sais pas où ça coince...
    Essayes de réinitialiser le ds1307 en enlevant sa pile et couper son alimentation.

    Macramé

    21 nov. 2017 à 21:04

    Enlever la pile, couper l'alim de l'horloge, rechargé le programme, rien n'y a fait.
    J'ai utilisé RTCsetup pour lire/écrire l'heure et la date de l'horloge. Toujours pareil ...
    Mon ds1307 a 2 "series" de connecteurs. D'un coté DS/SCL/SDA/Vcc/Gnd et de l'autre coté les mêmes + SQ et BAT. J'avais utilisé la première série de connecteurs, j'ai donc faif un essai en branchant sur la deuxième série et là ça marche!

    alexismorsilli

    16 déc. 2017 à 19:33

    j'ai le meme problème d'affichage et le moteur ne tourbne pas en gestion forcé.. si quelqu'un a une idée? merci!!

    Julloss

    01 déc. 2017 à 22:07

    Bonjour,
    J'ai suivi le montage de manière identique a part le driver moteur qui est un VNH2SP30
    tout semble fonctionner, mais le moteur ne tourne pas, même en gestion forcée...
    J'ai vérifier les branchement plusieurs fois.
    PS: je n'ai pas mis de pile dans le RTC DS1307

    alexismorsilli

    16 déc. 2017 à 15:16

    bonjour, j'ai tout acheté pour réalisé le montage sauf que j'ai un ds1302 a la place du ds 1307. est ce que je dois faire une modif dans le sketch arduino ou je peux garder le meme?

    bagou91

    16 déc. 2017 à 18:58

    bonjour,
    non la librairie RTCLib fournie n'est pas compatible avec le DS1302.
    il faudra adapter le code en utilisant cette librairie: https://playground.arduino.cc/Main/DS1302RTC

    alexismorsilli

    16 déc. 2017 à 19:58

    merci pour ton retour ! alors éfféctivement le moteur ne se met pas en marche quand je passe en mode forcé ça doit donc venir de la.. j'ai également le problème d'affichage de la date et de l'heure que je n'arrive pas a résoudre.. peux tu m'aider pour le code arduino a modifier car je ne maitrise pas trop le sujet ... La tout mon branchement est fait il me reste juste a rentrer le bon code pour tester.
    merci!

    alexismorsilli

    16 déc. 2017 à 20:00

    si ça peut t'aiguiller j'utilise une carte velleman vma 301 pour l'horloge et une carte velleman vma 409 pour le moteur . je sais pas si ça necessite d'autre changement dans le code?

    alexismorsilli

    24 déc. 2017 à 01:24

    Bonsoir, du coup j'ai acheté un ds1307, du coup l'heure focntionne. en revanche mon moteur ne se met jamais en route que ce soit en gestion forcé ou en programmation. apres avoir lu tout les commentaires je n'ai pas trouvé de réponse a ce problème.. pouvez vous m'aider ?
    merci

    bagou91

    24 déc. 2017 à 08:47

    Bonjour, il est en effet préférable de rester sur le ds1307 pour ne pas avoir à modifier le code sur la gestion de l'horloge.
    Pour la carte vma409, elle est basée sur un L298N, donc vous devriez retrouver les mêmes entrées que moi: En(able), In(1)(a), In(2)(b), GND, 5V, Vin...
    Bonne fêtes de fin d'années.

    alexismorsilli

    24 déc. 2017 à 09:43

    elle a éfféctivement les memes entrées, j'ai verifié mon branchement plusieurs fois. tout semble fonctionner au niveau du lcd j'ai meme la fleche qui descend quand la porte est censée descendre. En revanche au niveau du moteur je n'ai vraiment rien qui se passe et je n'arrive vraiment pas a comprendre. Les 3 resistances sont bien de 220 ohms?

    Bonnes fetes également.

    Julloss

    24 déc. 2017 à 15:54

    J'ai le même problème... J'ai essayé avec des résistances 220 ohms et 1Kohm... le moteur ne tourne pas. Mon driver moteur est un VNH2SP30... alors j'ai commandé le même qu'indiqué basé sur L298N.
    Je testerai et donnerai un retour s'il est positif...

    Yzago

    24 déc. 2017 à 15:58

    Bonjour, j'avais un problème de tension en sortie moteur du module L298D, je l’alimente en 12vdc mais en sortie je n'avais que 6vdc max. En voulant faire contrôler les sortie ... le moteur ne bouge plus du tout...
    Comment puis tester mon module L298D ?

    Yzago

    24 déc. 2017 à 16:01

    Quel valeur de tension avez vous sur sortie "in1 et in2" ?

    bagou91

    24 déc. 2017 à 16:37

    In1, In2, En: sont des entrées. En général ont les alimente en 5V. 5V donnant l'état logique = 1.
    Par exemple si En=5v, In1=5v, et In2=0v cela va actionner le moteur dans un sens.
    En=5v, In1=0v, In2=5v actionnera le moteur dans l'autre sens.
    Ne pas mettre In1 et In2 à 5v en même temps.
    Si En=0v cela désactive le contrôle du moteur.

    Si vous n'avez pas de +5v sur l'une des sorties 11,12,13 de l'arduino pendant l'actionnement de la porte, vérifiez bien le branchement des interrupteurs fin de course: il faut utiliser les contacts de travail c'est à dire les pattes qui sont en contact lorsque l'on appuie sur l'interrupteur. Sinon cela fait croire que la porte est déjà en bout de course et donc il n'y a pas d'action sur le moteur.

    Julloss

    24 déc. 2017 à 19:12

    Merci bagou91 pour ces détails.
    Dans mon cas après vérification tout semble bon au niveau du fonctionnement logique que tu as décrit ci-dessus. J'ai juste une tension de 4,87V au lieu de 5V...
    Mais le moteur ne tourne pas...
    Je pense que dans mon cas cela vient du VNH2SP30 (qui pourtant fonctionne)... je ne sais pas d'où viendrait l'incompatibilité mais je vais tenter avec le même driver moteur que bagou91 pour voir...

    Julloss

    12 jan. 2018 à 18:05

    Bon et bien après échange du VNH2SP30 par un Module L298N cela fonctionne!

    Yzago

    25 déc. 2017 à 21:34

    Merci bagou91 pour les explications.
    j'ai a vide 0.5v sur 13 et 2v sur 12 et 11 ...
    Mon module puissance fonctionne, j'ai bien un changement d'état des borne 11 et 12 a 5v.Mais rien ne bouge. La borne 13 plafonne à 1.8v
    Je vais refaire mon circuit électronique, je dois ne pas voir quelque chose.

    Grofilou

    27 déc. 2017 à 16:31

    Félicitations pour votre travail, je n'en suis pas là, en tant que débutant utilisateur Arduino. J'espère apporter ma contribution plus tard mais en attendant, j'ai un problème de compilation avec ce fichier. Je compile avec la version 1.7.10. S'il faut absolument une version plus ancienne (ce serait bizarre), je ne sa

    Grofilou

    27 déc. 2017 à 16:39

    Félicitations pour votre travail, je n'en suis pas là, en tant que débutant utilisateur Arduino. J'espère apporter ma contribution plus tard mais en attendant, j'ai un problème de compilation avec ce fichier. Je compile avec la version 1.7.10. S'il faut absolument une version plus ancienne (ce serait bizarre), je ne sais où la trouver. Merci de l'aide potentielle.

    Arduino : 1.7.10 (Windows 7), Carte : "Arduino Uno"

    Les options de compilation ont été modifiées, tout sera recompilé Utilisation de la bibliothèque LiquidCrystal prise dans le dossier : C:\Program Files (x86)\Arduino\libraries\LiquidCrystal  Utilisation de la bibliothèque Wire prise dans le dossier : C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire  Utilisation de la bibliothèque RTClib-master prise dans le dossier : C:\Program Files (x86)\Arduino\libraries\RTClib-master (legacy)  C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=107010 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\LiquidCrystal\src -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire -IC:\Program Files (x86)\Arduino\libraries\RTClib-master C:\Users\JEAN-P~1\AppData\Local\Temp\build1811410815321419774.tmp\poulailler.cpp -o C:\Users\JEAN-P~1\AppData\Local\Temp\build1811410815321419774.tmp\poulailler.cpp.o  poulailler.ino: In function 'void doMainMenuAction(byte)': poulailler.ino:140:11: error: 'class RTC_DS1307' has no member named 'writenvram' poulailler.ino:155:11: error: 'class RTC_DS1307' has no member named 'writenvram' poulailler.ino:207:11: error: 'class RTC_DS1307' has no member named 'writenvram' poulailler.ino: In function 'void loop()': poulailler.ino:453:7: error: 'class RTC_DS1307' has no member named 'readnvram' poulailler.ino:521:16: error: 'class DateTime' has no member named 'secondstime' poulailler.ino:521:45: error: 'class DateTime' has no member named 'secondstime' poulailler.ino:521:68: error: 'class DateTime' has no member named 'secondstime' poulailler.ino:521:98: error: 'class DateTime' has no member named 'secondstime' poulailler.ino:527:15: error: 'class DateTime' has no member named 'secondstime' poulailler.ino:527:46: error: 'class DateTime' has no member named 'secondstime' poulailler.ino:534:16: error: 'class DateTime' has no member named 'secondstime' poulailler.ino:534:45: error: 'class DateTime' has no member named 'secondstime' poulailler.ino:534:68: error: 'class DateTime' has no member named 'secondstime' poulailler.ino:534:98: error: 'class DateTime' has no member named 'secondstime' poulailler.ino:539:15: error: 'class DateTime' has no member named 'secondstime' poulailler.ino:539:46: error: 'class DateTime' has no member named 'secondstime' Erreur lors de la compilation.


    Yzago

    28 déc. 2017 à 11:58

    Je ne m'y connais pas énormément, mais j'ai utilisé la dernière version et je n'ai pas eu de problème de transfère.
    Tu utilise une carte arduino UNO ?

    Yzago

    28 déc. 2017 à 12:59

    L'entrée IN 1 et 2 change bien d'état, mais l'entrée EN ne passe jamais à 5 VDC.

    J'ai refais ma carte plus proprement, mon drivers moteur fonctionne.

    Avez vous une idée de la condition qu'il me manque pour le changement d'état de EN ?

    Merci d'avance.

    bagou91

    30 déc. 2017 à 11:42

    Si In1, In2 change d'état c'est que les conditions sont réunis pour l'actionnement du moteur. Donc EN (sortie 13) devrait être à 5V.
    Peut-être que la sortie 13 est HS... testez là en faisant un programme tout simple qui active cette sortie.

    Sinon dans mon programme, vous pouvez utiliser A0 au lieu de la sortie 13. Il suffit seulement de remplacer à la ligne 16, int enable = 13 par A0.

    Grofilou

    24 jan. 2018 à 09:57

    Voici ma petite contribution, pour ceux qui possèdent une version 2 du driver moteur. Tout le programme est listé ci-dessus, 2 lignes en plus dans les déclarations, 3 dans le void setup et 4 dans la loop.
    Pour le problème des 3 chiffres au lieu de 2, il faut absolument connecter le DS1307 et y mettre une pile avant les réglages.
    Je ne sais pas si c'est utile de recopier tout le programme, mais je ne connais pas encore la procédure pour faire autrement. Le menu.h n'est pas modifié et n'est pas listé ici.
    Bien merci à BAGOU pour sa réalisation.

    #include
    #include "Menu.h"
    #include
    #include "RTClib.h"

    //rs,e,db7-db4
    LiquidCrystal lcd(3, 4, 5, 6, 7, 8);
    RTC_DS1307 rtc;
    long backlight_cpt;
    bool erreur = false;

    uint8_t configData[6] = {0};
    int capteur_haut = 10;
    int capteur_bas = 9;
    int enable = 13;
    int in1 = 12;
    int in2 = 11;
    int lcdbacklight = 2;
    int cellulePhoto = A3;
    int buttons = A1;
    int bpReset = A2;
    int levelBatt = A7;
    int ledBattLow = A6;

    int IN1=12;
    int IN2=11;
    int ENA=13;

    /** Fonction retournant le bouton appuyé (s’il y en a un). */
    Button_t readPushButton(void)
    {
    unsigned int val = analogRead(buttons);
    //Serial.println(val);
    if (val > 1000) return BP_NONE;
    if (val < 50) return BP_RIGHT;
    if (val < 150) return BP_UP;
    if (val < 300) return BP_DOWN;
    if (val < 450) return BP_LEFT;
    if (val < 700) return BP_SELECT;
    //if (analogRead(bpReset) < 10) return BP_RST;

    /* Par défaut aucun bouton n'est appuyé */
    return BP_NONE;
    }

    /** Affiche le menu passé en argument */
    void displayMenu(const Menu_t &menu)
    {
    /* Variable pour le menu */
    int selectedMenuItem = 0; // Choix selectionné
    boolean shouldExitMenu = false; // Devient true quand l'utilisateur veut quitter le menu
    Button_t buttonPressed; // Contient le bouton appuyé

    /* Tant que l'utilisateur ne veut pas quitter le menu */
    while(!shouldExitMenu)
    {
    unsigned long temps = millis();

    /* Affiche le menu */
    lcd.clear();
    lcd.print(menu.prompt);
    lcd.setCursor(0, 1);
    lcd.print(menu.items[selectedMenuItem]);

    /* Attend le relâchement du bouton */
    while(readPushButton() != BP_NONE);

    /* Attend l'appui sur un bouton */
    while((buttonPressed = readPushButton()) == BP_NONE)
    {
    if((millis() - temps) > 6000){
    return;
    }
    }

    /* Anti rebond pour le bouton */
    delay(50);

    /* Attend le relâchement du bouton */
    while(readPushButton() != BP_NONE);

    /* Gére l'appui sur le bouton */
    switch(buttonPressed) {
    case BP_UP:
    if(selectedMenuItem > 0) {
    selectedMenuItem--;
    }
    break;

    case BP_DOWN:
    if(selectedMenuItem < (menu.nbItems - 1)) {
    selectedMenuItem++;
    }
    break;

    case BP_LEFT: // Bouton RST = sorti du menu
    shouldExitMenu = true;
    break;

    case BP_SELECT: // Bouton SELECT = validation du choix
    menu.callbackFnct(selectedMenuItem);
    break;
    }
    }
    }

    //action des menus
    void doMainMenuAction(byte selectedMenuItem)
    {
    if(selectedMenuItem == 0) { //configurer date heure
    lcd.clear();
    lcd.print(F("Config Date/heure"));

    DateTime now = rtc.now();
    uint8_t ladate[5] = {0};
    ladate[0] = now.hour();
    ladate[1] = now.minute();
    ladate[2] = now.day();
    ladate[3] = now.month();
    ladate[4] = now.year()-2000;

    lcd.setCursor(0,1);
    lcd.print(String(nombre2digit(ladate[0]) + ":" + nombre2digit(ladate[1]) + " " + nombre2digit(ladate[2]) + "/" + nombre2digit(ladate[3]) + "/" + nombre2digit(ladate[4])));

    uint8_t val_bp = menu_fleches(ladate, 0, 4);

    if (val_bp == 20) {
    rtc.adjust(DateTime(ladate[4]+2000, ladate[3], ladate[2], ladate[0], ladate[1], 0));
    }
    }
    if(selectedMenuItem == 1) //config levée
    {
    lcd.clear();
    lcd.print(F("Heure ouverture"));

    lcd.setCursor(0,1);
    lcd.print(String(nombre2digit(configData[0]) + ":" + nombre2digit(configData[1])));
    //hh:mm

    uint8_t val_bp = menu_fleches(configData, 0, 1);

    if (val_bp == 20){
    rtc.writenvram(0, configData, 6);
    }
    }
    if(selectedMenuItem == 2) //config couché
    {
    lcd.clear();
    lcd.print(F("Heure fermeture"));

    lcd.setCursor(6,1);
    lcd.print(String(nombre2digit(configData[2]) + ":" + nombre2digit(configData[3])));
    //__6___hh:mm

    uint8_t val_bp = menu_fleches(configData, 2, 3);

    if (val_bp == 20){
    rtc.writenvram(0, configData, 6);
    }
    }
    if(selectedMenuItem == 3) //config luminosité auto
    {
    lcd.clear();
    lcd.print(F("Config lum v="));

    Button_t buttonPressed;
    uint8_t valPhoto = 0;
    uint8_t val_bp = 0;
    while (val_bp < 20)
    {
    valPhoto = analogRead(cellulePhoto) / 4;
    lcd.setCursor(13,0);
    lcd.print(String(valPhoto) + " ");
    lcd.setCursor(0,1);
    if (configData[4] == 0)
    lcd.print("NON ");
    else
    lcd.print("OUI seuil:" + String(configData[5]) + " ");
    //val de 0 à 255

    while((buttonPressed = readPushButton()) == BP_NONE);
    /* Anti rebond pour le bouton */
    delay(50);
    /* Attend le relâchement du bouton */
    //while(readPushButton() != BP_NONE);
    /* Gére l'appui sur le bouton */
    switch(buttonPressed) {
    case BP_UP:
    if (configData[5] < 255){
    configData[5]++;
    configData[4] = 1;
    }
    break;
    case BP_DOWN:
    if (configData[5] > 0){
    configData[5]--;
    if (configData[5] == 0) configData[4] = 0;
    }
    break;
    case BP_SELECT:
    val_bp = 20;
    break;
    case BP_LEFT:
    val_bp = 21;
    break;
    }
    }
    if (val_bp == 20)
    {
    rtc.writenvram(0, configData, 6);
    }
    }
    if(selectedMenuItem == 4) //gestion forcée
    {
    lcd.clear();
    //lcd.setCursor(0,0);
    lcd.print("Gestion forcee");
    digitalWrite(enable, HIGH);

    Button_t buttonPressed;
    uint8_t val_bp = 0;
    while (val_bp < 20)
    {
    lcd.setCursor(0,1);
    while((buttonPressed = readPushButton()) == BP_NONE)
    {
    lcd.setCursor(0,1);
    lcd.print(" ");
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);
    }
    /* Anti rebond pour le bouton */
    delay(50);
    /* Attend le relâchement du bouton */
    //while(readPushButton() != BP_NONE);
    /* Gére l'appui sur le bouton */
    switch(buttonPressed) {
    case BP_UP:
    lcd.print("ouverture... ");
    if (digitalRead(capteur_haut) == false){
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    }
    break;
    case BP_DOWN:
    lcd.print("fermeture... ");
    if (digitalRead(capteur_bas) == false){
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    }
    break;
    case BP_SELECT:
    val_bp = 20;
    break;
    case BP_LEFT:
    val_bp = 21;
    break;
    }
    }
    digitalWrite(enable, LOW);
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);
    lcd.clear();
    }
    }

    uint8_t menu_fleches(uint8_t *tval, uint8_t minpos, uint8_t maxpos)
    {
    uint8_t val_bp = 0;
    uint8_t indexpos = minpos;
    Button_t buttonPressed;

    lcd.setCursor(indexpos*3,1);
    lcd.cursor();

    while (val_bp < 20)
    {
    while((buttonPressed = readPushButton()) == BP_NONE);
    /* Anti rebond pour le bouton */
    delay(50);
    /* Attend le relâchement du bouton */
    //while(readPushButton() != BP_NONE);
    /* Gére l'appui sur le bouton */
    switch(buttonPressed) {
    case BP_UP:
    if ((indexpos == 2) && (tval[indexpos] < 31) && (maxpos == 4))
    tval[indexpos]++;
    else if ((indexpos == 3) && (tval[indexpos] < 12) && (maxpos == 4))
    tval[indexpos]++;
    else if (((indexpos == 0) || (indexpos == 2)) && (tval[indexpos] < 23))
    tval[indexpos]++;
    else if (((indexpos == 1) || (indexpos == 3)) && (tval[indexpos] < 59))
    tval[indexpos]++;
    else if ((indexpos == 4) && (tval[indexpos] < 255) && (maxpos == 4))
    tval[indexpos]++;
    break;

    case BP_DOWN:
    if (tval[indexpos] > 0) tval[indexpos]--;
    break;

    case BP_LEFT:
    if (indexpos > minpos) indexpos--;
    break;

    case BP_RIGHT:
    if (indexpos < maxpos) indexpos++;
    break;

    case BP_SELECT:
    val_bp = 20;
    break;

    case BP_RST:
    val_bp = 21;
    break;
    }
    lcd.setCursor((indexpos*3),1);
    if (indexpos != 4)
    lcd.print(nombre2digit(tval[indexpos]));
    else
    lcd.print(nombre2digit(tval[indexpos]) + " ");

    lcd.setCursor((indexpos*3),1);

    delay(100);
    }
    lcd.noCursor();

    return val_bp;
    }

    void fermer_porte()
    {
    long timeout = millis() + 30000;
    long timeoutcapthaut = millis() + 2000;
    while ((millis() < timeout) && (digitalRead(capteur_bas) == false))
    {
    if ((millis() > timeoutcapthaut) && digitalRead(capteur_haut))
    {
    timeout = 1000;
    }

    DateTime now = rtc.now();
    lcd.setCursor(7,1);
    if ((now.second() % 2) == 0){
    lcd.write(byte(1));
    }
    else{
    lcd.write(" ");
    }
    digitalWrite(enable, HIGH);
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    }
    digitalWrite(enable, LOW);
    digitalWrite(in2, LOW);

    if (digitalRead(capteur_bas) == false){
    erreur = true;
    }
    }

    void ouvrir_porte()
    {
    long timeout = millis() + 30000;
    long timeoutcaptbas = millis() + 2000;
    while ((millis() < timeout) && (digitalRead(capteur_haut) == false))
    {
    if ((millis() > timeoutcaptbas) && digitalRead(capteur_bas))
    {
    timeout = 1000;
    }

    DateTime now = rtc.now();
    lcd.setCursor(7,1);
    if ((now.second() % 2) == 0){
    lcd.write(byte(0));
    }
    else{
    lcd.write(" ");
    }
    digitalWrite(enable, HIGH);
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    }
    digitalWrite(enable, LOW);
    digitalWrite(in1, LOW);

    if (digitalRead(capteur_haut) == false){
    erreur = true;
    }
    }

    String nombre2digit(uint16_t nb)
    {
    String val = "";
    if (nb < 10)
    val = "0" + String(nb);
    else
    val = String(nb);

    return val;
    }

    static const char* MAIN_MENU_ITEMS[] = {
    "Config Date/Heure",
    "Heure Levee",
    "Heure Couche",
    "Auto luminosite",
    "Gestion forcee"
    };
    static const Menu_t MAIN_MENU = {
    "Votre choix ?",
    MAIN_MENU_ITEMS,
    5,
    & doMainMenuAction
    };

    void setup()
    {
    pinMode(IN1,OUTPUT);
    pinMode(IN2,OUTPUT);

    pinMode(capteur_haut, INPUT);
    pinMode(capteur_bas, INPUT);
    pinMode(cellulePhoto, INPUT);
    pinMode(buttons, INPUT);
    pinMode(bpReset, INPUT);
    pinMode(lcdbacklight, OUTPUT);
    digitalWrite(lcdbacklight, HIGH);

    pinMode(levelBatt, INPUT);
    pinMode(ledBattLow, OUTPUT);
    analogWrite(ledBattLow, 0);

    digitalWrite(enable, LOW);
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);

    lcd.begin(16, 2);
    byte Haut[8] = {B00100,B00100,B00100,B00100,B10101,B01110,B00100,B00000};
    byte Bas[8] = {B00000,B00100,B01110,B10101,B00100,B00100,B00100,B00100};
    lcd.createChar(1,Haut);
    lcd.createChar(0,Bas);

    Wire.begin();
    rtc.begin();
    backlight_cpt = millis();

    //Serial.begin(9600);
    //rtc.adjust(DateTime(2015, 7, 13, 15, 54, 0));
    //rtc.writenvram(0,configData,6);
    }


    void loop()
    {
    analogWrite(ENA, 200);// motor speed
    digitalWrite(IN1,LOW);// rotate forward
    digitalWrite(IN2,LOW);
    delay(2000);

    {
    rtc.readnvram(configData, 6, 0);
    uint8_t luminosite = configData[4];
    uint8_t lum_auto = configData[5];

    //12V -0.7V diode -> pont diviseur 2.2k + 1k -> 3.53V
    //5V = 1023, 3.53V = 722
    //déchargé quand < 10.3V donc 3.218V donc 658
    int valBatt = analogRead(levelBatt);
    if ((levelBatt > 0) && (levelBatt < 658)){
    analogWrite(ledBattLow, 255);
    }
    else{
    analogWrite(ledBattLow, 0);
    }

    if(analogRead(bpReset) < 10){
    digitalWrite(lcdbacklight, HIGH);
    lcd.display();
    backlight_cpt = millis();
    }

    if (readPushButton() != BP_NONE)
    {
    digitalWrite(lcdbacklight, HIGH);
    lcd.display();
    displayMenu(MAIN_MENU);
    backlight_cpt = millis();
    erreur = false;
    }
    else
    {
    if ((backlight_cpt+10000) < millis())
    {
    digitalWrite(lcdbacklight, LOW);
    lcd.noDisplay();
    }

    DateTime now = rtc.now();
    DateTime DTHeureLeve = DateTime(now.year(), now.month(), now.day(), configData[0], configData[1], 0);
    DateTime DTHeureCouche = DateTime(now.year(), now.month(), now.day(), configData[2], configData[3], 0);

    String Hpoint = ":";
    if ((now.second() % 2) == 0){
    Hpoint = " ";
    }
    //lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(nombre2digit(now.hour()) + Hpoint + nombre2digit(now.minute()) + " " + nombre2digit(now.day()) + "/" + nombre2digit(now.month()) + "/" + nombre2digit(now.year()));
    lcd.setCursor(0,1);

    if (configData[4] == 0){
    lcd.print(String(nombre2digit(configData[0]) + ":" + nombre2digit(configData[1]) + " " + nombre2digit(configData[2]) + ":" + nombre2digit(configData[3])));
    }
    else{
    lcd.print("auto: " + String(configData[5]) + " lum:" + String(analogRead(cellulePhoto)/4));
    }

    if (erreur){
    lcd.setCursor(0,1);
    lcd.print(" ERREUR PORTE ! ");
    analogWrite(ledBattLow, 300);
    delay(100);
    analogWrite(ledBattLow, 0);
    return;
    }

    if (configData[4] == 0){ //manuel
    //ouvrir porte
    if ((now.secondstime() >= DTHeureLeve.secondstime()) && (now.secondstime() < DTHeureCouche.secondstime()))
    {
    ouvrir_porte();
    }

    //fermer porte
    if (now.secondstime() >= DTHeureCouche.secondstime())
    {
    fermer_porte();
    }
    }
    else{ //auto
    //ouvrir porte
    if ((now.secondstime() >= DTHeureLeve.secondstime()) && (now.secondstime() < DTHeureCouche.secondstime()) && ((analogRead(cellulePhoto)/4) > configData[5]))
    {
    ouvrir_porte();
    }
    //fermer porte
    if (now.secondstime() >= DTHeureCouche.secondstime() && ((analogRead(cellulePhoto)/4) < configData[5]))
    {
    fermer_porte();
    }
    }
    }
    delay(100);
    }}

    Grofilou

    24 jan. 2018 à 09:50

    Voici ma petite contribution, pour ceux qui possèdent une version 2 du driver moteur. Tout le programme est listé ci-dessus, 2 lignes da

    #include
    #include "Menu.h"
    #include
    #include "RTClib.h"

    //rs,e,db7-db4
    LiquidCrystal lcd(3, 4, 5, 6, 7, 8);
    RTC_DS1307 rtc;
    long backlight_cpt;
    bool erreur = false;

    uint8_t configData[6] = {0};
    int capteur_haut = 10;
    int capteur_bas = 9;
    int enable = 13;
    int in1 = 12;
    int in2 = 11;
    int lcdbacklight = 2;
    int cellulePhoto = A3;
    int buttons = A1;
    int bpReset = A2;
    int levelBatt = A7;
    int ledBattLow = A6;

    int IN1=12;
    int IN2=11;
    int ENA=13;

    /** Fonction retournant le bouton appuyé (s’il y en a un). */
    Button_t readPushButton(void)
    {
    unsigned int val = analogRead(buttons);
    //Serial.println(val);
    if (val > 1000) return BP_NONE;
    if (val < 50) return BP_RIGHT;
    if (val < 150) return BP_UP;
    if (val < 300) return BP_DOWN;
    if (val < 450) return BP_LEFT;
    if (val < 700) return BP_SELECT;
    //if (analogRead(bpReset) < 10) return BP_RST;

    /* Par défaut aucun bouton n'est appuyé */
    return BP_NONE;
    }

    /** Affiche le menu passé en argument */
    void displayMenu(const Menu_t &menu)
    {
    /* Variable pour le menu */
    int selectedMenuItem = 0; // Choix selectionné
    boolean shouldExitMenu = false; // Devient true quand l'utilisateur veut quitter le menu
    Button_t buttonPressed; // Contient le bouton appuyé

    /* Tant que l'utilisateur ne veut pas quitter le menu */
    while(!shouldExitMenu)
    {
    unsigned long temps = millis();

    /* Affiche le menu */
    lcd.clear();
    lcd.print(menu.prompt);
    lcd.setCursor(0, 1);
    lcd.print(menu.items[selectedMenuItem]);

    /* Attend le relâchement du bouton */
    while(readPushButton() != BP_NONE);

    /* Attend l'appui sur un bouton */
    while((buttonPressed = readPushButton()) == BP_NONE)
    {
    if((millis() - temps) > 6000){
    return;
    }
    }

    /* Anti rebond pour le bouton */
    delay(50);

    /* Attend le relâchement du bouton */
    while(readPushButton() != BP_NONE);

    /* Gére l'appui sur le bouton */
    switch(buttonPressed) {
    case BP_UP:
    if(selectedMenuItem > 0) {
    selectedMenuItem--;
    }
    break;

    case BP_DOWN:
    if(selectedMenuItem < (menu.nbItems - 1)) {
    selectedMenuItem++;
    }
    break;

    case BP_LEFT: // Bouton RST = sorti du menu
    shouldExitMenu = true;
    break;

    case BP_SELECT: // Bouton SELECT = validation du choix
    menu.callbackFnct(selectedMenuItem);
    break;
    }
    }
    }

    //action des menus
    void doMainMenuAction(byte selectedMenuItem)
    {
    if(selectedMenuItem == 0) { //configurer date heure
    lcd.clear();
    lcd.print(F("Config Date/heure"));

    DateTime now = rtc.now();
    uint8_t ladate[5] = {0};
    ladate[0] = now.hour();
    ladate[1] = now.minute();
    ladate[2] = now.day();
    ladate[3] = now.month();
    ladate[4] = now.year()-2000;

    lcd.setCursor(0,1);
    lcd.print(String(nombre2digit(ladate[0]) + ":" + nombre2digit(ladate[1]) + " " + nombre2digit(ladate[2]) + "/" + nombre2digit(ladate[3]) + "/" + nombre2digit(ladate[4])));

    uint8_t val_bp = menu_fleches(ladate, 0, 4);

    if (val_bp == 20) {
    rtc.adjust(DateTime(ladate[4]+2000, ladate[3], ladate[2], ladate[0], ladate[1], 0));
    }
    }
    if(selectedMenuItem == 1) //config levée
    {
    lcd.clear();
    lcd.print(F("Heure ouverture"));

    lcd.setCursor(0,1);
    lcd.print(String(nombre2digit(configData[0]) + ":" + nombre2digit(configData[1])));
    //hh:mm

    uint8_t val_bp = menu_fleches(configData, 0, 1);

    if (val_bp == 20){
    rtc.writenvram(0, configData, 6);
    }
    }
    if(selectedMenuItem == 2) //config couché
    {
    lcd.clear();
    lcd.print(F("Heure fermeture"));

    lcd.setCursor(6,1);
    lcd.print(String(nombre2digit(configData[2]) + ":" + nombre2digit(configData[3])));
    //__6___hh:mm

    uint8_t val_bp = menu_fleches(configData, 2, 3);

    if (val_bp == 20){
    rtc.writenvram(0, configData, 6);
    }
    }
    if(selectedMenuItem == 3) //config luminosité auto
    {
    lcd.clear();
    lcd.print(F("Config lum v="));

    Button_t buttonPressed;
    uint8_t valPhoto = 0;
    uint8_t val_bp = 0;
    while (val_bp < 20)
    {
    valPhoto = analogRead(cellulePhoto) / 4;
    lcd.setCursor(13,0);
    lcd.print(String(valPhoto) + " ");
    lcd.setCursor(0,1);
    if (configData[4] == 0)
    lcd.print("NON ");
    else
    lcd.print("OUI seuil:" + String(configData[5]) + " ");
    //val de 0 à 255

    while((buttonPressed = readPushButton()) == BP_NONE);
    /* Anti rebond pour le bouton */
    delay(50);
    /* Attend le relâchement du bouton */
    //while(readPushButton() != BP_NONE);
    /* Gére l'appui sur le bouton */
    switch(buttonPressed) {
    case BP_UP:
    if (configData[5] < 255){
    configData[5]++;
    configData[4] = 1;
    }
    break;
    case BP_DOWN:
    if (configData[5] > 0){
    configData[5]--;
    if (configData[5] == 0) configData[4] = 0;
    }
    break;
    case BP_SELECT:
    val_bp = 20;
    break;
    case BP_LEFT:
    val_bp = 21;
    break;
    }
    }
    if (val_bp == 20)
    {
    rtc.writenvram(0, configData, 6);
    }
    }
    if(selectedMenuItem == 4) //gestion forcée
    {
    lcd.clear();
    //lcd.setCursor(0,0);
    lcd.print("Gestion forcee");
    digitalWrite(enable, HIGH);

    Button_t buttonPressed;
    uint8_t val_bp = 0;
    while (val_bp < 20)
    {
    lcd.setCursor(0,1);
    while((buttonPressed = readPushButton()) == BP_NONE)
    {
    lcd.setCursor(0,1);
    lcd.print(" ");
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);
    }
    /* Anti rebond pour le bouton */
    delay(50);
    /* Attend le relâchement du bouton */
    //while(readPushButton() != BP_NONE);
    /* Gére l'appui sur le bouton */
    switch(buttonPressed) {
    case BP_UP:
    lcd.print("ouverture... ");
    if (digitalRead(capteur_haut) == false){
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    }
    break;
    case BP_DOWN:
    lcd.print("fermeture... ");
    if (digitalRead(capteur_bas) == false){
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    }
    break;
    case BP_SELECT:
    val_bp = 20;
    break;
    case BP_LEFT:
    val_bp = 21;
    break;
    }
    }
    digitalWrite(enable, LOW);
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);
    lcd.clear();
    }
    }

    uint8_t menu_fleches(uint8_t *tval, uint8_t minpos, uint8_t maxpos)
    {
    uint8_t val_bp = 0;
    uint8_t indexpos = minpos;
    Button_t buttonPressed;

    lcd.setCursor(indexpos*3,1);
    lcd.cursor();

    while (val_bp < 20)
    {
    while((buttonPressed = readPushButton()) == BP_NONE);
    /* Anti rebond pour le bouton */
    delay(50);
    /* Attend le relâchement du bouton */
    //while(readPushButton() != BP_NONE);
    /* Gére l'appui sur le bouton */
    switch(buttonPressed) {
    case BP_UP:
    if ((indexpos == 2) && (tval[indexpos] < 31) && (maxpos == 4))
    tval[indexpos]++;
    else if ((indexpos == 3) && (tval[indexpos] < 12) && (maxpos == 4))
    tval[indexpos]++;
    else if (((indexpos == 0) || (indexpos == 2)) && (tval[indexpos] < 23))
    tval[indexpos]++;
    else if (((indexpos == 1) || (indexpos == 3)) && (tval[indexpos] < 59))
    tval[indexpos]++;
    else if ((indexpos == 4) && (tval[indexpos] < 255) && (maxpos == 4))
    tval[indexpos]++;
    break;

    case BP_DOWN:
    if (tval[indexpos] > 0) tval[indexpos]--;
    break;

    case BP_LEFT:
    if (indexpos > minpos) indexpos--;
    break;

    case BP_RIGHT:
    if (indexpos < maxpos) indexpos++;
    break;

    case BP_SELECT:
    val_bp = 20;
    break;

    case BP_RST:
    val_bp = 21;
    break;
    }
    lcd.setCursor((indexpos*3),1);
    if (indexpos != 4)
    lcd.print(nombre2digit(tval[indexpos]));
    else
    lcd.print(nombre2digit(tval[indexpos]) + " ");

    lcd.setCursor((indexpos*3),1);

    delay(100);
    }
    lcd.noCursor();

    return val_bp;
    }

    void fermer_porte()
    {
    long timeout = millis() + 30000;
    long timeoutcapthaut = millis() + 2000;
    while ((millis() < timeout) && (digitalRead(capteur_bas) == false))
    {
    if ((millis() > timeoutcapthaut) && digitalRead(capteur_haut))
    {
    timeout = 1000;
    }

    DateTime now = rtc.now();
    lcd.setCursor(7,1);
    if ((now.second() % 2) == 0){
    lcd.write(byte(1));
    }
    else{
    lcd.write(" ");
    }
    digitalWrite(enable, HIGH);
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    }
    digitalWrite(enable, LOW);
    digitalWrite(in2, LOW);

    if (digitalRead(capteur_bas) == false){
    erreur = true;
    }
    }

    void ouvrir_porte()
    {
    long timeout = millis() + 30000;
    long timeoutcaptbas = millis() + 2000;
    while ((millis() < timeout) && (digitalRead(capteur_haut) == false))
    {
    if ((millis() > timeoutcaptbas) && digitalRead(capteur_bas))
    {
    timeout = 1000;
    }

    DateTime now = rtc.now();
    lcd.setCursor(7,1);
    if ((now.second() % 2) == 0){
    lcd.write(byte(0));
    }
    else{
    lcd.write(" ");
    }
    digitalWrite(enable, HIGH);
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    }
    digitalWrite(enable, LOW);
    digitalWrite(in1, LOW);

    if (digitalRead(capteur_haut) == false){
    erreur = true;
    }
    }

    String nombre2digit(uint16_t nb)
    {
    String val = "";
    if (nb < 10)
    val = "0" + String(nb);
    else
    val = String(nb);

    return val;
    }

    static const char* MAIN_MENU_ITEMS[] = {
    "Config Date/Heure",
    "Heure Levee",
    "Heure Couche",
    "Auto luminosite",
    "Gestion forcee"
    };
    static const Menu_t MAIN_MENU = {
    "Votre choix ?",
    MAIN_MENU_ITEMS,
    5,
    & doMainMenuAction
    };

    void setup()
    {
    pinMode(IN1,OUTPUT);
    pinMode(IN2,OUTPUT);

    pinMode(capteur_haut, INPUT);
    pinMode(capteur_bas, INPUT);
    pinMode(cellulePhoto, INPUT);
    pinMode(buttons, INPUT);
    pinMode(bpReset, INPUT);
    pinMode(lcdbacklight, OUTPUT);
    digitalWrite(lcdbacklight, HIGH);

    pinMode(levelBatt, INPUT);
    pinMode(ledBattLow, OUTPUT);
    analogWrite(ledBattLow, 0);

    digitalWrite(enable, LOW);
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);

    lcd.begin(16, 2);
    byte Haut[8] = {B00100,B00100,B00100,B00100,B10101,B01110,B00100,B00000};
    byte Bas[8] = {B00000,B00100,B01110,B10101,B00100,B00100,B00100,B00100};
    lcd.createChar(1,Haut);
    lcd.createChar(0,Bas);

    Wire.begin();
    rtc.begin();
    backlight_cpt = millis();

    //Serial.begin(9600);
    //rtc.adjust(DateTime(2015, 7, 13, 15, 54, 0));
    //rtc.writenvram(0,configData,6);
    }


    void loop()
    {
    analogWrite(ENA, 200);// motor speed
    digitalWrite(IN1,LOW);// rotate forward
    digitalWrite(IN2,LOW);
    delay(2000);

    {
    rtc.readnvram(configData, 6, 0);
    uint8_t luminosite = configData[4];
    uint8_t lum_auto = configData[5];

    //12V -0.7V diode -> pont diviseur 2.2k + 1k -> 3.53V
    //5V = 1023, 3.53V = 722
    //déchargé quand < 10.3V donc 3.218V donc 658
    int valBatt = analogRead(levelBatt);
    if ((levelBatt > 0) && (levelBatt < 658)){
    analogWrite(ledBattLow, 255);
    }
    else{
    analogWrite(ledBattLow, 0);
    }

    if(analogRead(bpReset) < 10){
    digitalWrite(lcdbacklight, HIGH);
    lcd.display();
    backlight_cpt = millis();
    }

    if (readPushButton() != BP_NONE)
    {
    digitalWrite(lcdbacklight, HIGH);
    lcd.display();
    displayMenu(MAIN_MENU);
    backlight_cpt = millis();
    erreur = false;
    }
    else
    {
    if ((backlight_cpt+10000) < millis())
    {
    digitalWrite(lcdbacklight, LOW);
    lcd.noDisplay();
    }

    DateTime now = rtc.now();
    DateTime DTHeureLeve = DateTime(now.year(), now.month(), now.day(), configData[0], configData[1], 0);
    DateTime DTHeureCouche = DateTime(now.year(), now.month(), now.day(), configData[2], configData[3], 0);

    String Hpoint = ":";
    if ((now.second() % 2) == 0){
    Hpoint = " ";
    }
    //lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(nombre2digit(now.hour()) + Hpoint + nombre2digit(now.minute()) + " " + nombre2digit(now.day()) + "/" + nombre2digit(now.month()) + "/" + nombre2digit(now.year()));
    lcd.setCursor(0,1);

    if (configData[4] == 0){
    lcd.print(String(nombre2digit(configData[0]) + ":" + nombre2digit(configData[1]) + " " + nombre2digit(configData[2]) + ":" + nombre2digit(configData[3])));
    }
    else{
    lcd.print("auto: " + String(configData[5]) + " lum:" + String(analogRead(cellulePhoto)/4));
    }

    if (erreur){
    lcd.setCursor(0,1);
    lcd.print(" ERREUR PORTE ! ");
    analogWrite(ledBattLow, 300);
    delay(100);
    analogWrite(ledBattLow, 0);
    return;
    }

    if (configData[4] == 0){ //manuel
    //ouvrir porte
    if ((now.secondstime() >= DTHeureLeve.secondstime()) && (now.secondstime() < DTHeureCouche.secondstime()))
    {
    ouvrir_porte();
    }

    //fermer porte
    if (now.secondstime() >= DTHeureCouche.secondstime())
    {
    fermer_porte();
    }
    }
    else{ //auto
    //ouvrir porte
    if ((now.secondstime() >= DTHeureLeve.secondstime()) && (now.secondstime() < DTHeureCouche.secondstime()) && ((analogRead(cellulePhoto)/4) > configData[5]))
    {
    ouvrir_porte();
    }
    //fermer porte
    if (now.secondstime() >= DTHeureCouche.secondstime() && ((analogRead(cellulePhoto)/4) < configData[5]))
    {
    fermer_porte();
    }
    }
    }
    delay(100);
    }}

    Grofilou

    24 jan. 2018 à 09:50

    Voici ma petite contribution, pour ceux qui possèdent une version 2 du driver moteur. Tout le programme est listé ci-dessus, 2 lignes da

    #include
    #include "Menu.h"
    #include
    #include "RTClib.h"

    //rs,e,db7-db4
    LiquidCrystal lcd(3, 4, 5, 6, 7, 8);
    RTC_DS1307 rtc;
    long backlight_cpt;
    bool erreur = false;

    uint8_t configData[6] = {0};
    int capteur_haut = 10;
    int capteur_bas = 9;
    int enable = 13;
    int in1 = 12;
    int in2 = 11;
    int lcdbacklight = 2;
    int cellulePhoto = A3;
    int buttons = A1;
    int bpReset = A2;
    int levelBatt = A7;
    int ledBattLow = A6;

    int IN1=12;
    int IN2=11;
    int ENA=13;

    /** Fonction retournant le bouton appuyé (s’il y en a un). */
    Button_t readPushButton(void)
    {
    unsigned int val = analogRead(buttons);
    //Serial.println(val);
    if (val > 1000) return BP_NONE;
    if (val < 50) return BP_RIGHT;
    if (val < 150) return BP_UP;
    if (val < 300) return BP_DOWN;
    if (val < 450) return BP_LEFT;
    if (val < 700) return BP_SELECT;
    //if (analogRead(bpReset) < 10) return BP_RST;

    /* Par défaut aucun bouton n'est appuyé */
    return BP_NONE;
    }

    /** Affiche le menu passé en argument */
    void displayMenu(const Menu_t &menu)
    {
    /* Variable pour le menu */
    int selectedMenuItem = 0; // Choix selectionné
    boolean shouldExitMenu = false; // Devient true quand l'utilisateur veut quitter le menu
    Button_t buttonPressed; // Contient le bouton appuyé

    /* Tant que l'utilisateur ne veut pas quitter le menu */
    while(!shouldExitMenu)
    {
    unsigned long temps = millis();

    /* Affiche le menu */
    lcd.clear();
    lcd.print(menu.prompt);
    lcd.setCursor(0, 1);
    lcd.print(menu.items[selectedMenuItem]);

    /* Attend le relâchement du bouton */
    while(readPushButton() != BP_NONE);

    /* Attend l'appui sur un bouton */
    while((buttonPressed = readPushButton()) == BP_NONE)
    {
    if((millis() - temps) > 6000){
    return;
    }
    }

    /* Anti rebond pour le bouton */
    delay(50);

    /* Attend le relâchement du bouton */
    while(readPushButton() != BP_NONE);

    /* Gére l'appui sur le bouton */
    switch(buttonPressed) {
    case BP_UP:
    if(selectedMenuItem > 0) {
    selectedMenuItem--;
    }
    break;

    case BP_DOWN:
    if(selectedMenuItem < (menu.nbItems - 1)) {
    selectedMenuItem++;
    }
    break;

    case BP_LEFT: // Bouton RST = sorti du menu
    shouldExitMenu = true;
    break;

    case BP_SELECT: // Bouton SELECT = validation du choix
    menu.callbackFnct(selectedMenuItem);
    break;
    }
    }
    }

    //action des menus
    void doMainMenuAction(byte selectedMenuItem)
    {
    if(selectedMenuItem == 0) { //configurer date heure
    lcd.clear();
    lcd.print(F("Config Date/heure"));

    DateTime now = rtc.now();
    uint8_t ladate[5] = {0};
    ladate[0] = now.hour();
    ladate[1] = now.minute();
    ladate[2] = now.day();
    ladate[3] = now.month();
    ladate[4] = now.year()-2000;

    lcd.setCursor(0,1);
    lcd.print(String(nombre2digit(ladate[0]) + ":" + nombre2digit(ladate[1]) + " " + nombre2digit(ladate[2]) + "/" + nombre2digit(ladate[3]) + "/" + nombre2digit(ladate[4])));

    uint8_t val_bp = menu_fleches(ladate, 0, 4);

    if (val_bp == 20) {
    rtc.adjust(DateTime(ladate[4]+2000, ladate[3], ladate[2], ladate[0], ladate[1], 0));
    }
    }
    if(selectedMenuItem == 1) //config levée
    {
    lcd.clear();
    lcd.print(F("Heure ouverture"));

    lcd.setCursor(0,1);
    lcd.print(String(nombre2digit(configData[0]) + ":" + nombre2digit(configData[1])));
    //hh:mm

    uint8_t val_bp = menu_fleches(configData, 0, 1);

    if (val_bp == 20){
    rtc.writenvram(0, configData, 6);
    }
    }
    if(selectedMenuItem == 2) //config couché
    {
    lcd.clear();
    lcd.print(F("Heure fermeture"));

    lcd.setCursor(6,1);
    lcd.print(String(nombre2digit(configData[2]) + ":" + nombre2digit(configData[3])));
    //__6___hh:mm

    uint8_t val_bp = menu_fleches(configData, 2, 3);

    if (val_bp == 20){
    rtc.writenvram(0, configData, 6);
    }
    }
    if(selectedMenuItem == 3) //config luminosité auto
    {
    lcd.clear();
    lcd.print(F("Config lum v="));

    Button_t buttonPressed;
    uint8_t valPhoto = 0;
    uint8_t val_bp = 0;
    while (val_bp < 20)
    {
    valPhoto = analogRead(cellulePhoto) / 4;
    lcd.setCursor(13,0);
    lcd.print(String(valPhoto) + " ");
    lcd.setCursor(0,1);
    if (configData[4] == 0)
    lcd.print("NON ");
    else
    lcd.print("OUI seuil:" + String(configData[5]) + " ");
    //val de 0 à 255

    while((buttonPressed = readPushButton()) == BP_NONE);
    /* Anti rebond pour le bouton */
    delay(50);
    /* Attend le relâchement du bouton */
    //while(readPushButton() != BP_NONE);
    /* Gére l'appui sur le bouton */
    switch(buttonPressed) {
    case BP_UP:
    if (configData[5] < 255){
    configData[5]++;
    configData[4] = 1;
    }
    break;
    case BP_DOWN:
    if (configData[5] > 0){
    configData[5]--;
    if (configData[5] == 0) configData[4] = 0;
    }
    break;
    case BP_SELECT:
    val_bp = 20;
    break;
    case BP_LEFT:
    val_bp = 21;
    break;
    }
    }
    if (val_bp == 20)
    {
    rtc.writenvram(0, configData, 6);
    }
    }
    if(selectedMenuItem == 4) //gestion forcée
    {
    lcd.clear();
    //lcd.setCursor(0,0);
    lcd.print("Gestion forcee");
    digitalWrite(enable, HIGH);

    Button_t buttonPressed;
    uint8_t val_bp = 0;
    while (val_bp < 20)
    {
    lcd.setCursor(0,1);
    while((buttonPressed = readPushButton()) == BP_NONE)
    {
    lcd.setCursor(0,1);
    lcd.print(" ");
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);
    }
    /* Anti rebond pour le bouton */
    delay(50);
    /* Attend le relâchement du bouton */
    //while(readPushButton() != BP_NONE);
    /* Gére l'appui sur le bouton */
    switch(buttonPressed) {
    case BP_UP:
    lcd.print("ouverture... ");
    if (digitalRead(capteur_haut) == false){
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    }
    break;
    case BP_DOWN:
    lcd.print("fermeture... ");
    if (digitalRead(capteur_bas) == false){
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    }
    break;
    case BP_SELECT:
    val_bp = 20;
    break;
    case BP_LEFT:
    val_bp = 21;
    break;
    }
    }
    digitalWrite(enable, LOW);
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);
    lcd.clear();
    }
    }

    uint8_t menu_fleches(uint8_t *tval, uint8_t minpos, uint8_t maxpos)
    {
    uint8_t val_bp = 0;
    uint8_t indexpos = minpos;
    Button_t buttonPressed;

    lcd.setCursor(indexpos*3,1);
    lcd.cursor();

    while (val_bp < 20)
    {
    while((buttonPressed = readPushButton()) == BP_NONE);
    /* Anti rebond pour le bouton */
    delay(50);
    /* Attend le relâchement du bouton */
    //while(readPushButton() != BP_NONE);
    /* Gére l'appui sur le bouton */
    switch(buttonPressed) {
    case BP_UP:
    if ((indexpos == 2) && (tval[indexpos] < 31) && (maxpos == 4))
    tval[indexpos]++;
    else if ((indexpos == 3) && (tval[indexpos] < 12) && (maxpos == 4))
    tval[indexpos]++;
    else if (((indexpos == 0) || (indexpos == 2)) && (tval[indexpos] < 23))
    tval[indexpos]++;
    else if (((indexpos == 1) || (indexpos == 3)) && (tval[indexpos] < 59))
    tval[indexpos]++;
    else if ((indexpos == 4) && (tval[indexpos] < 255) && (maxpos == 4))
    tval[indexpos]++;
    break;

    case BP_DOWN:
    if (tval[indexpos] > 0) tval[indexpos]--;
    break;

    case BP_LEFT:
    if (indexpos > minpos) indexpos--;
    break;

    case BP_RIGHT:
    if (indexpos < maxpos) indexpos++;
    break;

    case BP_SELECT:
    val_bp = 20;
    break;

    case BP_RST:
    val_bp = 21;
    break;
    }
    lcd.setCursor((indexpos*3),1);
    if (indexpos != 4)
    lcd.print(nombre2digit(tval[indexpos]));
    else
    lcd.print(nombre2digit(tval[indexpos]) + " ");

    lcd.setCursor((indexpos*3),1);

    delay(100);
    }
    lcd.noCursor();

    return val_bp;
    }

    void fermer_porte()
    {
    long timeout = millis() + 30000;
    long timeoutcapthaut = millis() + 2000;
    while ((millis() < timeout) && (digitalRead(capteur_bas) == false))
    {
    if ((millis() > timeoutcapthaut) && digitalRead(capteur_haut))
    {
    timeout = 1000;
    }

    DateTime now = rtc.now();
    lcd.setCursor(7,1);
    if ((now.second() % 2) == 0){
    lcd.write(byte(1));
    }
    else{
    lcd.write(" ");
    }
    digitalWrite(enable, HIGH);
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    }
    digitalWrite(enable, LOW);
    digitalWrite(in2, LOW);

    if (digitalRead(capteur_bas) == false){
    erreur = true;
    }
    }

    void ouvrir_porte()
    {
    long timeout = millis() + 30000;
    long timeoutcaptbas = millis() + 2000;
    while ((millis() < timeout) && (digitalRead(capteur_haut) == false))
    {
    if ((millis() > timeoutcaptbas) && digitalRead(capteur_bas))
    {
    timeout = 1000;
    }

    DateTime now = rtc.now();
    lcd.setCursor(7,1);
    if ((now.second() % 2) == 0){
    lcd.write(byte(0));
    }
    else{
    lcd.write(" ");
    }
    digitalWrite(enable, HIGH);
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    }
    digitalWrite(enable, LOW);
    digitalWrite(in1, LOW);

    if (digitalRead(capteur_haut) == false){
    erreur = true;
    }
    }

    String nombre2digit(uint16_t nb)
    {
    String val = "";
    if (nb < 10)
    val = "0" + String(nb);
    else
    val = String(nb);

    return val;
    }

    static const char* MAIN_MENU_ITEMS[] = {
    "Config Date/Heure",
    "Heure Levee",
    "Heure Couche",
    "Auto luminosite",
    "Gestion forcee"
    };
    static const Menu_t MAIN_MENU = {
    "Votre choix ?",
    MAIN_MENU_ITEMS,
    5,
    & doMainMenuAction
    };

    void setup()
    {
    pinMode(IN1,OUTPUT);
    pinMode(IN2,OUTPUT);

    pinMode(capteur_haut, INPUT);
    pinMode(capteur_bas, INPUT);
    pinMode(cellulePhoto, INPUT);
    pinMode(buttons, INPUT);
    pinMode(bpReset, INPUT);
    pinMode(lcdbacklight, OUTPUT);
    digitalWrite(lcdbacklight, HIGH);

    pinMode(levelBatt, INPUT);
    pinMode(ledBattLow, OUTPUT);
    analogWrite(ledBattLow, 0);

    digitalWrite(enable, LOW);
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);

    lcd.begin(16, 2);
    byte Haut[8] = {B00100,B00100,B00100,B00100,B10101,B01110,B00100,B00000};
    byte Bas[8] = {B00000,B00100,B01110,B10101,B00100,B00100,B00100,B00100};
    lcd.createChar(1,Haut);
    lcd.createChar(0,Bas);

    Wire.begin();
    rtc.begin();
    backlight_cpt = millis();

    //Serial.begin(9600);
    //rtc.adjust(DateTime(2015, 7, 13, 15, 54, 0));
    //rtc.writenvram(0,configData,6);
    }


    void loop()
    {
    analogWrite(ENA, 200);// motor speed
    digitalWrite(IN1,LOW);// rotate forward
    digitalWrite(IN2,LOW);
    delay(2000);

    {
    rtc.readnvram(configData, 6, 0);
    uint8_t luminosite = configData[4];
    uint8_t lum_auto = configData[5];

    //12V -0.7V diode -> pont diviseur 2.2k + 1k -> 3.53V
    //5V = 1023, 3.53V = 722
    //déchargé quand < 10.3V donc 3.218V donc 658
    int valBatt = analogRead(levelBatt);
    if ((levelBatt > 0) && (levelBatt < 658)){
    analogWrite(ledBattLow, 255);
    }
    else{
    analogWrite(ledBattLow, 0);
    }

    if(analogRead(bpReset) < 10){
    digitalWrite(lcdbacklight, HIGH);
    lcd.display();
    backlight_cpt = millis();
    }

    if (readPushButton() != BP_NONE)
    {
    digitalWrite(lcdbacklight, HIGH);
    lcd.display();
    displayMenu(MAIN_MENU);
    backlight_cpt = millis();
    erreur = false;
    }
    else
    {
    if ((backlight_cpt+10000) < millis())
    {
    digitalWrite(lcdbacklight, LOW);
    lcd.noDisplay();
    }

    DateTime now = rtc.now();
    DateTime DTHeureLeve = DateTime(now.year(), now.month(), now.day(), configData[0], configData[1], 0);
    DateTime DTHeureCouche = DateTime(now.year(), now.month(), now.day(), configData[2], configData[3], 0);

    String Hpoint = ":";
    if ((now.second() % 2) == 0){
    Hpoint = " ";
    }
    //lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(nombre2digit(now.hour()) + Hpoint + nombre2digit(now.minute()) + " " + nombre2digit(now.day()) + "/" + nombre2digit(now.month()) + "/" + nombre2digit(now.year()));
    lcd.setCursor(0,1);

    if (configData[4] == 0){
    lcd.print(String(nombre2digit(configData[0]) + ":" + nombre2digit(configData[1]) + " " + nombre2digit(configData[2]) + ":" + nombre2digit(configData[3])));
    }
    else{
    lcd.print("auto: " + String(configData[5]) + " lum:" + String(analogRead(cellulePhoto)/4));
    }

    if (erreur){
    lcd.setCursor(0,1);
    lcd.print(" ERREUR PORTE ! ");
    analogWrite(ledBattLow, 300);
    delay(100);
    analogWrite(ledBattLow, 0);
    return;
    }

    if (configData[4] == 0){ //manuel
    //ouvrir porte
    if ((now.secondstime() >= DTHeureLeve.secondstime()) && (now.secondstime() < DTHeureCouche.secondstime()))
    {
    ouvrir_porte();
    }

    //fermer porte
    if (now.secondstime() >= DTHeureCouche.secondstime())
    {
    fermer_porte();
    }
    }
    else{ //auto
    //ouvrir porte
    if ((now.secondstime() >= DTHeureLeve.secondstime()) && (now.secondstime() < DTHeureCouche.secondstime()) && ((analogRead(cellulePhoto)/4) > configData[5]))
    {
    ouvrir_porte();
    }
    //fermer porte
    if (now.secondstime() >= DTHeureCouche.secondstime() && ((analogRead(cellulePhoto)/4) < configData[5]))
    {
    fermer_porte();
    }
    }
    }
    delay(100);
    }}

    Yzago

    06 jan. 2018 à 14:19

    Merci bagou91, J'ai changé d'entrée et tout fonctionne correctement. J'avais pourtant testé avec 3 arduino différent d'un même lot ... faut que je me fabrique un testeur d'arduino ^^.
    Encore merci pour ton aide.

    herve68680

    13 fév. 2018 à 15:42

    bonjours aucune erreur lors du chargement par contre le menu  ne s affiche pas 

    quelqu’un a une idée ?


    BadLand

    15 fév. 2018 à 19:31

    Tout d'abord merci pour ce beau projet que je vais appliquer pour mes poules :)

    Je voudrais savoir, étant débutant Arduino (à 58 ans !), si je peux remplacer le driver motor par un LD293 ? Et quel serait les pins à brancher ?


    bagou91

    16 fév. 2018 à 08:36

    Bonjour,

    Comme tu débutes en Arduino, lis bien mon tuto entièrement ainsi que les commentaires auquels j'apporte des réponses complémentaires.

    Oui le LD293 (ou L293D) est tout à fait compatible avec le fonctionnement de mon programme. Il peut contrôler 2 moteurs DC, ou 1 moteur pas à pas. Il faut juste connecter correctement les pins du L293D.
    par ex en ce référant à ce schéma: https://cdn.instructables.com/FY2/SZKB/H0OJ5NNI/FY2SZKBH0OJ5NNI.LARGE.jpg
    pin1 = EN, pin2 = INa, pin3 et 6 = moteur, pin4 et 5 = GND, pin7 = INb, pin8 = Vcc (9/12V), pin16 = +5V

    Le tranquilou

    27 fév. 2018 à 06:45

    Bonjour,

    De temps en temps une erreur porte (Environ 1 fois par semaine) qui empêche l'ouverture.

    L'as tu constaté? 

    De mon côté je n'exclus pas un pb logiciel, mais je pense plutôt que le contacteur bas ne maintient pas sa position suite à des vibrations de la porte par exemple. Ce qui est ennuyeux c'est que la fonction "return dans le contrôle d'erreur" fige le programme et au final les poules restent à l’intérieur. 

    Ton avis ? 

    Merci par avance


    bagou91

    27 fév. 2018 à 08:25

    Bonjour,

    j'ai également de temps en temps "l'erreur porte", mais plus parce que le fil s'est emmêlé et/ou sortie de sa poulie, et donc le temps d'ouverture/fermeture est supérieur aux 30s de sécurité que j'ai fixé.

    Après je n'exclus pas que mon programme ait quelques bugs sur d'autres cas non gérés...

    Grofilou

    12 avr. 2018 à 17:39

    Bonsoir BAGOU,
    Régulièrement, mais uniquement à l'ouverture, j'ai aussi "erreur porte". Je n'utilise pas la cellule photo. La solution qui marche (peut-être provisoire), que j'ai adoptée, c'est d'adjoindre un programmateur horaire qui coupe la totalité de l'alimentation, pendant un temps le plus court possible. A la reprise, réinitialisation et relance de l'ouverture définitive. J'imagine qu'il faudrait ajouter un tempo avant l'affichage "erreur porte" pour apporter une solution plus élégante, mais je ne maîtrise pas suffisamment la programmation. Donc, dans l'attente, ça marche...

    bagou91

    12 avr. 2018 à 18:09

    Bonsoir,
    Il faut augmenter le timeout des portes que j'ai mis par défaut à 15000 ms.
    Fais une recherche dans le code "15000", il est à 2 endroits. Changes la valeur par une plus élevée comme 30000.

    Je suis en train de faire une nouvelle version avec de nouvelles fonctionnalités.
    Je devrai la publier sous peu.

    Grofilou

    28 avr. 2018 à 16:38

    Bonjour BAGOO,
    Toujours des soucis avec erreur porte malgré l'allongement du time out. Aussi des problèmes après manip gestion forcée : le swith fin de course perd son efficacité. Etrange, je n'ai rien changé au code. J'ai donc confectionné un second montage avec la dernière mise à jour et un driver moteur L298 version 2, mais impossible de faire tourner le moteur, même en affectant la broche A0 au lieu de 13. J'ai de grosses difficultés pour me procurer un driver moteur identique à celui préconisé. Merci d'un éventuel conseil et bonne soirée.

    bagou91

    28 avr. 2018 à 18:56

    Bonjour,
    Pour la gestion forcée, oui il y a un petit bug sur l’arrêt en fin de course qui ne se fait pas. Je n'avais pas pris le temps de le corriger mais c'est chose fait dans la nouvelle version du 28 avril.
    Pour tes soucis de fonctionnement moteur, je ne peut que te conseiller de (re)vérifier ton câblage, tes connexions.
    Il n'y a pas de raison pour que cela ne fonctionne pas avec un L298.

    Grofilou

    29 avr. 2018 à 11:00

    Bonjour et merci des commentaires,
    Mais j'ai remplacé le driver moteur et la carte Arduino Uno, sans succès. Je suis sûr de mes connexions, mais le moteur ne tourne pas. Je mets cela sur le compte du driver V2, mais je ne sais pas où trouver un identique à l'original proposé. Sur amaz... peut-être mais pas de paypal et je ne mets jamais mon compte sur le net.

    bagou91

    29 avr. 2018 à 11:11

    tu en as sur ebay: http://stores.ebay.com/G-C-Supermarket-HK-Co-Ltd/_i.html?_nkw=l298&submit=Search&_sid=1090683909

    Grofilou

    29 avr. 2018 à 15:30

    Merci pour le tuyau. Dans l'attente, j'ai recompilé avec l'ancienne version et les modifications que j'avais mentionnées plus haut, le 24 janvier. Et là, ça marche; mais je ne peux pas corriger les bugs erreur porte et je ne peux pas apporter les mêmes modifications au nouveau code.

    Dj Ultimate

    27 mar. 2018 à 14:47

    bonjour

    merci pour ce super tuto ! je me lance

    cependant une question se pose concernant le moteur, je dispose de moteurs en 24 ou 12v, serait il possible de modifier quelquechose afin d'obtenir en sortie du 12 ou 24 v plutot que du 5v ??

    merci pour vos réponses et encore félicitation !

    Dj Ultimate

    27 mar. 2018 à 14:50

    peut etre ce genre de modules ??
    DC-DC 3V-35V à 4V-40V Module d'alimentation réglable Step Up 3V 5V 12V à 19V 24V 30V 36V Convertisseur haute puissance

    bagou91

    27 mar. 2018 à 16:39

    Bonjour,
    Tu n'as pas dû bien regarder le schéma électrique et l'explication du fonctionnement:
    la partie électronique de gestion et commandes est en 5V mais la partie motorisation (puissance) se fait en 12V.

    Dj Ultimate

    27 mar. 2018 à 17:03

    Bonjour Bagou, merci pour ta réponse rapide, je vais me replonger dans le schéma, je n'avais pas vu que la gestion de commande délivrait du 12v, c'est donc parfait pour moi !
    Encore bravo pour ce superbe projet

    iolo

    30 mar. 2018 à 18:46

    Bonjour,

    Super ce tuto, je vais tenter de le reproduire. Si je devais trouvé un inconvénient, c'est qu'il faille corriger l'heure tous les mois donc toutes les années (pour suivre le lever et coucher du soleil qui évolue durant l'année), c'est dommage qu'il ne soit pas possible de programmer l'heure par mois, ainsi une fois réglé, plus jamais besoin d'y toucher...

    Personne ne t'aurai par hasard déjà demandé comment inclure un code qui me permettrai depuis le clavier/lcd, de choisir l'heure de levée en janvier, l'heure de levée en février, l'heure de levée en mars...

    Je te remercie d'avance pour ta réponse.

    iolo

    TAVAR320

    02 avr. 2018 à 12:09

    Bonjour à Tous
    D'abord Merci a Bagou car votre prog m'a servi de support pour mon prototypage en cours.
    Concernant les horaires solaires vous aurez des idées là :
    https://forum.arduino.cc/index.php?topic=265520.0
    Il n'y a plus besoin de déterminer d 'heures ( automatique) mais juste de déterminer un delta de temps par rapport à le référence. En ce qui me concerne en fonction des habitudes, levée delta 0 et couché h+30min. Pas de comptage car les cocottes rentrent et sortent ! La porte ayant un axe verticale, j'utilise un servo RC. Je n'ai pas assez de recul pour la durée de cycle recharge de la batterie. J'envisage un update avec panneau solaire.
    Cdlt

    iolo

    03 avr. 2018 à 10:19

    Merci pour cette info TAVAR, si ca ne te dérange pas, aurais tu l’amabilité de m'envoyer ton code? Que je puisse l'analyser et voir où comment tu intègres ces différentes choses...
    Tu peux envoyer à l'adresse suivante; gilles.close@hotmail.fr
    Je te remercie d'avance.

    bagou91

    31 mar. 2018 à 10:01

    Bonjour,
    Non je n'ai pas eu cette demande là.
    Cela pourrait être en effet une option supplémentaire utile. Au même titre que le changement d'heure automatique hiver/été.

    Lienju72

    02 avr. 2018 à 19:02

    Bonjour à tous, bon moi j'ai remis les 3/4 de ton code et j'apporte des nouvelles options ;). 

    J'ai un petit soucis avec le menu configuration de l'heure et de la date. Dans ton code, la touche RIGHT, permet de passer des heures aux minutes, et même principe pour la date ... 

    Le soucis est le suivant : je n'arrive pas à passer des heures aux minutes et pareil pour la date. L'autre problème que j'ai c'est quand je suis sur l'écran configuration de la date et que j'appuie sur la touche LEFT j'ai un truc chelou qui s'affiche du style "????? !!!! ??? &&&???§!!!??d,dzkdzd z,dkzd" en gros NIMPORTE QUOI !!! 

    As tu eu déjà ces cas là ? Surtout le problème pour passer des heures aux minutes c'est le plus embétant. 

    j.mouton0609@laposte.net si besoin. 

    Merci d'avoir partagé ton idée ton code, ta réalisation. 

    Ca permet de récupérer des trucs et d'adapter en fonction des besoins de chacun ! (Y)

    Cordialement,

    Dj Ultimate

    03 avr. 2018 à 17:40

    Bonjour, si tu mets le code en entier as tu ce problème ?

    Lienju72

    03 avr. 2018 à 21:33

    Bonjour pas essayer.

    Dj Ultimate

    03 avr. 2018 à 17:38

    Bonjour,

    j'ai un soucis avec la photoresistance que j'ai (une gl5528) j'ai mis 220 1K et 10K mais j'ai toujours 0V sur mon écran...

    Une idée ?? merci par avance !!

    Dj Ultimate

    04 avr. 2018 à 20:01

    j'ai bien du 5v le montage est bon, j'ai testé une autre photoresistance d'une autre valeur et pareil...
    si je lis les valeurs sur un arduino c'est ok j'ai bien les valeurs qui changent en fonction de la luminosité
    mais la rien...je ne comprends pas pourquoi et je trouve la sécurité de la LDR rassurante en mode AUTO
    franchement je sèche...

    bagou91

    08 avr. 2018 à 17:32

    Bonjour,
    j'ai analysé, et il y a une erreur dans mon code.
    ligne 169, après le while (val_bp < 20){
    ajoutes:
    valPhoto = analogRead(cellulePhoto) / 4;
    lcd.setCursor(13,0);
    lcd.print(String(valPhoto) + " ");
    lcd.setCursor(0,1);

    bagou91

    05 avr. 2018 à 09:08

    Bonjour,
    Je ne suis pas chez moi pour l'instant. Je regarde ça ce week-end et reviens vers toi par la suite.

    Dj Ultimate

    11 avr. 2018 à 14:53

    Bonjour Bagou,

    c'est ok ça fonctionne !!

    je trouve l'idée de rajouter les heures de levée et coucher du soleil directement dans le code une bonne idée.

    En effet ça évite de reprogrammer les heures

    J'ai trouvé ce blog http://portepoulaillerautomatique.blogspot.fr/2014/12/porte-de-poulailler-part-3-arduino-avec.html

    Avec le tableau http://ecole.onsevoitdemainalors.org/IMG/pdf/41_Tableau_02.pdf il est facile de mettre ses propres horaires d'ouverture et fermeture mais je n'ai pas réussi encore à le faire fonctionner

    Si quelqu'un y arrive avant moi ne pas hésiter à poster :)

    Bonne journée à tous

    bagou91

    11 avr. 2018 à 15:40

    Bonjour,

    Je suis en train de mettre à jour pour ajouter le changement d'heure automatique été/hiver et les heures d'ouverture/fermeture automatique suivant le calendrier des éphémérides avec l'ajout d'un delta.

    Je m'appuie sur ce post: https://forum.arduino.cc/index.php?topic=275902.0

    Dj Ultimate

    23 avr. 2018 à 21:57

    super Bagou !! hâte de voir le résultat :)

    bagou91

    25 avr. 2018 à 16:19

    La mise à jour tant attendue avec la prise en compte des éphémérides est arrivée !!


    XSBZH

    27 avr. 2018 à 18:41

    Bonjour

    Merci pour le partage du projet!

    Je viens d'injecter la nouvelle prog, il semblerait que la fonction "erreur porte" ne fonctionne pas.

    en effet, lorsque la porte arrive en fin de course, le moteur s'arrête bien mais continu à être alimenté si l'on relache le capteur (même après 15s)

    j'ai fait le test sans actionner le capteur,: le moteur s'arrête 1/2s au bout de 15s et reprend un cycle...

    merci de m'indiquer s'il s'agit d'un pb de mon côté ou d'un bug éventuel

    Merci

    bagou91

    27 avr. 2018 à 21:53

    Bonsoir,
    Effectivement j'ai également le problème alors que cette partie du code n'a pas été modifiée....

    Parenthèse:
    Pour ceux que ça intéresse:
    Après recherche et analyse en debug, je constate que la valeur de la variable erreur passe mystérieusement de 1 à 0 au niveau de la ligne 655 sans comprendre pourquoi.
    Après plusieurs tests, j'ai simplement interverti la déclaration des variables texte et erreur (ligne 45) et le bug disparait.
    Pour moi, cela vient d'une erreur interne du compilateur.

    Donc j'ai corrigé mon code au bon vouloir du compilateur: la gestion d'erreur de la porte est maintenant fonctionnelle.
    J'ai mis à jour les sources.

    Petunia

    30 avr. 2018 à 09:26

    Bonjour,

    Merci pour ce projet bien détaillé et surtout bien suivi. Je viens de passer commande de la partie électronique sur aliexpress, je partage ma liste si ça peut aider certains à passer le cap, et si les autres trouvent une erreur dans ma commande... J'en profite pour poser la question, bagou91 n'as tu pas envisagé de rajouter un capteur PIR et une LED 1W pour faire un peu de lumière quand un animal rôde à l'extérieur alors que la porte est fermée? J'y songe mais je ne vais pas modifier ton montage dans un premier temps. Concernant la tension de la batterie, j'ai pris un convertisseur 12V -> 5V avec LCD intégré. Il me restera à faire un hack pour que le rétro éclairage du LCD du convertisseur ne s'allume que sur l'appui d'un bouton ou bien lors de la montée/descente de la porte ou bien sur l'appui du bouton de rétro éclairage du LCD avec clavier.


    Motoreducteur 12V 30 RPM + Support 10,82€
    Photorésistance GL5528 20 pcs 0,52€
    Arbre Coupleur 4x4mm 0,83€
    L298N Contrôleur pour moteur 1,25€
    Horloge RTC I2C DS1307 0,46€  
    LCD Clavier 1602 2,17€ 
    Arduino NANO v3.0 2,23€
    Potentiomètre RM065 1 Kohm 20 PCS 0,97€
    Step Down Converter avec Affichage USB 1,90€

    Ermurtur

    04 mai 2018 à 21:28

    Bonjour, 

    J'ai un problème avec la librairie RTC : à cause de celle-ci rien ne s'affiche sur le LCD, mais quand je fais passer en commentaire (/**/) tout ce qui concerne la librairie RTC, le LCD fonctionne mais pas les boutons. Donc je pense que la librairie n'est pas compatible avec mon module (DS1307). Je suis sur une carte Arduino UNO, l'IDE est en 1.8.5. La librairie est celle qui était dans le .zip

    bagou91

    05 mai 2018 à 08:08

    Je n'ai aucun problème de mon coté, et plusieurs personnes qui ont réalisé le projet n'ont pas eu de problèmes pour la compilation.
    Je n'ai pas essayé mon projet avec cette carte, mais en regardant ses branchements sur Internet, je vois que les pins SDA-SCL sont 2 pins spécifiques et non A4-A5.
    Revoies tes branchements avec le schéma de pins du Uno.

    Ermurtur

    05 mai 2018 à 09:17

    J'ai donc branché les broches SDA et SCL du module RTC sur celles de l'arduino tout en vérifiant que la câblage est bon. Toujours rien d'affiché sur le LCD. Au niveau compilation j'ai eu une erreur au niveau de la fonction passage heure été/hiver auto :
    poulailler:643: error: 'class DateTime' has no member named 'dayOfWeek'

    bagou91

    05 mai 2018 à 09:44

    Vous n'avez donc pas installer la librairie RTClib fourni dans les sources.
    Il faut l'installer de même que CalculEphemeride.

    guide: http://www.locoduino.org/spip.php?article71

    Grofilou

    04 mai 2018 à 22:29

    Depuis deux jours, je ne peux plus télécharger les sources. Suis-je rangé au banc des punis ?

    Si c'est le cas, pour quelle raison ?

    Merci de ma fixer. Bonne soirée.

    Grosfilou.


    bagou91

    05 mai 2018 à 08:08

    bonjour,
    décidément, ouiaremakers bug beaucoup....
    voici un lien alternatif: http://dl.free.fr/getfile.pl?file=/DMWawlZ4

    Grofilou

    05 mai 2018 à 08:58

    Bonjour,

    Merci pour le lien. Il est efficace. Mais j'ai pas mal d'erreur de compil.

    Celle-ci, entre autres :

    poulailler:643: error: 'class DateTime' has no member named 'dayOfWeek'.

    Par ailleurs, avec l'ancienne version, la porte refuse régulièrement de s'arrêter, tantôt à l'ouverture, tantôt à la fermeture. J'ai remplacé les switch pourtant.

    Bonne journée.

    bagou91

    05 mai 2018 à 09:46

    Vous n'avez donc pas installer la librairie RTCLib fourni dans les sources.
    Il faut l'installer de même que CalculEphemeride.

    guide: http://www.locoduino.org/spip.php?article71

    Grofilou

    05 mai 2018 à 11:02

    Bonjour,

    Tout cela est installé correctement. Mon problème est ailleurs : pour des raisons de commodité, je possède deux PC. Sur le premier, Win 7. J'ai pu installer, modifier le code pour le driver V2 et cela marche. Je compile avec Arduino 1.7.10.

    Sur le second, Win 10, Arduino 1.8.5 ou encore 1.6.10 ou encore 1.0... Là, rien ne marche. Et je ne trouve plus la version 1.7.10... Je pense que les mises à jour ne sont pas au point.

    Pour la version qui marche, je constate que le tempo de 15 sec se répète aussi longtemps que le 

    switch ouverture n'est pas activé. Je lis dans le void :  timeout _porte * 1000.  Cela ferait 250 minutes avant l'erreur porte ?

    Bien merci de vos renseignements.

    bagou91

    05 mai 2018 à 11:44

    C'est exprimé en millisecondes. Donc 15000ms = 15s.Mais peut être as tu le bug que j'ai rencontré : pour une raison inconnue la compilation donne un code au cpu qui ne correspond pas à la logique du programme. C'est ce que j'ai expliqué dans mon commentaire du 27 avril.

    Essayes de changer l'ordre des déclarations de variables globales en début de programme...

    Grofilou

    13 mai 2018 à 10:27

    Bonjour, BAGOU,
    Après modifications conseillées, il me reste un bug. Si j'active le delta (éphémérides), la porte se ferme, mais, à l'ouverture qui suit, la porte ne s'arrête pas en fin de course. Si, à ce moment, je coupe l'alimentation et que je la rebranche, la logique reprend son cours et la porte est considérée ouverte et le moteur s'arrête (le switch est resté enclenché). Il semble bien que ce problème ne se présente pas en désactivant les éphémérides.
    La fonction erreur porte ne fonctionne pas. Au bout du time_out inscrit, le moteur fait une courte pose et repart pour une nouvelle période.
    D'autre part, je ne comprend pas bien la manipulation : changer l'ordre des déclarations de variables globales.
    J'avoue que je commence à m'y perdre un peu.
    Merci beaucoup de l'intérêt porté à mes soucis.
    Bon dimanche.

    Grofilou

    24 mai 2018 à 17:56

    Bonsoir BAGOU,
    Après observations, je m'aperçois que les erreurs porte surviennent systématiquement lors d'une coupure d'alimentation (je n'utilise pas de batterie). Les petites coupures sont fréquentes ici.

    bagou91

    13 mai 2018 à 11:08

    Bonjour,
    Tu utilises quelle carte Arduino ? nano, pro mini, uno... ?
    Le bug constaté pour le timeout est très dur à reproduire puisque pour moi je pense que c'est le compilateur qui le créé... faudrait que je pose la question à des experts sur le forum arduino.cc...
    Pour changer l'ordre des déclarations, il suffit de les intervertir au niveau des lignes 43 à 47
    exemple ligne 45, essayes dans cette ordre:
    bool erreur;
    char texte[16];
    au niveau algorithme, cela ne change rien, mais le compilateur ne le comprend pas de la même manière...
    mon bug de timeout avait disparu comme cela.
    c'est du talonnement pour ne plus avoir ce bug...

    Grofilou

    13 mai 2018 à 12:11

    Merci de la réponse,
    J'utilise une Uno.
    J'ai bien fait l'inversion de ligne comme indiqué, sans succès.
    A bientôt.

    Grofilou

    30 mai 2018 à 16:43

    Bonjour BAGOU,

    Voilà, j'ai reçu et branché une Nano. Le tout fonctionne presque correctement.
    Il reste ce petit bug :
    La fonction erreur porte ne fonctionne pas. Au bout du time_out inscrit, le moteur fait une courte pose et repart pour une nouvelle période, sauf si le switch fin de course est activé.

    bagou91

    13 mai 2018 à 14:02

    Je n'ai pas cette Arduino là en stock pour faire des tests de mon côté.
    Je te conseillerai d'acheter un nano pour être sûr que le projet fonctionne.

    Grofilou

    13 mai 2018 à 17:20

    Les Nano chez le revendeur français local, c'est 23,80 euros. Je suis allé voir sur la bay, mais je ne trouve pas de commerçant qui regroupe mes achats, et donc, frais de port exagérés. Peut-être en Chine, mais faut pas être pressé. Je vais chercher encore.
    Bonne soirée.

    Yzago

    09 mai 2018 à 23:11

    Je n'arrive pas telecharger l'archive avec le programme, avez vous le même problème ?

    Et merci Bagou91 de continuer à faire évoluer ton projet.

    boitel

    14 mai 2018 à 09:57

    Bonjour, grâce à vous j'ai découvert le monde arduino c génial, j'y connaissais       rien, j'ai suivi toute vos instruction et ma porte automatique fonctionne a              merveille, Merci encore.

    titi007

    14 mai 2018 à 16:57

    Bonjour,

    Merci et Très intéressé par ce tuto.

    le lien vers poulailler_sources_28042018.zip est inaccessible ! normal ?

    boitel

    15 mai 2018 à 16:28

    il faut passer par ce lien:

    bagou91

     05 mai 2018 à 08:08 

    bonjour,
    décidément, ouiaremakers bug beaucoup....
    voici un lien alternatif: http://dl.free.fr/getfile.pl?file=/DMWawlZ4

    pour moi ça a fonctionné.

    Nico39

    17 mai 2018 à 10:26

    Bonjour,


    Je suis en train de réaliser le montage mais je me heurte à plusieurs problèmes:

    - un problème à la compilation du programme, avec les messages d'erreurs suivants:

    Users/nicolasmorlin/Documents/Arduino/poulailler_20180428/poulailler/poulailler.ino: In function 'void fermer_porte()':

    /Users/nicolasmorlin/Documents/Arduino/poulailler_20180428/poulailler/poulailler.ino:481:20: warning: invalid conversion from 'const char*' to 'uint8_t {aka unsigned char}' [-fpermissive]

           lcd.write(" ");

                        ^

    In file included from /Users/nicolasmorlin/Documents/Arduino/poulailler_20180428/poulailler/poulailler.ino:1:0:

    /Users/nicolasmorlin/Documents/Arduino/libraries/LiquidCrystal/LiquidCrystal.h:87:18: note: initializing argument 1 of 'virtual size_t LiquidCrystal::write(uint8_t)'

       virtual size_t write(uint8_t);

                      ^

    /Users/nicolasmorlin/Documents/Arduino/poulailler_20180428/poulailler/poulailler.ino: In function 'void ouvrir_porte()':

    /Users/nicolasmorlin/Documents/Arduino/poulailler_20180428/poulailler/poulailler.ino:518:20: warning: invalid conversion from 'const char*' to 'uint8_t {aka unsigned char}' [-fpermissive]

           lcd.write(" ");

                        ^

    In file included from /Users/nicolasmorlin/Documents/Arduino/poulailler_20180428/poulailler/poulailler.ino:1:0:

    /Users/nicolasmorlin/Documents/Arduino/libraries/LiquidCrystal/LiquidCrystal.h:87:18: note: initializing argument 1 of 'virtual size_t LiquidCrystal::write(uint8_t)'

       virtual size_t write(uint8_t);

                      ^

    Le croquis utilise 19582 octets (68%) de l'espace de stockage de programmes. Le maximum est de 28672 octets.

    Les variables globales utilisent 804 octets (31%) de mémoire dynamique, ce qui laisse 1756 octets pour les variables locales. Le maximum est de 2560 octets.


    Le téléversement se fait bien, mais rien ne s'affiche sur l'écran (un velleman VMA203), pas de mouvements moteurs ni rien d'autres.

    J'ai vérifié plusieurs fois les branchements mais rien trouvé d'anormal.

    Avez vous une idée de la provenance de l'erreur?

    Merci d'avance!

    bagou91

    17 mai 2018 à 11:40

    Quelle version de Arduino IDE utilises tu ?
    Pour ma part j'utilise la 1.6.9 sans problèmes de compilation. Les warnings que tu as ne sont pas critique au point de mettre en erreur la compilation.
    J'utilise la librairie LiquidCrystal inclue d'origine dans l'IDE. Essayes de supprimer celle se trouvant dans le dossier Documents/Arduino/libraries.

    Pour ton lcd velleman, as tu bien fait correspondre les pins DB4-DB7,RS,E,backlight avec ceux que j'ai mis sur mon schéma. Le câblage est peut-être différent si l'ordre des pins n'est pas le même que moi.
    Egalement, joues avec le contraste: sortie d'usine, il n'est pas réglé et donc on ne voit rien s'affiché.

    Nico39

    17 mai 2018 à 13:41

    Merci pour ta réponse rapide.

    J'utilise une version 1.8.x de mémoire, je verifie cela en rentrant ce soir. Idem pour la librairie Liquidcrystal.

    Pour les branchements, j'ai vérifié à l'aide d'un multimètre, cela est ok. J'ai essayé également avec un Arduino nano (un micro actuellement) mais même problème. J'ai eu un curseur bas clignotant à un moment mais rien d'autres. J'ai également modifié les valeurs de A0 pour les boutons de l'écran afin que ela corresponde au mieux. Le reglage du contraste a été réglé également.

    J'essaie avec une version 1.6.9 et la librairie LC incluse.

    Merci, Nicolas.

    Chris

    22 mai 2018 à 20:41

    Bonjour,

    Merci pour ce super tuto. Je crois qu'il va me décider à me lancer :-) Ce sera ma première découverte du arduino ...

    Une question néanmoins, je suis inquiet quand à la durée de vie de la pile 9v. A quelle fréquence faut-il la changer ? Est-il nécessaire de prévoir à la place une pile rechargeable et un petit panneau solaire pour la recharger ?

    Avez-vous d'autres schémas et explications que vous pourriez m'envoyer par mail ?

    Merci !

    Chris

    bagou91

    23 mai 2018 à 08:15

    Bonjour,
    La pile 9v ne donnera qu'une faible autonomie.
    Préférez une batterie de voiture 12v, ou bien directement un bloc d'alimentation 12v que l'on trouve dans le commerce (bien prendre un bloc 12v régulé).
    J'ai fourni tous les schémas sur le site et dans le fichier ZIP.
    Bonne découverte dans le monde de l'arduino :)

    iolo

    24 mai 2018 à 18:30

    Bonjour Bagou,

    Je recontre un problème lors de la compilation, aurais tu une idée de l'origine du problème?

    Je travaille avec le même IDE que toi et avec arduino nano.

    Voici le long code d'erreur que je n'arrive pas à déchiffrer:


    sketch\calculEphemeride\calculEphemeride\calculEphemeride.cpp: In member function 'void calculEphemeride::afficherHeure(double)':

    sketch\calculEphemeride\calculEphemeride\calculEphemeride.cpp:70:26: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

    afficherTexte("(J-1)");

    ^

    sketch\calculEphemeride\calculEphemeride\calculEphemeride.cpp:77:28: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

    afficherTexte("(J+1)");

    ^

    sketch\calculEphemeride\calculEphemeride\calculEphemeride.cpp:82:28: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

    afficherTexte("     ");

    ^

    C:\Program Files (x86)\Arduino\libraries\calculEphemeride\calculEphemeride.cpp: In member function 'void calculEphemeride::afficherHeure(double)':

    C:\Program Files (x86)\Arduino\libraries\calculEphemeride\calculEphemeride.cpp:70:26: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

    afficherTexte("(J-1)");

    ^

    C:\Program Files (x86)\Arduino\libraries\calculEphemeride\calculEphemeride.cpp:77:28: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

    afficherTexte("(J+1)");

    ^

    C:\Program Files (x86)\Arduino\libraries\calculEphemeride\calculEphemeride.cpp:82:28: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

    afficherTexte("     ");

    ^

    libraries\RTClib\RTClib.cpp.o: In function `DateTime::DateTime(unsigned long)':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:74: multiple definition of `DateTime::DateTime(unsigned long)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:58: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `DateTime::DateTime(unsigned long)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `DateTime::DateTime(unsigned int, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `DateTime::DateTime(unsigned int, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `DateTime::DateTime(DateTime const&)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `DateTime::DateTime(DateTime const&)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `DateTime::DateTime(char const*, char const*)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `DateTime::DateTime(char const*, char const*)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `DateTime::DateTime(__FlashStringHelper const*, __FlashStringHelper const*)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `DateTime::DateTime(__FlashStringHelper const*, __FlashStringHelper const*)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `DateTime::unixtime() const'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `DateTime::secondstime() const'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `DateTime::operator+(TimeSpan const&)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `DateTime::operator-(TimeSpan const&)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `DateTime::operator-(DateTime const&)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `TimeSpan::TimeSpan(long)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `TimeSpan::TimeSpan(long)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `TimeSpan::TimeSpan(int, signed char, signed char, signed char)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `TimeSpan::TimeSpan(int, signed char, signed char, signed char)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `TimeSpan::TimeSpan(TimeSpan const&)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `TimeSpan::TimeSpan(TimeSpan const&)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `TimeSpan::operator+(TimeSpan const&)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `TimeSpan::operator-(TimeSpan const&)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `RTC_DS1307::begin()'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `RTC_DS1307::writeSqwPinMode(Ds1307SqwPinMode)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `RTC_Millis::adjust(DateTime const&)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `RTC_Millis::offset'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `RTC_Millis::now()'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `RTC_DS1307::adjust(DateTime const&)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `RTC_DS1307::writenvram(unsigned char, unsigned char*, unsigned char)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `RTC_DS1307::writenvram(unsigned char, unsigned char)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `RTC_DS1307::isrunning()'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `RTC_DS1307::now()'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `RTC_DS1307::readSqwPinMode()'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `RTC_DS1307::readnvram(unsigned char*, unsigned char, unsigned char)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\RTClib\RTClib.cpp.o: In function `date2days':

    C:\Users\gilles.CAE\Documents\Arduino\libraries\RTClib/RTClib.cpp:56: multiple definition of `RTC_DS1307::readnvram(unsigned char)'

    sketch\RTClib-master\RTClib-master\RTClib.cpp.o:sketch\RTClib-master\RTClib-master/RTClib.cpp:40: first defined here

    libraries\calculEphemeride\calculEphemeride.cpp.o: In function `calculEphemeride::calculerCentreEtVariation(double, double, double, double, double*, double*)':

    C:\Program Files (x86)\Arduino\libraries\calculEphemeride/calculEphemeride.cpp:4: multiple definition of `calculEphemeride::calculerCentreEtVariation(double, double, double, double, double*, double*)'

    sketch\calculEphemeride\calculEphemeride\calculEphemeride.cpp.o:sketch\calculEphemeride\calculEphemeride/calculEphemeride.cpp:4: first defined here

    libraries\calculEphemeride\calculEphemeride.cpp.o: In function `calculEphemeride::calculerCentreEtVariation(double, double, double, double, double*, double*)':

    C:\Program Files (x86)\Arduino\libraries\calculEphemeride/calculEphemeride.cpp:4: multiple definition of `calculEphemeride::afficherDate(int, int, int)'

    sketch\calculEphemeride\calculEphemeride\calculEphemeride.cpp.o:sketch\calculEphemeride\calculEphemeride/calculEphemeride.cpp:4: first defined here

    libraries\calculEphemeride\calculEphemeride.cpp.o: In function `calculEphemeride::calculerCentreEtVariation(double, double, double, double, double*, double*)':

    C:\Program Files (x86)\Arduino\libraries\calculEphemeride/calculEphemeride.cpp:4: multiple definition of `calculEphemeride::afficherCoordonnee(int, int, int, char)'

    sketch\calculEphemeride\calculEphemeride\calculEphemeride.cpp.o:sketch\calculEphemeride\calculEphemeride/calculEphemeride.cpp:4: first defined here

    libraries\calculEphemeride\calculEphemeride.cpp.o: In function `calculEphemeride::calculerCentreEtVariation(double, double, double, double, double*, double*)':

    C:\Program Files (x86)\Arduino\libraries\calculEphemeride/calculEphemeride.cpp:4: multiple definition of `calculEphemeride::afficherHeure(double)'

    sketch\calculEphemeride\calculEphemeride\calculEphemeride.cpp.o:sketch\calculEphemeride\calculEphemeride/calculEphemeride.cpp:4: first defined here

    libraries\calculEphemeride\calculEphemeride.cpp.o: In function `calculEphemeride::calculerCentreEtVariation(double, double, double, double, double*, double*)':

    C:\Program Files (x86)\Arduino\libraries\calculEphemeride/calculEphemeride.cpp:4: multiple definition of `calculEphemeride::convertHeure(double)'

    sketch\calculEphemeride\calculEphemeride\calculEphemeride.cpp.o:sketch\calculEphemeride\calculEphemeride/calculEphemeride.cpp:4: first defined here

    libraries\calculEphemeride\calculEphemeride.cpp.o: In function `calculEphemeride::calculerCentreEtVariation(double, double, double, double, double*, double*)':

    C:\Program Files (x86)\Arduino\libraries\calculEphemeride/calculEphemeride.cpp:4: multiple definition of `calculEphemeride::calculerCoordonneeDecimale(int, int, int)'

    sketch\calculEphemeride\calculEphemeride\calculEphemeride.cpp.o:sketch\calculEphemeride\calculEphemeride/calculEphemeride.cpp:4: first defined here

    libraries\calculEphemeride\calculEphemeride.cpp.o: In function `calculEphemeride::calculerCentreEtVariation(double, double, double, double, double*, double*)':

    C:\Program Files (x86)\Arduino\libraries\calculEphemeride/calculEphemeride.cpp:4: multiple definition of `calculEphemeride::avancerDate(int*, int*, int*)'

    sketch\calculEphemeride\calculEphemeride\calculEphemeride.cpp.o:sketch\calculEphemeride\calculEphemeride/calculEphemeride.cpp:4: first defined here

    libraries\calculEphemeride\calculEphemeride.cpp.o: In function `calculEphemeride::calculerCentreEtVariation(double, double, double, double, double*, double*)':

    C:\Program Files (x86)\Arduino\libraries\calculEphemeride/calculEphemeride.cpp:4: multiple definition of `calculEphemeride::calculEphemeride(int, int, int, int, int, int)'

    sketch\calculEphemeride\calculEphemeride\calculEphemeride.cpp.o:sketch\calculEphemeride\calculEphemeride/calculEphemeride.cpp:4: first defined here

    libraries\calculEphemeride\calculEphemeride.cpp.o: In function `calculEphemeride::calculerCentreEtVariation(double, double, double, double, double*, double*)':

    C:\Program Files (x86)\Arduino\libraries\calculEphemeride/calculEphemeride.cpp:4: multiple definition of `calculEphemeride::calculEphemeride(int, int, int, int, int, int)'

    sketch\calculEphemeride\calculEphemeride\calculEphemeride.cpp.o:sketch\calculEphemeride\calculEphemeride/calculEphemeride.cpp:4: first defined here

    libraries\calculEphemeride\calculEphemeride.cpp.o: In function `calculEphemeride::calculerCentreEtVariation(double, double, double, double, double*, double*)':

    C:\Program Files (x86)\Arduino\libraries\calculEphemeride/calculEphemeride.cpp:4: multiple definition of `calculEphemeride::leverSoleil(int, int, int, bool)'

    sketch\calculEphemeride\calculEphemeride\calculEphemeride.cpp.o:sketch\calculEphemeride\calculEphemeride/calculEphemeride.cpp:4: first defined here

    libraries\calculEphemeride\calculEphemeride.cpp.o: In function `calculEphemeride::calculerCentreEtVariation(double, double, double, double, double*, double*)':

    C:\Program Files (x86)\Arduino\libraries\calculEphemeride/calculEphemeride.cpp:4: multiple definition of `calculEphemeride::coucherSoleil(int, int, int, bool)'

    sketch\calculEphemeride\calculEphemeride\calculEphemeride.cpp.o:sketch\calculEphemeride\calculEphemeride/calculEphemeride.cpp:4: first defined here

    libraries\calculEphemeride\calculEphemeride.cpp.o: In function `calculEphemeride::calculerCentreEtVariation(double, double, double, double, double*, double*)':

    C:\Program Files (x86)\Arduino\libraries\calculEphemeride/calculEphemeride.cpp:4: multiple definition of `calculEphemeride::afficherTexte(char*)'

    sketch\calculEphemeride\calculEphemeride\calculEphemeride.cpp.o:sketch\calculEphemeride\calculEphemeride/calculEphemeride.cpp:4: first defined here

    collect2.exe: error: ld returned 1 exit status

    exit status 1
    Error compiling for board Arduino Nano.

    iolo

    26 mai 2018 à 12:58

    Bonjour,

    J'ai changé d'IDE, j'utilise actuellement 1.8.5

    J'ai maintenant une message d'erreur qui laisse penser que la librairie calculEphemeride n'est pas au bon endroit...

    D'après mes recherches je lis que si utilisation #include "calculEphemeride" je dois placer le dossier calculEphemedire à côté de mon projet .ino par  contre si #inculde <calculEphemeride> je dois placer le dossier dans le dossier librairie de l'arduino...

    Malgré les 2 possibilités testées, je garde le problème de compilation comme si il ne trouvait pas mon dossier calculEphemeride...

    Auriez vous une idée solution à ce problème ?

    Voici le message d'erreur:

    C:\Program Files (x86)\Arduino\Projet Gilles\poulailler_sources_28042018\poulailler\poulailler.ino:9:30: fatal error: calculEphemeride.h: No such file or directory

    #include "calculEphemeride.h"

    compilation terminated.

    exit status 1
    Error compiling for board Arduino Nano.

    bagou91

    26 mai 2018 à 13:50

    Bonjour GroFilou et iolo,

    Je suis en version 1.6.9: https://www.arduino.cc/en/Main/OldSoftwareReleases#previous

    les librairies ne doivent être qu'à un seul endroit sinon il y aura le message "multiple definition".

    il faut bien évidemment extraire les librairies zippées pour placer les dossiers dans libraries

    il faut mettre les librairies dans votre dossier Documents\Arduino\libraries


    laurent_T

    28 mai 2018 à 16:20

    Bonjour,
    Merci pour ce tutoriel très intéressant. J'ai suivi pas à pas le montage et le téléversement du logiciel que vous avez développé. J'arrive à naviguer dans l'afficheur, à régler l'heure, à faire une gestion forcée des portes. En revanche, lorsque je mets le mode luminosité, le moteur démarre pour fermer la porte mais quand la luminosité redevient plus forte, la porte ne s'ouvre pas. Sur l'afficheur, la valeur lue avec la photorésistance donne une valeur au-dessus de la valeur de déclanchement des mouvements. Auriez vous un avis sur la cause de cette panne? je ne suis pas assez compétent pour trouver ce bug
    D'avance merci

    bagou91

    28 mai 2018 à 17:11

    Bonjour,
    Content de voir que la réalisation s'est bien passée dans son ensemble pour vous :)
    Est-ce que l'heure de couché est dépassée lorsque la luminosité redevient plus forte ?
    J'ai mis une sécurité supplémentaire: la porte ne s'ouvre que si l'heure est dans le créneau lever-coucher et que la luminosité est supérieure au seuil.

    laurent_T

    29 mai 2018 à 09:39

    Bonjour,
    En effet, c'est bien le paramétrage des heures d'ouverture et de fermeture qui empêchaient les mouvements de la porte.
    Merci pour votre réponse rapide, bonne journée

    jumoga

    30 mai 2018 à 19:07

    Bonjour!

    Tres sympa je voudrais tenter le montage mais impossiblede recuperer le fichier zip...

    jumoga

    30 mai 2018 à 22:42

    C'est bon:-)

    Julloss

    31 mai 2018 à 09:43

    Bonjour,

    Merci encore pour ce super circuit!

    Je voudrais savoir s'il serait possible de rajouter une led rouge qui s'allume lors d'une erreur porte? (sioui comment faire?)

    Je ne m'apperçois pas toujours qu'il y a une erreur porte, et les poules restent coincées dehors ou dedans.

    Dans mon cas une led déportée serait visible de loin, et je pourrais intervenir rapidement.



    Merci!

    bagou91

    31 mai 2018 à 13:42

    Bonjour,

    Oui c'est possible:
    J'avais déjà mis en place des lignes de codes pour la gestion d'une led rouge qui clignoterait en cas d'erreur ou de batterie faible.
    Quelques petites modifications à faire:
    -au niveau branchement:
    relier A6 à une résistance de 180 ou 220 ohm en série avec une led rouge (patte +) et sa patte - à la masse (gnd).
    relier A7 à +5V (sert à ne pas fausser l'activation de la led rouge)
    -niveau code:
    ligne 733, remplacer analogWrite(ledBattLow, 300) par analogWrite(ledBattLow, 255)

    Cela devrait fonctionner.

    Julloss

    31 mai 2018 à 09:45

    PS: mon montage est fait avec une arduino nano.

    jumoga

    31 mai 2018 à 11:23

    Bonjour

    J'ai compilé et j'ai cela comme erreur persistante...

       line  col  

    !   181 22      use of undeclared identifier 'menu_fleches'

    !   197 22      use of undeclared identifier 'menu_fleches'

    !   213 22      use of undeclared identifier 'menu_fleches'

    merci d'avance.

    Domino

    11 juin 2018 à 08:46

    Bonjour

    J'ai un problème avec le fichier "poulailler_schema.fzz". Je peux le télécharger mais je ne peux pas l'ouvrir avec fritzing. J'ai essayé en vain sur 2 pc différents. Je ne pense pas que cela vienne de fritzing puisque j'ouvre d'autres fichiers sans problèmes.

    jlegrand

    12 juin 2018 à 15:52

    Bonjour et merci pour ce projet très complet.

    Contrairement à Domino, je n'arrive même pas à télécharger le fichier fzz.
    J'ai un "Accès refusé" sur S3.

    Merci d'avance pour votre aide.

    jlegrand

    12 juin 2018 à 16:29

    Je n'avais pas fait attention qu'il y a l'image du fzz dans les photos.
    Cela suffit amplement.
    Désolé pour le bruit

    Petunia

    14 juin 2018 à 20:47

    Bon, je suis en train de finaliser ma version du poulailler. Tout d'abord une remarque concernant le bug de l'erreur porte qui n'est pas prise en compte : le fait de permuter les variables globales n'a rien résolu, j'ai passé 2h dessus et au final j'ai résolu le problème en déplaçant une partie de ce bloc de code : 

    if (readPushButton() != BP_NONE) 
    

    digitalWrite(lcdbacklight, HIGH); 
    lcd.display(); 
    displayMenu(MAIN_MENU); 
    backlight_cpt = millis(); 
    erreur = false; 


    En effet, je suis incapable de dire pourquoi, l'instruction "erreur = false; " était tout le temps exécutée, alors que ma trace de débug n'était pas affichée. En mettant le "erreur = false" tout en bas de la loop ça fonctionne.

    Ensuite j'ai dû changer :

    #define timeout_porte 15
    
    en
    const long timeout_porte =  41;


    En effet j'ai une course assez longue et le int ne suffisait plus.

    Ensuite je n'ai pas fait une porte guillotine mais un pont levis car je trouvais ça plus fun et ça s'y prêtait mieux. Du coup j'ai dû inverser mal mal de noms de variables "lever/coucher ouverture/fermeture" etc. J'ai enlevé les commentaires sur le test "//vérifie si la porte commence bien à monter" car je pense que ce test est important. J'ai ajouté une petite inertie à la fermeture pour bien plaquer la porte en position fermée, la résistance du moteur à la traction est impressionnante. 

    En terme d'amélioration, j'ai ajouté l'affichage de la durée de montée/descente en alternance avec les flèches haut et bas qui sont déjà présentes : 


    //En début de méthode déclarer :
    
    unsigned long initMillis = millis();
    char secondes[2];

    //Ensuite au moment d'afficher la flèche haut ou bas :
    DateTime now = rtc.now();    
    if ((now.second() % 2) == 0){
    lcd.setCursor(7,1);
    lcd.write(byte(0));
    }
    else{
    lcd.setCursor(8,1);
    sprintf(secondes,"%d",((millis()- initMillis)/1000));
    lcd.write(secondes);


    J'ai essayé d'ajouter une LED "BattLevel" sur le PIN A6, je n'ai pas su la câbler sur mon nano, j'ai passé 1h30 à essayer de la câbler en direct, à faire un pont diviseur avec le 5V, à faire du digitalwrite, du analoguewrite, rien à faire, ça m'a rendu fou. Du coup je me suis rabattu sur la LED interne (TX), c'est mieux que rien.

    J'ai branché deux LEDS (avec résistance) sur le moteur, l'une à l'inverse de l'autre en terme d'anode et cathode. ça permet d'indiquer sur le boîtier de contrôle quand on est en phase de montée ou de descente. ça paraît idiot mais en fait avec le principe du pont levis, si jamais le capteur bas ne se déclenche pas lors d'une descente, l'arbre finit de dérouler la cordelette et ensuite l'enroule dans l'autre sens, ensuite on ne comprend plus rien à ce qu'il se passe. 

    Je n'ai pas su mettre en place la détection de charge de la batterie, c'est infernal de débugger car le +5V du PC en même temps que le 5V de la batterie perturbe les capteurs, même les touches du pad j'ai eu du mal à les faire fonctionner à l'identique entre debug et pas debug. 

    Voilà voilà, je montrerai des photos quand il sera installé. Il n'est pas spécialement joli car assemblé avec un ado et du matériel de récup, mais j'ai bon espoir d'avoir un système fiable et autonome.

    P.S. J'aurais souhaité que le delta de l'éphéméride accepte les valeurs négatives. Pour le moment je n'y touche pas, on verra à l'usage.

    P.S.2 : j'ai adapté les latitudes et longitudes, mine de rien on a 30mn de décalage à Strasbourg :)


    Merci pour ce super tuto.

    bagou91

    15 juin 2018 à 09:04

    Bonjour,
    Merci pour ta contribution, et tes explications sur tes modifications :)

    cpya

    20 juin 2018 à 22:29

    bonjour,votre projet m'interesse mais je n'arrive pas à charger vos fichiers.J'ai le message d'erreur suivant:

    "<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>781C7CEC7BC313DA</RequestId><HostId>1CB2qblCcKRRJtyD77yC0uCcx136auFxAPCK87h3MDjv2r9CvD3KawTou8xZDOA+TMQV8iz7rww=</HostId></Error>".

    Merci pour votre réponse

    Titank

    06 août 2018 à 20:30

    Bonjour Bagou91 ,

    Merci pour ton projet et très bien suivi. Je veux passer commande de la partie électronique.

    Est-ce qu'il serait possible de mettre a jour la liste des composants nécessaire? ou  puis-je partir sur celle de Petunia ?

    merci

    bagou91

    06 août 2018 à 20:43

    Bonsoir,
    Tu peux prendre ma liste initiale en prenant en compte la note de mise à jour du 8/04/2018 pour certains composants remplacés.

    Titank

    06 août 2018 à 21:51

    D'accord c'est ce que je vois mais pour le convertisseur je peux partir sur celui Petunia? y'a quand même 10 €
    merci pour la réponse rapide

    Chris

    07 août 2018 à 23:49

    Bonjour et merci pour ce tuto !

    Avez-vous aussi des conseils sur le câblage à utiliser pour le montage définitif ? Section des câbles ? Fournisseur intéressant ?

    Merci.

    Domino

    10 août 2018 à 13:43

    Bonjour bagou91

    Merci pour ce tuto qui m'a fait découvrir arduino. Pour ma première réalisation, je suis content que tout fonctionne. Par contre, j'ai un soucis, la porte descend un peu trop vite. Y a t'il moyen de ralentir le moteur par programmation ?

    Merci

    bagou91

    14 août 2018 à 09:01

    Bonjour,
    Oui c'est possible de ralentir le moteur moyennant quelques modifications: Il faut pour cela utiliser les broches PWM.
    On inverse les pins 10 et 12, et quelques ajustements dans le code.
    Toutes les modifications sont sur ce lien: https://1fichier.com/?tjdjxrzrrcjz7fodagb7
    Tu peux définir la vitesse de la porte à la ligne 16 avec une valeur de 0 à 255.

    tou_k_c

    13 août 2018 à 17:36

    Bonjour bagou91,

    Cela faisait un moment que je cherchais un tuto adapté à mon besoin. Et là, je suis tombé sur le tien.

    Franchement, que du bonheur!!! 

    Pour un débutant comme moi, il faut juste suivre les instructions, et tout roule (...se ferme et s'ouvre ;-).

    Bref un GRAND MERCI à toi pour le partage.

    Merci également à Petunia, car j'avais également le soucis de "timeout_porte" avec 35s et résolu grâcea lui.

    Fazazou

    17 sept. 2018 à 22:31

    Bonjour, je viens de realiser ce montage mais le lcd n'affiche aucun texte bien qu'il soit allumé ( extinction rétroéclairage apres 10s ). Le téléversement s'est semble t il bien passé. Je suis dans une impasse. Please, help !!


    Recevez une fois par mois les meilleurs tutoriels Technologie dans votre boîte mail




    Champion

    Gagnant du Concours Concours DIY Arduino


    Légendaire

    + de 10 000 vues pour poulailler porte automatique



    Gotronic

    Voir l'espace DIY gotronic


    S'inscrire:


    • Vues: 30431
    • J'aime: 60