Estacionamiento con Control de Pluma

Aquí tienes un ejemplo de código para Arduino que gestiona un estacionamiento con cupo limitado de 8 vehículos. El sistema utiliza dos sensores (uno para entrada y otro para salida), una "pluma" (representada como un pin de salida que puede activar un actuador) y un display de 7 segmentos para mostrar el número actual de autos en el estacionamiento.

Cpp


// Configuración de pines
const int sensorEntrada = 2;   // Sensor que detecta autos que entran
const int sensorSalida  = 3;   // Sensor que detecta autos que salen
const int pluma       = 4;     // Señal para activar/desactivar la pluma de acceso

// Pines del display de 7 segmentos (asumiendo display de cátodo común)
const int segPins[7] = {5, 6, 7, 8, 9, 10, 11};

// Matriz con los segmentos a encender para cada dígito (0-9)
// Orden de segmentos: a, b, c, d, e, f, g (1 = encendido, 0 = apagado)
byte numeros[10][7] = {
  {1, 1, 1, 1, 1, 1, 0},  // 0
  {0, 1, 1, 0, 0, 0, 0},  // 1
  {1, 1, 0, 1, 1, 0, 1},  // 2
  {1, 1, 1, 1, 0, 0, 1},  // 3
  {0, 1, 1, 0, 0, 1, 1},  // 4
  {1, 0, 1, 1, 0, 1, 1},  // 5
  {1, 0, 1, 1, 1, 1, 1},  // 6
  {1, 1, 1, 0, 0, 0, 0},  // 7
  {1, 1, 1, 1, 1, 1, 1},  // 8
  {1, 1, 1, 1, 0, 1, 1}   // 9
};

const int capacidadMaxima = 8;  // Cupo máximo del estacionamiento
int contador = 0;              // Cantidad de autos actualmente

// Variables para control de rebote (debounce)
unsigned long lastDebounceTimeEntrada = 0;
unsigned long lastDebounceTimeSalida  = 0;
const unsigned long debounceDelay = 50;
int lastEntradaReading = LOW;
int lastSalidaReading  = LOW;
int entradaState  = LOW;
int salidaState   = LOW;

void setup() {
  // Configuración de pines para sensores y actuadores
  pinMode(sensorEntrada, INPUT);
  pinMode(sensorSalida,  INPUT);
  pinMode(pluma,         OUTPUT);
  
  // Configuración de pines para el display de 7 segmentos
  for (int i = 0; i < 7; i++) {
    pinMode(segPins[i], OUTPUT);
  }
  
  actualizarDisplay();
}

void loop() {
  // Lectura y debounce para sensor de entrada
  int lecturaEntrada = digitalRead(sensorEntrada);
  if (lecturaEntrada != lastEntradaReading) {
    lastDebounceTimeEntrada = millis();
  }
  if ((millis() - lastDebounceTimeEntrada) > debounceDelay) {
    if (lecturaEntrada == HIGH && entradaState == LOW) {
      // Si se detecta la entrada de un auto
      if (contador < capacidadMaxima) {
        contador++;  // Incrementa el contador
        // Activa la pluma (por ejemplo, levanta la barrera)
        digitalWrite(pluma, HIGH);
        delay(1000); // Mantener la pluma activa por 1 segundo
        digitalWrite(pluma, LOW);
      } 
      // Si ya se alcanzó la capacidad máxima, no se activa la pluma
      actualizarDisplay();
      delay(500);  // Pequeña demora para evitar lecturas múltiples
    }
    entradaState = lecturaEntrada;
  }
  lastEntradaReading = lecturaEntrada;
  
  // Lectura y debounce para sensor de salida
  int lecturaSalida = digitalRead(sensorSalida);
  if (lecturaSalida != lastSalidaReading) {
    lastDebounceTimeSalida = millis();
  }
  if ((millis() - lastDebounceTimeSalida) > debounceDelay) {
    if (lecturaSalida == HIGH && salidaState == LOW) {
      // Si se detecta la salida de un auto
      if (contador > 0) {
        contador--;  // Decrementa el contador
      }
      actualizarDisplay();
      delay(500);
    }
    salidaState = lecturaSalida;
  }
  lastSalidaReading = lecturaSalida;
}

void actualizarDisplay() {
  // Actualiza el display de 7 segmentos para mostrar el valor de "contador"
  // Se asume que el contador es siempre menor a 10 (solo un dígito)
  for (int i = 0; i < 7; i++) {
    digitalWrite(segPins[i], numeros[contador][i]);
  }
}
Explicación breve:
  • Se usan dos sensores conectados a los pines 2 y 3 para detectar la entrada y salida de autos.
  • La pluma (en el pin 4) se activa (enciende) durante 1 segundo al detectar un auto que entra siempre y cuando el contador sea menor que la capacidad máxima.
  • Se implementa una rutina actualizarDisplay() para refrescar el display de 7 segmentos conectados a los pines 5 al 11.
  • Se utiliza una técnica de debounce para evitar lecturas erróneas de los sensores.
Puedes ajustar pines, tiempos y lógica según el hardware específico que estés utilizando. ¡Espero que te sea de ayuda para tu proyecto!
Power Section
Main IC Selection
Start Schematic

No files yet

Documents

    Documents are markdown text files which describe project goals, capture details, or even simulation outputs.

    Assets

    No assets added.

    Skilled Azure P.K.E. Meter

    Skilled Azure P.K.E. Meter thumbnail
    Welcome to your new project. Imagine what you can build here.

    Properties

    Properties describe core aspects of the project.

    Pricing & Availability

    Distributor

    Qty 1

    Controls