¡ParkingBot 3000! – Tu cochera con cerebro electrónico
¡ParkingBot 3000! – Tu cochera con cerebro electrónico
Objetivo de aprendizaje:
Los Y Las estudiantes construirán un sistema automatizado que:
-
Detecta la entrada de vehículos con un sensor ultrasónico.
-
Mueve una barrera con un servomotor.
-
Muestra en una pantalla LCD el número de carros en la cochera con efecto animado.
Materiales necesarios:
-
1 Arduino Uno
-
1 Sensor ultrasónico HC-SR04
-
1 Servomotor SG90
-
1 Pantalla LCD 16x2 con módulo I2C
-
Jumpers
-
Protoboard
-
Fuente de alimentación externa para el servo (opcional)
Conexiones recomendadas:
Componente | Pin Arduino |
---|---|
Trigger HC-SR04 | Pin 8 |
Echo HC-SR04 | Pin 9 |
Servo SG90 | Pin 6 |
LCD SDA | A4 |
LCD SCL | A5 |
Código mejorado y comentado:
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
// LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Sensor ultrasónico
const int trigPin = 8;
const int echoPin = 9;
// Servo
Servo barrera;
const int servoPin = 6;
// Variables
long duracion;
int distancia;
int contadorCarros = 0;
bool carroDetectado = false;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
barrera.attach(servoPin);
barrera.write(0); // Barrera cerrada
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("ParkingBot 3000");
delay(2000);
lcd.clear();
}
void loop() {
distancia = medirDistancia();
// Si un carro se acerca (menos de 15 cm) y no se había detectado antes
if (distancia < 15 && !carroDetectado) {
carroDetectado = true;
abrirBarrera();
contadorCarros++;
actualizarLCD();
delay(3000); // Tiempo para que pase el carro
cerrarBarrera();
}
// Si ya no hay carro
if (distancia >= 15) {
carroDetectado = false;
}
delay(200);
}
int medirDistancia() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duracion = pulseIn(echoPin, HIGH);
return duracion * 0.034 / 2;
}
void abrirBarrera() {
barrera.write(90); // Abre la barrera
}
void cerrarBarrera() {
barrera.write(0); // Cierra la barrera
}
void actualizarLCD() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ingresando...");
// Animación de desplazamiento del mensaje
for (int i = 0; i < 5; i++) {
lcd.scrollDisplayLeft();
delay(250);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Carros:");
lcd.setCursor(0, 1);
lcd.print("Total: ");
lcd.print(contadorCarros);
delay(2000); // Mantener visible el conteo
}
VIDEO
Comments
Post a Comment