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).
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 :
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.
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).
[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.
// 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
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.
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.
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.
Au passage, on a reproduit par l’expérience une mesure que l’on pouvait trouver dans la datasheet du capteur.
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.
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
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.
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.