Saltar al contenido
Nivel inicial

Luces automáticas con sensor de movimiento

Conectar el relé

Para armar el sistema de luz automatizado y poder optimizar el consumo energético de un hogar, controlaremos el encendido y apagado de las luces a través de una placa Arduino y un módulo relé.

El relé es la pieza clave de este proyecto: es un interruptor controlado eléctricamente. La placa lo maneja con su señal de bajo voltaje y él, a su vez, abre o cierra un circuito independiente donde está conectada la lámpara. El código que subamos a la placa controlará la apertura y el cierre del relé y, en consecuencia, el encendido y apagado de las luces.

Esquema de conexión: placa Arduino UNO conectada a un módulo relé; el relé conmuta el circuito de una lámpara conectada a un enchufe de 220 V, rotulado ENCHUFE 220V.
Esquema original de la conexión del relé. En nuestra práctica, el circuito de la derecha se arma con una lámpara LED de baja tensión; la versión de 220 V es una extensión exclusiva del docente.

¡Atención! El original de este proyecto conmutaba lámparas de 220 V, la tensión de la red eléctrica, que es peligrosa: un contacto accidental puede causar lesiones graves. En esta reedición, toda la práctica se realiza con una lámpara LED de baja tensión (12 V o menos, o directamente un LED con su resistencia en la protoboard) conectada a los bornes del relé. El aprendizaje es exactamente el mismo: el relé no distingue qué carga conmuta. Además, aun trabajando con baja tensión, las conexiones a los bornes del relé van con cables firmes y tornillos ajustados, nunca sueltas sobre la protoboard.

El módulo relé tiene tres pines del lado de control: alimentación (VCC), tierra (GND) y señal. La señal se conecta al pin digital de la placa que indica la constante PIN_RELE al comienzo del código del paso siguiente. Del lado de la carga, la lámpara se conecta a los bornes de salida del módulo.

El módulo relé se alimenta desde el pin de 5 V del Arduino UNO, y su pin de señal va a la salida digital indicada en PIN_RELE.

El ESP32 trabaja con señales de 3,3 V. La mayoría de los módulos relé con optoacoplador se disparan igual con ese nivel; si el tuyo no conmuta, alimentá el módulo desde el pin VIN (5 V) manteniendo la señal en el GPIO que indica PIN_RELE. Evitá los GPIO 0, 2, 12 y 15, que intervienen en el arranque de la placa.

Podés explorar el sistema completo de este nivel (sensor, relé y lámpara) en el simulador. Es el mismo circuito que vas a armar sobre la mesa, y responde al comportamiento real del código:

Simulación del comportamiento

La misma máquina de estados del firmware, portada a TypeScript, maneja el comportamiento del dispositivo. No se ejecuta el binario real: la ejecución del .hex con avr8js está en el roadmap.

Simulación lista. Presioná «Iniciar» para arrancar la secuencia.

Programar el encendido y apagado de las luces

Para poder encender las luces debemos accionar el módulo relé. Realizaremos una prueba de encendido y apagado intermitente para verificar que todo funcione de forma correcta.

La programación la realizaremos directamente en el lenguaje de Arduino (C++), usando el Arduino IDE en su versión 2.x, que se descarga gratis desde arduino.cc/en/software. Un programa de Arduino se llama sketch y tiene dos bloques: la función setup(), que se ejecuta una sola vez al inicializarse el dispositivo, y la función loop(), que se ejecuta repetidamente después. Después de // se escriben comentarios para el lector, que no tienen efecto en el programa.

La idea del programa de prueba es simple. Al asignar el estado alto (HIGH) a la salida del relé estamos indicando que se aplique tensión a su entrada de señal, de manera que este permita el paso de corriente para que la lámpara se encienda. Al asignarle el estado bajo (LOW), estamos indicando que no se aplica tensión al módulo relé, de modo que no permita el paso de corriente y la lámpara se apague.

