Ir al contenido principal

Pantalla LCD I2C con sensor de ultrasonidos y LEDs: Sistema de Seguridad por Zonas

Introducción

Si ya dominas el uso del sensor de ultrasonidos HC-SR04 y sabes escribir texto en una pantalla LCD I2C, el siguiente paso lógico es combinar ambos componentes para crear un sistema interactivo real. En este tutorial vamos a construir un Sensor de Proximidad por Zonas, similar a los sensores de parking de los coches modernos.

Dependiendo de la distancia a la que esté un objeto, el sistema cambiará el mensaje en la pantalla LCD y encenderá diferentes LEDs de advertencia: Rojo para peligro (muy cerca), Verde para seguridad (lejos), y sin LEDs para precaución (distancia media).

⚠️ La Dirección I2C de tu LCD

Al igual que en nuestros otros tutoriales de LCD, el código usa la dirección 0x27 por defecto. Si tu pantalla no muestra texto (se queda iluminada sin letras), cambia ese número a 0x3F en la línea LiquidCrystal_I2C lcd(...) del código.

Materiales Necesarios

Para construir este proyecto de seguridad por zonas en protoboard, necesitarás los siguientes componentes:

Componente Descripción Enlace
Arduino UNO R3 / R4 Placa de desarrollo base para coordinar el sensor, LCD y avisos lumínicos. Ver en Amazon
Sensor Ultrasonidos HC-SR04 Módulo medidor de distancia mediante ecos de ultrasonidos (2cm a 400cm). Ver en Amazon
Pantalla LCD 16x2 I2C Display alfanumérico con interfaz I2C integrada para mostrar estados del sistema. Ver en Amazon
Kit de LEDs (Rojo y Verde) Diodos emisores de luz de 5mm para señalización visual de peligro y zona libre. Ver en Amazon
Resistencias 220Ω (1/4W) Resistencias de protección de corriente para limitar el paso a los LEDs. Ver en Amazon
Protoboard y Cables Jumper Placa de pruebas y cableado Macho-Macho / Macho-Hembra para interconexión. Ver en Amazon

Esquema de Conexiones

Este montaje integra varios periféricos a la vez. Para garantizar un funcionamiento correcto, sigue atentamente la asignación de pines indicada a continuación:

  • HC-SR04: VCC a 5V, GND a GND, Trig al Pin Digital 8, Echo al Pin Digital 9.
  • LCD I2C: VCC a 5V, GND a GND, SDA al pin SDA (A4), SCL al pin SCL (A5) de la placa Arduino.
  • LED Rojo: Ánodo (patita larga) al Pin Digital 7 (colocando una resistencia de 220Ω en serie). Cátodo a GND.
  • LED Verde: Ánodo (patita larga) al Pin Digital 6 (colocando una resistencia de 220Ω en serie). Cátodo a GND.

Esquema de conexiones Arduino con sensor ultrasonidos HC-SR04, pantalla LCD I2C y LEDs indicador de distancia

Código de Arduino: El Sistema por Zonas

Este código evalúa continuamente la distancia física calculada por el sensor ultrasónico y, mediante condicionales encadenados (if / else if), controla qué aviso luminoso activar e imprime el estado en el display alfanumérico. Recuerda instalar previamente la biblioteca LiquidCrystal_I2C desde el administrador de librerías del IDE.

sensor_zonas.ino
// Librerías necesarias
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Configura LCD (Cambia 0x27 por 0x3F si tu pantalla no funciona)
LiquidCrystal_I2C lcd(0x27, 16, 2); 

// Pines del Sensor de Ultrasonidos
const int trigPin = 8;
const int echoPin = 9;

// Pines de los LEDs de aviso
const int redLedPin = 7;
const int greenLedPin = 6;

// Variables para el cálculo de tiempo y distancia
long duration;
int distance;

