Aide télémètre infrarouge

Bonsoir voilà nous avons un problème pour notre projet d'isn : nous souhaitons faire une voiture qui esquive les obstacles, ces obstacles seront détectés par des télémètres infrarouges
nous cherchons à calculer une distance grâce à des télémètres infrarouge pour utiliser ses données pour que notre voiture s'arrête si la distance entre la voiture et l'obstacle est trop courte.

Nous ne savons pas quel code écrire sur Arduino pour calculer cette distance et ainsi donner une consigne à la voiture.

Cordialement.

Bonsoir,
C'est quoi votre télémètre ?

télémètre Sharp 2Y0A02

Bonsoir,
J'ai moi même réalisé une expérience telle avec mon arduino.
J'ai utilisé des leds infrarouges et deux capteurs issus du kit starter arduino.
Je ne peux pas calculer la distance exacte, mais je peux la connaitre dans une unité arbitraire, entre 1 et 5.
Souhaites-tu en savoir d'avantage ?

Oui ça nous intéresse car on cherche à utiliser une distance calculer pour ensuite faire effectuer des manœuvre à notre voiture

Je vous donne le code source en "brut" alors. (il n'est pas commenté, et je ne décrirais le montage que j'ai effectué puisque je ne m'en rappelle plus ^^ néanmoins il est très simple : 2 servos, 2 leds, 2 capteurs)

Petit contre-temps mon disque dur étant long à monter suite à un oubli de unmount, je vous le mets à la suite de ce post dès que possible (entre 5min et 1h)

En attendant si vous pouviez jeter un coup d'oeil ^^' (je bloque) http://forum.arduino.cc/index.php?topic=298582.0

Bonsoir,
As-tu fait une recherche sur la toile avec "sharp 2y0a02 arduino" ?

Et voilà !! Mon disque a été un peu long, mais tout est bon :smiley:

Le fichier .ino (tu peux l’appeler comme tu veux)

#par martinsurleweb
include <Servo.h>
include "fonctions.h"

Servo servoLeft;
Servo servoRight;

void setup()                                 
{  
  servoLeft.attach(13);
  servoRight.attach(12);  

  Serial.begin(9600);  
}  
 
void loop()                                  
{                                            
  int irLeft = irDistance(9, 10);
  int irRight = irDistance(2, 3);       

  if (irLeft == 5 && irRight == 5) {
    go(servoLeft, servoRight);
  }
  else if (irLeft <= 2 && irRight >= 3) {
    turnRight(servoLeft, servoRight);
  }
  else if (irLeft >= 3 && irRight <= 2) {
    turnLeft(servoLeft, servoRight);
  }
  else if (irLeft <= 2 && irRight <= 2) {
    turnRight(servoLeft, servoRight);
    delay(500);
    go(servoLeft, servoRight);
  }
  
  delay(50);          
}
int irDetect(int irLedPin, int irReceiverPin, long frequency)
{
  tone(irLedPin, frequency, 8);              
  delay(1);                                  
  int ir = digitalRead(irReceiverPin);       
  delay(1);                                  
  return ir;                                 
}
int irDistance(int irLedPin, int irReceivePin)
{  
  int distance = 0;
  for(long f = 38000; f <= 42000; f += 1000) {
    distance += irDetect(irLedPin, irReceivePin, f);
  }
  return distance;
}

et le fichier fonctions.h, facultatif, mais personnellement je trouve que ça donne un “main” plus clair :wink: (à la base c’est en C).

void go (Servo servoLeft, Servo servoRight) {
  servoLeft.writeMicroseconds(1700);
  servoRight.writeMicroseconds(1300);
}
void turnLeft (Servo servoLeft, Servo servoRight) {
  servoLeft.writeMicroseconds(1300);
  servoRight.writeMicroseconds(1300);
}
void turnRight (Servo servoLeft, Servo servoRight) {
  servoLeft.writeMicroseconds(1700);
  servoRight.writeMicroseconds(1700);
}
void goBack (Servo servoLeft, Servo servoRight) {
  servoLeft.writeMicroseconds(1300);
  servoRight.writeMicroseconds(1700);
}
void pivotRight (Servo servoLeft, Servo servoRight) {
  servoLeft.writeMicroseconds(1700);
  servoRight.writeMicroseconds(1500);
}
void pivotLeft (Servo servoLeft, Servo servoRight) {
  servoLeft.writeMicroseconds(1500);
  servoRight.writeMicroseconds(1300);
}
void pivotBackRight (Servo servoLeft, Servo servoRight) {
  servoLeft.writeMicroseconds(1300);
  servoRight.writeMicroseconds(1500);
}
void pivotBackLeft (Servo servoLeft, Servo servoRight) {
  servoLeft.writeMicroseconds(1500);
  servoRight.writeMicroseconds(1700);
}
void returnBot (Servo servoLeft, Servo servoRight) {
  servoLeft.writeMicroseconds(1300);
  servoRight.writeMicroseconds(1300);
//  delay(3000);
  servoLeft.writeMicroseconds(1500);
  servoRight.writeMicroseconds(1500);
}

Bon comme je suis gentil et que j’ai un peu de temps devant moi je t’ai fait un schéma ^^
Donc le gros rectangle bleu c’est ma board, pour toi ce sera … ton châssis ?

Voilà j’espère que ça t’aura été utile :slight_smile: Tu n’as qu’à reprendre ces deux fichiers et à faire le montage et c’est bon :slight_smile: