Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Capteurs > Capteurs de lumière > Capteur de distance infra-rouge (Sharp)

Capteur de distance infra-rouge (Sharp)

samedi 18 octobre 2008, par Julien H.

La famille GP2D de Sharp est connue en robotique pour servir :
- de capteur de présence (retournant une information tout ou rien ou bien à seuil fixe)
- ou en mesure de distance (résultat transmis sous forme analogique ou par voie série).

PNG - 665.9 ko
Les capteurs Sharp, reconnaissables entre tous

Ils coûtent une quinzaine d’euros et on les trouve facilement (exemple : Gotronic). Cet article est une introduction pour faciliter leur utilisation et bien comprendre leur fonctionnement pour éviter les erreurs de débutants.

Ces capteurs utilisent un principe optique pour mesurer la distance : un rayon lumineux infra-rouge collimaté est émis, va se réfléchir sur un objet présent dans le champ de détection ("range") et viendra frapper en retour une bande de récepteurs à l’intérieur du capteur Sharp permettant d’évaluer la distance.

Donc un premier mythe est cassé : on ne fait pas de mesure du temps aller/retour du faisceau lumineux. La vitesse de la lumière, même dans l’air ambiant, est trop rapide pour un capteur de cette taille :)



Voici une documentation technique du nouveau modèle remplaçant le GP2D12 :

datasheet Sharp GP2Y0A21

 Le choix du capteur

Il existe trois zones de détection couvertes par les capteurs IR de Sharp, mais seul le GP2D120 permet une détection dès 4 cm. Pour l’usage que nous en faisons, c’est celui là que nous avons choisi.

PDF - 45.6 ko
Datasheet GP2D120

Acroname a réalisé un tableau très clair pour aider à choisir son capteur en fonction de la zone de détection, du mode de communication et de l’information renvoyée (présence ou distance).

PDF - 81.1 ko
Tableau de comparaison des GP2Dxx

[UPDATE] un nouveau capteur existe, le GP2D150, il s’agit du GP2D120 avec en plus un seuil à 15 cm. La sortie doit être lue avec une simple entrée binaire TTL ("digital" sur Arduino par exemple) et le niveau du signal est haut quand l’obstacle est détecté au-delà de 15 cm, et bas en-deçà.

Comment faire pour couvrir toute la distance de 0 à 80 cm ?

Issu d’une discussion sur le forum Arduino.cc :

On peut être tenté de placer les capteurs en retrait à l’intérieur d’un robot. Hormis d’1 ou 2 cm pour la protection contre les chocs, ce n’est pas une bonne idée, car vous aurez plein de reflets avec votre carcasse. N’oubliez pas que c’est de la lumière, même invisible.

En fait, pour couvrir toute la distance de 0 à très loin, il faut utiliser plusieurs capteurs. Non seulement ça vous permettra de recouper vos résultats (par exemple pour le Sharp GP2x, vérifier que vous n’êtes pas dans le pic du début de la courbe) et d’avoir un traitement plus simple dans le micro-contrôleur qui gère l’ensemble des capteurs. On peut par exemple inhiber les capteurs longue distance quand on est prêt d’un bord (ils ne voient rien ou ils voient des obstacles qui ne nous intéressent pas, dans le cas d’un terrain dans une compétition) et ne garder qu’une ceinture de proximètres.

Pour tester la distance courte de 0 à 10 cm, on peut utiliser des capteurs Sharp IS471F ou des modules à 2€ tout fait :
- capteur de proximité IR
- nos articles sur les IS471F

 Première acquisition

Avec notre désormais indispensable oscilloscope minimal, nous pouvons remarquer les parasites qui n’épargnent pas ce capteur, et qui nécessiteront un traitement adéquat que nous présenterons ultérieurement.

PNG - 14.5 ko


// The Arduino code.

#define ANALOG_IN 0

void setup()
Serial.begin(38400) ;

void loop()
int val = analogRead(ANALOG_IN) ;
Serial.print( 0xff, BYTE) ;
Serial.print( (val >> 8) & 0xff, BYTE) ;
Serial.print( val & 0xff, BYTE) ;

 Banc de test

On va mesurer les valeurs retournées par le capteur pour les distances qui nous intéressent, et les afficher sous forme de courbe.

Pour cela, on va utiliser :
- un capteur Sharp
- une carte Arduino
- une "troisième-main"
- un pied à coulisse

PNG - 1.1 Mo
Banc de test du capteur Sharp

Le capteur Sharp est maintenu à la hauteur souhaitée par la pince crocodile de la "troisième-main", cet ustensile utilisé d’habitude pour maintenir les composants lorsqu’on soude une carte. Il faut donc vérifier que le capteur reste bien parallèle au sol.

PNG - 330.6 ko

 Les résultats

Les valeurs relevées tous les 5 ou 10 mm entre 0 et 16 cm montrent des irrégularités au début, et des écarts différents : on sait déjà que ce ne sera pas linéaire.

PNG - 4.4 ko

Lorsqu’on trace la courbe, les irrégularités sont flagrantes jusqu’à 30 mm. C’est cohérent puisque ce capteur est annoncé pour des mesures à partir de 4 cm : par contre cela signifie un traitement particulier pour ne pas se tromper. Là encore, c’est une caractéristique rarement prise en compte par les roboticiens amateurs.

PNG - 34.9 ko
Courbe des mesures

Au passage, on a reproduit par l’expérience une mesure que l’on pouvait trouver dans la datasheet du capteur.

PNG - 24.5 ko

Mais il vaut toujours mieux se convaincre en refaisant les tests. Surtout, ce banc de test devrait être conservé pour resservir lorsque le capteur sera intégré à un montage (par exemple un robot) afin de vérifier qu’il n’y a pas de problème supplémentaire et pour calibrer le traitement logiciel qu’il va falloir développer.

 Test du GP2D12 avec le convertisseur USB-I2C

Le convertisseur USB-I2C de Devantech permet également de faire des acquisitions analogiques. Avec une résistance pull-down de 390 ohms, on peut alors sans carte ni programmation supplémentaire faire l’acquisition des valeurs.

PNG - 15.1 ko
Acquisition GP2D12