void setup() {
  // Configurar pines del sensor
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  
  // Configurar pines de los LEDs como salidas
  pinMode(redLedPin, OUTPUT);
  pinMode(greenLedPin, OUTPUT);
  
  // Iniciar LCD y Monitor Serie
  lcd.init();
  lcd.backlight();
  Serial.begin(9600);
}

void loop() {
  // 1. Limpiar la pantalla LCD para actualizar los datos en cada iteración
  lcd.clear();
  
  // 2. Generar pulso ultrasónico en el pin Trigger (10us)
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  // Lectura del tiempo de retorno del eco en microsegundos
  duration = pulseIn(echoPin, HIGH);
  distance = duration * 0.034 / 2;
  
  // 3. Evaluamos las Zonas de Seguridad
  // ZONA 1: Muy cerca (Menos de 15 cm) -> ALERTA
  if (distance > 0 && distance < 15) {
    digitalWrite(redLedPin, HIGH);   // Enciende LED Rojo
    digitalWrite(greenLedPin, LOW);  // Apaga LED Verde
    
    lcd.setCursor(0, 0);            // Fila superior
    lcd.print("!! ALERTA !!");     // Mensaje de peligro
    lcd.setCursor(0, 1);            // Fila inferior
    lcd.print("Dist: ");
    lcd.print(distance);
    lcd.print(" cm");
    
    Serial.println("Zona: ALERTA");
  }
  // ZONA 2: Distancia media (15 cm a 30 cm) -> PRECAUCION
  else if (distance >= 15 && distance < 30) {
    digitalWrite(redLedPin, LOW);   // Apagamos ambos LEDs
    digitalWrite(greenLedPin, LOW); 
    
    lcd.setCursor(0, 0);
    lcd.print("PRECAUCION");       // Mensaje de advertencia
    lcd.setCursor(0, 1);
    lcd.print("Dist: ");
    lcd.print(distance);
    lcd.print(" cm");
    
    Serial.println("Zona: PRECAUCION");
  }
  // ZONA 3: Zona segura (Más de 30 cm) -> LIBRE
  else if (distance >= 30) {
    digitalWrite(redLedPin, LOW);   // Apaga LED Rojo
    digitalWrite(greenLedPin, HIGH); // Enciende LED Verde
    
    lcd.setCursor(0, 0);
    lcd.print("Zona LIBRE");       // Mensaje de estado libre
    lcd.setCursor(0, 1);
    lcd.print("Dist: ");
    lcd.print(distance);
    lcd.print(" cm");
    
    Serial.println("Zona: LIBRE");
  }
  // ERROR: Sensor no detecta nada o lectura fuera de rango
  else {
    digitalWrite(redLedPin, LOW);
    digitalWrite(greenLedPin, LOW);
    
    lcd.setCursor(0, 0);
    lcd.print("Sensor ERROR");
    
    Serial.println("Error de lectura");
  }
  
  // Pausa de 500ms para estabilizar lecturas visuales
  delay(500);
}

Explicación del Código: Lógica de Zonas

Este desarrollo utiliza una estructura lógica de toma de decisiones basada en condicionales múltiples (if / else if / else):

  1. Limpieza total con lcd.clear(): Dado que los mensajes mostrados en la pantalla difieren significativamente en longitud ("!! ALERTA !!" consta de 12 caracteres, mientras que "PRECAUCION" tiene 10), es más práctico limpiar la memoria gráfica con lcd.clear() al comienzo de cada ciclo antes de actualizar las filas.
  2. Validación de lectura en Zona 1: El primer condicional valida distance > 0 && distance < 15. Se añade la restricción mayor que cero para prevenir falsos disparos de alarma producidos por errores puntuales del pulso de retorno del sensor ultrasónico.
  3. Control de estados en los pines de salida: Para evitar estados indeterminados en los indicadores visuales, al entrar en una zona específica es imprescindible forzar explícitamente el apagado (LOW) del estado que no deba estar activo.

