Der SHARP GP2Y0A21YK0F ist ein einfach zu verwendender IR-Abstandssensor mit einer Reichweite von 10 – 80 cm. Er ist ein großartiger Sensor für autonome Roboter oder berührungslose optische Schalter.
In diesem Tutorial lernst du, wie der Sensor funktioniert und wie du ihn mit Arduino verwendest. Ich habe ein Schaltbild und Beispielcode beigefügt, damit du direkt mit deinem Sensor experimentieren kannst.
Benötigte Teile

GP2Y0A21YK0F Abstandssensor

Arduino Uno

USB-Kabel für Arduino UNO

Dupont-Kabelsatz

Breadboard

Kondensator(≥10 µF)
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Wie funktioniert ein IR-Abstandssensor?
Ein IR-Abstandssensor verwendet einen Infrarotlichtstrahl, der von einem Objekt reflektiert wird, um dessen Entfernung zu messen. Die Entfernung wird durch Triangulation des Lichtstrahls berechnet. Der Sensor besteht aus einer IR-LED und einem Lichtsensor oder PSD (Position Sensing Device). Wenn der Lichtstrahl von einem Objekt reflektiert wird, erreicht der reflektierte Strahl den Lichtsensor und ein „optischer Fleck“ bildet sich auf dem PSD.

Wenn sich die Position des Objekts ändert, ändern sich auch der Winkel des reflektierten Strahls und die Position des Flecks auf dem PSD. Siehe Punkt A und Punkt B im Bild unten.

Der Sensor verfügt über eine eingebaute Signalverarbeitungsschaltung. Diese Schaltung verarbeitet die Position des optischen Flecks auf dem PSD, um die Position (Entfernung) des reflektierenden Objekts zu bestimmen. Sie gibt ein analoges Signal aus, das von der Position des Objekts vor dem Sensor abhängt.
Wie liest man einen IR-Abstandssensor aus?
IR-Abstandssensoren geben ein analoges Signal aus, das sich je nach Abstand zwischen Sensor und Objekt ändert. Aus dem Datenblatt geht hervor, dass die Ausgangsspannung des SHARP GP2Y0A21YK0F von 2,3 V bei 10 cm Abstand bis 0,4 V bei 80 cm Abstand reicht. Das Diagramm zeigt auch, warum der nutzbare Erfassungsbereich bei 10 cm beginnt. Beachte, dass die Ausgangsspannung bei einem Objekt in 2 cm Entfernung gleich der Ausgangsspannung bei 28 cm Entfernung ist. Der nutzbare Erfassungsbereich beginnt daher nach dem Maximum bei etwa 10 cm oder 2,3 V.

Das Diagramm zeigt auch den Nachteil dieser Sensoren: Die Reaktion ist nicht linear. Mit anderen Worten, eine große Änderung der Ausgangsspannung entspricht nicht immer einer großen Änderung der Entfernung. Um die Entfernung zwischen Sensor und Objekt zu bestimmen, muss eine Funktion gefunden werden, die die Ausgangsspannung in einen Entfernungswert umwandelt.
Dies kann mit MS Excel gemacht werden und ergibt folgende Formel für Entfernungen > 10 cm:
Entfernung (cm) = 29.988 X POW(Volt , -1.173)
Dies ist die Funktion, die in der SharpIR-Bibliothekverwendet wird, die wir später nutzen werden. Beachte, dass diese Funktion nur auf Daten aus dem SHARP-Datenblatt basiert. Die Ausgangscharakteristik des Sensors variiert leicht von Sensor zu Sensor, daher können die Messwerte ungenau sein.
Wenn du die Genauigkeit deiner Messungen verbessern möchtest, kannst du viele Datenpunkte messen und in Excel auftragen und eine Kurve durch diese Punkte legen. Sobald du eine neue Funktion für deinen spezifischen Sensor hast, musst du die Formel in der Datei SharpIR.cpp anpassen.
GP2Y0A21YK0F Spezifikationen
| Betriebsspannung | 4,5 bis 5,5 V |
| Betriebsstrom | 30 mA |
| Messbereich | 10 bis 80 cm |
| Ausgangstyp | Analog |
| Abmessungen | 29,5 x 13 x 13,5 mm |
| Befestigungslöcher | 2x 3,2 mm, 37 mm Abstand |
| Kosten | Check price |
Weitere Informationen findest du im Datenblatt hier.
Anschluss des GP2Y0A21YK0F IR-Sensors an Arduino
Das folgende Schaltbild zeigt, wie du den GP2Y0A21YK0F IR-Abstandssensor an einen Arduino anschließt.

