Lección 74: Uso de un módulo de sensor infrarrojo agudo con Arduino
Introducción
Esta guía demuestra cómo usar dos o más sensores infrarrojos (IR) Sharp con un Arduino para medir distancia y mostrar los resultados en el Monitor Serie. Aunque un solo sensor es útil, muchas aplicaciones del mundo real, como un coche inteligente, un brazo robótico o cualquier máquina en movimiento, requieren mediciones de distancia desde múltiples direcciones simultáneamente. Por ejemplo, podrías instalar un sensor en la parte delantera para medir la distancia hacia adelante, y otro en el lado derecho o izquierdo para evitar colisiones. Este tutorial te muestra cómo configurar tu Arduino para manejar múltiples sensores de manera eficiente, basándose en un video detallado separado que explica las especificaciones y el funcionamiento del sensor individual.
Aquí tienes algunas ideas prácticas de proyectos para inspirarte:
- Construir un robot que evite obstáculos midiendo distancias en sus lados izquierdo, derecho y frontal.
- Crear un asistente de estacionamiento inteligente que use múltiples sensores para guiar un vehículo hacia un espacio reducido.
- Desarrollar un sistema de seguridad que monitoree una puerta o pasillo con sensores colocados en diferentes ángulos.
- Hacer una instalación de arte interactiva donde la distancia de la mano del espectador cambie lo que se muestra.

En este video, el enfoque está en el cableado y el código necesarios para ejecutar múltiples sensores IR Sharp. La demostración utiliza dos sensores GP2Y0A21YK0F, que miden distancias de 10 a 80 cm. El código está estructurado para ser fácilmente expandible, por lo que puedes agregar un tercer, cuarto o incluso más sensores con solo unas pocas líneas de código.
Hardware y Componentes
Para seguir este proyecto, necesitarás los siguientes componentes:
- Una placa Arduino (por ejemplo, Uno, Mega).
- Dos o más sensores de distancia IR Sharp (por ejemplo, GP2Y0A21YK0F).
- Cables de conexión (jumper wires).
- Una placa de pruebas (breadboard) (opcional, para conexiones más fáciles).
Guía de Cableado
El sensor IR Sharp tiene tres cables: rojo (alimentación), negro (tierra) y amarillo (salida de señal). El cableado es sencillo. Para el primer sensor, conecta su cable rojo al pin de 5V del Arduino, el cable negro a un pin de tierra (GND), y el cable amarillo de señal a un pin analógico, por ejemplo, A1. Para el segundo sensor, conecta su cable rojo al mismo u otro pin de 5V, el cable negro a GND, y el cable amarillo a un pin analógico diferente, como A2.
Si te quedas sin pines de 5V, el video proporciona una solución inteligente. Puedes usar cualquier pin digital como fuente de alimentación. En el código, el pin digital 2 se configura como salida y se establece en HIGH, lo que proporciona un 5V constante. Luego conectarías los cables rojos de tus sensores a este pin digital en lugar del pin dedicado de 5V. Los cables de tierra se pueden conectar a cualquiera de los pines GND del Arduino. El video muestra una demostración de esta configuración en [00:06:10].
Para una referencia visual de las conexiones, consulta el diagrama de cableado a continuación:



Explicación del Código
Esta sección se centra en las partes configurables por el usuario del código, que se encuentran todas en la parte superior del sketch. Aquí es donde definirás tus pines y modelos de sensores.
Primero, el código incluye la biblioteca necesaria para los sensores IR Sharp, #include <SharpIR.h>. Esta biblioteca maneja las matemáticas complejas requeridas para convertir el voltaje analógico del sensor en una lectura de distancia.
A continuación, definirás los pines analógicos para cada uno de tus sensores. El código de ejemplo usa #define IR1 A1 y #define IR2 A2. Si estás usando más de dos sensores, agregarías más definiciones aquí, como #define IR3 A3.
Una parte crucial de la configuración es establecer el modelo correcto para tu sensor. El código usa #define model1 1080 y #define model2 1080. Este número no es arbitrario; le dice a la biblioteca qué sensor tienes, ya que cada modelo tiene una curva diferente de voltaje a distancia. Los comentarios del código proporcionan una lista útil:
- 2 a 15 cm GP2Y0A51SK0F usan 215
- 4 a 30 cm GP2Y0A41SK0F / serie GP2Y0AF30 usan 430
- 10 a 80 cm GP2Y0A21YK0F usan 1080
- 10 a 150 cm GP2Y0A60SZLF usan 10150
- 20 a 150 cm GP2Y0A02YK0F usan 20150
- 100 a 550 cm GP2Y0A710K0F usan 100550
Debes cambiar este valor para que coincida con tu sensor específico. Por ejemplo, si estuvieras usando un GP2Y0A02YK0F, cambiarías la definición a #define model1 20150. El código luego crea un objeto para cada sensor, como SharpIR SharpIR1(IR1, model1);. Esta línea une el pin y el modelo para el primer sensor. Si agregas más sensores, copiarías esta línea y cambiarías el nombre del objeto, el pin y el modelo en consecuencia.
En la función setup(), el Monitor Serie se inicializa a 9600 baudios. Esta es la velocidad a la que el Arduino se comunica con tu computadora. El código también incluye una sección para usar un pin digital como fuente de 5V si es necesario, como se explicó en la sección de cableado. Esto se hace con pinMode(2,OUTPUT); y digitalWrite(2, HIGH);.
Finalmente, la función loop() contiene la lógica principal. Hay un delay(500); al inicio, que establece el tiempo entre cada conjunto de lecturas en 500 milisegundos. Puedes ajustar esto para hacer las lecturas más o menos frecuentes. El núcleo del bucle es donde lees la distancia de cada sensor usando la función distance() de la biblioteca, como int dis1=SharpIR1.distance();. Los resultados se imprimen luego en el Monitor Serie con texto descriptivo, como Serial.print("Distance (1): ");, seguido del valor y la unidad "cm".
Demostración del Proyecto en Vivo
En el video, el presentador demuestra la configuración con dos sensores. Como se puede ver en la demostración en [00:07:44], el Monitor Serie muestra las lecturas de distancia de ambos sensores. Cuando se coloca un objeto frente al primer sensor, la lectura de "Distancia (1)" cambia. De manera similar, cuando se coloca un objeto frente al segundo sensor, la lectura de "Distancia (2)" se actualiza. El video muestra que al sostener una hoja de papel a cierta distancia, los sensores leen aproximadamente 23 y 24 cm. Cuando se bloquea un sensor, su lectura baja a unos 17 cm, lo que confirma que cada sensor opera de forma independiente y proporciona datos de distancia en tiempo real para su respectiva dirección. Esto valida la capacidad del código para manejar múltiples sensores simultáneamente.
Capítulos
- [00:00] Introducción al uso de múltiples sensores IR Sharp
- [00:28] Aplicaciones para múltiples sensores de distancia
- [01:34] Explicación del código: definiciones de librería y pines
- [02:24] Configuración de modelos de sensores y creación de objetos
- [04:15] Explicación de las funciones setup y loop
- [06:10] Guía de cableado para múltiples sensores
- [07:44] Demostración en vivo con dos sensores
++
/*
* 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
}
Recursos y referencias
-
ExternoBiblioteca IR Sharp (de GitHub)github.com
-
ExternoBiblioteca Sharp de RoboJob.comrobojax.com
-
ExternoSensores de medición de distancia (sitio web)sharp-world.com
Archivos📁
Archivo de Fritzing
-
sensor infrarrojo agudo GP2Y0A02YK0F
sharp ir sensor GP2Y0A02YK0F .fzz
Otros archivos
-
Datasheet del sensor de distancia infrarrojo Sharp GP2Y0A41SK0F
robojax_sharp_IR_GP2Y0A41SK0F_datasheet.pdf0.84 MB -
Sensor de distancia infrarrojo Sharp GP2Y0A710K0F hoja de datos
robojax_sharp_IR_GP2Y0A710K0F_datasheet.pdf0.33 MB -
Biblioteca de Arduino para el sensor de distancia infrarrojo Sharp
robojax-sharp_IR-master.zip