Suchcode

Lektion 74: Verwendung eines scharfen Infrarot-Sensormoduls mit Arduino

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.
Sharpt IR distance sensor

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:

Arduino wiring for multiple Sharp IR distance sensors
Arduino wiring for multiple Sharp IR distance sensors
Arduino wiring for Sharf IR distance sensor
Arduino wiring for Sharf IR distance sensor
Arduino wiring for Sharp IR sensor with LCD1602
Arduino wiring for Sharp IR sensor with LCD1602

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

Bilder

Sharpt IR distance sensor GP2Y0A21YK0F
Sharpt IR distance sensor GP2Y0A21YK0F
Arduino wiring for multiple Sharp IR distance sensors
Arduino wiring for multiple Sharp IR distance sensors
Arduino wiring for Sharf IR distance sensor
Arduino wiring for Sharf IR distance sensor
Sharpt IR distance sensor
Sharpt IR distance sensor GP2Y0A21YK0F
Arduino wiring for Sharp IR sensor with LCD1602
Arduino wiring for Sharp IR sensor with LCD1602
176-Using a Sharp IR sensor module with Arduino
Sprache: C++
++
/*
 * 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
     
}
452-Lesson 74: Using Two Sharp Infrared Sensors with Arduino
Sprache: C++
++
/*
  * 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
     
}

Dateien📁

Fritzing-Datei

Andere Dateien