Lektion 74: Verwendung eines scharfen Infrarot-Sensormoduls mit Arduino
Einführung
Diese Anleitung zeigt, wie Sie zwei oder mehr Sharp-Infrarot-(IR)-Distanzsensoren mit einem Arduino verwenden, um Entfernungen zu messen und die Ergebnisse im seriellen Monitor anzuzeigen. Während ein einzelner Sensor nützlich ist, erfordern viele reale Anwendungen, wie ein intelligentes Auto, ein Roboterarm oder jede andere bewegliche Maschine, Entfernungsmessungen aus mehreren Richtungen gleichzeitig. Zum Beispiel könnten Sie einen Sensor vorne installieren, um die Entfernung nach vorne zu messen, und einen weiteren auf der rechten oder linken Seite, um Kollisionen zu vermeiden. Dieses Tutorial zeigt Ihnen, wie Sie Ihren Arduino konfigurieren, um mehrere Sensoren effizient zu verwalten, und baut auf einem separaten, detaillierten Video auf, das die Spezifikationen und den Betrieb des einzelnen Sensors erklärt.
Hier sind ein paar praktische Projektideen, um Sie zu inspirieren:
- Einen Roboter bauen, der Hindernissen ausweicht, indem er Entfernungen auf seiner linken, rechten und vorderen Seite misst.
- Einen intelligenten Parkassistenten erstellen, der mehrere Sensoren verwendet, um ein Fahrzeug in eine enge Parklücke zu führen.
- Ein Sicherheitssystem entwickeln, das einen Durchgang oder Korridor mit Sensoren überwacht, die in verschiedenen Winkeln platziert sind.
- Eine interaktive Kunstinstallation erstellen, bei der die Entfernung der Hand eines Betrachters die Anzeige verändert.

In diesem Video liegt der Fokus auf der Verkabelung und dem Code, die benötigt werden, um mehrere Sharp-IR-Sensoren zu betreiben. Die Demonstration verwendet zwei GP2Y0A21YK0F-Sensoren, die Entfernungen von 10 bis 80 cm messen. Der Code ist so strukturiert, dass er leicht erweiterbar ist, sodass Sie mit nur wenigen Codezeilen einen dritten, vierten oder sogar weitere Sensoren hinzufügen können.
Hardware und Komponenten
Um diesem Projekt zu folgen, benötigen Sie die folgenden Komponenten:
- Ein Arduino-Board (z. B. Uno, Mega).
- Zwei oder mehr Sharp-IR-Distanzsensoren (z. B. GP2Y0A21YK0F).
- Jumper-Kabel.
- Ein Steckbrett (optional, für einfachere Verbindungen).
Verkabelungsanleitung
Der Sharp-IR-Sensor hat drei Drähte: rot (Strom), schwarz (Masse) und gelb (Signalausgang). Die Verkabelung ist unkompliziert. Für den ersten Sensor verbinden Sie seinen roten Draht mit dem 5V-Pin des Arduino, den schwarzen Draht mit einem Masse-(GND)-Pin und den gelben Signaldraht mit einem analogen Pin, zum Beispiel A1. Für den zweiten Sensor verbinden Sie seinen roten Draht mit demselben oder einem anderen 5V-Pin, den schwarzen Draht mit GND und den gelben Draht mit einem anderen analogen Pin, wie A2.
Wenn Ihnen die 5V-Pins ausgehen, bietet das Video eine clevere Lösung. Sie können jeden digitalen Pin als Stromquelle verwenden. Im Code wird digitaler Pin 2 als Ausgang konfiguriert und auf HIGH gesetzt, was konstante 5V liefert. Sie würden dann die roten Drähte Ihrer Sensoren mit diesem digitalen Pin verbinden, anstatt mit dem dedizierten 5V-Pin. Die Masse-Drähte können mit jedem der GND-Pins auf dem Arduino verbunden werden. Das Video zeigt eine Demonstration dieses Aufbaus bei [00:06:10].
Für eine visuelle Referenz der Verbindungen beachten Sie bitte das folgende Schaltbild:



