Mesure de distance infrarouge avec le Raspberry Pi (Sharp GP2Y0A02YK0F)

Il existe des capteurs de distance infrarouge du fabricant Sharp, qui peuvent être utilisés très simplement avec le Raspberry Pi. Il existe différents télémètres, qui couvrent différentes plages de distance. Ces modules fonctionnent de manière similaire aux télémètres laser, mais avec une lumière infrarouge. Là, la lumière groupée est émise par un émetteur et une tension analogique est transmise à travers un récepteur sur la base de l’angle d’incidence, moyennant quoi la distance peut être calculée.

Dans ce didacticiel, le capteur de distance GP2Y0A02YK0F montre comment une distance peut être déterminée. Cela peut être utile, par exemple dans la voiture comme PC de voiture (distance de la caméra de recul), comme voiture robot ou dans le cadre de la domotique.

Matériels requis – Capteurs de distance

L'émetteur IR est situé sur le

L’émetteur IR est situé sur le côté «en retrait» (à droite).

Dans l’ensemble, Sharp propose plusieurs mesures de distance dans l’offre, où il convient de rechercher individuellement celle qui convient à la tâche. Ce tutoriel est conçu pour le Sharp GP2Y0A02YK0F, qui convient aux plages de 20 cm à 150 cm. Les distances en dehors de cette plage ne sont pas mesurées correctement.
Les modules suivants sont disponibles:

Si vous utilisez un capteur autre que le GP2Y0A02YK0F, vous devrez peut-être ajuster les étapes. Les fiches techniques sont disponibles sur la page d’accueil de Sharp.

Vous aurez également besoin des éléments suivants:

Utilisation du capteur de distance infrarouge

Ce capteur IR a besoin d’une tension d’entrée comprise entre 4,5V et 5,5V, il peut donc parfaitement fonctionner avec le 5V du Raspberry Pi. Selon le Fiche technique, une tension différente est appliquée à la broche de données, selon la distance de l’objet mesuré par le capteur. Ceci est visible dans le graphique suivant:

gp2y0a02yk

Sur la base de la tension, la distance entre environ 15 cm et 150 cm peut être calculée de manière relativement précise.

Connexion du MCP3008

mcp3008-e1397762478714

Étant donné que la tension de sortie est analogique, nous devons d’abord la «traduire» avec un convertisseur analogique-numérique, afin de pouvoir l’évaluer avec le Raspberry Pi. Cela fonctionne mieux avec un ADC MCP3008.

Cet appareil est contrôlé via le bus SPI du Pi et dispose de huit canaux vers lesquels les tensions analogiques peuvent être converties. Celles-ci sont divisées en 2 ^ 20 donc 1024 zones (0-1023). Si le MCP3008 est connecté à 3,3 V, un signal de 1 signifie 0,00322 V (3,22 mV). Étant donné que le bus SPI du Raspberry Pi fonctionne sur 3,3 V, aucune alimentation supplémentaire ne doit être appliquée, sinon les GPIO peuvent être endommagés.

L’ensemble du circuit ressemble à ceci:

sharp_GP2Y0A02YK0F_breadboard

Raspberry PI MCP3008
Broche 1 (3,3 V) Broche 16 (VDD)
Broche 1 (3,3 V) Broche 15 (VREF)
Broche 6 (GND) Broche 14 (AGND)
Broche 23 (SCLK) Broche 13 (CLK)
Broche 21 (MISO) Broche 12 (DOUT)
Broche 19 (MOSI) Broche 11 (DIN)
Broche 24 (CE0) Broche 10 (CS / SHDN)
Broche 6 (GND) Broche 9 (DGND)

Le capteur de distance n’a que trois connexions: rouge (5V), noir (GND) et jaune, qui est la broche de données et connecté au MCP3008 ADC. Pour certains, les sonneries d’alarme peuvent sonner et demander pourquoi un module 5V est connecté directement, bien que le bus SPI du Pi ne doive pas recevoir plus de 3,3V d’entrée. La fiche technique indique que la tension de sortie du capteur ne dépasse jamais 3V (voir graphique de la fiche technique). Quiconque a peur que quelque chose puisse arriver au Pi peut mettre un diviseur de tension avec 2 résistances devant, mais cela réduit la précision et ma formule utilisée devrait également être recalculée. Dans mes tests, il n’a jamais atteint des tensions supérieures à 2,7 V (GP2Y0A02YK0F). Cela peut différer pour les autres capteurs Sharp.

Logiciel pour lire la distance

Pour contrôler le MCP3008, le bus SPI doit être activé. Cela fonctionne comme suit:

sudo raspi-config

“8 Options avancées” -> “A6 SPI” -> “Oui”.
Après cela, vous devez confirmer le redémarrage.

Dans certains cas, le module (spi-bcm2708) doit également être entré dans le fichier / etc / modules. Pour ce simple appel

sudo nano /etc/modules

et ajoutez la ligne suivante à la fin (si elle n’existe pas):

Maintenant, la bibliothèque spidev peut être installée, si ce n’est déjà fait:

sudo apt-get install git python-dev
git clone git://github.com/doceme/py-spidev
cd py-spidev/
sudo python setup.py install

Maintenant que nous avons tous les packages nécessaires installés, nous pouvons créer le script pour mesurer la distance.

sudo nano ir_distance.py

Le script a le contenu suivant:

Nous pouvons le faire maintenant avec (sudo python ir_distance.py), après avoir visé un objet, la distance est sortie.

Que se passe-t-il exactement ici? Tout d’abord, la valeur analogique (entre 0 et 1023) est lue (ligne 15). Cependant, comme nous voulons connaître la tension, la valeur est divisée par 1023 et multipliée par 3,3 (volts).

Attention: Dans ce cas, nous savons (selon la fiche technique) que la tension de sortie ne dépasse jamais 2,8V, bien que nous alimentions le capteur en 5V. D’autres modules (analogiques et numériques) renvoient souvent des signaux avec des tensions aussi élevées que la tension appliquée. Sinon, vous risquez d’endommager le Raspberry Pi.

À la ligne 16 du script, je calcule la tension en centimètres. J’ai trouvé la formule ici et l’a adapté un peu. Pour cela, j’ai testé différentes distances et modifié un peu les facteurs afin que la distance calculée soit la plus précise possible. Comme je l’ai mentionné au début, cette formule ne concerne que le capteur Sharp GP2Y0A02YK0F. Étant donné que les autres capteurs fournissent des signaux analogiques dans la même plage, cette formule doit être ajustée pour les capteurs correspondants (si quelqu’un le fait, je serais heureux s’il le publie ci-dessous).
Alternativement, on peut également interpoler entre les zones (fiche technique) en stockant tous les indices (volts, distance) et en lisant la valeur spécifique et en calculant la distance à la tension mesurée en utilisant une interpolation linéaire.

Tôt ou tard, je devrai fixer un tel module à l’intérieur de la lunette arrière de ma voiture et avoir un télémètre lors du stationnement en marche arrière – si quelqu’un ne sait pas encore ce qu’il peut en faire 😉

Articles similaires

Bouton retour en haut de la page
Fermer