Ver el código completo · luces-temporizadas.ino
luces-temporizadas.ino Arduino UNO
// Encendido y apagado temporizado de las luces a través de un módulo relé.
// Prueba intermitente (1 s encendido / 1 s apagado) para verificar que el
// relé y la lámpara responden antes de agregar sensores.
//
// SEGURIDAD: esta práctica se realiza con una lámpara LED de baja tensión.
// La conexión a 220 V queda reservada al docente o a una instalación
// supervisada, y NUNCA sobre la protoboard (desvío pedagógico acordado
// sobre la advertencia de 220 V de la guía original).
//
// Plataforma: Arduino UNO.
// Conexión: entrada IN del módulo relé → pin 7 (VCC a 5 V, GND a GND).
//
// Basado en: código del Paso 2, Nivel Inicial — Automatización de Sistema
// Lumínico, Saberes Digitales (INET/EDUCAR 2019)
// Modernización: se reemplazó el código generado por mBlock3 (_delay, _loop)
// por C++ idiomático de Arduino con constantes nombradas, y el relé se mueve
// del pin 2 (original) al pin 7 (contrato de pines de la reedición).

const int PIN_RELE = 7;

// El original explica: estado ALTO = pasa corriente = lámpara encendida.
// Ese es un módulo relé "activo-alto". Muchos módulos escolares baratos
// son "activo-bajo" (se activan con LOW): si el tuyo enciende al revés,
// invertí SOLO estas dos constantes y el resto del programa queda igual.
// Esa es la gracia de las constantes con nombre.
const int RELE_ENCENDIDO = HIGH;
const int RELE_APAGADO   = LOW;

const unsigned long DURACION_ENCENDIDO_MS = 1000;
const unsigned long DURACION_APAGADO_MS   = 1000;

void setup() {
  pinMode(PIN_RELE, OUTPUT);
}

void loop() {
  // delay() detiene todo el programa: para esta prueba de encendido es
  // perfecto, porque el código se lee igual que la secuencia real.
  digitalWrite(PIN_RELE, RELE_ENCENDIDO); // la lámpara enciende
  delay(DURACION_ENCENDIDO_MS);
  digitalWrite(PIN_RELE, RELE_APAGADO);   // la lámpara se apaga
  delay(DURACION_APAGADO_MS);
}
luces-temporizadas.ino ESP32
// Encendido y apagado temporizado de las luces a través de un módulo relé.
// Prueba intermitente (1 s encendido / 1 s apagado) para verificar que el
// relé y la lámpara responden antes de agregar sensores.
//
// SEGURIDAD: esta práctica se realiza con una lámpara LED de baja tensión.
// La conexión a 220 V queda reservada al docente o a una instalación
// supervisada, y NUNCA sobre la protoboard (desvío pedagógico acordado
// sobre la advertencia de 220 V de la guía original).
//
// Plataforma: ESP32 (DevKit v1).
// Conexión: entrada IN del módulo relé → GPIO 16.
// Nota eléctrica: el ESP32 trabaja a 3,3 V (no 5 V como el UNO). Elegí un
// módulo relé cuya entrada acepte señal de 3,3 V (la mayoría de los módulos
// escolares la aceptan aunque se alimenten con 5 V) y nunca inyectes 5 V
// en un GPIO del ESP32.
//
// Basado en: código del Paso 2, Nivel Inicial — Automatización de Sistema
// Lumínico, Saberes Digitales (INET/EDUCAR 2019)
// Modernización: se reemplazó el código generado por mBlock3 (_delay, _loop)
// por C++ idiomático de Arduino con constantes nombradas, y se portó la guía
// (pensada para Arduino UNO, relé en pin 2) a ESP32 con GPIO seguros.

const int PIN_RELE = 16;

// El original explica: estado ALTO = pasa corriente = lámpara encendida.
// Ese es un módulo relé "activo-alto". Muchos módulos escolares baratos
// son "activo-bajo" (se activan con LOW): si el tuyo enciende al revés,
// invertí SOLO estas dos constantes y el resto del programa queda igual.
// Esa es la gracia de las constantes con nombre.
const int RELE_ENCENDIDO = HIGH;
const int RELE_APAGADO   = LOW;

const unsigned long DURACION_ENCENDIDO_MS = 1000;
const unsigned long DURACION_APAGADO_MS   = 1000;

void setup() {
  pinMode(PIN_RELE, OUTPUT);
}

void loop() {
  // delay() detiene todo el programa: para esta prueba de encendido es
  // perfecto, porque el código se lee igual que la secuencia real.
  digitalWrite(PIN_RELE, RELE_ENCENDIDO); // la lámpara enciende
  delay(DURACION_ENCENDIDO_MS);
  digitalWrite(PIN_RELE, RELE_APAGADO);   // la lámpara se apaga
  delay(DURACION_APAGADO_MS);
}
Prueba intermitente del relé: la lámpara se enciende y se apaga en intervalos de un segundo.

