Cómo Controlar el Cierre Automático de un Portón con Arduino

Introducción

En la automatización de portón con Arduino, es fundamental contar con un sistema de cierre automático que garantice seguridad y eficiencia. Con Arduino, es posible diseñar una solución personalizada utilizando sensores y programación para que el portón se cierre automáticamente después de un tiempo determinado o cuando no haya obstáculos en su trayectoria.

En este artículo, te explicaremos cómo desarrollar un sistema de cierre automático para un portón eléctrico utilizando Arduino, los materiales que necesitas y cómo programarlo.

1. Materiales Necesarios 🔧

Para este proyecto utilizaremos los siguientes componentes:

1️⃣ Microcontrolador: Arduino UNO o cualquier otro compatible
2️⃣ Sensor magnético (reed switch): Detecta la apertura del portón
3️⃣ Módulo Relé 5V: Activa el mecanismo de cierre del portón
4️⃣ Transistor NPN (ejemplo: 2N2222 o BC547): Aísla el relé y evita fallos eléctricos
5️⃣ Resistencia de 1kΩ: Limita la corriente entre el Arduino y el transistor
6️⃣ Diodo 1N4007 (opcional pero recomendado): Protección contra picos de corriente del relé
7️⃣ Fuente de alimentación de 5V: Para alimentar el Arduino y el relé

📌 Recomendamos usar una fuente de alimentación estable y fusibles para proteger el circuito.

automatización de portón con Arduino

2. Conexiones del circuito

1️⃣ Sensor magnético (reed switch)

📌 Función: Detecta cuando el portón está abierto o cerrado
Conexiones:

  • Un terminal a GND de Arduino
  • Otro terminal al pin 2 de Arduino (con resistencia pull-up interna activada)

📌 Explicación:

  • Cuando el portón está cerrado, el sensor está en estado HIGH (porque no hay contacto a GND).
  • Cuando el portón se abre, el sensor cambia a LOW, iniciando el temporizador.

2️⃣ Control del relé con un transistor NPN

📌 Función: El transistor actúa como un interruptor para activar el relé, evitando que el Arduino se sobrecargue.

Conexiones del transistor NPN:

  • Base (B)Pin 3 de Arduino (a través de la resistencia de 1kΩ)
  • Colector (C)Pin de control del relé (IN)
  • Emisor (E)GND de Arduino

📌 Explicación:

  • Cuando el pin 3 de Arduino envía un HIGH (5V), la corriente fluye por la base del transistor activándolo.
  • Esto cierra el circuito entre colector-emisor, permitiendo que el relé reciba energía y active el motor del portón.

Resistencia de 1kΩ en la base del transistor:

  • Protege al Arduino limitando la corriente hacia el transistor.

Diodo en paralelo con la bobina del relé:

  • Protege el transistor de picos de voltaje generados por el relé al desactivarse.

3️⃣ Conexiones del módulo relé

Conexiones del relé de 5V:

  • VCC5V de Arduino
  • GNDGND de Arduino
  • INColector del transistor NPN
  • Común (COM)Terminal del motor del portón
  • Normalmente Abierto (NO)Otra terminal del motor del portón

📌 Explicación:

  • Cuando el Arduino activa el transistor, el relé se cierra por 1 segundo y acciona el mecanismo de cierre del portón.

3. Código para el Cierre Automático con Arduino 🖥

Este código permite que el portón se cierre automáticamente después de 10 segundos si no hay obstáculos.

const int sensorPin = 2; // Pin del sensor magnético (reed switch)
const int relePin = 3; // Pin del transistor que controla el relé
const unsigned long tiempoEspera = 60000; // Tiempo antes del cierre (1 min)

unsigned long tiempoInicio = 0; // Almacena el tiempo en que se detectó la apertura
bool temporizadorActivo = false; // Indica si el temporizador está en marcha
bool portonAbierto = false; // Indica si el portón está abierto

void setup() {
pinMode(sensorPin, INPUT_PULLUP); // Configura el sensor como entrada con resistencia pull-up
pinMode(relePin, OUTPUT); // Configura el transistor como salida
digitalWrite(relePin, LOW); // Asegura que el relé inicie apagado
Serial.begin(9600); // Inicia la comunicación serial para depuración
}

