Les 74: Een scherpe infraroodsensormodule gebruiken met Arduino
Introductie
Deze handleiding laat zien hoe je twee of meer Sharp infrarood (IR) afstandssensoren met een Arduino gebruikt om afstand te meten en de resultaten op de Seriële Monitor weer te geven. Hoewel een enkele sensor nuttig is, vereisen veel praktische toepassingen, zoals een slimme auto, een robotarm of een andere bewegende machine, gelijktijdige afstandsmetingen vanuit meerdere richtingen. Je kunt bijvoorbeeld één sensor aan de voorkant installeren om de afstand vooruit te meten, en een andere aan de rechter- of linkerkant om botsingen te voorkomen. Deze tutorial laat zien hoe je je Arduino configureert om efficiënt met meerdere sensoren om te gaan, voortbouwend op een aparte, gedetailleerde video die de specificaties en werking van de individuele sensor uitlegt.
Hier zijn een paar praktische projectideeën om je te inspireren:
- Een robot bouwen die obstakels vermijdt door afstanden aan de linker-, rechter- en voorkant te meten.
- Een slimme parkeerassistent maken die meerdere sensoren gebruikt om een voertuig in een krappe ruimte te begeleiden.
- Een beveiligingssysteem ontwikkelen dat een deuropening of gang bewaakt met sensoren op verschillende hoeken.
- Een interactieve kunstinstallatie maken waarbij de afstand van de hand van een kijker verandert wat er wordt weergegeven.

In deze video ligt de focus op de bedrading en code die nodig zijn om meerdere Sharp IR-sensoren te laten werken. De demonstratie gebruikt twee GP2Y0A21YK0F-sensoren, die afstanden van 10 tot 80 cm meten. De code is zo gestructureerd dat deze gemakkelijk uitbreidbaar is, zodat je met slechts een paar regels code een derde, vierde of zelfs meer sensoren kunt toevoegen.
Hardware en componenten
Om dit project te volgen, heb je de volgende componenten nodig:
- Een Arduino-board (bijv. Uno, Mega).
- Twee of meer Sharp IR-afstandssensoren (bijv. GP2Y0A21YK0F).
- Jumperdraden.
- Een breadboard (optioneel, voor eenvoudigere verbindingen).
Bedradingshandleiding
De Sharp IR-sensor heeft drie draden: rood (voeding), zwart (aarde) en geel (signaaluitgang). De bedrading is eenvoudig. Voor de eerste sensor sluit je de rode draad aan op de 5V-pin van de Arduino, de zwarte draad op een aardingspin (GND) en de gele signaaldraad op een analoge pin, bijvoorbeeld A1. Voor de tweede sensor sluit je de rode draad aan op dezelfde of een andere 5V-pin, de zwarte draad op GND en de gele draad op een andere analoge pin, zoals A2.
Als je geen 5V-pinnen meer over hebt, biedt de video een slimme oplossing. Je kunt elke digitale pin als stroombron gebruiken. In de code wordt digitale pin 2 geconfigureerd als uitgang en op HIGH gezet, wat een constante 5V levert. Je sluit dan de rode draden van je sensoren aan op deze digitale pin in plaats van op de speciale 5V-pin. De aardingsdraden kunnen op elke GND-pin van de Arduino worden aangesloten. De video toont een demonstratie van deze opstelling op [00:06:10].
Voor een visuele referentie van de verbindingen, raadpleeg het bedradingsschema hieronder:



Uitleg van de code
Deze sectie richt zich op de door de gebruiker configureerbare delen van de code, die allemaal bovenaan de sketch staan. Hier definieer je je pinnen en sensormodellen.
Eerst bevat de code de benodigde bibliotheek voor de Sharp IR-sensoren, #include <SharpIR.h>. Deze bibliotheek verwerkt de complexe wiskunde die nodig is om de analoge spanning van de sensor om te zetten in een afstandsmeting.
Vervolgens definieer je de analoge pinnen voor elk van je sensoren. De voorbeeldcode gebruikt #define IR1 A1 en #define IR2 A2. Als je meer dan twee sensoren gebruikt, voeg je hier meer definities toe, zoals #define IR3 A3.
Een cruciaal onderdeel van de configuratie is het instellen van het juiste model voor je sensor. De code gebruikt #define model1 1080 en #define model2 1080. Dit getal is niet willekeurig; het vertelt de bibliotheek welke sensor je hebt, omdat elk model een andere spanning-naar-afstandscurve heeft. De opmerkingen in de code bieden een handige lijst:
- 2 tot 15 cm GP2Y0A51SK0F gebruik 215
- 4 tot 30 cm GP2Y0A41SK0F / GP2Y0AF30-serie 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
Je moet deze waarde aanpassen aan je specifieke sensor. Als je bijvoorbeeld een GP2Y0A02YK0F gebruikt, verander je de definitie naar #define model1 20150. De code maakt vervolgens een object voor elke sensor, zoals SharpIR SharpIR1(IR1, model1);. Deze regel koppelt de pin en het model voor de eerste sensor. Als je meer sensoren toevoegt, kopieer je deze regel en wijzig je de objectnaam, pin en model dienovereenkomstig.
In de setup()-functie wordt de Seriële Monitor geïnitialiseerd op 9600 baud. Dit is de snelheid waarmee de Arduino met je computer communiceert. De code bevat ook een sectie om indien nodig een digitale pin als 5V-bron te gebruiken, zoals uitgelegd in de bedradingssectie. Dit wordt gedaan met pinMode(2,OUTPUT); en digitalWrite(2, HIGH);.
Tot slot bevat de loop()-functie de hoofdlogica. Er staat een delay(500); aan het begin, die de tijd tussen elke reeks metingen op 500 milliseconden instelt. Je kunt dit aanpassen om de metingen meer of minder frequent te maken. De kern van de loop is waar je de afstand van elke sensor leest met de distance()-functie van de bibliotheek, zoals int dis1=SharpIR1.distance();. De resultaten worden vervolgens op de Seriële Monitor afgedrukt met beschrijvende tekst, zoals Serial.print("Afstand (1): ");, gevolgd door de waarde en de eenheid "cm".
Live projectdemonstratie
In de video demonstreert de presentator de opstelling met twee sensoren. Zoals je kunt zien in de demonstratie op [00:07:44], toont de Seriële Monitor de afstandsmetingen van beide sensoren. Wanneer een object voor de eerste sensor wordt geplaatst, verandert de meting voor "Afstand (1)". Op dezelfde manier wordt de meting voor "Afstand (2)" bijgewerkt wanneer een object voor de tweede sensor wordt geplaatst. De video laat zien dat door een vel papier op een afstand te houden, de sensoren ongeveer 23 en 24 cm meten. Wanneer één sensor wordt geblokkeerd, daalt de meting tot ongeveer 17 cm, wat bevestigt dat elke sensor onafhankelijk werkt en realtime afstandsgegevens levert voor de respectievelijke richting. Dit valideert het vermogen van de code om meerdere sensoren tegelijkertijd te verwerken.
Hoofdstukken
- [00:00] Inleiding tot het gebruik van meerdere Sharp IR-sensoren
- [00:28] Toepassingen voor meerdere afstandssensoren
- [01:34] Uitleg van de code: bibliotheek- en pin-definities
- [02:24] Configureren van sensormodellen en het maken van objecten
- [04:15] Setup- en loop-functies uitgelegd
- [06:10] Bedradingsgids voor meerdere sensoren
- [07:44] Live demonstratie met twee 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
}
Hulpmiddelen en referenties
-
ExternDistance-measuring sensors (website)sharp-world.com
-
ExternSharp IR Library (from GitHub)github.com
-
ExternSharp Library from RoboJob.comrobojax.com
Bestanden📁
Fritzing-bestand
-
sharp ir sensor GP2Y0A02YK0F
sharp ir sensor GP2Y0A02YK0F .fzz
Andere bestanden
-
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