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 capte la même distance.

Si vous connaissez d’autre solution permettant d’ameliorer la fonction suivre une personne à ajouter dans le programme je suis prenneur.

Merci à vous.

Voici mon 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);
}
}

Faut nous en dire plus... là vous avez un bout de code qui fait bouger un servo en fonction de 2 distances. Où sont installés les capteurs ultra son ? Comment "suivez vous" une personne avec ça ?

Pour l’instant mes capteurs sur disposer sur ma breadbord, je les positionnerais sur mon servomoteur par la suite.

Pour suivre une personne j’avais penser à sa: Quand la personne va se déplacer vers la gauche ou la droite il yaura forcément un capteur qui va mesurer une plus grande distance que l’autre. Si la personne se situe plus vers le capteur1(celui de gauche) le servo tourne à gauche, si la personne se situe plus vers le capteur2(droite) le servo tourne vers la droite sinon quand la personne se situe au milieu des 2 capteurs on maintien la position du servomoteur

Et comment vous restez pointé sur la personne ?

Je n’est pas d’idée pour cela. Sinon j’ai trouver un programme permettant de suivre des objets, je les essayer et sa marche.
Mais je ne comprend pas comment il marche, pouvez m’expliquer les grandes lignes de ce code ?

*************************************************************************************************/

#include <Servo.h> 

Servo myservo;

const int Lin = 10, Rin = 12, Lout = 11, Rout = 13, serv = 9; //setting sensor pins and servo pin
// in = ECHO (iin to receive echo pulse) out = TRIG (pin to send trigger pulse)                                    

// establish variables for duration 
// and the distance result in inches & cm
long Rduration, Lduration, Rinches, Linches, Rcm, Lcm;

int threshold = 75;  //Sensor threshold in cm
byte hist = 5;       // histeresys for distance, in cm
byte angmin = 20;    // minimum angle for servo
byte angmax = 160;   // maximum angle for servo
int distmax = 100;   // maximum distance in cm
byte anglestep = 2;  // angle step for rotate

int midle = 90;  // center position
int angle = 90;  // initial angle

boolean debug = false; //Serial communication for debuging. Set to true for serial communication.
//boolean debug = true; //Serial communication for debuging. Set to true for serial communication.

int contor = 0;
int contormax = 100;   // 40 is for 1 sec
byte miscare = 0;      // if if moving, this vvariable is 1
long initial;          // last moving
long hodina = 3;         // pause for return          

void setup() {
  // initialize serial communication:
  if (debug)
  {
    Serial.begin(9600);
  }
  myservo.attach(serv); //attach servo to pin 9
  myservo.write(angle);
   delay(2000);
   
}

void loop()
{
  
  //Most of the sensor code has been taken from David Mellis's PING sensor code
  //I modified it for a 4 pin sensor as oppsed to the 3 pin sensor
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  pinMode(Rout, OUTPUT);
  digitalWrite(Rout, LOW);
  delayMicroseconds(2);
  digitalWrite(Rout, HIGH);
//  delayMicroseconds(5);
  delayMicroseconds(10);
  digitalWrite(Rout, LOW);

  Rduration = pulseIn(Rin, HIGH);
  Rcm = Rduration/58;
  if (Rcm > distmax) Rcm = distmax;
  Rinches = Rcm /2.54;
  
  pinMode(Lout, OUTPUT);
  digitalWrite(Lout, LOW);
  delayMicroseconds(2);
  digitalWrite(Lout, HIGH);
//  delayMicroseconds(5);
  delayMicroseconds(10);
  digitalWrite(Lout, LOW);

  Lduration = pulseIn(Lin, HIGH);
  Lcm = Lduration/58;
  if (Lcm > distmax) Lcm = distmax;
  Linches = Lcm /2.54;
    
  if (debug)
  {
    Serial.print("Left: ");
    Serial.print(Linches);
    Serial.print("in (");
    Serial.print(Lcm);
    Serial.println("cm)");
    
    Serial.print("Right: ");
    Serial.print(Rinches);
    Serial.print("in (");
    Serial.print(Rcm);
    Serial.println("cm)");
  }
//  follow();

  if (Lcm <= threshold || Rcm <= threshold)
  {
    if (Lcm + hist < Rcm) 
    {
      angle = angle - anglestep;
      miscare = 1;
    }
    if (Rcm + hist < Lcm)
    {
      angle = angle + anglestep;
      miscare = 1;
    }
 // }
  if (angle >= angmax)
  {
    angle = angmax;
    miscare = 0;
    contor = contor +1;
  }
  if (angle <= angmin)
  {
    angle = angmin;
    miscare = 0;
    contor = contor +1;
  }

if (miscare == 1) initial = millis()/1000;

if (miscare == 0) contor = contor + 1;        // increase the counter
miscare = 0; 

 if (debug)
  {
    Serial.print("miscare: ");
    Serial.print(miscare);
    Serial.print(" counter: ");
    Serial.println(contor);  
  }  
if (contor > contormax) {  // if counter is too much
  contor = 0;              // reset the counter
  angle = 90;              // put in center
  delay(500);
}
if (initial + hodina  < millis()/1000) {  // if counter is too much
  contor = 0;              // reset the counter
  angle = 90;              // put in center
  delay(500);
}

  myservo.write(angle);
  miscare =0;
}  // end of good distance
  
  
  if (debug)
  {
    Serial.println("Angle: ");
    Serial.print(angle);
    Serial.println(" degree");
  } 
//miscare = 0;
if (initial + hodina  < millis()/1000) {  // if counter is too much
  contor = 0;              // reset the counter
  angle = 90;              // put in center
  myservo.write(angle);
  miscare =0;
  delay(500);
}
  
} // end of program