void loop() {
static int estadoAnterior = HIGH; // Guarda el último estado del sensor
int estadoSensor = digitalRead(sensorPin); // Lee el estado actual del sensor

// **1. DETECCIÓN DEL CAMBIO DE ESTADO CON DEBOUNCE**
// Compara el estado actual con el anterior para detectar cambio de estado
if (estadoSensor == LOW && estadoAnterior == HIGH) { 
    delay(50);  // Espera 50ms para eliminar posibles rebotes
    if (digitalRead(sensorPin) == LOW) { // Vuelve a leer el sensor para confirmar
        tiempoInicio = millis();  // Guarda el tiempo actual
        temporizadorActivo = true; // Activa el temporizador
        portonAbierto = true;  // Marca que el portón está abierto
        Serial.println("Portón abierto - Temporizador iniciado");
    }
}
estadoAnterior = estadoSensor; // Guarda el estado actual para la próxima iteración

// **2. TEMPORIZADOR PARA CERRAR EL PORTÓN**
if (temporizadorActivo && millis() - tiempoInicio >= tiempoEspera) { 
    Serial.println("Activando relé para cerrar portón");
    digitalWrite(relePin, HIGH);  // Activa el transistor (prueba con HIGH/LOW según el módulo)
    delay(1000);  // Mantiene el relé activado 1 segundo
    digitalWrite(relePin, LOW); // Desactiva el transistor
    temporizadorActivo = false; // Detiene el temporizador
    portonAbierto = false;  // Resetea la variable para detectar la siguiente apertura
    Serial.println("Relé desactivado - Temporizador reiniciado");
}

delay(100);  // Pequeño retraso para estabilidad

}

📌 Explicación del Código Mejorado

Este código está diseñado para controlar el cierre automático de un portón después de 1 minuto de haber sido abierto, utilizando Arduino, un sensor magnético (reed switch) y un relé activado a través de un transistor NPN.

Sección 1: Declaración de variables
  • sensorPin (Pin 2): Se usa para leer el estado del sensor magnético.
  • relePin (Pin 3): Controla el transistor que activa el relé.
  • tiempoEspera: Define el tiempo que el portón permanece abierto antes de cerrarse automáticamente (1 minuto = 60,000 ms).
  • tiempoInicio: Guarda el tiempo exacto en que el portón se abre.
  • temporizadorActivo: Indica si el temporizador está en marcha.
  • portonAbierto: Indica si el portón está abierto.
Sección 2: Configuración inicial (setup)

1️⃣ Configura el sensorPin como entrada con INPUT_PULLUP

  • El sensor magnético se comporta como un interruptor:
    • Cuando el portón está cerrado, el sensor está en estado HIGH.
    • Cuando el portón se abre, el sensor cambia a LOW.

2️⃣ Configura el relePin como salida y lo inicializa en LOW

  • Esto garantiza que el relé permanezca apagado al inicio.

3️⃣ Inicia la comunicación serial

  • Permite visualizar los eventos en el monitor serie para depuración.
Sección 3: Bucle principal (loop)

🔹 Explicación:

  • estadoAnterior almacena el estado anterior del sensor para detectar cambios.
  • estadoSensor lee el estado actual del sensor.
Paso 1: Detectar la apertura del portón

Explicación:

  • Se verifica si el sensor cambió de HIGH a LOW (indica que el portón se abrió).
  • Se agrega un delay(50) para evitar lecturas erróneas (rebotes).
  • Si el sensor sigue en LOW, significa que el portón está realmente abierto.
  • Se guarda el tiempo de apertura (tiempoInicio = millis()), se activa el temporizador y se muestra un mensaje.
Paso 2: Esperar el tiempo de cierre automático (1 minuto)

Explicación:

  • Se verifica si el temporizador está activo y si ha pasado 1 minuto (millis() - tiempoInicio >= 60000).
  • Si se cumple, se activa el relé (digitalWrite(relePin, HIGH)) por 1 segundo para cerrar el portón.
  • Luego, el relé se desactiva (digitalWrite(relePin, LOW)).
  • El temporizador y la variable portonAbierto se resetean para esperar la siguiente apertura.
Paso 3: Pequeña pausa para estabilidad

Explicación:

  • Se agrega un pequeño delay(100) para evitar lecturas erróneas y dar estabilidad al código.

4. Beneficios de Automatizar el Cierre del Portón 🚪

Mayor seguridad al evitar que el portón quede abierto accidentalmente.
Evita fallos humanos al olvidar cerrarlo manualmente.
Ahorro de energía al optimizar el uso del motor.
Compatible con otros sistemas de acceso como RFID o biometría.

📌 Este sistema puede mejorarse con WiFi o Bluetooth para controlar el portón desde el celular.

Conclusión y Recomendación Final

El uso de Arduino para automatizar el cierre de un portón es una solución económica y eficiente que mejora la seguridad y la comodidad. Puedes personalizar el código y agregar sensores adicionales para adaptarlo a tus necesidades.

📌 ¿Quieres desarrollar un sistema de automatización para tu portón?
📞 Contáctanos al [3007594787] o por WhatsApp [3132945368]
📩 Escríbenos a info@tecnoacces.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

×