Site icon AranaCorp

Utilisation d’un capteur de distance GP2Y0A21 avec Arduino

infrared sensor scheme

Le capteur de distance GP2Y0A21 est un capteur infrarouge de chez Sharp permettant de détecter des obstacles situés à une distance entre 10 et 80cm.
Ce capteur infrarouge existe en plusieurs versions ayant des caractéristiques et performances différentes. Ce tutoriel reste valable pour la majorité d’entre elles à condition de modifier la règle de conversion (Exemple de version: GP2Y0A02, GP2Y0A710).

Matériel

Principe de fonctionnement

Les capteurs de distance à infrarouge utilisent la lumière infrarouge pour calculer la distance à un objet par triangulation. Une led infrarouge envoie un signal lumineux invisible à l’oeil nu qui est réfléchi en présence d’un objet. Une barrette photorésistive capte la lumière réfléchit ce qui permet d’en déduire l’angle de réflexion et donc la distance. Le capteur renvoie une valeur analogique comprise entre 0 et 5V.

Schéma

Le capteur de distance GP2Y0A21 est alimenté en 5V. La broche Vcc du capteur peut être branché à la broche 5V du microcontrôleur, la broche GND à la masse du microcontrôleur et le signal est branché à une entrée analogique du microcontrôleur.
Le GP2Y0A21 peut être connecté selon le schéma suivant.

Code

Pour afficher la valeur physique du capteur, il faut connaitre la règle de conversion. Afin d’avoir un code propre et lisible, il est préférable de placer le code dans une sous fonction. Nous allons donc créer une fonction qui se charge de lire la valeur du capteur et de la convertir en valeur physique. Puis, Nous lisons la valeur brute du capteur à l’aide de la fonction analogRead(), puis nous convertissons cette valeur en centimètre pour information. Pour déterminer la présence d’un obstacle, nous définissons un seuil de 200 en dessous duquel on considère qu’un obstacle est détecté.
Pour utiliser l’objet GP2Y0A21 nous utilisons le code suivant:

//Parameters
const int gp2y0a21Pin  = A0;

//Variables
int gp2y0a21Val  = 0;

void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
  //Init ditance ir
  pinMode(gp2y0a21Pin, INPUT);
}

void loop() {
  testGP2Y0A21();
}

void testGP2Y0A21( ) { /* function testGP2Y0A21 */
  ////Read distance sensor
  gp2y0a21Val = analogRead(gp2y0a21Pin);
  Serial.print(gp2y0a21Val); Serial.print(F(" - ")); Serial.println(distRawToPhys(gp2y0a21Val));
  if (gp2y0a21Val < 200) {
    Serial.println(F("Obstacle detected"));
  } else {
    Serial.println(F("No obstacle"));
  }
}

int distRawToPhys(int raw) { /* function distRawToPhys */
  ////IR Distance sensor conversion rule
  float Vout = float(raw) * 0.0048828125; // Conversion analog to voltage
  int phys = 13 * pow(Vout, -1); // Conversion volt to distance

  return phys;
}


Applications

Sources

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

Quitter la version mobile