Nota
¡Hola, bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook! Profundiza en Raspberry Pi, Arduino y ESP32 con otros aficionados.
Why Join?
Expert Support: Resuelve problemas posventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
Learn & Share: Intercambia consejos y tutoriales para mejorar tus habilidades.
Exclusive Previews: Obtén acceso anticipado a anuncios de nuevos productos y avances exclusivos.
Special Discounts: Disfruta de descuentos exclusivos en nuestros productos más recientes.
Festive Promotions and Giveaways: Participa en sorteos y promociones festivas.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [aquí] y únete hoy mismo!
Lección 40: Relé activado por movimiento
Este proyecto de Arduino tiene como objetivo controlar una luz operada por un relé utilizando un sensor de infrarrojos pasivo (PIR). Cuando el sensor PIR detecta movimiento, se activa el relé, encendiendo la luz. La luz permanece encendida durante 5 segundos después del último movimiento detectado.
Advertencia
Como demostración, estamos usando un relé para controlar un módulo LED RGB. Sin embargo, en escenarios reales, este no puede ser el enfoque más práctico.
Aunque puedes conectar el relé a otros electrodomésticos en aplicaciones reales, se requiere extremo cuidado al tratar con voltaje AC ALTO. El uso inapropiado o incorrecto puede conducir a lesiones graves o incluso la muerte. Por lo tanto, está destinado a personas que están familiarizadas y tienen conocimientos sobre voltaje AC ALTO. Prioriza siempre la seguridad.
Componentes Necesarios
Para este proyecto, necesitaremos los siguientes componentes.
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
Nombre |
ELEMENTOS EN ESTE KIT |
ENLACE |
|---|---|---|
Kit Universal de Sensores para Creadores |
94 |
También puedes comprarlos por separado en los siguientes enlaces.
Introducción del Componente |
Enlace de Compra |
|---|---|
Arduino UNO R3 o R4 |
|
- |
|
- |
|
- |
|
Cableado
Código
Análisis del Código
El proyecto se centra en la capacidad del sensor de movimiento PIR para detectar movimiento. Cuando se detecta movimiento, se envía una señal al Arduino, activando el módulo de relé, que a su vez activa una luz. La luz permanece encendida durante una duración especificada (en este caso, 5 segundos) después del último movimiento detectado, asegurando que el área permanezca iluminada por un corto período incluso si el movimiento cesa.
Configuración inicial y declaración de variables
Este segmento define constantes y variables que se utilizarán a lo largo del código. Configuramos los pines del relé y del PIR y una constante de retardo para el movimiento. También tenemos una variable para llevar el registro del último tiempo de detección de movimiento y una bandera para monitorear si se detecta movimiento.
// Definir el número de pin para el relé const int relayPin = 9; // Definir el número de pin para el sensor PIR const int pirPin = 8; // Umbral de retardo de movimiento en milisegundos const unsigned long MOTION_DELAY = 5000; unsigned long lastMotionTime = 0; // Marca de tiempo de la última detección de movimiento bool motionDetected = false; // Bandera para rastrear si se detecta movimiento
Configuración de pines en la función setup()
En la función
setup(), configuramos los modos de pin para tanto el relé como el sensor PIR. También inicializamos el relé para que esté apagado al inicio.void setup() { pinMode(relayPin, OUTPUT); // Establecer relayPin como un pin de salida pinMode(pirPin, INPUT); // Establecer el pin PIR como entrada digitalWrite(relayPin, LOW); // Apagar inicialmente el relé }
Lógica principal en la función loop()
La función
loop()contiene la lógica principal. Cuando el sensor PIR detecta movimiento, envía una señalHIGH, encendiendo el relé y actualizandolastMotionTime. Si no hay movimiento durante el retraso especificado (5 segundos en este caso), el relé se apaga.Este enfoque asegura que incluso si el movimiento es esporádico o breve, la luz permanezca encendida durante al menos 5 segundos después del último movimiento detectado, proporcionando una duración de iluminación consistente.
void loop() { if (digitalRead(pirPin) == HIGH) { lastMotionTime = millis(); // Actualizar el último tiempo de movimiento digitalWrite(relayPin, HIGH); // Encender el relé (y por lo tanto la luz) motionDetected = true; } // Si se detectó movimiento anteriormente y han transcurrido 5 segundos, apagar el relé if (motionDetected && (millis() - lastMotionTime >= MOTION_DELAY)) { digitalWrite(relayPin, LOW); // Apagar el relé motionDetected = false; } }