[Programmation] [ARDUINO] Suivre une personne
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

[ARDUINO] Suivre une personne



  1. #1
    mrn123

    [ARDUINO] Suivre une personne


    ------

    Bonsoir, alors voila, j'ai commancé un programme qui a pour but de suivre une personne, pour cela j'utilise 2 capteurs ultrasons et un servomoteur 360° à rotation continue.
    Je tiens à préciser que je ne connais pas grand chose en arduino.

    Je rencontre de nombreuses difficulté, tout d'abord j'aimerais bloquer la rotation de mon servomoteur a une certaine valeur d'angle pour qu'il arrete de tourner en continue.
    Ensuite, j'aimerais arreter mon servomoteur lorsque les 2 capteurs mesure la même distance, le faire tourner a gauche quand le capteur(1) mesure une plus grande distance que le 2ème capteur et à l'inverse le faire tourner a droite quand le capteur(2) mesure une plus grande distance que le 1er capteur

    Si vous connaissez d'autre solution permettant d'ameliorer la fonction suivre une personne à ajouter dans le programme n'hésitez pas.

    Merci à vous.



    Voici le code que j'ai essayer de faire( le moteur tourne dans un sens mais ne tourne pas dans l'autre et ne s'arrete pas ):

    Code:
    #include <Servo.h>
         
    Servo monServo; //declaration de notre servo moteur
    int positionDuServo = 0; //Servomoteur position souhaité
    
    
    //CAPTEUR 1
    int echoPin1 =8;
    int initPin1 =9;
    int distance1 =0;
    
    //CAPTEUR 2
    int echoPin2 =6;
    int initPin2 =7;
    int distance2 =0;
    
    long pulseTime;
    
    void setup() {
    
      monServo.attach(9); //Branger sur la broche digital 9(sortie PWM)
      monServo.write(positionDuServo); //Servo commandé dans sa position initiale
      
      pinMode(initPin1, OUTPUT); //emetteur
      pinMode(echoPin1, INPUT); //recepteur
      pinMode(initPin2, OUTPUT);
      pinMode(echoPin2, INPUT);
    
      Serial.begin(9600);
      
    }
    
    void loop() {
      
    digitalWrite(initPin1, HIGH);
     delayMicroseconds(10); 
     digitalWrite(initPin1, LOW); 
     pulseTime = pulseIn(echoPin1, HIGH); 
     int distance1 = pulseTime/58;
    
    digitalWrite(initPin2, HIGH);
     delayMicroseconds(10); 
     digitalWrite(initPin2, LOW); 
     pulseTime = pulseIn(echoPin2, HIGH); 
     int distance2 = pulseTime/58;
    
    if (distance1 > distance2) {
      monServo.write(monServo.read() + 1);
      delay(5);
    }
    if (distance1 < distance2) {
      monServo.write(monServo.read() - 1);
      delay(5);
    }
    if (distance1 == distance2) {
      delay(500);
    }
    }

    -----

  2. #2
    Teknic

    Re : [ARDUINO] Suivre une personne

    Bonjour,

    sans encore chercher à rentrer dans la partie code, es-tu certain de comprendre le fonctionnement d'un servomoteur à rotation continue?

    Une piste:

    " Ne disposant d'aucune butée, ce servomoteur tourne dans les 2 sens de façon continue. Le servomoteur est à l'arrêt avec une largeur d'impulsion de l'ordre de 1,5 ms.
    Au dessus de 1,5ms: le moteur tourne dans le sens horaire, il atteint sa vitesse maximale avec une impulsion de 2ms.
    Au dessous de 1,5ms: le moteur tourne dans le sens anti-horaire, il atteint sa vitesse maximale avec une impulsion de 1ms."

    Ce n'est qu'un exemple et ton propre servo nécessite peut-être des durées différentes.
    Dernière modification par Teknic ; 21/03/2017 à 23h13.

  3. #3
    Yvan_Delaserge

    Re : [ARDUINO] Suivre une personne

    Sous Arduino, pour déboguer, on n'a pas grand-chose: uniquement serial.print, à placer stratégiquement dans le programme, pour contrôler le contenu des variables.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  4. #4
    f6bes

    Re : [ARDUINO] Suivre une personne

    Citation Envoyé par mrn123 Voir le message
    Bonsoir, alors voila, j'ai commancé un programme qui a pour but de suivre une personne, pour cela j'utilise 2 capteurs ultrasons et un servomoteur 360° à rotation continue.
    Je tiens à préciser que je ne connais pas grand chose en arduino.

    Je rencontre de nombreuses difficulté, tout d'abord j'aimerais bloquer la rotation de mon servomoteur a une certaine valeur d'angle pour qu'il arrete de tourner en continue.
    Ensuite, j'aimerais arreter mon servomoteur lorsque les 2 capteurs mesure la même distance, le faire tourner a gauche quand le capteur(1) mesure une plus grande distance que le 2ème capteur et à l'inverse le faire tourner a droite quand le capteur(2) mesure une plus grande distance que le 1er capteur

    Si vous connaissez d'autre solution permettant d'ameliorer la fonction suivre une personne à ajouter dans le programme n'hésitez pas.

    Merci à vous.



    Voici le code que j'ai essayer de faire( le moteur tourne dans un sens mais ne tourne pas dans l'autre et ne s'arrete pas ):

    Code:
    #include <Servo.h>
         
    Servo monServo; //declaration de notre servo moteur
    int positionDuServo = 0; //Servomoteur position souhaité
    
    
    //CAPTEUR 1
    int echoPin1 =8;
    int initPin1 =9;
    int distance1 =0;
    
    //CAPTEUR 2
    int echoPin2 =6;
    int initPin2 =7;
    int distance2 =0;
    
    long pulseTime;
    
    void setup() {
    
      monServo.attach(9); //Branger sur la broche digital 9(sortie PWM)
      monServo.write(positionDuServo); //Servo commandé dans sa position initiale
      
      pinMode(initPin1, OUTPUT); //emetteur
      pinMode(echoPin1, INPUT); //recepteur
      pinMode(initPin2, OUTPUT);
      pinMode(echoPin2, INPUT);
    
      Serial.begin(9600);
      
    }
    
    void loop() {
      
    digitalWrite(initPin1, HIGH);
     delayMicroseconds(10); 
     digitalWrite(initPin1, LOW); 
     pulseTime = pulseIn(echoPin1, HIGH); 
     int distance1 = pulseTime/58;
    
    digitalWrite(initPin2, HIGH);
     delayMicroseconds(10); 
     digitalWrite(initPin2, LOW); 
     pulseTime = pulseIn(echoPin2, HIGH); 
     int distance2 = pulseTime/58;
    
    if (distance1 > distance2) {
      monServo.write(monServo.read() + 1);
      delay(5);
    }
    if (distance1 < distance2) {
      monServo.write(monServo.read() - 1);
      delay(5);
    }
    if (distance1 == distance2) {
      delay(500);
    }
    }
    Bjr à toi,
    Par cuiosité, j'aimerais bien que tu nous décrives la FACON dont cela va permettre de "suivre une personne"?
    Je suppose que le suivi de qq chose fait qu'il se déplace.
    Bonne journée

  5. A voir en vidéo sur Futura
  6. #5
    mrn123

    Re : [ARDUINO] Suivre une personne

    Si on se déplace vers la gauche le capteur de gauche mesure une plus grande distance que le capteur de droite le servomoteur tourne donc à gauche, à l'inverse si on se déplace vers la droite le capteur de droite va mesurer une plus grande distance le servomoteur va donc tourner à droite. Mais il manque beaucoup de chose encore pour améliorer car la sa n'est pas précis. Si vous avez des idées je suis preneur.

Discussions similaires

  1. (Arduino) problème de téléversement de programme Arduino
    Par walidjake dans le forum Électronique
    Réponses: 1
    Dernier message: 17/05/2016, 09h28
  2. Arduino anti rebond avec arduino
    Par sari12 dans le forum Électronique
    Réponses: 13
    Dernier message: 23/10/2014, 17h04
  3. Communication arduino-arduino avec module Xbee
    Par TPESI22012 dans le forum Électronique
    Réponses: 2
    Dernier message: 23/12/2013, 17h24
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...