Leelo como una receta: “activá el relé, esperá un segundo, desactivalo, esperá un segundo… y volvé a empezar”. Eso es lo que loop() repite sin descanso.

Subir el código a la placa

Para subir el código de nuestro programa a la placa, necesitamos:

  1. Conectar la placa a la computadora con el cable USB.
  2. Chequear que en el selector de placa del Arduino IDE esté seleccionada la placa correcta.
  3. Seleccionar el puerto al que está conectada la placa.
  4. Cliquear el botón Subir (la flecha →) en la parte superior de la interfaz.

En el Arduino IDE 2.x, la placa y el puerto se eligen juntos en el menú desplegable de la barra superior: al conectar la placa suele aparecer directamente como opción. Si no aparece, entrá a “Select other board and port” y buscala por nombre.

Para el Arduino UNO: usá el cable USB tipo B, elegí la placa Arduino UNO y el puerto que se agregó al conectarla (en Windows es un puerto COM numerado; en Linux suele llamarse /dev/ttyACM0 o similar).

Para el ESP32 hay dos pasos previos que se hacen una sola vez: instalar el soporte de placas ESP32 desde el gestor de placas del IDE (buscá “esp32” e instalá el paquete de Espressif) y, si el puerto no aparece, instalar el driver del conversor USB-serie de tu placa (generalmente CP210x o CH340). Después, elegí la placa ESP32 Dev Module (o “DOIT ESP32 DEVKIT V1”) y el puerto correspondiente. Si al subir el IDE queda esperando en “Connecting…”, mantené apretado el botón BOOT de la placa hasta que empiece la carga.

Al terminar de subir nuestro código, veremos el mensaje de carga completada en la barra inferior del IDE.

Conectar el sensor piroeléctrico

Si el sistema de encendido y apagado que probamos en los pasos anteriores funciona correctamente, podemos pasar a la instalación del sensor de movimiento. Para poder controlar que las luces de los ambientes de la casa se enciendan solo cuando haya alguien adentro, utilizaremos un sensor piroeléctrico.

Los detectores piroeléctricos (habitualmente llamados PIR) son sensores de movimiento que reaccionan solo ante determinadas fuentes de energía, tales como el calor que emite el cuerpo humano o el de los animales. Así, pueden reconocer el movimiento de un cuerpo en un ambiente, dado que sienten la diferencia de calor entre el cuerpo y el resto del espacio.

Dos vistas de un sensor PIR: al frente, la cúpula del sensor con los pines VCC, señal y GND rotulados; al dorso, la placa con los dos trimmers de ajuste de sensibilidad y de tiempo.
El sensor PIR por delante y por detrás: los tres pines de conexión y los dos trimmers de ajuste (figura original del proyecto).

El sensor tiene tres pines: dos para la alimentación (VCC y GND) y un tercero de salida de información, que se conecta a la entrada digital de la placa indicada por la constante PIN_PIR al comienzo del código de los pasos siguientes.

Calibración del sensor piroeléctrico

En primer lugar, debemos familiarizarnos con la forma de medición del sensor PIR: indicará el valor 1 cuando detecte movimiento y 0 cuando no lo haga.

Para poder ver esos valores necesitamos que la placa se los envíe a la computadora. Preparamos un programa que lee el pin del sensor y escribe el resultado por la conexión serie, una y otra vez: necesitamos que el sistema actualice constantemente el valor de lectura del sensor, por eso tanto la lectura como el envío viven dentro de loop().

Ver el código completo · lectura-pir.ino
lectura-pir.ino Arduino UNO
// Lectura y calibración del sensor de movimiento (PIR) por consola serial.
// El PIR devuelve 1 cuando detecta movimiento y 0 cuando no. Ver esos
// valores en la consola permite calibrar los dos trimmers del módulo
// (sensibilidad y tiempo de retención) ANTES de conectar el relé:
// primero entendemos al sensor, después automatizamos con él.
//
// Plataforma: Arduino UNO.
// Conexión: salida de datos del PIR → pin 4 (VCC a 5 V, GND a GND).
// Consola: Monitor Serie del IDE de Arduino a 9600 baudios.
//
// Basado en: código de los Pasos 5 y 6, Nivel Inicial — Automatización de
// Sistema Lumínico, Saberes Digitales (INET/EDUCAR 2019)
// Modernización: el original enviaba a la consola con bloques de mBlock3
// ("Escribir en el serial" dentro de "Por siempre", sin pausa); acá se usa
// Serial.println() con una pequeña pausa entre lecturas para que la
// consola sea legible y no se inunde de números.

