Te ha pasado: estás trabajando sentado, sin moverte más de lo necesario, y la luz del pasillo se apaga sola. O el sensor del baño decide que no hay nadie justo cuando sí lo hay. El problema no es que el sensor esté malo, es que estás midiendo la magnitud equivocada: un sensor de movimiento no detecta personas, detecta cambios. Si te quedas quieto, para él desapareciste.

Este proyecto resuelve esa diferencia con un sensor que distingue las dos cosas: el STHS34PF80 de ST, capaz de reportar presencia (hay una persona ahí, aunque esté inmóvil) y movimiento (algo se está desplazando) como dos señales independientes. Vamos a armar una alarma de dos LED y sonido que enciende el verde cuando detecta movimiento y el rojo cuando detecta presencia estática, y que sirve igual como bloque de partida para iluminación inteligente, un contador de ocupación o un robot que sepa cuándo hay alguien delante.

Al final vas a entender por qué un PIR falla con personas quietas, cómo se calibran los umbrales del sensor, y cómo montarlo con un ESP32 en vez de la placa Teensy del proyecto original.

Presencia y movimiento no son lo mismo

Un PIR clásico. el sensor blanco con domo lechoso que ves en cualquier pasillo. es piroeléctrico. Su cristal genera carga solo cuando la radiación infrarroja que recibe cambia. Internamente tiene dos elementos enfrentados y mide la diferencia entre ambos: cuando alguien cruza, primero se calienta uno y después el otro, y esa asimetría dispara la salida. Es un diseño elegante y barato, con una consecuencia inevitable: si el calor que le llega es constante, la carga se disipa y la salida vuelve a cero. Una persona sentada e inmóvil es, para un PIR, indistinguible de una pieza vacía.

El STHS34PF80 trabaja distinto. Es una termopila infrarroja que mide el nivel absoluto de radiación térmica en su campo de visión y lo compara contra una referencia de temperatura ambiente que el propio chip mantiene y actualiza. De esa comparación salen dos flujos de datos:

  • Presencia: cuánto se desvía la temperatura aparente del objeto frente al sensor respecto del fondo. Un cuerpo humano a 36 °C en una pieza a 18 °C mantiene esa diferencia aunque nadie mueva un dedo.
  • Movimiento: qué tan rápido cambia esa señal en el tiempo. Acá el sensor se parece al PIR, pero con el dato numérico disponible en vez de un simple alto/bajo.

La consecuencia práctica es que puedes tomar decisiones distintas para cada caso. Movimiento detectado y presencia en cero: alguien pasó de largo. Presencia sostenida sin movimiento: hay alguien ahí, quieto, no apagues la luz. Esa lógica es imposible de construir con un PIR, por mucho código que le pongas encima.

Dos límites que conviene saber antes de montar: el alcance útil ronda los pocos metros (no es un sensor de sala completa), y cualquier fuente de calor en el campo de visión lo confunde. Un radiador, la salida del aire acondicionado, un notebook ventilando o el sol dando directo sobre la pared de enfrente se comportan como objetos térmicos y ensucian la lectura. La orientación del sensor importa tanto como el código.

Componentes del proyecto de detección de presencia humana

Hardware: el montaje y su cableado

El proyecto original usa una Teensy 4.0 y el breakout Qwiic del STHS34PF80 (existe en versión completa de 1 × 1" y en versión mini de 0,5 × 1"). Como el sensor se comunica por I2C, la placa es reemplazable: acá describimos el montaje tanto para la Teensy como para un ESP32 DevKit, que es lo que la mayoría tiene a mano.

La lista de partes es corta:

  • Sensor de presencia y movimiento STHS34PF80 (breakout con conector Qwiic/JST SH de 4 pines)
  • Placa controladora: Teensy 4.0 en el original, o un ESP32 DevKit en la versión portada
  • LED rojo 5 mm (presencia) y LED verde 5 mm (movimiento)
  • Dos resistencias de 470 Ω, una por LED
  • Un mini parlante o buzzer para la señal sonora
  • Protoboard 830 puntos y jumpers macho macho
  • Cable Qwiic a jumpers de 4 pines (o cuatro jumpers hembra soldados al breakout)
  • Cable micro USB para programar y alimentar
  • Opcional: soportes impresos en 3D para sostener el sensor perpendicular a la protoboard

