Partage
  • Partager sur Facebook
  • Partager sur Twitter

Controler mon servomoteur avec RTC

Sujet résolu
    26 mai 2020 à 11:27:01

    Bonjour, étant un énnnooorrrmmee débutant je me permet de vous demandez un peu d'aide, je souhaiterai (pour un distributeur de croquette) que mon servomoteur SG90 9g va a une position, reste le temps que les croquettes tombent, et reviennent a sa position initiale, pour cela j'ai trouvé ce code extrêmement simple

    --------
     #include <Servo.h>
     
    Servo myservo; 
    int pos = 0;   
     
    void setup()
    {
      myservo.attach(9);
    }
     
    void loop()
    {
      for(pos = 0; pos < 180; pos += 1) 
      {                                 
        myservo.write(pos);             
        delay(....);                     
      delay(....);
      for(pos = 180; pos>=1; pos-=1)    
      {                               
        myservo.write(pos);            
        delay(...);                     
      }
        delay(....);
    }

    --------

    Mais je voudrais rajouter un facteur,

    que le moteur ne s'active plus en fonction d'un delay mais d'un module RTC DS1307, deux fois par jour a 8h00 et à 19h,

    Merci du temps que vous prendrez a me répondre.

    Et désolé si il y a des imprécisions ou des fautes ;)

    • Partager sur Facebook
    • Partager sur Twitter
      Staff 27 mai 2020 à 8:11:30

      Pour gérer un DS1307, il y a la lib de Adafruit : https://github.com/adafruit/RTClib

      Pour lire l'heure, tu peux utiliser DateTime now = rtc.now();

      Exemple :

      void loop() {
      
      	DateTime now = rtc.now();
      	
      	if ( (now.hour() == 17) && (now.minute() == 30) ) {
      		Serial.println("Il est 17h30 !")
      	}
      
      }
      

      Tu verras que ce code affichera "Il est 17h30 !" au moment voulu, à condition que ton RTC soit à l'heure évidement ;)

      Mais il va spammer ce message en boucle pendant une minute entière, jusqu'à ce qu'il soit 17h31.

      Pour éviter ça, tu peux ajouter une variable retenant que l'affichage a déjà eu lieux.

      int action17h30 = 0;
      
      
      void loop() {
      
      	DateTime now = rtc.now();
      	
      	if ( (now.hour() == 17) && (now.minute() == 30) && (action17h30 == 0) ) {
      		Serial.println("Il est 17h30 !")
      		action17h30 = 1;
      	} else {
      		action17h30 = 0;
      	}
      
      }
      




      • Partager sur Facebook
      • Partager sur Twitter
        27 mai 2020 à 19:30:39

        Désolée de te déranger une seconde fois mais j'ai un problème qui je pense doit être tout bête a régler,

        Je reçois un message d'erreur - 'rtc' was not declared in this scope" - ,

        --------

         #include <Servo.h>
         #include <RTClib.h>
        Servo myservo;
        int pos = 0;  

        void setup()
        {
          myservo.attach(9);
          rtc.attach(
        }
         
        void loop()
        {
          DateTime now = rtc.now();
         if ( (now.hour() == 17) && (now.minute() == 30) ) {
          for(pos = 0; pos < 180; pos += 1)
          action17h30 = 1;
          myservo.write(pos);            
            delay(300);                    
          delay(3000);
          for(pos = 180; pos>=1; pos-=1)   
          {                              
            myservo.write(pos);           
            delay(300);                    
          }
            delay(33000);
        }
         }
         else
          {
            action17h30 = 0;                             
          }

        ---------

        Si tu pouvais éclaircir ma lanterne une seconde fois,

        merci d'avance

        • Partager sur Facebook
        • Partager sur Twitter
          Staff 27 mai 2020 à 19:40:03

          Avant de pouvoir utiliser une variable, il faut la déclarer.

          Si je prends par exemple la ligne myservo.write(pos);, avant de pouvoir utiliser la fonction write sur la variable myservo, tu as précédemment déclaré celle-ci au début de ton code avec la ligne Servo myservo;

          Il convient de faire la même chose pour ton RTC en déclarant ta variable RTC avec RTC_DS1307 rtc;

          A noter que tu auras très certainement la même erreur pour la variable action17h30.

          Il faut aussi impérativement initialiser la lib RTC avant de pouvoir l'utiliser.

          Cela se fait en plaçant un appel à rtc.begin(); dans la fonction setup.

          • Partager sur Facebook
          • Partager sur Twitter
            27 mai 2020 à 23:00:50

            Super merci beaucoup à toi,

            tout marche parfaitement.

            • Partager sur Facebook
            • Partager sur Twitter

            Controler mon servomoteur avec RTC

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