¡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

Popular posts from this blog

Te cuento mi aventura como mestra IB de Design y STEM

Cómo enseñar a mover motores con Arduino (RECOMENDABLE PARA COLLEGIOS, GOOGLE REFERENCE SCHOOL QUE USEN CHROMEBOOKS!)

Python con Arduino + Interfaz