Diese Art von Abstandssensoren neigt zu Störungen, daher wird empfohlen, einen Kondensator zwischen Vcc und GND zu schalten. Das Datenblatt empfiehlt einen Kondensator von 10 µF oder mehr (ich habe 220 µF verwendet). Verbinde den positiven Anschluss des Kondensators mit der Vcc-Leitung und den negativen Anschluss mit der GND-Leitung (siehe Bild). Kondensatoren sind oft mit einem Streifen markiert, der den negativen Anschluss anzeigt. Der positive Anschluss ist oft länger als der negative.
GP2Y0A21YK0F Anschlüsse
| GP2Y0A21YK0F | Arduino |
|---|---|
| 1 (Gelb) | A0 |
| 2 (Schwarz) | GND |
| 3 (Rot) | 5V |
Wenn dein Sensor andere Kabel-Farben hat, überprüfe unbedingt das Pinout unten. Der Vo-Pin ist mit dem analogen Eingang des Arduino (A0) verbunden.

Nachdem du den Sensor angeschlossen hast, schauen wir uns nun Beispielcode an.
Installation der SharpIR Arduino-Bibliothek
Die SharpIR Bibliothek, geschrieben von Guillaume Rico und Thibaut Mauon, erleichtert die Arbeit mit SHARP IR-Sensoren erheblich. Sie enthält die Formeln, die benötigt werden, um die gemessene Ausgangsspannung in eine Entfernung in Zentimetern umzuwandeln. Aktuell unterstützt die Bibliothek folgende Sensoren: GP2Y0A02YK0F, GP2Y0A21YK0F, GP2Y0A710K0F und GP2YA41SK0F. Die neueste Version der Bibliothek kann auf GitHub heruntergeladen werden oder klicke auf den Button unten.
Du kannst die Bibliothek installieren, indem du in der Arduino IDE zu Sketch > Include Library > Add .ZIP Library gehst.

Der Autor der Bibliothek hat festgestellt, dass die Messwerte des Sensors stark schwanken können. Die Bibliothek löst dieses Problem, indem sie mehrere Messwerte hintereinander nimmt, Ausreißer verwirft und den Mittelwert bildet, um eine stabilere Entfernungsanzeige zu erhalten. Aktuell nimmt die Bibliothek den Mittelwert von 25 Messungen, was etwa 53 ms dauert.
Beispielcode für SHARP GP2Y0A21YK0F IR-Abstandssensor mit Arduino
Der Beispielcode unten kann mit dem GP2Y0A21YK0F Sensor verwendet werden und zeigt die gemessene Entfernung in Zentimetern im seriellen Monitor an.
Du kannst den Code kopieren, indem du auf den Button oben rechts im Codefeld klickst.
/*SHARP GP2Y0A21YK0F IR distance sensor with
Arduino and SharpIR library example code.
More info: https://www.makerguides.com */
// Include the library:
#include "SharpIR.h"
// Define model and input pin:
#define IRPin A0
#define model 1080
// Variable to store the distance
int distance_cm;
/* Model :
GP2Y0A02YK0F --> 20150
GP2Y0A21YK0F --> 1080
GP2Y0A710K0F --> 100500
GP2YA41SK0F --> 430
*/
// Create a new instance of the SharpIR class:
SharpIR mySensor = SharpIR(IRPin, model);
void setup() {
// Serial communication at a baudrate of 9600
Serial.begin(9600);
}
void loop() {
// Get a distance measurement and store it as distance_cm
distance_cm = mySensor.distance();
// Print the measured distance to the serial monitor
Serial.print("Mean distance: ");
Serial.print(distance_cm);
Serial.println(" cm");
delay(1000);
}
Beachte, dass wir den Sensor in diesem Beispiel mySensorgenannt haben. Wenn du mehrere IR-Abstandssensoren verwenden möchtest, kannst du ein weiteres Sensorobjekt mit einem anderen Namen erstellen: SharpIR mySensor2 = SharpIR(IRPin2, model); Beachte, dass du in diesem Fall auch einen anderen Eingangspin für den zweiten Sensor verwenden musst.
Im seriellen Monitor (Strg + Shift + M) solltest du folgende Ausgabe erhalten:

Fazit
In diesem Artikel habe ich dir gezeigt, wie der SHARP GP2Y0A21YK0F IR-Abstandssensor funktioniert und wie du ihn mit Arduino verwenden kannst.
Wenn du nach einem günstigeren oder wasserdichten Abstandssensor suchst, schau dir den HC-SR04 oder JSN-SR04T an. In den untenstehenden Artikeln erkläre ich, wie diese Abstand-/Nähe-Sensoren funktionieren und wie du sie mit Arduino nutzen kannst.
- How to use an HC-SR04 Ultrasonic Distance Sensor with Arduino
- Waterproof JSN-SR04T Ultrasonic Distance Sensor with Arduino Tutorial
- How to use a SHARP GP2Y0A710K0F IR Distance Sensor with Arduino
- TOF10120 Distance Sensor with Arduino
- VL53L1X/TOF400C Distance Sensor with Arduino
- VL53L0X Distance Sensor with Arduino
Wenn du Fragen, Vorschläge hast oder denkst, dass in diesem Tutorial etwas fehlt, hinterlasse bitte einen Kommentar unten.

