Les 74: Gebruik van 'n Skerp Infrarooi-sensor-module met Arduino
Inleiding
Hierdie gids demonstreer hoe om twee of meer Sharp infrarooi (IR) afstand sensors met 'n Arduino te gebruik om afstand te meet en die resultate op die Serial Monitor te vertoon. Terwyl 'n enkele sensor nuttig is, vereis baie werklike toepassings, soos 'n slim motor, 'n robotarm, of enige bewegende masjien, afstandmetings vanuit verskeie rigtings gelyktydig. Byvoorbeeld, jy kan een sensor aan die voorkant installeer om die afstand voor te meet, en 'n ander aan die regter- of linkerkant om botsings te vermy. Hierdie tutoriaal wys jou hoe om jou Arduino te konfigureer om veelvuldige sensors doeltreffend te hanteer, en bou voort op 'n aparte, gedetailleerde video wat die individuele sensor se spesifikasies en werking verduidelik.
Hier is 'n paar praktiese projek-idees om jou te inspireer:
- Bou 'n robot wat hindernisse vermy deur afstande aan sy linker-, regter- en voorkante te meet.
- Skep 'n slim parkeer-assistent wat veelvuldige sensors gebruik om 'n voertuig in 'n nou plek te lei.
- Ontwikkel 'n sekuriteitstelsel wat 'n deuropening of gang monitor met sensors wat op verskillende hoeke geplaas is.
- Maak 'n interaktiewe kunsinstallasie waar die afstand van 'n kyker se hand verander wat vertoon word.

In hierdie video is die fokus op die bedrading en kode wat nodig is om veelvuldige Sharp IR sensors te laat werk. Die demonstrasie gebruik twee GP2Y0A21YK0F sensors, wat afstande van 10 tot 80 cm meet. Die kode is gestruktureer om maklik uitbreibaar te wees, sodat jy 'n derde, vierde, of selfs meer sensors met net 'n paar reëls kode kan byvoeg.
Hardeware en Komponente
Om hierdie projek te volg, sal jy die volgende komponente nodig hê:
- 'n Arduino-bord (bv. Uno, Mega).
- Twee of meer Sharp IR afstand sensors (bv. GP2Y0A21YK0F).
- Springdrade.
- 'n Broodbord (opsioneel, vir makliker verbindings).
Bedrading Gids
Die Sharp IR sensor het drie drade: rooi (krag), swart (grond), en geel (sein-uitset). Die bedrading is eenvoudig. Vir die eerste sensor, verbind sy rooi draad aan die Arduino se 5V-pen, die swart draad aan 'n grond (GND) pen, en die geel sein-draad aan 'n analoog pen, byvoorbeeld A1. Vir die tweede sensor, verbind sy rooi draad aan dieselfde of 'n ander 5V-pen, die swart draad aan GND, en die geel draad aan 'n verskillende analoog pen, soos A2.
As jy nie genoeg 5V-penne het nie, bied die video 'n slim oplossing. Jy kan enige digitale pen as 'n kragbron gebruik. In die kode word digitale pen 2 as 'n uitset gekonfigureer en op HOOG gestel, wat 'n konstante 5V verskaf. Jy sal dan die rooi drade van jou sensors aan hierdie digitale pen verbind in plaas van die toegewyde 5V-pen. Die gronddrade kan aan enige van die GND-penne op die Arduino verbind word. Die video wys 'n demonstrasie van hierdie opstelling by [00:06:10].
Vir 'n visuele verwysing van die verbindings, verwys asseblief na die bedradingdiagram hieronder:



Kode Verduideliking
Hierdie afdeling fokus op die gebruikerskonfigureerbare dele van die kode, wat almal aan die bokant van die skets geleë is. Dit is waar jy jou penne en sensormodelle sal definieer.
Eerstens sluit die kode die nodige biblioteek vir die Sharp IR sensors in, #include <SharpIR.h>. Hierdie biblioteek hanteer die komplekse wiskunde wat nodig is om die analoog spanning van die sensor in 'n afstandlesing om te skakel.
Volgende sal jy die analoog penne vir elk van jou sensors definieer. Die voorbeeldkode gebruik #define IR1 A1 en #define IR2 A2. As jy meer as twee sensors gebruik, sal jy meer definisies hier byvoeg, soos #define IR3 A3.
'n Deurslaggewende deel van die konfigurasie is om die korrekte model vir jou sensor te stel. Die kode gebruik #define model1 1080 en #define model2 1080. Hierdie nommer is nie arbitrêr nie; dit vertel die biblioteek watter sensor jy het, aangesien elke model 'n verskillende spanning-tot-afstand kurwe het. Die kode-kommentaar verskaf 'n nuttige lys:
- 2 tot 15 cm GP2Y0A51SK0F gebruik 215
- 4 tot 30 cm GP2Y0A41SK0F / GP2Y0AF30 reeks gebruik 430
- 10 tot 80 cm GP2Y0A21YK0F gebruik 1080
- 10 tot 150 cm GP2Y0A60SZLF gebruik 10150
- 20 tot 150 cm GP2Y0A02YK0F gebruik 20150
- 100 tot 550 cm GP2Y0A710K0F gebruik 100550
Jy moet hierdie waarde verander om by jou spesifieke sensor te pas. Byvoorbeeld, as jy 'n GP2Y0A02YK0F gebruik, sal jy die definisie na #define model1 20150 verander. Die kode skep dan 'n objek vir elke sensor, soos SharpIR SharpIR1(IR1, model1);. Hierdie lyn verbind die pen en model vir die eerste sensor. As jy meer sensors byvoeg, sal jy hierdie lyn kopieer en die objeknaam, pen, en model dienooreenkomstig verander.
In die setup() funksie word die Serial Monitor teen 9600 baud geïnisialiseer. Dit is die spoed waarteen die Arduino met jou rekenaar kommunikeer. Die kode sluit ook 'n afdeling in om 'n digitale pen as 'n 5V-bron te gebruik indien nodig, soos in die bedradingafdeling verduidelik. Dit word gedoen met pinMode(2,OUTPUT); en digitalWrite(2, HIGH);.
Laastens bevat die loop() funksie die hoof logika. Daar is 'n delay(500); aan die begin, wat die tyd tussen elke stel lesings op 500 millisekondes stel. Jy kan dit aanpas om die lesings meer of minder gereeld te maak. Die kern van die lus is waar jy die afstand van elke sensor lees met behulp van die distance() funksie van die biblioteek, soos int dis1=SharpIR1.distance();. Die resultate word dan op die Serial Monitor gedruk met beskrywende teks, soos Serial.print("Distance (1): ");, gevolg deur die waarde en die eenheid "cm".
Lewende Projek Demonstrasie
In die video demonstreer die aanbieder die opstelling met twee sensors. Soos jy in die demonstrasie by [00:07:44] kan sien, vertoon die Serial Monitor die afstandlesings van beide sensors. Wanneer 'n voorwerp voor die eerste sensor geplaas word, verander die lesing vir "Distance (1)". Net so, wanneer 'n voorwerp voor die tweede sensor geplaas word, werk die lesing vir "Distance (2)" op. Die video wys dat deur 'n vel papier op 'n afstand te hou, die sensors ongeveer 23 en 24 cm lees. Wanneer een sensor geblokkeer word, daal sy lesing tot ongeveer 17 cm, wat bevestig dat elke sensor onafhanklik werk en intydse afstanddata vir sy onderskeie rigting verskaf. Dit bevestig die kode se vermoë om verskeie sensors gelyktydig te hanteer.
Hoofstukke
- [00:00] Inleiding tot die Gebruik van Verskeie Sharp IR Sensors
- [00:28] Toepassings vir Verskeie Afstandsensors
- [01:34] Kodeverduideliking: Biblioteek- en Pendefinisies
- [02:24] Konfigurering van Sensormodelle en Skep van Voorwerpe
- [04:15] Opstelling- en Lusfunksies Verduidelik
- [06:10] Bedradingsgids vir Verskeie Sensors
- [07:44] Lewendige Demonstrasie met Twee Sensors
++
/*
* 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
}
Hulpbronne en verwysings
-
BuitenburgDistance-measuring sensors (website)sharp-world.com
-
BuitenburgSharp IR Library (from GitHub)github.com
-
BuitenburgSharp Library from RoboJob.comrobojax.com
Lêers📁
Fritzing-lêer
-
sharp ir sensor GP2Y0A02YK0F
sharp ir sensor GP2Y0A02YK0F .fzz
Ander lêers
-
Sharp GP2Y0A41SK0F Infrared distance sensor datasheet
robojax_sharp_IR_GP2Y0A41SK0F_datasheet.pdf0.84 MB -
Sharp GP2Y0A710K0F Infrared distance sensor datashee
robojax_sharp_IR_GP2Y0A710K0F_datasheet.pdf0.33 MB -
Arduino library for Sharp Infrard distance sensor
robojax-sharp_IR-master.zip