Puerta automática con Arduino y sensor ultrasónico HC-SR04
Componentes y suministros
- Arduino UNO × 1
- Sensor ultrasónico HC-SR04 × 1
- Motor DC 12V × 1
- Shield de motor L293D × 1
- Pantalla LCD 16x2 RGB (Adafruit) × 1
- Buzzer piezoeléctrico × 1
- Cables jumper × 1
Aplicaciones y servicios
- Arduino IDE
Sobre el proyecto
Sistema de apertura automática de puertas
Este proyecto implementa un sistema mecatrónico de apertura y cierre automático de puertas mediante detección de presencia con sensor ultrasónico. Es común en tiendas, supermercados y edificios.
El sistema detecta una persona u objeto a ≤5 cm, abre la puerta mediante motor DC con cremallera y piñón, muestra estado en LCD, emite sonido con buzzer durante la apertura y cierra tras un tiempo.
Componentes detallados
- Arduino UNO R3 (ATmega328P) - controlador principal
- HC-SR04 - sensor ultrasónico (2cm-400cm, precisión 3mm)
- Motor DC 12V - 170 RPM sin carga, relación 1:48
- LCD 16x2 - muestra estado "WELCOME" / "Please Enter"
- Buzzer piezoeléctrico - señal acústica durante apertura
- Shield L293D - driver H-bridge para controlar motor desde Arduino (evita quemar el microcontrolador)
- Elementos mecánicos: acrílico para prototipo con puerta corrediza
- Fuente de alimentación 12V
Funcionamiento del sensor HC-SR04
- Pulso de 10µs en pin TRIG
- Módulo envía 8 pulsos a 40kHz
- Mide tiempo de eco en pin ECHO
- Distancia = (tiempo × 340m/s) / 2
Paso a paso
Paso 1: Reunir hardware y herramientas
Herramientas opcionales: multímetro, soldador.
Paso 2: Programa Arduino
Código adjunto en la sección Código.
Paso 3: Conexiones hardware
Según esquemático. Pines principales:
- TRIG → Pin 7
- ECHO → Pin 4
- Motor EN → Pin 2
- Motor IN1 → Pin 3
- Motor IN2 → Pin 6
- Buzzer → Pin 10
- LCD: RS=12, E=11, D4=5, D5=8, D6=9, D7=1
Paso 4: Cargar programa y alimentar
Subir sketch, conectar alimentación 12V al shield.
Código
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 8, 9, 1);
const int trigPin = 7;
const int echoPin = 4;
const int mt_En_Pin1 = 2;
const int mt_IN1_Pin2 = 3;
const int mt_IN2_Pin3 = 6;
int buzz = 10;
long duration;
int distance;
void setup() {
lcd.clear();
lcd.begin(16, 2);
lcd.print("WELCOME");
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(mt_En_Pin1, OUTPUT);
pinMode(mt_IN1_Pin2, OUTPUT);
pinMode(mt_IN2_Pin3, OUTPUT);
Serial.begin(9600);
pinMode(buzz, OUTPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
if (distance <= 5) {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(mt_En_Pin1, HIGH);
analogWrite(mt_IN1_Pin2, 50);
analogWrite(mt_IN2_Pin3, 0);
delay(2000);
analogWrite(mt_IN1_Pin2, 0);
analogWrite(mt_IN2_Pin3, 0);
delay(1000);
tone(buzz, 1000);
delay(1000);
tone(buzz, 1000);
delay(1000);
noTone(buzz);
delay(3000);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Please Enter");
delay(1000);
analogWrite(mt_IN1_Pin2, 0);
analogWrite(mt_IN2_Pin3, 50);
delay(3000);
} else {
digitalWrite(13, LOW);
digitalWrite(mt_En_Pin1, LOW);
analogWrite(mt_IN1_Pin2, 50);
analogWrite(mt_IN2_Pin3, 0);
}
}
Piezas personalizadas
Imagen de conexiones hardware.
Esquemáticos
Diagramas de conexión disponibles en el proyecto original.
Proceso de manufactura
- Construya un mando a distancia IR universal con Arduino: Guía paso a paso
- Construye un Iron Man animado con Arduino: componentes, sensores y guía paso a paso
- Find Me: Localizador Inteligente de Objetos con Arduino y Bluetooth
- Crea un Botón de Teclado Personalizado y "Apuñalable" con Arduino: Guía Paso a Paso
- Pantalla LED Matricial Interactiva en Puerta con Sensor PIR - Saludo Navideño Arduino
- Mide la masa de la Tierra con Arduino: Guía paso a paso DIY
- Construye un abridor de puerta automático sin contacto con detección de temperatura
- Construye un volante joystick personalizado con Arduino para gaming
- Genera Tonos Musicales con Arduino: Guía Paso a Paso
- Robot comedero con Arduino Nano: Guía paso a paso
- Construye una Brújula Digital en Tiempo Real con Arduino y Processing