const int PIN_PIR = 4;

const long VELOCIDAD_SERIAL = 9600;

// Sin esta pausa el UNO imprimiría miles de lecturas por segundo y la
// consola sería ilegible. Cinco lecturas por segundo alcanzan de sobra
// para ver cuándo el PIR pasa de 0 a 1.
const unsigned long INTERVALO_LECTURA_MS = 200;

void setup() {
  pinMode(PIN_PIR, INPUT);
  // Abre la comunicación con la computadora. El número debe coincidir
  // con el que se elige en el Monitor Serie: es la "velocidad" a la que
  // ambos acuerdan hablar.
  Serial.begin(VELOCIDAD_SERIAL);
}

void loop() {
  // digitalRead devuelve 1 (movimiento) o 0 (sin movimiento): con eso
  // a la vista, ajustá los trimmers del PIR hasta que las detecciones
  // se correspondan con lo que pasa en el ambiente.
  Serial.println(digitalRead(PIN_PIR));
  delay(INTERVALO_LECTURA_MS);
}
lectura-pir.ino ESP32
// Lectura y calibración del sensor de movimiento (PIR) por consola serial.
// El PIR devuelve 1 cuando detecta movimiento y 0 cuando no. Ver esos
// valores en la consola permite calibrar los dos trimmers del módulo
// (sensibilidad y tiempo de retención) ANTES de conectar el relé:
// primero entendemos al sensor, después automatizamos con él.
//
// Plataforma: ESP32 (DevKit v1).
// Conexión: salida de datos del PIR → GPIO 27.
// Nota eléctrica: el ESP32 trabaja a 3,3 V. Los PIR tipo HC-SR501 suelen
// alimentarse con 5 V pero su salida de datos es de 3,3 V, así que puede
// ir directo al GPIO; verificá la hoja de datos de tu módulo.
// Consola: Monitor Serie del IDE de Arduino a 9600 baudios.
//
// Basado en: código de los Pasos 5 y 6, Nivel Inicial — Automatización de
// Sistema Lumínico, Saberes Digitales (INET/EDUCAR 2019)
// Modernización: el original enviaba a la consola con bloques de mBlock3
// (PIR en pin 4 del UNO, sin pausa); acá se porta a ESP32 (GPIO 27) y se
// usa Serial.println() con una pequeña pausa entre lecturas para que la
// consola sea legible y no se inunde de números.

const int PIN_PIR = 27;

const long VELOCIDAD_SERIAL = 9600;

// Sin esta pausa el ESP32 imprimiría miles de lecturas por segundo y la
// consola sería ilegible. Cinco lecturas por segundo alcanzan de sobra
// para ver cuándo el PIR pasa de 0 a 1.
const unsigned long INTERVALO_LECTURA_MS = 200;

void setup() {
  pinMode(PIN_PIR, INPUT);
  // Abre la comunicación con la computadora. El número debe coincidir
  // con el que se elige en el Monitor Serie: es la "velocidad" a la que
  // ambos acuerdan hablar.
  Serial.begin(VELOCIDAD_SERIAL);
}

void loop() {
  // digitalRead devuelve 1 (movimiento) o 0 (sin movimiento): con eso
  // a la vista, ajustá los trimmers del PIR hasta que las detecciones
  // se correspondan con lo que pasa en el ambiente.
  Serial.println(digitalRead(PIN_PIR));
  delay(INTERVALO_LECTURA_MS);
}
Lectura del sensor PIR: la placa envía a la computadora un 1 o un 0 según detecte movimiento o no.

Activar el envío de datos a la consola

Una vez que nuestro programa esté cargado, con la placa conectada podemos visualizar los valores del sensor en la computadora. En el Arduino IDE 2.x, la consola se llama monitor serie: se abre con el ícono de la lupa en el extremo superior derecho (o desde Herramientas → Monitor Serie). Asegurate de que la velocidad seleccionada abajo a la derecha del monitor coincida con la del código (el valor que aparece en Serial.begin, típicamente 9600 baudios).

Vas a ver una columna de valores que se actualiza sola: 1 cuando el sensor detecta movimiento, 0 cuando no. Movete frente al sensor, quedate quieto, alejate: la columna cuenta la historia.

Con los trimmers de ajuste del módulo (los dos tornillos naranjas del dorso, que viste en la figura del paso 4) podemos calibrar la sensibilidad de la medición y el tiempo que habrá entre cada lectura, hasta que los parámetros se ajusten a nuestras necesidades.

Agregar el módulo relé

Con el sensor calibrado de forma correcta, es tiempo de agregar a nuestro sistema la conexión del módulo relé que hicimos previamente. Ahora la placa tiene las dos cosas conectadas a la vez: el sensor PIR en su entrada y el relé (con la lámpara de baja tensión) en su salida.

Esquema de conexión del sistema completo: Arduino UNO con el módulo relé que conmuta la lámpara y el sensor PIR montado en la protoboard, ambos conectados a la vez.
El circuito completo del nivel: sensor PIR en la entrada, relé y lámpara en la salida (figura original del proyecto; en la práctica, la lámpara es de baja tensión).

Encender las luces en función del movimiento

Llegó el momento de unir las dos mitades con la pieza de programación nueva de este proyecto: la condición. Con la estructura if... else (si… entonces / si no…) accionamos el relé cuando el sensor detecte movimiento (es decir, cuando la lectura sea igual a 1) y lo desactivamos en caso contrario (cuando la lectura sea igual a 0).

Para evitar que el sistema esté continuamente revisando si hay movimiento, establecemos un intervalo de tiempo de espera de, por ejemplo, 10 minutos (600 segundos) entre cada medición: cuando alguien entra al ambiente, la luz queda encendida ese intervalo antes de volver a consultar al sensor.

Ver el código completo · luz-automatica-pir.ino
luz-automatica-pir.ino Arduino UNO
// Luz automática por movimiento: el relé enciende la lámpara cuando el
// sensor PIR detecta a alguien, y la mantiene encendida un "tiempo de
// cortesía" antes de volver a evaluar. Si no hay movimiento, la apaga.
//
// El tiempo de cortesía cumple dos funciones (así lo plantea el original):
// evita que el sistema esté revisando el sensor sin parar, y garantiza que
// la luz no se apague apenas la persona se queda quieta.
//
// SEGURIDAD: esta práctica se realiza con una lámpara LED de baja tensión.
// La conexión a 220 V queda reservada al docente o a una instalación
// supervisada, y NUNCA sobre la protoboard (desvío pedagógico acordado
// sobre la advertencia de 220 V de la guía original).
//
// Plataforma: Arduino UNO.
// Conexión: PIR → pin 4; entrada IN del módulo relé → pin 7.
//
// Basado en: código del Paso 8, Nivel Inicial — Automatización de Sistema
// Lumínico, Saberes Digitales (INET/EDUCAR 2019)
// Modernización: constantes nombradas en lugar del C generado por mBlock3
// (_delay, _loop); el relé se mueve del pin 2 (original) al pin 7
// (contrato de pines de la reedición). Se mantiene el delay() bloqueante
// del original: en este nivel es la herramienta que ya conocemos.

const int PIN_PIR  = 4;
const int PIN_RELE = 7;

// Módulo relé activo-alto, como lo explica el original (HIGH = enciende).
// Si tu módulo es activo-bajo, invertí solo estas dos constantes.
const int RELE_ENCENDIDO = HIGH;
const int RELE_APAGADO   = LOW;

// 10 minutos, como propone la guía original (600 segundos).
// Para probar en el aula conviene bajarlo temporalmente (por ejemplo a
// 10000, es decir 10 segundos): nadie quiere esperar 10 minutos para
// ver si el programa funciona.
const unsigned long TIEMPO_CORTESIA_MS = 600000;

void setup() {
  pinMode(PIN_PIR, INPUT);
  pinMode(PIN_RELE, OUTPUT);
}

