
Chisme 138: el vigilante de la cueva, sensor PIR de movimiento con ESP32
Alguien se estaba comiendo el bocadillo del Lince. Sensor PIR.
Víctor Vílchez, el Lince de la Noche, lo había dejado en la mesa de la cueva, en Sierra Bermeja, y por la mañana solo quedaba el papel. Dos días seguidos.
—Es un robo —declaró—. Necesito un vigilante que me avise cuando alguien se mueva por aquí. Sin cámaras: no quiero grabar a nadie.
—Eso es un sensor de movimiento —dijo la Gata Montesa, sacando un módulo del cajón con una cúpula blanca encima—. Un PIR. No ve nada: solo nota cuando algo caliente se mueve.
—¿Algo caliente?
—Tú, yo, un ratón… Si se queda quieto, ya no lo nota.
El Lince la miró con sospecha.
—Tú sabes mucho de lo que no nota, ¿verdad?
La Gata sonrió con cara de santa y se tumbó a descansar, muy quieta, junto al bocadillo de esa noche.
Introducción: sensor PIR
En este chisme 138 vas a construir el vigilante de la cueva: un sensor de movimiento PIR conectado a la ESP32 Plus que enciende un LED cuando alguien se mueve delante.
Es un sensor muy sencillo de usar, pero con un comportamiento que merece un estudio: no detecta personas, detecta cambios de calor. Lo verás probándolo con la mano, andando delante y quedándote quieto. Antes de montarlo, practica en el simulador del vigilante de la cueva, que tiene modo demostración.
Ya sabes encender un LED con la placa por el Chisme 113 y leer una entrada digital, como hicimos con el sensor Hall del Chisme 134. Aquí vuelves a usar una lectura digital: 0 o 1.
Cómo funciona un sensor PIR
PIR significa Passive InfraRed, infrarrojo pasivo. Pasivo quiere decir que no emite nada: solo escucha.
Todo cuerpo caliente emite radiación infrarroja, incluido el tuyo. Dentro del sensor hay un material piroeléctrico que genera una pequeña señal eléctrica cuando cambia la cantidad de infrarrojo que recibe. La cúpula blanca es una lente que reparte la vista del sensor en varias zonas. Cuando algo caliente pasa de una zona a otra, la señal cambia y el módulo da 1.
Fíjate en lo que implica:
- Detecta cambios, no presencia. Una persona completamente quieta acaba por no verse.
- No hace fotos y no guarda ningún dato personal. Solo da un 0 o un 1.
- Tiene un alcance (unos 5-7 metros en muchos módulos) y un ángulo de visión.
Si quieres profundizar en la física, la Wikipedia lo cuenta en sensor infrarrojo pasivo.
Qué necesitamos
- La ESP32 Plus de Acebott y ACECode (como en el Chisme 112).
- Del kit avanzado de robótica: el sensor de movimiento PIR (tres pines S, V y G) y el módulo LED.
- Cuatro cables Dupont.
Conexión
Con el USB desenchufado y revisando las etiquetas del módulo:
| Módulo | ESP32 Plus |
|---|---|
| PIR · V | V (5 V) |
| PIR · G | G |
| PIR · S (señal) | pin 25 |
| LED · S | pin 5 |
El PIR necesita unos 5 V para funcionar bien. Su señal de salida es de 3,3 V, así que es seguro para el pin de la ESP32.
El programa

- Por siempre:
- Serial 115200 imprimir «unir» (
M:y leer pin digital 25). - Si (leer pin digital 25 = 1) entonces configurar pin digital 5 a alto.
- Si no, configurar pin digital 5 a bajo.
- Serial 115200 imprimir «unir» (
Para ver los valores abre el monitor serie a 115200. Importante: para que aparezca el puerto serie en ACECode hay que instalar la extensión de la shield 9 en 1, aunque no pongas la placa de expansión encima de la ESP32 Plus. Si no, el bloque «Serial» no sale.
El mismo programa en Arduino
ACECode genera código Arduino por debajo. Este es el que ha generado exactamente el programa de bloques, para que veas cómo se escribe en texto:
// generated by Block
void setup() {
pinMode(25,INPUT);
Serial.begin(115200);
pinMode(5,OUTPUT);
while (1) {
Serial.println((String("M:") + String((digitalRead(25)))));
if ((digitalRead(25)) == 1) {
digitalWrite(5,HIGH);
}
else{
digitalWrite(5,LOW);
}
}
}
void loop() {
}
Fíjate en tres cosas:
pinMode(25,INPUT)dice que el pin 25 lee ypinMode(5,OUTPUT)que el 5 escribe.digitalRead(25)lee el sensor ydigitalWrite(5, HIGH)enciende el LED.- El bucle «por siempre» se ha convertido en un
while (1)dentro desetup(). Funciona, pero en Arduino lo normal es poner el código repetido enloop().
Una versión más ordenada para el Arduino IDE, con la misma lógica (no la hemos probado en la placa, pero usa solo funciones estándar):
const int PIR = 25;
const int LED = 5;
void setup() {
pinMode(PIR, INPUT);
pinMode(LED, OUTPUT);
Serial.begin(115200);
}
void loop() {
int m = digitalRead(PIR);
Serial.println("M:" + String(m));
digitalWrite(LED, m == 1 ? HIGH : LOW);
delay(200);
}
Cómo probarlo
- Enchufa el USB y espera 30-60 segundos: el PIR se calibra y puede dar 1 sin motivo.
- Quédate quieto y mira el valor
M:. - Mueve la mano delante. ¿Cuánto tarda en pasar a 1?
- Quédate quieto otra vez. ¿Cuántos segundos se mantiene
M:1antes de bajar a 0? - Muévete a distintas distancias y desde un lado. ¿Hasta dónde detecta?
- Muévete muy despacio. ¿Lo nota?
Si tu módulo tiene dos potenciómetros pequeños, uno suele ajustar la sensibilidad (hasta dónde llega) y el otro el tiempo que se mantiene el 1. Gíralos poco a poco y anota qué cambia.
Qué estamos midiendo realmente
El sensor no mide una temperatura ni una distancia: detecta un cambio en el infrarrojo que recibe y lo convierte en un sí o un no. El módulo, además, mantiene la salida a 1 unos segundos después de detectar, para que no parpadee. Ese tiempo no es la duración del movimiento.
Un 1 solo significa que algo caliente se movió delante. No sabemos qué era, ni cuántos eran, ni a qué distancia exacta. Y puede dar falsos positivos: el sol directo, un radiador o una corriente de aire caliente también cambian el infrarrojo. Medir no significa necesariamente medir bien.
Para el aula
- Predice: ¿detectará a alguien que cruza la sala? ¿Y a alguien que se queda inmóvil?
- Mide el alcance: marca el suelo cada metro y anota hasta dónde detecta. ¿Es igual de frente que desde un lado?
- Mide el tiempo de mantenimiento: cronometra cuánto dura
M:1tras dejar de moverte. ¿Cambia al girar el potenciómetro? - Prueba la inmovilidad: ¿cuánto tiempo puedes estar quieto delante sin que se active? ¿Y si mueves solo un dedo?
- Busca falsos positivos: ponlo mirando a una ventana soleada o cerca de un radiador.
- Debate: ¿qué ventajas tiene un PIR frente a una cámara en un aula? ¿Y qué inconvenientes?
Retos
- Reto 1: haz que el LED se encienda cuando te muevas.
- Reto 2: añade un zumbador para que suene cuando haya movimiento.
- Reto 3: cuenta cuántas veces se activa el PIR en un minuto.
- Reto 4: haz una «alarma» que solo suene si detecta movimiento dos veces seguidas, para evitar falsas alarmas.
- Reto 5: combina el PIR con el LED de 3 W del Chisme 137: un foco que se enciende solo cuando alguien entra.
- Reto 6: guarda las detecciones con la página del Chisme 135 y dibuja a qué horas se mueve la gente por el pasillo.
- Reto 7: pasa del bloque al código Arduino y compáralos línea a línea.
- Reto 8: convierte el proyecto en una pequeña investigación: ¿a qué horas hay más movimiento en el recreo, y cómo lo comprobarías sin grabar a nadie?
Qué hemos aprendido
Has conectado un sensor PIR a la ESP32 Plus y lo has leído como entrada digital. Has visto que detecta cambios de calor, no presencia, que se mantiene a 1 unos segundos, que tiene alcance limitado y que puede dar falsos positivos. Y has visto el mismo programa en bloques y en código Arduino.
Aquella noche el PIR dio M:1 en cuanto la Gata alargó la pata hacia el bocadillo. Hasta ese momento, completamente quieta, no la había visto. El Lince apuntó en su cuaderno: «Sensor funciona. Sospechosa identificada».