El cableado sigue esta lógica, independiente de la placa: alimenta el sensor a 3,3 V (no 5 V), lleva GND al riel negativo, y conecta el par I2C. Cada LED va con su resistencia de 470 Ω en el cátodo. la pata corta. hacia el riel de tierra, y el ánodo al pin de salida. El parlante va con su terminal positivo a un pin capaz de generar tonos y el negativo a tierra.

Señal Teensy 4.0 (original) ESP32 DevKit (portado)
SDA (cable azul del Qwiic) pin 18 GPIO 21
SCL (cable amarillo del Qwiic) pin 19 GPIO 22
3,3 V (cable rojo) 3.3V 3V3
GND (cable negro) GND GND
LED verde. movimiento pin 22 GPIO 26
LED rojo. presencia pin 21 GPIO 27
Parlante / buzzer pin 14 GPIO 25

Un detalle de seguridad eléctrica que el original no necesita mencionar porque la Teensy ya es de 3,3 V: si usas una placa de 5 V como un Arduino Uno, no conectes el sensor directamente. El STHS34PF80 es de 3,3 V y sus pines I2C no toleran 5 V; necesitas un conversor de nivel bidireccional. Con ESP32 o Teensy no hay problema, ambos trabajan a 3,3 V nativos.

Soportes impresos en 3D montados sobre la protoboard con el breakout del sensor encima

Los soportes impresos resuelven un problema real: el sensor tiene que apuntar horizontalmente hacia la persona, y clavado en una protoboard queda mirando al techo. Si no imprimes nada, sirve cualquier escuadra, un trozo de cartón pluma o simplemente apoyar el breakout contra un objeto vertical. Lo importante es que el campo de visión quede despejado y apuntando al área que quieres vigilar.

Software: librería, umbrales y calibración

El firmware se sube con el IDE de Arduino y necesita la librería SparkFun STHS34PF80 Arduino Library, que instalas desde el gestor de librerías. Si usas Teensy por primera vez, además hay que instalar Teensyduino; con ESP32 basta con tener el soporte de placas ESP32 instalado y elegir el puerto correcto.

El sketch de referencia del proyecto está publicado en GitHub (enlace al final). Su estructura es directa: inicializa el I2C, verifica que el sensor responda, y en el lazo principal lee los valores de presencia y movimiento, los compara contra umbrales y actúa sobre los LED y el parlante.

La parte que de verdad hay que entender son los tres umbrales configurables:

  • presenceThreshold — a partir de qué valor se considera que hay una persona presente. Si lo dejas muy bajo, una taza de café caliente sobre la mesa activa el rojo. Muy alto, y tienes que estar prácticamente encima del sensor.
  • topMotionThreshold y botMotionThreshold — el par que acota la detección de movimiento por arriba y por abajo, lo que permite ignorar fluctuaciones pequeñas del ambiente sin perder los desplazamientos reales.

Cómo calibrarlos en la práctica, que es lo que el original deja como ejercicio: conecta la placa al computador y abre Herramientas > Monitor Serie. Ahí verás los valores numéricos crudos, no solo los flags. Haz tres mediciones en la pieza donde va a vivir el sensor:

  1. Pieza vacía, 30 segundos. Anota el rango en que se mueve la lectura de presencia. Ese es tu piso de ruido.
  2. Tú sentado inmóvil frente al sensor, a la distancia real de uso. Anota el valor. Tu presenceThreshold va a medio camino entre el piso de ruido y este valor, más cerca del ruido que de ti.
  3. Tú caminando frente al sensor. Anota el peak de movimiento y ajusta los umbrales de movimiento por debajo de ese peak.

Repite la calibración si cambias el sensor de pieza. Una configuración afinada en una oficina con aire acondicionado no sirve en un dormitorio con estufa.

Versión mini del sensor montada en su soporte impreso, apuntando a través de la pieza

Probar y afinar

Con todo programado, la prueba es entretenida y cuesta un minuto: párate frente al sensor y muévete. debería encender el verde. , después quédate completamente quieto. El verde se apaga y el rojo se mantiene. Ese momento, el instante en que un PIR habría decidido que la pieza está vacía y este sensor sigue reportando que estás ahí, es todo el proyecto en una imagen.