void loop() {
  // El PIR devuelve HIGH (1) cuando detecta movimiento.
  if (digitalRead(PIN_PIR) == HIGH) {
    digitalWrite(PIN_RELE, RELE_ENCENDIDO);
    // Durante este delay() el programa queda detenido con la luz
    // encendida: ese es exactamente el tiempo de cortesía. Recién al
    // terminar vuelve a preguntar si hay movimiento.
    delay(TIEMPO_CORTESIA_MS);
  } else {
    // Sin movimiento: la lámpara se apaga y loop() vuelve a empezar,
    // consultando el sensor de forma continua.
    digitalWrite(PIN_RELE, RELE_APAGADO);
  }
}
luz-automatica-pir.ino ESP32
// Luz automática por movimiento: el relé enciende la lámpara cuando el
// sensor PIR detecta a alguien, y la mantiene encendida un "tiempo de
// cortesía" antes de volver a evaluar. Si no hay movimiento, la apaga.
//
// El tiempo de cortesía cumple dos funciones (así lo plantea el original):
// evita que el sistema esté revisando el sensor sin parar, y garantiza que
// la luz no se apague apenas la persona se queda quieta.
//
// SEGURIDAD: esta práctica se realiza con una lámpara LED de baja tensión.
// La conexión a 220 V queda reservada al docente o a una instalación
// supervisada, y NUNCA sobre la protoboard (desvío pedagógico acordado
// sobre la advertencia de 220 V de la guía original).
//
// Plataforma: ESP32 (DevKit v1).
// Conexión: PIR → GPIO 27; entrada IN del módulo relé → GPIO 16.
// Nota eléctrica: el ESP32 trabaja a 3,3 V (no 5 V como el UNO); nunca
// inyectar 5 V en un GPIO.
//
// Basado en: código del Paso 8, Nivel Inicial — Automatización de Sistema
// Lumínico, Saberes Digitales (INET/EDUCAR 2019)
// Modernización: constantes nombradas en lugar del C generado por mBlock3
// (_delay, _loop); portado a ESP32 con GPIO seguros (el original usaba
// PIR en pin 4 y relé en pin 2 del UNO). Se mantiene el delay() bloqueante
// del original: en este nivel es la herramienta que ya conocemos.

const int PIN_PIR  = 27;
const int PIN_RELE = 16;

// Módulo relé activo-alto, como lo explica el original (HIGH = enciende).
// Si tu módulo es activo-bajo, invertí solo estas dos constantes.
const int RELE_ENCENDIDO = HIGH;
const int RELE_APAGADO   = LOW;

// 10 minutos, como propone la guía original (600 segundos).
// Para probar en el aula conviene bajarlo temporalmente (por ejemplo a
// 10000, es decir 10 segundos): nadie quiere esperar 10 minutos para
// ver si el programa funciona.
const unsigned long TIEMPO_CORTESIA_MS = 600000;

void setup() {
  pinMode(PIN_PIR, INPUT);
  pinMode(PIN_RELE, OUTPUT);
}

void loop() {
  // El PIR devuelve HIGH (1) cuando detecta movimiento.
  if (digitalRead(PIN_PIR) == HIGH) {
    digitalWrite(PIN_RELE, RELE_ENCENDIDO);
    // Durante este delay() el programa queda detenido con la luz
    // encendida: ese es exactamente el tiempo de cortesía. Recién al
    // terminar vuelve a preguntar si hay movimiento.
    delay(TIEMPO_CORTESIA_MS);
  } else {
    // Sin movimiento: la lámpara se apaga y loop() vuelve a empezar,
    // consultando el sensor de forma continua.
    digitalWrite(PIN_RELE, RELE_APAGADO);
  }
}
El sistema completo: si el PIR detecta movimiento, la luz se enciende y queda encendida durante el intervalo de espera; si no, se apaga.

Compará el comportamiento de tu circuito con el del simulador:

Simulación del comportamiento

La misma máquina de estados del firmware, portada a TypeScript, maneja el comportamiento del dispositivo. No se ejecuta el binario real: la ejecución del .hex con avr8js está en el roadmap.

Simulación lista. Presioná «Iniciar» para arrancar la secuencia.

Cierre del nivel

Al terminar este nivel, el sistema de Agustín funciona sobre tu mesa: el relé conmuta la lámpara de baja tensión obedeciendo al programa, el sensor PIR —ya calibrado— reporta 1 o 0 en el monitor serie, y la condición if... else une las dos cosas para que la luz se encienda sola cuando alguien entra al ambiente y se apague cuando pasa el intervalo de espera sin movimiento. En el nivel avanzado, el sistema va a mirar también por la ventana: un sensor de luz decidirá si hace falta encender la lámpara según cuánta luz natural haya afuera.

Evidencia de cierre

Al terminar este nivel, esto tiene que estar funcionando:

  • El módulo relé conmuta la lámpara LED de baja tensión (o el LED en protoboard) siguiendo las órdenes del programa: se escucha el clic y la luz responde.
  • El sensor PIR está conectado y calibrado: sus lecturas (1 con movimiento, 0 sin movimiento) se ven en el monitor serie del Arduino IDE.
  • El sistema completo enciende la luz cuando el sensor detecta movimiento y la apaga cuando pasa el intervalo de espera sin detectar a nadie.