J’ai fait le test avec un GP2D12 (détection 10cm à 80cm) prêté par des étudiants du CERAM Bachelors de Sophia-Antipolis. Le capteur est monté sur un berceau bien pratique QFix (disponible chez Gotronic que je n’avais jamais utilisé. Il évite les fausses manipulations avec les "oreilles" plutôt sensibles des capteurs GP2Dxx

PNG - 1.1 Mo
Connexion rapide du capteur au module Devantech.

Le programme de visualisation est écrit pour Processing, voici l’archive. Rien de bien compliqué, ça envoit la commande de lecture des 2 entrées analogiques et ensuite ça utilise le code de Sofian Audry (Oscilloscope minimal) déjà cité sur ce site.

Zip - 1.4 ko
Archive du programme de visualisation
Testé avec Processing 1.0.1

 Amélioration du capteur Sharp

Pour les versions analogiques, il est possible d’améliorer le signal en ajoutant deux condensateurs entre la masse et la tension (au plus près du capteur) : Anti-parasites pour capteur Sharp.

Vos commentaires

  • Le 17 septembre à 12:34, par sam En réponse à : Capteur de distance infra-rouge (Sharp)

    Bonjour à tous
    j’ai besoin de détecter le survol du point d’entrée d’une piste atterrissage par des aéronefs d’envergure au moins 2 m, vitesse de l’ordre de 60 à 70
    km/h, hauteur par rapport au capteur entre 4 et 9 m, décalage horizontale par rapport au centre de la piste et du capteur 3 m
    est ce qu’une solution en UltraSon serait efficace ? sachant que je souhaite seulement détecter un echo, et non pas mesurer une distance. sinon une solution optique basée sur la réflexion du signal sur le fuselage ou surtout sur les ailes (corde de 30 à 40 cm)
    merci pour vos conseils et suggestions

    • Le 16 octobre à 16:46, par Eric P. En réponse à : Capteur de distance infra-rouge (Sharp)

      Une solution à base d’ultra-sons sera beaucoup trop perturbée par l’environnement ambiant, ne serait-ce que par les harmoniques générées par les vibrations mécaniques de l’appareil.
      Quant à la réflexion d’un signal lumineux sur l’avion, c’est aléatoire compte-tenu que selon l’orientation de la normale à la surface au point d’incident, la réflexion risque fort de ne pas revenir au récepteur. Sans parler des variations induites par la nature de la surface au point d’incidence.
      Ou alors il faut recourir à des solutions techniques industrielles, hors de portée du budget d’un amateur. Et dans ce cas autant acheter un télémètre laser et en récupérer les mesures. Mais attention au compte en banque ;)

    Répondre à ce message

  • Le 13 février 2013 à 19:26, par Nico En réponse à : Capteur de distance infra-rouge (Sharp)

    Bonjour,
    je suis en train de concevoir un scanner 3D piloté par Arduino. Pour un prix raisonnable, je recherche le meilleur capteur de distance possible. Étant tombé sur cette page, je voulais connaître un ordre de grandeur pour la précision d’un capteur infrarouge comme celui-ci. Je souligne le fait que je ne m’intéresse qu’à des capteurs à courte portée (5cm-80cm par exemple).
    Étrangement, cette information semble difficile à obtenir.
    Merci beaucoup !

    Nico

    • Le 13 février 2013 à 22:37, par Julien H. En réponse à : Capteur de distance infra-rouge (Sharp)

      Bonjour, ce n’est pas un capteur précis : parasites, incidence de la lumière.

      La solution la plus simple et la plus économique est la caméra + le pointeur laser.

    Répondre à ce message

  • Le 10 mars 2012 à 09:11, par electricircus En réponse à : Capteur de distance infra-rouge (Sharp)

    Bonjour,

    je vous cite : "par contre cela signifie un traitement particulier pour ne pas se tromper. Là encore, c’est une caractéristique rarement prise en compte par les roboticiens amateurs."

    Auriez-vous une formule à intégrer dans un code C++ pour arduino, pour pallier à ce problème ?

    Merci d’avance

    Hervé
    "electricircus" (sur le forum arduino français)

    • Le 11 mars 2012 à 00:12, par Julien H. En réponse à : Capteur de distance infra-rouge (Sharp)

      Bonjour,

      Si c’était si simple... le traitement n’est pas dans la lecture logicielle, mais dans le placement physique du capteur, dans l’utilisation faite de la valeur lue, etc...

      Si on n’arrive pas à mettre le capteur a une distance minimum suffisante des obstacles pour être au-dessus de la zone précédant alors il faut ruser.

      La meilleure solution est de mettre un second capteur sous un autre angle, qui verra le même obstacle mais depuis une autre distance. Ainsi la lecture en-dessous du pic n’est pas possible pour les deux capteurs en même temps.

      L’autre solution est de se souvenir des lectures précédentes, et de corréler la lecture avec les autres actions en cours.

      Par exemple si on a des obstacles fixes et un robot qui se déplace, alors si le robot avance et que la valeur du capteur baisse, c’est qu’on n’est dans la première zone (avant le pic). Si le robot recule et que la valeur du capteur baisse, c’est qu’on n’est dans la seconde zone (après le pic).

    • Le 11 mars 2012 à 01:31, par electricircus En réponse à : Capteur de distance infra-rouge (Sharp)

      Bonsoir Julien,

      Ok ! pigé !!

      En attendant, j’ai trouvé un lien pour une soluce en code...
      Testée sur mon bot, mais pas approuvée.
      La formule donne bien une distance,mais...
      (le "65" du "float distance" dépend du modèle de capteur, "46" pour moi, modèle GP2YOA21)

      Merci
      Amicalement

      @+
      Hervé

    Répondre à ce message

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici
  • Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document