Diseño de Estacionamiento Inteligente
Diagram
Cpp
// Código de ejemplo para Arduino Esclavo (Nivel X) #include <SoftwareSerial.h> // Incluir librería para la matriz LED RGB según tu hardware, por ejemplo Adafruit_NeoPixel #include <Adafruit_NeoPixel.h> // Configuración de pines para RS485 (adaptar según tus conexiones) #define RS485_RX_PIN 10 #define RS485_TX_PIN 11 // Pines para sensores: #define SENSOR_ENTRADA_1 2 #define SENSOR_SALIDA_2 3 #define SENSOR_ENTRADA_3 4 #define SENSOR_SALIDA_4 5 // Parámetros de la matriz LED RGB 10x10 #define LED_PIN 6 #define NUM_LEDS 100 // 10x10 // Inicializar la comunicación RS485 en SoftwareSerial SoftwareSerial rs485(RS485_RX_PIN, RS485_TX_PIN); // Inicializar la matriz LED (usa el objeto y configuración según la librería) Adafruit_NeoPixel matrix(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800); int parkingSpaces = 95; // estado inicial de espacios disponibles const int nivelID = 1; // asigna un identificador único para cada nivel void setup() { // Iniciar comunicaciones: Serial.begin(9600); // para debug rs485.begin(9600); // Configurar sensores: pinMode(SENSOR_ENTRADA_1, INPUT); pinMode(SENSOR_SALIDA_2, INPUT); pinMode(SENSOR_ENTRADA_3, INPUT); pinMode(SENSOR_SALIDA_4, INPUT); // Iniciar la matriz LED: matrix.begin(); matrix.show(); // Apagar todos los LEDs inicialmente } void loop() { // Detección de entrada: if (digitalRead(SENSOR_ENTRADA_1) == HIGH || digitalRead(SENSOR_ENTRADA_3) == HIGH) { if (parkingSpaces > 0) { parkingSpaces--; enviarActualizacion(); actualizarMatriz(); delay(200); // Anti-rebote básico } } // Detección de salida: if (digitalRead(SENSOR_SALIDA_2) == HIGH || digitalRead(SENSOR_SALIDA_4) == HIGH) { if (parkingSpaces < 95) { parkingSpaces++; enviarActualizacion(); actualizarMatriz(); delay(200); // Anti-rebote básico } } } // Función para enviar la actualización al maestro vía RS485 void enviarActualizacion() { // Mensaje en el formato "LX:valor" (ejemplo: "L1:94") String msg = "L" + String(nivelID) + ":" + String(parkingSpaces); rs485.println(msg); Serial.println(msg); // debug } // Función básica para actualizar la matriz LED void actualizarMatriz() { // Ejemplo: encender LEDs proporcionalmente a la cantidad de espacios disponibles. int ledsEncendidos = map(parkingSpaces, 0, 95, 0, NUM_LEDS); for (int i = 0; i < NUM_LEDS; i++) { if (i < ledsEncendidos) { matrix.setPixelColor(i, matrix.Color(0, 150, 0)); // verde } else { matrix.setPixelColor(i, matrix.Color(150, 0, 0)); // rojo } } matrix.show(); }
Nota: Adapta los pines, tiempos de anti-rebote y la forma de actualizar la matriz según tus componentes concretos.
Cpp
// Código de ejemplo para el Arduino Maestro #include <SoftwareSerial.h> // Configuración de RS485: (adaptar pines y conexiones) #define RS485_RX_PIN 10 #define RS485_TX_PIN 11 SoftwareSerial rs485(RS485_RX_PIN, RS485_TX_PIN); // Array que almacena los espacios disponibles por cada nivel (inicialmente 95 en cada uno) int niveles[7] = {95, 95, 95, 95, 95, 95, 95}; void setup() { Serial.begin(9600); // para debug rs485.begin(9600); // Iniciar configuración del totem o pantalla según el hardware disponible. } void loop() { // Comprobar si hay datos recibidos por RS485 if (rs485.available()) { String mensaje = rs485.readStringUntil('\n'); Serial.println("Recibido: " + mensaje); // debug // Se espera un formato "LX:valor" (ej: "L3:90") int posL = mensaje.indexOf("L"); int posDosPuntos = mensaje.indexOf(":"); if (posL != -1 && posDosPuntos != -1) { int nivel = mensaje.substring(posL+1, posDosPuntos).toInt(); int valor = mensaje.substring(posDosPuntos+1).toInt(); // Verificar el id del nivel if (nivel >= 1 && nivel <= 7) { niveles[nivel-1] = valor; } actualizarTotem(); } } } // Función para actualizar el totem de la entrada void actualizarTotem() { // Consolidar la información y actualizar la pantalla principal. // Por ejemplo, imprimir la disponibilidad de cada nivel. Serial.println("Estado actualizado de niveles:"); for (int i = 0; i < 7; i++) { Serial.print("Nivel "); Serial.print(i+1); Serial.print(": "); Serial.print(niveles[i]); Serial.println(" lugares disponibles"); } // Aquí se debe agregar el código para actualizar el totem o pantalla gráfica. // Esto podría implicar actualizar una matriz LED o enviar información a un display. }
Nota: La funciónactualizarTotem()debe completarse según el hardware escogido para el totem (por ejemplo, una pantalla LCD, OLED o una matriz LED mayor).
Welcome 👋
Flux helps you build PCBs faster with an AI teammate!
Create your account to collaborate, stay updated, fork your own version, and get instant answers from our AI agent.