⭐⭐⭐ Reto
⏱️ 30 minutos
Barrera automática
¡La versión inteligente de la barrera! El sensor de distancia ve que viene un coche. Entonces el zumbador pita y la barrera se abre sola. ¿El coche se ha ido? Entonces se vuelve a cerrar.
🧰 ¿Qué necesitas?
🔌
Cable USB + Cables jumper🗺️ Esquema de conexión
Sigue los cables desde el Arduino hasta cada pieza. Puedes elegir tú los colores de los cables.
| Desde | Hasta |
|---|---|
Arduino UNO · D9 |
Sensor de distancia HC-SR04 · Trig |
Arduino UNO · D10 |
Sensor de distancia HC-SR04 · Echo |
Arduino UNO · 5V |
Sensor de distancia HC-SR04 · Vcc |
Arduino UNO · GND |
Sensor de distancia HC-SR04 · Gnd |
Arduino UNO · D5 |
Servomotor SG90 · PWM |
Arduino UNO · 5V |
Servomotor SG90 · VCC |
Arduino UNO · GND |
Servomotor SG90 · GND |
Arduino UNO · D8 |
Zumbador activo · S |
Arduino UNO · 5V |
Zumbador activo · + |
Arduino UNO · GND |
Zumbador activo · - |
🛠️ Así lo construyes
- Conecta el HC-SR04: Trig al pin 9, Echo al pin 10, Vcc a 5V y Gnd a GND.
- Conecta el servo: naranja al pin 5, rojo a 5V y marrón a GND.
- Conecta el zumbador: S al pin 8, + a 5V y − a GND.
- Pega una pajita o un palito de helado al servo como barrera y pon el sensor delante.
💻 El código
// Barrera automática
// ¿Viene un coche (a menos de 15 cm)? Entonces el zumbador pita y la barrera se abre.
#include <Servo.h>
const int TRIG_PIN = 9; // Trig del HC-SR04 en pin 9
const int ECHO_PIN = 10; // Echo del HC-SR04 en pin 10
const int SERVO_PIN = 5; // Cable naranja/amarillo del servo en pin 5
const int ZUMBADOR_PIN = 8; // S del zumbador en pin 8
const int CERCA = 15; // Desde esta distancia (cm) se abre la barrera
const int CERRADO = 0; // Ángulo cuando la barrera está cerrada
const int ABIERTO = 90; // Ángulo cuando la barrera está abierta
Servo barrera;
long medirDistancia() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long tiempo = pulseIn(ECHO_PIN, HIGH, 30000);
if (tiempo == 0) return 999;
return tiempo / 58;
}
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(ZUMBADOR_PIN, OUTPUT);
barrera.attach(SERVO_PIN);
barrera.write(CERRADO);
}
void loop() {
long distancia = medirDistancia();
if (distancia < CERCA) {
Serial.println(F("¡Coche visto! Barrera abierta."));
digitalWrite(ZUMBADOR_PIN, HIGH); // Pitido corto
delay(100);
digitalWrite(ZUMBADOR_PIN, LOW);
barrera.write(ABIERTO);
delay(1000);
// Quedarse abierta mientras el coche siga ahí
while (medirDistancia() < CERCA) {
delay(200);
}
delay(2000); // Esperar un poco más hasta que el coche se vaya
barrera.write(CERRADO);
Serial.println(F("Barrera cerrada."));
}
delay(100);
}
🧠 ¿Qué hace el código?
- El HC-SR04 mide la distancia todo el tiempo. ¿Menos de 15 cm? Entonces hay un coche.
- El zumbador pita un momento y el servo gira a 90 grados: abierto.
- Mientras el coche está allí, la barrera queda abierta. Luego esperamos 2 segundos y se cierra.
🎯 Prueba esto…
- Cuenta cuántos coches han pasado y muéstralo en el monitor serie
- Añade un LED rojo y uno verde como semáforo junto a la barrera
- Haz que la barrera solo se abra si también se pulsa un botón
🚀 Construye este proyecto con Codey: abre codey.online/es/starter-kits/uno/projects/automatic-barrier y haz clic en HAZ ESTO. Entonces el código y el esquema de conexión estarán listos enseguida.
Codey Online es un producto de OTRONIC