Robot suiveur de ligne

Capteur

a marqué ce sujet comme résolu.

on a déjà écrit un programme, et fait des branchements, cependant lorsque l’on couvre l’une des photorésistances les deux roues s’arrête et pas seulement une Image utilisateur

int motor1_enablePin = 11; //pwm
int motor1_in1Pin = 13;
int motor1_in2Pin = 12;
 
int motor2_enablePin = 10; //pwm
int motor2_in1Pin = 8;
int motor2_in2Pin = 7;

// déclaration des broches utilisées
const char ledDroite = 2;
const char ledGauche = 3;
const char capteurDroit = A0;
const char capteurGauche = A1;

/* deux variables par capteur qui une stockera la valeur lue sur la broche analogique
et l'autre stockera le résultat de la conversion de la précédente valeur en tension */
float lectureDroite = 0;
float lectureGauche = 0;
float tensionDroite = 0;
float tensionGauche = 0;

void setup() {

 //on initialise les pins du moteur 1
  pinMode(motor1_in1Pin, OUTPUT);
  pinMode(motor1_in2Pin, OUTPUT);
  pinMode(motor1_enablePin, OUTPUT);
 
  //on initialise les pins du moteur 2
  pinMode(motor2_in1Pin, OUTPUT);
  pinMode(motor2_in2Pin, OUTPUT);
  pinMode(motor2_enablePin, OUTPUT);

  // Configuration du port série pour envoyer des message de débugging  
  
  pinMode(ledDroite, OUTPUT);
  pinMode(ledGauche, OUTPUT);
  Serial.begin(2000000);
  
  SetMotor2(200, true);
  SetMotor1(200, false); 
  
  digitalWrite(ledDroite, LOW);
  digitalWrite(ledGauche, LOW);
}

void loop() {

// lecture de la valeur en sortie du capteur capteurDroit puis gauche
    lectureDroite = analogRead(capteurDroit);
    lectureGauche = analogRead(capteurGauche);
    tensionDroite =(lectureDroite*5.0)/1024 ;
    tensionGauche =(lectureGauche*5.0)/1024 ;
    
    Serial.print("Tension Droite = ");
    Serial.print(tensionDroite);
    Serial.print(" V");
    Serial.print("Tension Gauche = ");
    Serial.print(tensionGauche);
    Serial.println(" V");

    delay(100); 

 if (lectureGauche>400)
  {
  SetMotor1(10, false);}
  else
  {
  SetMotor1(200, false);}

  if (lectureDroite>400)
  {
  SetMotor2(10, true);}
  else
  {
  SetMotor2(250, true);
  }
}
 
//Fonction qui set le moteur1
void SetMotor1(int speed, boolean reverse)
{
  analogWrite(motor1_enablePin, speed);
  digitalWrite(motor1_in1Pin, ! reverse);
  digitalWrite(motor1_in2Pin, reverse);
}
 
//Fonction qui set le moteur2
void SetMotor2(int speed, boolean reverse)
{
  analogWrite(motor2_enablePin, speed);
  digitalWrite(motor2_in1Pin, ! reverse);
  digitalWrite(motor2_in2Pin, reverse);
}
+0 -0

Je me suis permis d’éditer ton message pour mettre ton code en forme. Pour information, tu peux formater le code en l’encadrant avec deux lignes comportant les caractères ``` que tu peux obtenir en tapant Alt gr + 7. Tu peux préciser le langage en indiquant son nom à la suite des accents sur la première ligne, sans espace. Tu peux en apprendre plus sur ce lien.


Sois plus précis s’il-te-plaît sur ce que tu as testé et ce qui fonctionne. Actuellement, la voiture fonctionne-t-elle un minimum ? A quel moment est-ce qu’elle s’arrête ? Qu’as-tu essayé comme pistes de solution ?

Petit bonus, as-tu essayé la méthode de la peluche ? :D

+2 -0

Merci pour votre réponse et d’avoir mis notre message en forme :D

J’ai testé les moteurs et ils fonctionnent correctement, la voiture roule. Ensuite j’ai testé séparément des moteurs les photorésistances éclairés par des LED et elles fonctionnaient. J’ai voulu par la suite faire en sorte que les roues s’arrêtent lorsque les photorésistances sont dans l’obscurité. Chaque roue est reliée à une photorésistance, notre branchement est symétrique. Cependant lorsqu’une seule des photorésistance est dans le noir, les deux roues s’arrêtent.

De plus j’ai regardé dans le traceur série de arduino ce que captaient les photorésistances et je ne comprends pas pourquoi nous obtenons un signal sinusoïdal.

Merci pour cette méthode, je l’avais déjà anticipé, j’ai déjà une peluche ;)

Dans ton code, je vois que tu as des messages de débuggage (les print). Grâce à ceux-ci, tu devrais pouvoir avoir quelques indications sur ce qu’il se passe, non ? Aussi, tu pourrais ajouter plus de print sous tes if ou tes méthodes SetMotor pour voir les valeurs des différentes variables.

Par exemple, si tu obstrues le capteur gauche, regarde quelle est la valeur de lectureDroite et tensionDroite. Sont-elles correctes ? Si oui, que fait ton code pour croire qu’elles sont fausses ? Si non, pourquoi ? Et ainsi de suite

Peut être un problème lié au câblage.
Au vu du schéma, j’aurais envie de déplacer le fil de couleur foncée de la photo résistance de gauche vers la photo résistance de droite.
Pour les signaux parasites, pet être un effet de l’éclairage ambiant (50 Hz).

+0 -0

Pour les signaux parasites ils viennent sans doute des moteurs, en particulier de leur PWM (analogWrite). Ces parasites peuvent d’ailleurs causer le souci de recopie de valeur.

Est-ce que vous avez essayé avec 0 et 255 comme vitesses? Est-ce que vous avez moins de parasites?

Si oui, ce sont bien les moteurs qui en sont la cause, essayez de mettre un gros condensateur entre le + et le - de la plaque du haut.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte