Código de búsqueda

Código y vídeo de Arduino para el módulo de distancia IR Sharp con LCD1602 y módulo I2C

Código y vídeo de Arduino para el módulo de distancia IR Sharp con LCD1602 y módulo I2C

Esta guía del proyecto te guiará paso a paso para construir un sistema de medición de distancia sencillo pero eficaz utilizando un sensor de distancia infrarrojo (IR) Sharp y una pantalla LCD1602. Esta configuración te permite medir con precisión distancias dentro de un rango específico y mostrarlas directamente en una pantalla, lo que la hace ideal para diversas aplicaciones de electrónica de bricolaje.

Sharpt IR distance sensor

Ejemplos prácticos de uso e ideas de proyectos para este sistema incluyen:

  • Desarrollando un sistema automatizado de asistencia al estacionamiento para evitar daños en el parachoques.
  • Creando un sensor de nivel de agua simple para tanques o pozos.
  • Desarrollando un dispensador de líquidos sin contacto.
  • Implementación de una alarma de seguridad básica mediante la detección de proximidad.
  • Creación de un indicador de nivel de llenado para tolvas o contenedores.
  • Diseño de un sistema de evitación de colisiones para robots pequeños o vehículos teledirigidos.

Hardware/Componentes

Para completar este proyecto, necesitará los siguientes componentes:

  • Placa Arduino Uno o compatible
  • Sensor de distancia por infrarrojos Sharp (modelo GP2Y0A41SK0F, que mide de 4 a 30 cm)
  • LCD1602 con módulo I2C (para un cableado sencillo)
  • Protoboard (opcional, para prototipado)
  • Cables puente
  • Cable USB para alimentación y programación de Arduino

Guía de cableado

Arduino wiring for Sharp IR sensor with LCD1602
Arduino wiring for Sharp IR sensor with LCD1602

Conectar el sensor IR Sharp y la LCD1602 con módulo I2C a tu Arduino es sencillo, gracias a que el módulo I2C reduce el número de cables necesarios para la LCD.

El sensor IR Sharp tiene tres cables: Rojo (5V), Negro (GND) y Amarillo (Salida). Conecta el cable rojo al pin de 5V del Arduino, el cable negro a cualquier pin GND del Arduino y el cable de salida amarillo al pin analógico A0 del Arduino (en el video en 03:55).

El LCD1602 con módulo I2C tiene cuatro cables: VCC, GND, SDA y SCL. Conecta el pin VCC al 5V del Arduino y el pin GND al GND del Arduino. El cable SDA (línea de datos serie) debe conectarse al pin analógico A4 del Arduino, y el cable SCL (línea de reloj serie) debe conectarse al pin analógico A5 del Arduino (en el video en 02:42).

Explicación del código

El código de Arduino proporcionado utiliza dos bibliotecas principales:Wire.hpara la comunicación I2C yLiquidCrystal_I2C.hpara controlar la pantalla LCD, ySharpIR.hpara el sensor Sharp IR. Las partes del código configurables por el usuario están principalmente relacionadas con la definición del sensor y la inicialización de la pantalla LCD.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

La líneaLiquidCrystal_I2C lcd(0x27, 16, 2);Inicializa el objeto LCD. El primer parámetro,0x27(en el video a las 03:26), es la dirección I2C predeterminada para la mayoría de los módulos LCD I2C basados en PCF8574. Si tu LCD no funciona, puede que necesites encontrar su dirección correcta (las alternativas comunes son0x3F"). El segundo parámetro,16, especifica que su LCD tiene 16 caracteres por línea, y el tercer parámetro,2, indica que tiene 2 líneas.

#include <SharpIR.h>

#define IR A0 // define Sharp IR signal pin
#define model 430 // the model of the IR module
// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
// model: an int that determines your sensor:
/*
 * GP2Y0A02YK0F --> "20150"
 GP2Y0A21YK --> "1080"
 GP2Y0A710K0F --> "100500"
  GP2YA41SK0F --> "430"
 */

SharpIR SharpIR(IR, model);

Estas líneas configuran el sensor IR Sharp.#define IR A0define el pin analógico de Arduino al que está conectado el cable de salida del sensor Sharp IR.#define model 430(en el vídeo a las 04:27) es crucial, ya que especifica el modelo exacto de tu sensor Sharp IR. La biblioteca usa este número de modelo para aplicar la conversión matemática correcta de la salida de voltaje analógico del sensor a una distancia en centímetros. El bloque de comentarios enumera varios modelos Sharp IR y sus valores enteros correspondientes que deberían usarse aquí. Por ejemplo, si estuvieras usando un GP2Y0A21YK, cambiarías430a1080.

void setup()
{
  lcd.begin();
  lcd.backlight();
}

En elsetup()función,lcd.begin()inicializa la pantalla LCD, ylcd.backlight()enciende su retroiluminación, haciendo visible la pantalla.

void loop()
{
  lcd.clear();
  lcd.print("Robojax IR Test");
  lcd.setCursor (0,1); // go to start of 2nd line
  int dis=SharpIR.distance();// gets the distance in cm
  String distance = String(dis);
  distance ="Distance: "+distance+"cm";
  lcd.print(distance);
  delay(500);
}

Dentro deloop()función:

  • lcd.clear();borra cualquier texto anterior en la pantalla.
  • lcd.print("Robojax IR Test");imprime un mensaje estático en la primera línea.
  • lcd.setCursor (0,1);mueve el cursor al inicio de la segunda línea (0 es la primera columna, 1 es la segunda línea, ya que las líneas están indexadas desde 0).
  • int dis=SharpIR.distance();llama aldistance()Función de la biblioteca SharpIR para leer el valor del sensor y convertirlo en un entero que representa la distancia en centímetros (en el video en 05:06). Esta es la función principal para obtener la medición.
  • String distance = String(dis);convierte la distancia entera en una cadena, ya que no se pueden concatenar directamente enteros con cadenas para imprimir.
  • distance ="Distance: "+distance+"cm";formatea la cadena para incluir "Distancia: " antes del valor y "cm" después.
  • lcd.print(distance);muestra la cadena de distancia formateada en la pantalla LCD.
  • delay(500);introduce una pausa de 500 milisegundos (en el vídeo en 06:00). Este retraso es importante para la precisión y la estabilidad del sensor Sharp. Puede ajustar este valor: aumentarlo podría mejorar la precisión pero ralentizar las actualizaciones, mientras que disminuirlo acelerará las actualizaciones pero podría reducir la precisión.

Proyecto/Demostración en vivo

Una vez que los componentes estén conectados y el código cargado en tu Arduino, el sistema comenzará a medir y mostrar distancias. El proyecto demuestra mediciones precisas a distancias cortas; por ejemplo, muestra 12 cm cuando el objeto está a 12 cm (en el video en 00:31) y 10 cm cuando está a 10 cm (en el video en 00:37).

Sin embargo, a medida que el objeto se aleja más, especialmente más allá de 15-20 cm, la precisión puede disminuir. Por ejemplo, a 20 cm la pantalla podría mostrar 21 cm (en el video a las 07:06), y a 25 cm podría indicar 28 o 29 cm (en el video a las 07:32). Este comportamiento es característico de estos sensores infrarrojos. El sensor IR Sharp entrega una tensión analógica que varía con la distancia: a medida que la distancia aumenta, la tensión de salida disminuye (en el video a las 07:56).

La relación entre la distancia y la salida de voltaje es no lineal, especialmente en los extremos del rango del sensor. Esta no linealidad es la razón por la que la biblioteca SharpIR es útil, ya que contiene datos de calibración para convertir estos voltajes variables en lecturas de distancia más precisas. Para aplicaciones que requieren mayor precisión a rangos más largos, podría ser necesario elegir un modelo diferente de Sharp IR diseñado para esas distancias o implementar curvas de calibración personalizadas.

Capítulos

  • [00:06] Introducción y visión general del proyecto
  • [01:10] Detalles y asignación de pines del sensor IR Sharp
  • [02:09] Cableado del módulo LCD I2C
  • [02:58] Explicación del código de Arduino
  • [06:36] Demostración de medición de distancia
  • [07:47] Características del sensor y limitaciones de precisión
  • [08:48] Observaciones finales y recursos

Imágenes

LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
Sharpt IR distance sensor GP2Y0A21YK0F
Sharpt IR distance sensor GP2Y0A21YK0F
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
70-This is the Arduino code and video for a Sharp Infrared Sensor Module with LCD1602 and I2C.
Idioma: C++
/*
 * Sharp IR  555 (infrared) distance measurement module with LCD1602 and I2C for Arduino
 * Measures the distance in cm.

 * Watch the video https://youtu.be/RHgMwtKLEnE

 *  * 

Original library: https://github.com/guillaume-rico/SharpIR


// Written and updated by Ahmad for Robojax.com
// on January 3, 2018 at 20:01 in Ajax, Ontario, Canada
// Get this code and other Arduino codes from Robojax.com
// Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
// all in one place. 

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/>.

*/




#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

///////////////////***** start of Sharp IR
#include <SharpIR.h>

#define IR A0 // define Sharp IR signal pin
#define model 430 // the model of the IR module
// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
// model: an int that determines your sensor:
/*
 * GP2Y0A02YK0F --> "20150"
 GP2Y0A21YK --> "1080"
 GP2Y0A710K0F --> "100500"
  GP2YA41SK0F --> "430"
 */

SharpIR SharpIR(IR, model);
/////////////////////**** end of Sharp IR

void setup()
{
  // Robojax code for LCD with I2C
  // initialize the LCD, 
  lcd.begin();
 
  // Turn on the backlight and print a message.
  lcd.backlight();
  // Robojax code for LCD with I2C


}

void loop()
{
  
  //start of loop Robojax code for LCD with I2C
  lcd.clear();
  lcd.print("Robojax IR Test");
  lcd.setCursor (0,1); // go to start of 2nd line
 int dis=SharpIR.distance();// gets the distance in cm
 String distance = String(dis);
 distance ="Distance: "+distance+"cm";
 lcd.print(distance);
  //lcd.print(millis() / 1000);
  delay(500);
 //end of loopcode Robojax code for LCD with I2C
}

Cosas que podrías necesitar

Recursos y referencias

Aún no hay recursos.

Archivos📁

Bibliotecas de Arduino (zip)

Archivo de Fritzing

Otros archivos