Sensor de estacionamiento — Arduino Uno simulation

An interactive Arduino Uno circuit simulation you can run free in your browser on Velxio, by albertoarangurenp.

Components

Sketch code

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

// Configuración de la pantalla LCD (Dirección común: 0x27 o 0x3F, 16 columnas, 2 filas)
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Definición de Pines
const int pinTrig = 9;
const int pinEcho = 10;
const int ledVerde = 2;
const int ledAmarillo = 3;
const int ledRojo = 4;
const int pinBuzzer = 5;

// Variables para el cálculo de distancia
long duracion;
int distancia;

void setup() {
  // Configuración de pines de entrada y salida
  pinMode(pinTrig, OUTPUT);
  pinMode(pinEcho, INPUT);
  pinMode(ledVerde, OUTPUT);
  pinMode(ledAmarillo, OUTPUT);
  pinMode(ledRojo, OUTPUT);
  pinMode(pinBuzzer, OUTPUT);

  // Inicialización de la pantalla LCD
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("  SISTEMA  DE  ");
  lcd.setCursor(0, 1);
  lcd.print(" ESTACIONAMIENTO");
  delay(2000);
  lcd.clear();
}

void loop() {
  // 1. Generar pulso ultrasónico para medir distancia
  digitalWrite(pinTrig, LOW);
  delayMicroseconds(2);
  digitalWrite(pinTrig, HIGH);
  delayMicroseconds(10);
  digitalWrite(pinTrig, LOW);

  // 2. Leer el tiempo que tarda en regresar el eco y calcular la distancia en cm
  duracion = pulseIn(pinEcho, HIGH);
  distancia = duracion * 0.034 / 2;

  // 3. Mostrar la lectura en la pantalla LCD
  lcd.setCursor(0, 0);
  lcd.print("Distancia: ");
  lcd.print(distancia);
  lcd.print(" cm   "); // Espacios extras para limpiar residuos de números anteriores

  lcd.setCursor(0, 1);

  // 4. Lógica de control de alertas (LEDs y sonido variable)
  
  if (distancia > 50 || distancia <= 0) {
    // Zona Segura o fuera de rango: Todo apagado
    lcd.print("ZONA SEGURA     ");
    digitalWrite(ledVerde, LOW);
    digitalWrite(ledAmarillo, LOW);
    digitalWrite(ledRojo, LOW);
    noTone(pinBuzzer);
  }
  else if (distancia > 30 && distancia <= 50) {
    // Advertencia Lejana: LED Verde encendido, pitido lento
    lcd.print("CUIDADO [VERDE] ");
    digitalWrite(ledVerde, HIGH);
    digitalWrite(ledAmarillo, LOW);
    digitalWrite(ledRojo, LOW);
    
    tone(pinBuzzer, 1000); // Tono de 1kHz
    delay(100);            // Duración del pitido
    noTone(pinBuzzer);
    delay(400);            // Pausa larga entre pitidos
  }
  else if (distancia > 10 && distancia <= 30) {
    // Advertencia Cercana: LED Amarillo encendido, pitido mediano
    lcd.print("ALERTA [AMARILLO]");
    digitalWrite(ledVerde, LOW);
    digitalWrite(ledAmarillo, HIGH);
    digitalWrite(ledRojo, LOW);
    
    tone(pinBuzzer, 1200); 
    delay(100);            
    noTone(pinBuzzer);
    delay(150);            // Pausa más corta
  }
  else if (distancia <= 10) {
    // Peligro de Choque: LED Rojo encendido, sonido continuo
    lcd.print("¡PARE! [ROJO]   ");
    digitalWrite(ledVerde, LOW);
    digitalWrite(ledAmarillo, LOW);
    digitalWrite(ledRojo, HIGH);
    
    tone(pinBuzzer, 1500); // Pitido agudo e ininterrumpido
  }

  delay(60); // Pequeña pausa de estabilidad antes de la siguiente lectura
}

More projects by albertoarangurenp