Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Moteur combiné à un capteur à ultrason



  1. #1
    roxanpons

    Moteur combiné à un capteur à ultrason

    Bonsoir, je vous écrit car j'ai eu problème sur mon projet, je programme une partie ou je fais monter un plateau jusqu'à qu'il se situe à 12cm de mon capteur à ultrason, sur une Arduino UNO. Voici le programme :
    #include <NewPing.h>

    Code:
    #define TRIGGER_PIN  9
    #define ECHO_PIN     8
    #define MAX_DISTANCE 200
    #define RelaisA  digitalRead (13) // pin 13
    #define RelaisB  digitalRead (12) // pin 12
    #define Fin_C_Bas digitalRead (10)
    #define CapteurBasOn  digitalRead (Fin_C_Bas) 
    NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
     
    
     
    void cm() {
      delay(5);
      Serial.print("Ping: ");
      Serial.print(sonar.ping_cm());
      Serial.println("cm");
    }
    void monte() {
      digitalWrite(RelaisA,LOW); // mettre pin 13 a low
      digitalWrite(RelaisB,HIGH); // mettre pin 12 a high
    }
    void descend() {
      digitalWrite(RelaisA ,HIGH); // Mettre pin 13 a high
      digitalWrite(RelaisB, LOW); // Mettre pin 12 a low
    }
    
    void stop() {
      digitalWrite(RelaisA, LOW); // Mettre pin 13 a high
      digitalWrite(RelaisB, LOW); // Mettre pin 12 a low
    }
    
    
    void setup() {
      // set all the other pins you're using as outputs:
      pinMode(13,OUTPUT);
      pinMode(12,OUTPUT);
      Serial.begin(9600);
    
      // initialistaion des capteurs qui sont de preference fermé au repos
      pinMode(Fin_C_Bas, INPUT); // Capt2 est une broche d'entree
      digitalWrite(Fin_C_Bas, HIGH);      
            stop();
            
      // si au debut on est entre les deux capteur donc on monte
      if (( ("cm") > (12) )) monte();
    }
    
    void loop() // boucle principal
    {
      //contenu du programme
      
      // Si fin de course bas ateint
      if(CapteurBasOn) {
        stop();
        delay(500);
        monte();
        delay(500);
      }
      
      // Si fin de course haut ateint
      if (( ( "cm" ) <= ( 12 ) )) {
        stop();
        delay(500);
        descend();
        delay(500);
      }
    }
    //fin

    Mon moteur tourne puis s'arrête 1 seconde après, sauriez vous pourquoi?

    -----

    Dernière modification par JPL ; 25/05/2017 à 23h31. Motif: Ajout de la balise Code (#) pour garder l'indentation

  2. Publicité
  3. #2
    jiherve

    Re : Moteur combiné à un capteur à ultrason

    Bonjour
    Moteur, mécanique,vibrations font mauvais ménage avec les capteurs US il faut que ceux ci soient mécaniquement très bien isolés de la partie mécanique.
    C'est loin d’être simple à faire.
    Par ailleurs il est prudent d'utiliser un conformateur sur la distance mesurée, un filtre de moyenne glissante est une bonne approche.
    De plus tel qu’écrit dans ce logiciel il y a possibilité d'oscillation si la butée basse est distante d'environ 12cm de la butée haute, comme d'hab il manque la variable locale mémorisant l’état de la machine.
    Enfin si le capteur bas est un swicth il manque un anti rebond.
    accessoirement :un commentaire inexact dans la routine "stop"
    JR
    l'électronique c'est pas du vaudou!

  4. #3
    roxanpons

    Re : Moteur combiné à un capteur à ultrason

    Bonjour, tout d'abord merci pour votre réponse.
    Etant donné que la vitesse a laquelle mon plateau se déplace est lente un anti rebond est il vraiment nécessaire ?
    Ensuite comment faire une variable mémorisant l'état de la machine? Je débute dans la programmation donc j'ai encore beaucoup à apprendre.
    Cordialement

  5. #4
    jiherve

    Re : Moteur combiné à un capteur à ultrason

    Re
    Les rebonds n'ont rien à voir avec la vitesse de déplacement mais avec le contact mécanique du switch qui ne s'établi pas de manière franche mais par rebonds (environ 2ms), c'est un refexe à acquerir : contact mecanique => anti rebond hard ou soft.
    Pour la variable il faut en declarer une , dans ton charabia :
    sens : int = 0

    dans la routine monte() tu passes sens à 1
    dans la routine descend() tu passes sens à -1
    et à zero dans stop()
    Tu disposes alors d'une variable t'indiquant l’état de ta machine "au tour 'd'avant" ce qui permettra de lever des ambiguïtés ex: c'est en descente et ton capteur US couine et comme tu sais être en descente alors tu t'en fiches alors qu'avec ton soft tu t'en occupes mais à tord!
    JR
    l'électronique c'est pas du vaudou!

  6. #5
    roxanpons

    Re : Moteur combiné à un capteur à ultrason

    Super merci beaucoup!

  7. A voir en vidéo sur Futura

Sur le même thème :

Discussions similaires

  1. capteur a ultrason+deux servo moteur et un arduino
    Par maxelectronique dans le forum Électronique
    Réponses: 7
    Dernier message: 27/08/2015, 15h12
  2. Capteur ultrason
    Par kenny54000 dans le forum Électronique
    Réponses: 14
    Dernier message: 30/11/2014, 20h59
  3. Capteur ultrason
    Par Jehudiel dans le forum Électronique
    Réponses: 2
    Dernier message: 31/07/2013, 13h19
  4. capteur a ultrason
    Par medak dans le forum Électronique
    Réponses: 1
    Dernier message: 09/03/2009, 12h11
  5. capteur a ultrason
    Par khoung dans le forum Électronique
    Réponses: 4
    Dernier message: 22/04/2008, 10h33