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.







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:
- VCC ➝ 5V de Arduino
- GND ➝ GND de Arduino
- IN ➝ Colector 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