Code-Erklärung
Dieser Abschnitt konzentriert sich auf die benutzerkonfigurierbaren Teile des Codes, die sich alle am Anfang des Sketches befinden. Hier definieren Sie Ihre Pins und Sensormodelle.
Zuerst enthält der Code die notwendige Bibliothek für die Sharp-IR-Sensoren, #include <SharpIR.h>. Diese Bibliothek übernimmt die komplexe Mathematik, die erforderlich ist, um die analoge Spannung des Sensors in eine Entfernungsmessung umzuwandeln.
Als Nächstes definieren Sie die analogen Pins für jeden Ihrer Sensoren. Der Beispielcode verwendet #define IR1 A1 und #define IR2 A2. Wenn Sie mehr als zwei Sensoren verwenden, würden Sie hier weitere Definitionen hinzufügen, wie #define IR3 A3.
Ein entscheidender Teil der Konfiguration ist das Festlegen des korrekten Modells für Ihren Sensor. Der Code verwendet #define model1 1080 und #define model2 1080. Diese Zahl ist nicht willkürlich; sie teilt der Bibliothek mit, welchen Sensor Sie haben, da jedes Modell eine andere Spannungs-zu-Entfernungs-Kurve hat. Die Code-Kommentare bieten eine hilfreiche Liste:
- 2 bis 15 cm GP2Y0A51SK0F verwenden 215
- 4 bis 30 cm GP2Y0A41SK0F / GP2Y0AF30-Serie verwenden 430
- 10 bis 80 cm GP2Y0A21YK0F verwenden 1080
- 10 bis 150 cm GP2Y0A60SZLF verwenden 10150
- 20 bis 150 cm GP2Y0A02YK0F verwenden 20150
- 100 bis 550 cm GP2Y0A710K0F verwenden 100550
Sie müssen diesen Wert ändern, damit er zu Ihrem spezifischen Sensor passt. Wenn Sie zum Beispiel einen GP2Y0A02YK0F verwenden, würden Sie die Definition zu #define model1 20150 ändern. Der Code erstellt dann ein Objekt für jeden Sensor, wie SharpIR SharpIR1(IR1, model1);. Diese Zeile verbindet Pin und Modell für den ersten Sensor. Wenn Sie weitere Sensoren hinzufügen, würden Sie diese Zeile kopieren und den Objektnamen, Pin und das Modell entsprechend ändern.
In der setup()-Funktion wird der serielle Monitor mit 9600 Baud initialisiert. Dies ist die Geschwindigkeit, mit der der Arduino mit Ihrem Computer kommuniziert. Der Code enthält auch einen Abschnitt, um bei Bedarf einen digitalen Pin als 5V-Quelle zu verwenden, wie im Verkabelungsabschnitt erklärt. Dies erfolgt mit pinMode(2,OUTPUT); und digitalWrite(2, HIGH);.
Schließlich enthält die loop()-Funktion die Hauptlogik. Am Anfang gibt es ein delay(500);, das die Zeit zwischen jedem Satz von Messwerten auf 500 Millisekunden setzt. Sie können dies anpassen, um die Messwerte mehr oder weniger häufig zu machen. Der Kern der Schleife besteht darin, die Entfernung von jedem Sensor mit der distance()-Funktion der Bibliothek zu lesen, wie int dis1=SharpIR1.distance();. Die Ergebnisse werden dann mit beschreibendem Text auf dem seriellen Monitor ausgegeben, wie Serial.print("Distance (1): ");, gefolgt von dem Wert und der Einheit "cm".
Live-Projektdemonstration
Im Video demonstriert der Moderator den Aufbau mit zwei Sensoren. Wie in der Demonstration bei [00:07:44] zu sehen ist, zeigt der Serielle Monitor die Distanzmesswerte beider Sensoren an. Wenn ein Objekt vor den ersten Sensor gehalten wird, ändert sich der Messwert für „Distance (1)". Wenn ein Objekt vor den zweiten Sensor gehalten wird, aktualisiert sich der Messwert für „Distance (2)". Das Video zeigt, dass die Sensoren bei einem in einiger Entfernung gehaltenen Blatt Papier ungefähr 23 und 24 cm messen. Wenn ein Sensor blockiert wird, sinkt sein Messwert auf etwa 17 cm, was bestätigt, dass jeder Sensor unabhängig arbeitet und Echtzeit-Distanzdaten für seine jeweilige Richtung liefert. Dies validiert die Fähigkeit des Codes, mehrere Sensoren gleichzeitig zu verarbeiten.
Kapitel
- [00:00] Einführung in die Verwendung mehrerer Sharp-IR-Sensoren
- [00:28] Anwendungen für mehrere Distanzsensoren
- [01:34] Code-Erklärung: Bibliotheks- und Pin-Definitionen
- [02:24] Konfiguration von Sensormodellen und Erstellung von Objekten
- [04:15] Setup- und Loop-Funktionen erklärt
- [06:10] Verdrahtungsanleitung für mehrere Sensoren
- [07:44] Live-Demonstration mit zwei Sensoren
++
/*
* Using two or more Sharp IR distance sensors with Arduino
* Measure distance
* Download and resource page for this video https://robojax.com/RJT143
* Watch video instructions for this video: https://youtu.be/WQ3oFyF5qeY
*
* Watch main video explaining the Sharp IR distance sensor:
* https://robojax.com?vid=robojax-sharp_IR
*
* Written by Ahmad Shamshiri for Robojax.com on Saturday, December 1, 2018
* at 20:56 in Ajax, Ontario, Canada
*
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <SharpIR.h>
#define IR1 A1 // define signal pin
#define IR2 A2 // define signal pin
#define model1 1080 // for GP2Y0A21YK0F used 1080
#define model2 1080 // for GP2Y0A21YK0F used 1080
// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
/*
2 to 15 cm GP2Y0A51SK0F use 215
4 to 30 cm GP2Y0A41SK0F / GP2Y0AF30 series use 430
10 to 80 cm GP2Y0A21YK0F use 1080
10 to 150 cm GP2Y0A60SZLF use 10150
20 to 150 cm GP2Y0A02YK0F use 20150
100 to 550 cm GP2Y0A710K0F use 100550
*/
SharpIR SharpIR1(IR1, model1);
SharpIR SharpIR2(IR2, model2);
void setup() {
// Multiple Sharp IR Distance meter code for Robojax.com
Serial.begin(9600);
Serial.println("Robojax Sharp IR ");
// extra pin for 5V if needed
pinMode(2,OUTPUT);// define pin 2 as output
digitalWrite(2, HIGH);// set pin 2 HIGH so it always have 5V
// Robojax.com 20181201
}
void loop() {
// Sharp IR code for Robojax.com 20181201
delay(500);
unsigned long startTime=millis(); // takes the time before the loop on the library begins
int dis1=SharpIR1.distance(); // this returns the distance for sensor 1
int dis2=SharpIR2.distance(); // this returns the distance for sensor 2
// Sharp IR code for Robojax.com 20181201
Serial.print("Distance (1): ");
Serial.print(dis1);
Serial.println("cm");
Serial.print("Distance (2): ");
Serial.print(dis2);
Serial.println("cm");
// Sharp IR code for Robojax.com
}
++
/*
* Lesson 74: Using two or more Sharp IR distance sensors
* Sharp IR (infrared) distance measurement module for Arduino
* Measures the distance in cm.
* Written by Ahmad Shamshiri for Robojax.com
* on February 25, 2019 at 21:38 in Ajax, Ontario, Canada
* Original library: https://github.com/guillaume-rico/SharpIR
* Watch video instructions for this code: https://youtu.be/WQ3oFyF5qeY
*
* Full explanation of this code and wiring diagram is available at
* my Arduino Course at Udemy.com here: http://robojax.com/L/?id=62
* Written by Ahmad Shamshiri on February 3, 2018 at 07:34
* in Ajax, Ontario, Canada. www.robojax.com
*
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or make a donation using PayPal http://robojax.com/L/?id=64
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
*/
// Sharp IR code for Robojax.com
#include
#define IR A0 // define signal pin
#define model 1080 // used 1080 because model GP2Y0A21YK0F is used
// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
// model: an int that determines your sensor: 1080 for GP2Y0A21Y
// 20150 for GP2Y0A02Y
// 430 for GP2Y0A41SK
/*
2 to 15 cm GP2Y0A51SK0F use 1080
4 to 30 cm GP2Y0A41SK0F / GP2Y0AF30 series use 430
10 to 80 cm GP2Y0A21YK0F use 1080
10 to 150 cm GP2Y0A60SZLF use 10150
20 to 150 cm GP2Y0A02YK0F use 20150
100 to 550 cm GP2Y0A710K0F use 100550
*/
#include <SharpIR.h>
#define IR1 A1 // define signal pin
#define IR2 A2 // define signal pin
#define model1 1080 // for GP2Y0A21YK0F used 1080
#define model2 1080 // for GP2Y0A21YK0F used 1080
// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
/*
2 to 15 cm GP2Y0A51SK0F use 215
4 to 30 cm GP2Y0A41SK0F / GP2Y0AF30 series use 430
10 to 80 cm GP2Y0A21YK0F use 1080
10 to 150 cm GP2Y0A60SZLF use 10150
20 to 150 cm GP2Y0A02YK0F use 20150
100 to 550 cm GP2Y0A710K0F use 100550
*/
SharpIR SharpIR1(IR1, model1);
SharpIR SharpIR2(IR2, model2);
void setup() {
// Multiple Sharp IR Distance meter code for Robojax.com
Serial.begin(9600);
Serial.println("Robojax Sharp IR ");
// extra pin for 5V if needed
pinMode(2,OUTPUT);// define pin 2 as output
digitalWrite(2, HIGH);// set pin 2 HIGH so it always have 5V
// Robojax.com 20181201
}
void loop() {
// Sharp IR code for Robojax.com 20181201
delay(500);
unsigned long startTime=millis(); // takes the time before the loop on the library begins
int dis1=SharpIR1.distance(); // this returns the distance for sensor 1
int dis2=SharpIR2.distance(); // this returns the distance for sensor 2
// Sharp IR code for Robojax.com 20181201
Serial.print("Distance (1): ");
Serial.print(dis1);
Serial.println("cm");
Serial.print("Distance (2): ");
Serial.print(dis2);
Serial.println("cm");
// Sharp IR code for Robojax.com
}
Ressourcen & Referenzen
-
ExternEntfernungsmessende Sensoren (Website)sharp-world.com
-
ExternSharp IR-Bibliothek (von GitHub)github.com
-
ExternSharp Library von RoboJob.comrobojax.com
Dateien📁
Fritzing-Datei
-
scharfer Infrarotsensor GP2Y0A02YK0F
sharp ir sensor GP2Y0A02YK0F .fzz
Andere Dateien
-
Sharp GP2Y0A41SK0F Infrarot-Abstandssensor Datenblatt
robojax_sharp_IR_GP2Y0A41SK0F_datasheet.pdf0.84 MB -
Sharp GP2Y0A710K0F Infrarot-Abstandssensor-Datenblatt
robojax_sharp_IR_GP2Y0A710K0F_datasheet.pdf0.33 MB -
Arduino-Bibliothek für den Sharp-Infrarot-Abstandssensor
robojax-sharp_IR-master.zip