Si el rojo queda pegado en encendido con la pieza vacía, tu presenceThreshold está muy bajo o hay una fuente de calor en el campo de visión. Si nunca enciende, está muy alto o el sensor está apuntando al techo. Si los valores del monitor serie no cambian nunca, revisa el I2C antes que nada: alimentación a 3,3 V, SDA y SCL sin invertir, y el cable Qwiic bien insertado.

Como el conjunto se alimenta por USB, funciona con cualquier fuente: un cargador de celular, un power bank para uso autónomo, o el propio computador durante el desarrollo.

Variantes y mejoras

Luz que no se apaga con la persona quieta. Es la aplicación más obvia y la que justifica todo el sensor: en vez de LED indicadores, maneja un relé o un módulo de estado sólido con la señal de presencia, no la de movimiento. La luz se mantiene mientras haya alguien, se apaga cuando la pieza queda realmente vacía. Con un PIR esto no se puede hacer.

Notificación al celular con ESP32. Al portar el proyecto al ESP32 ganas WiFi gratis. Publica los estados de presencia y movimiento por MQTT hacia Home Assistant y tendrás un sensor de ocupación real por habitación, que es justamente el componente más caro de comprar hecho en domótica. Dos líneas de automatización y la calefacción o la luz siguen a las personas, no a sus movimientos.

Contador de ocupación con doble sensor. Con dos STHS34PF80 separados unos centímetros en el marco de una puerta puedes deducir la dirección del paso según cuál dispara primero, y llevar la cuenta de cuántas personas hay dentro. Es el mismo principio que usan los contadores comerciales de acceso, a una fracción del costo.

Registro térmico en el tiempo. Guarda los valores crudos de presencia con marca de tiempo en una tarjeta microSD o en una base de datos, y tendrás un mapa de uso real de la pieza por hora del día. Sirve para dimensionar calefacción, decidir horarios de limpieza o simplemente descubrir que la sala de reuniones está vacía el 80% del tiempo.

Personalización para Chile

La mayor parte del montaje se resuelve con componentes básicos que MechatronicStore mantiene en catálogo:

  • Placa ESP32 DevKit. el reemplazo recomendado de la Teensy 4.0. Es de 3,3 V nativo, así que conecta directo al sensor, cuesta una fracción de la Teensy y suma WiFi y Bluetooth para las variantes de arriba. El sketch original necesita solo el cambio de números de pin de la tabla.
  • LED 5 mm rojo y LED 5 mm verde. los dos indicadores del proyecto.
  • Resistencias de 470 Ω. una por LED. Si solo tienes de 330 Ω o 1 kΩ, también funcionan: cambia el brillo, no el comportamiento.
  • Buzzer activo 5 V. reemplaza al mini parlante del original. Con buzzer activo basta con poner el pin en alto para que suene, sin generar el tono por software; si quieres tonos variables, usa uno pasivo.
  • Protoboard 830 puntos y jumpers macho macho. el montaje completo es sin soldadura, salvo los pines de la placa.
  • Cable USB para programación y alimentación, según el conector de tu placa.

Dos ítems del proyecto original no tienen equivalente en el catálogo local y conviene resolverlos aparte: el breakout del sensor STHS34PF80 con conector Qwiic (es el corazón del proyecto y hay que importarlo) y el cable Qwiic a jumpers, que se reemplaza fácil con cuatro jumpers hembra macho soldados o conectados a los pines del breakout, ya que el mismo breakout expone SDA, SCL, 3V3 y GND en pads estándar de 2,54 mm.

Si prefieres partir con lo que se consigue de inmediato y comparar tecnologías, arma el mismo circuito con un sensor PIR HC SR501 primero: vas a ver en cinco minutos por qué te deja tirado cuando te quedas quieto, y vas a valorar mucho más lo que hace el STHS34PF80 cuando llegue. Los precios y códigos exactos conviene confirmarlos en el catálogo al momento de la compra.

Recursos

Versión chilena con adaptación a ESP32 y componentes en stock local en MechatronicStore.