Mesure de distance précise avec une Arduino et un capteur Sharp GP2Y0A21YK

Le but de cet article est d’expliquer comment convertir la tension des capteurs d'un distance Sharp GP2Y0A21YK en une mesure de distance précise. Ce capteur utilise la technique de la triangulation pour estimer une distance comprise entre 10 et 80cm.

Campagne de mesures

Un relevé des mesures a été réalisé avec un pas de 10 mm. Le graphique suivant montre la sortie du capteur GP2Y0A21YK en fonction de la distance. Comme cela est stipulé dans la documentation, le capteur ne peut pas effectuer de mesure en dessous de 10 cm. Cette plage de distance est difficilement utilisable car il est impossible de lever les ambiguïtés.

Valeur du convertisseur ADC en fonction de la distance avec le capteur de distance Sharp GP2Y0A21YK

Approximation polynômiale

Grâce à la fonction polyfit de Matlab, la courbe a été approximée avec un polynôme d’ordre 4. L’approximation couvrant la plage de 1,5 cm à 80 cm est illustrée ci-dessous :

Approximation polynômiale de la distance pour le capteur Sharp GP2Y0A21YK

Résultats

L’approximation pour le capteur GP2Y0A21YK est donné par l’équation ci-dessous. ADC est la valeur brute retournée par la fonction analogRead() disponible dans les bibliothèques Arduino.

$$ Distance = 200.3775040589502 \\ - 2.2657665648980.ADC \\ + 0.0116395328796 .ADC^2 \\ -0.0000299194195.ADC^3 \\ + 0.0000000374087 .ADC^4 \\ - 0.0000000000181.ADC^5 $$

En s’appuyant sur ces résultats, une fonction C++ peut facilement être écrite afin de retourner la distance :

/*!
    \brief  make a distance measurement with a Sharp GP2Y0A21YK sensor
    \return the measured distance in mm

*/
float get_Sharp_GP2Y0A21YK_Distance(int PinID)
{
    // Read analog to digital converter value
    float ADCValue = (float)analogRead(PinID);

    // Convert in millimeters and return distance
    return  200.3775040589502
            - 2.2657665648980 * ADCValue
            + 0.0116395328796 * ADCValue * ADCValue
            - 0.0000299194195 * ADCValue * ADCValue * ADCValue
            + 0.0000000374087 * ADCValue * ADCValue * ADCValue * ADCValue
            - 0.0000000000181 * ADCValue * ADCValue * ADCValue * ADCValue * ADCValue;
}

Téléchargements

Fichiers Excel, images, données brutes et script Matlab peuvent être téléchargés ici:

SHARP_Distance_Sensors.zip

Voir aussi


Dernière mise à jour : 11/06/2018