🎥 Demostración y Vídeo Paso a Paso

Conclusión

Combinar sensores de entrada con elementos visuales e indicadores luminosos representa la base de proyectos interactivos completos. Este control por zonas es perfectamente extrapolable a asistentes de estacionamiento, alarmas volumétricas de presencia o controles de nivel de depósito de agua.

Si deseas repasar los tutoriales individuales donde explicamos en detalle cada uno de estos componentes por separado, puedes visitar nuestras guías sobre Medición de distancia con Sensor Ultrasonidos HC-SR04 y Muestra de datos en Pantalla LCD I2C.

Comentarios

Entradas populares de este blog

Cómo evitar que Windows apague la pantalla o el disco duro (con gpedit)

Introducción Uno de los problemas más frecuentes en Windows es la suspensión automática del sistema, el apagado de la pantalla o la desactivación del disco duro tras unos minutos de inactividad. Aunque esto busca ahorrar energía, puede resultar frustrante si utilizas tu PC como servidor doméstico, servidor Plex, máquina de descargas o para tareas de larga duración . Si bien es posible cambiar estos ajustes desde la configuración tradicional de energía, muchas veces Windows ignora nuestras preferencias debido a directivas internas. La solución definitiva para evitar que tu ordenador se apague o suspenda es utilizar el Editor de Directivas de Grupo Local (gpedit.msc) . ⚠️ Advertencia sobre la versión de Windows El comando gpedit.msc solo está disponible de forma nativa en las ediciones Windows Pro, Enterprise y Education . Si utilizas Windows Home , esta herramienta no estará presente por defecto y deberás recurrir a la configuración convencional del Panel de Control. Paso 1...

Alarma con Arduino y Sensor Ultrasónico HC-SR04 (Tutorial paso a paso)

Introducción Crear un sistema de seguridad o detección de movimiento no tiene que ser complicado ni caro. En este tutorial vamos a construir una alarma con Arduino y un sensor de ultrasonidos (el famoso HC-SR04). Este proyecto es ideal para principiantes porque aprendes a leer sensores externos y a generar una respuesta física (encender un LED y hacer sonar un buzzer) cuando alguien se acerca demasiado. A continuación, te explico cómo funciona el sensor, qué materiales necesitas, cómo montar el circuito y te desgloso el código línea por línea para que realmente entiendas lo que estás programando. ¿Cómo funciona el Sensor Ultrasónico HC-SR04? Este sensor funciona igual que un sonar o los delfines: emite un sonido imperceptible para el humano (ultrasonido) y espera a que ese sonido choque contra un objeto y regrese (eco). Pin Trig (Trigger - Disparo): Le dice al sensor que debe "gritar" y emitir el pulso de ultrasonido. Pin Echo (Eco - Recepción): Se queda escuchando...

Instalar el driver USB a TTL PL2303HX en Windows 10 (Solución al Error Code 10)

Introducción: ¿Para qué sirve el convertidor USB a TTL? Los adaptadores USB a TTL (equipados con chips como el PL2303HX , FTDI o CP2102) son herramientas indispensables en el taller de cualquier maker, técnico o entusiasta de la electrónica. Nos permiten establecer comunicación serie UART entre un ordenador y dispositivos como Arduino, ESP32-CAM, routers, receptores de satélite o tablets . Sin embargo, conectar este tipo de cables en Windows 10 o Windows 11 suele transformarse en un dolor de cabeza. Al conectar el dispositivo, el sistema instala automáticamente el controlador más reciente y muestra un aviso de fallo con el icono amarillo de advertencia: "Este dispositivo no puede iniciar (Código 10)" . A continuación te explicamos por qué sucede y cómo solucionarlo en pocos minutos. ⚠️ Causa del fallo: Bloqueo de chips no oficiales por Prolific La inmensa mayoría de los módulos USB-TTL económicos integran una revisión o clon del chip Pr...