Partage
  • Partager sur Facebook
  • Partager sur Twitter

Activer un servo en fonction de l'heure

    30 mars 2024 à 14:27:47

    Bonjour à tous,

    J'aurais besoin d'aide afin d'activer un servomoteur en fonction de l'heure grâce à un module RTC. En gros, je voudrais que mon servomoteur aille à une position et revienne à sa position initiale à l'heure choisie. Après quelques recherches j'ai obtenu ce code :

    #include <Servo.h>
    #include "RTClib.h"
    #include <Wire.h>
    
    Servo myservo;
    RTC_DS1307 RTC;
    
    int pos = 0;
    
    void setup() {
      RTC.begin();
      Wire.begin();
      myservo.attach(9);
    }
    
    void loop() {
      DateTime now = RTC.now();
      if ( (now.hour() == 14) && (now.minute() == 00) && (now.second() == 00) )
      {
      for(pos = 0; pos < 180; pos += 1)  {
        myservo.write(pos);
        delay(15);
      }
      for (pos = 180; pos >= 0; pos -= 1) {
        myservo.write(pos);
        delay(15);}
      }
    }

    Mais rien ne se produit. Auriez-vous une idée du problème ?

    Merci pour votre aide :)

    • Partager sur Facebook
    • Partager sur Twitter
      31 mars 2024 à 1:07:29

      Hello,

      Juste une idée: ton test ligne 18 n'admet aucune tolérance: il faut vraiment qu'il soit 14:00:00 pile pour entrer dans le 'then'. Un test plus large sur les secondes serait peut-être le bienvenu. Maintenant, vu la vitesse des µcontrôleurs, je ne pense pas que ce soit le problème.

      Autre idée: now.hour() renvoie uniquement une valeur entre 0 et 12 (am-pm).

      Attention à l'écriture d'un nombre qui est précédé d'un zéro: c'est une valeur octale (012 est 10 décimal). Bon, dans le cas présent pas de souci: zéro reste zéro.

      -
      Edité par edgarjacobs 31 mars 2024 à 1:20:58

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        3 avril 2024 à 19:16:50

        Je doute que cela soit ça :

        - le code arduino s'exécute vite, il a le temps d'exécuter plusieurs centaines de fois ce test par seconde mais ça reste une bonne idée que d'ajouter de la marge si le code vient à être plus conséquent

        - la fonction hour() renvoie bien une valeur entre 0 et 23 tandis que c'est la fonction twelveHour qui renvoie une valeur entre 0 et 11

        - un 00 vaut quand même 0, mais oui, attention quand même

        Du coup, voici d'autres pistes à explorer :

        - tu n'as  peut-être jamais mis à l'heure ton module RTC, donc celui-ci dispose d'une heure totalement aléatoire

        - la pile de ton RTC est morte, donc celui-ci ne fonctionne pas correctement

        - tu as mal câblé ton RTC, donc la communication se fait mal, ou bien il n'y a pas les résistances de pull-up sur le bus I2C

        Pour tester tout cela, il pourrait être bien d'afficher quelques informations sur le Serial :

        - afficher le résultat de la fonction begin qui renvoie un bool suivant le résultat : 0 (false) = echec // 1 (true) = OK

        - afficher l'heure actuelle (hour, minute, second) pour voir si le RTC est bien à l'heure

        Il y a aussi la méthode RTC.isrunning() qui pourrait être affichée pour voir si le RTC est bien en train de fonctionner

        -
        Edité par lorrio 3 avril 2024 à 19:17:27

        • Partager sur Facebook
        • Partager sur Twitter
          3 avril 2024 à 19:23:43

          Merci pour vos réponses ! J'essaie tout ça dès que possible et je vous tiens au courant 🙏
          • Partager sur Facebook
          • Partager sur Twitter

          Activer un servo en fonction de l'heure

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          • Editeur
          • Markdown