
Un beacon de publicidad simple solo responde una pregunta: “¿donde esta esta etiqueta?”. Agregue un sensor — temperatura, humedad, aceleracion, luz — y el mismo hardware se convierte en un nodo de medicion distribuido que responde “¿cual es la condicion aqui, y cambio algo?”. Este articulo cubre las decisiones de ingenieria detras de los beacons con sensor: como interfazar sensores, como empaquetar lecturas en la carga util de 31 bytes, como la cadencia de muestreo impulsa la vida de la bateria, y como la logica de umbral en el dispositivo convierte un difusor tonto en un detector de borde.
1. Por que los Beacons con Sensor son Diferentes
Un beacon solo de ubicacion transmite una carga util fija a un intervalo fijo. Su consumo de energia es deterministico y su firmware es trivial. Un beacon con sensor debe:
1. Despertar el sensor del sueno (o mantenerlo en modo de muestreo de bajo consumo)
2. Adquirir una lectura sobre I2C/SPI, lo que toma milisegundos y consume corriente en reposo del sensor
3. Procesar el valor (filtrado, calibracion, verificacion de umbral)
4. Decidir que enviar — el valor crudo, un delta, o nada
5. Codificar y publicitar el resultado
Cada paso agrega latencia y corriente. El problema de diseno es equilibrar la fidelidad de medicion contra la vida de la bateria, porque el subsistema del sensor — no la radio — usualmente domina el presupuesto una vez que muestrea mas de algunas veces por hora.
2. Interfaces de Sensor y Consumo de Corriente
La mayoria de los sensores de beacon cuelgan de un bus digital. Las dos opciones comunes:
| Interfaz | Velocidad | Corriente tipica sensor | Latencia despertar | Notas |
|---|---|---|---|---|
| I2C | 100-400 kHz | 1-15 µA reposo, 100-500 µA activo | 1-5 ms | 2 cables, limitado por direccion, facil compartir |
| SPI | 1-8 MHz | 2-20 µA reposo, 200-800 µA activo | 0.1-1 ms | 4 cables, mas rapido, menor latencia |
Para un beacon de celda boton, el costo dominante no es la corriente activa sino la energia por muestra = (latencia_despertar + tiempo_conversion) × corriente_promedio. Un sensor de humedad que toma 10 ms a 300 µA cuesta 3 µC por lectura. A 1 muestra/hora eso es 3 µC/h ≈ 0.83 µA promedio — despreciable. A 1 muestra/minuto es 50 µA promedio — ahora compite con la radio.
2.1 Sensores comunes y sus huellas
| Sensor | Pieza tipica | Bus | Corriente activa | Tiempo conversion | Rango salida |
|---|---|---|---|---|---|
| Temperatura | TMP117 | I2C | 3.5 µA | 15.5 ms (prom) | -0.1 a 0.2 °C |
| Humedad | HDC2080 | I2C | 300 µA | 1.2 ms | ±2 % HR |
| Acelerometro 3 ejes | LIS2DH12 | I2C/SPI | 4 µA (bajo consumo) | 1 ms | ±2/4/8/16 g |
| Luz ambiental | OPT3001 | I2C | 1.8 µA | 100-800 ms | 0.01-83k lux |
| Presion | LPS22HB | I2C/SPI | 25 µA | 13 µs (ODR) | ±0.025 hPa |
| CO2 (NDIR) | SCD40 | I2C | 18 mA (pulso) | 0.5-5 s | 0-40000 ppm |
El sensor de CO2 destaca: a 18 mA es 1000× la corriente de sueno de la radio y no puede funcionar en una celda boton continuamente. Es el ejemplo canonico de por que la eleccion del sensor restringe la arquitectura de energia — un beacon de CO2 necesita una celda mayor o alimentacion por cable.
3. Codificacion de Datos de Sensor en 31 Bytes
Un paquete de publicidad BLE transporta una carga util de 31 bytes (legado) dividida en estructuras AD: 1 byte de longitud, 1 byte de tipo, luego datos. iBeacon usa 25 bytes de datos de fabricante; Eddystone-URL usa ~20. Eso deja poco espacio para sensores.
3.1 La regla “anade, no reemplaces”
Mantenga el marco de identidad (iBeacon / Eddystone-UID) intacto para sistemas de ubicacion, y agregue un marco de publicidad secundario que lleve datos del sensor. BLE permite a un beacon alternar entre multiples marcos de publicidad (alternando en cada evento de publicidad). Una pasarela que escanea los 3 canales durante unos segundos captura ambos.
3.2 Eddystone-TLM: el canal de telemetria incorporado
Eddystone-TLM es la forma estandarizada de llevar telemetria:
| Campo | Bytes | Contenido |
|---|---|---|
| Version | 1 | 0x00 |
| Voltaje bateria | 2 | 1 mV unidades, 0-65535 |
| Temperatura beacon | 2 | punto fijo 8.8, °C |
| Conteo PDU | 4 | conteo de paquetes de vida |
| Tiempo activo | 4 | 0.1 s unidades |
TLM es limpio pero limitado: un valor de temperatura, solo bateria, sin humedad/aceleracion. Para datos mas ricos necesita un marco de datos de fabricante (MSD) personalizado.
3.3 Ejemplo de codificacion MSD personalizada
Un diseño compacto para un beacon multi-sensor (little-endian):
Byte 0: ID compania LSB (0x4C para Apple, o su CID asignado)
Byte 1: ID compania MSB
Byte 2: Tipo de marco = 0x50 (marco sensor vendedor)
Byte 3: Bitmap sensor (bit0 temp, bit1 hum, bit2 acel, bit3 luz, bit4 batt)
Byte 4-5: Temperatura, punto fijo 8.8, con signo (×256)
Byte 6-7: Humedad, punto fijo 8.8 (×256)
Byte 8-9: Luz, escala log 10 bits (0-1023 → 0.01-100k lux log)
Byte 10-11:Bateria mV (0-65535)
Byte 12-13:Aceleracion magnitud, 8.8 fijo (g × 256)
Byte 14: Estado / banderas (movimiento detectado, umbral disparado)
Byte 15: Numero secuencia (envuelve 0-255)
Este marco de 16 bytes coexiste con un marco de identidad iBeacon con espacio de sobra. El bitmap permite a un beacon omitir sensores ausentes, reduciendo la carga util. Un beacon solo-temp envia bytes 0-7 (8 bytes); un nodo sensor completo envia todos los 16.
3.4 Trucos de compresion
- Codificacion delta: publique el cambio desde la ultima lectura, no el absoluto. Una temperatura que deriva 0.1 °C/hora cabe en un delta de 8 bits con signo (±127 × 0.01 °C) en lugar de un absoluto de 16 bits.
- Punto fijo sobre flotante: punto fijo 8.8 cuesta 2 bytes para ±127.99 con resolucion 0.004 °C — suficiente para monitoreo ambiental.
- Luz escala log: `encoded = round(1023 × log10(lux/0.01) / log10(100000/0.01))` empaqueta 5 decadas en 10 bits.
- Salto run-length: si nada cambio mas alla del piso de ruido, envie un marco heartbeat cada N ciclos en lugar de cada ciclo.
4. Estrategia de Muestreo y Presupuesto de Energia
La palanca mas grande sobre la vida de la bateria es con que frecuencia muestrea. Tres estrategias:
4.1 Muestreo periodico fijo
Mas simple: muestree cada T segundos, publique cada lectura.
Corriente promedio ≈ I_radio_adv × duty_adv + I_sensor_avg × (t_muestra / T)
Para T = 60 s, t_muestra = 5 ms, I_sensor_avg = 200 µA: contribucion sensor = 200 µA × 5ms/60s = 0.017 µA — despreciable. La radio (ej. sueno 1 µA, 3 ms a 15 mA cada 1 s) domina a ~45 µA. Asi que a 1/min de muestreo, el sensor es gratis; empuje a 1/s y el costo sensor sube a ~1 µA — aun pequeno pero ya no despreciable.
4.2 Muestreo adaptativo / bajo demanda
Muestree lento (ej. cada 5 min) para el marco de identidad, pero deje que la interrupcion del acelerometro despierte el MCU al moverse. El acelerometro en modo wake-on-motion consume ~1-4 µA continuamente pero elimina actividad de radio hasta que algo pasa. Para seguimiento de activos donde el movimiento es raro, esto reduce la corriente promedio 10-100×.
4.3 Ráfaga disparada por umbral
El beacon permanece en silencio (sueno profundo, <1 µA) hasta que un valor cruza un limite — congelador sobre 0 °C, vibracion sobre 2 g, puerta abierta. Al disparar:
1. Despierta completamente
2. Captura una ráfaga de N muestras a alta tasa (para caracterizar el evento)
3. Publica un marco de alerta con valor pico + marca de tiempo
4. Vuelve a sueno profundo
Este es el patron de inteligencia de borde: el beacon decide *si* hablar, no solo *que* decir. La corriente promedio colapsa al piso de sueno mas energia de ráfaga rara.
4.4 Ejemplo de presupuesto de energia
Celda boton CR2032 = 225 mAh = 810 C. Vida objetivo 2 anos = 17.5 k horas.
| Componente | Corriente | Duty | Promedio |
|---|---|---|---|
| nRF52 sueno | 0.6 µA | 99.9% | 0.6 µA |
| Radio adv (3 ms @ 15 mA, 1/2 s) | 15 mA | 0.6% | 90 µA* |
| Muestreo sensor (5 ms @ 200 µA, 1/min) | 200 µA | 0.0008% | 0.017 µA |
| Acelerometro wake-on-motion | 2 µA | 100% | 2 µA |
| Total (periodico) | — | — | ~92.6 µA |
| Total (umbral, 99% silencio) | — | — | ~2.6 µA |
*La radio domina el modo periodico. Cambiar a disparo por umbral reduce la corriente total 35×, extendiendo la vida de ~2.5 anos a decadas (autodescarga de celda se vuelve el limite).
5. Filtrado en Dispositivo y Logica de Disparo
Enviar cada lectura cruda desperdicia ancho de banda y bateria. El beacon debe filtrar:
- Banda muerta: publique solo si |valor − ultimo_enviado| > Δ (ej. 0.3 °C). Suprime el chatter por ruido.
- Promedio movil: promedie 4-8 muestras para matar picos de muestra unica antes de comparar con banda muerta.
- Tasa de cambio: dispare si d(valor)/dt excede una pendiente (ej. temp cayendo 5 °C/min = compresor fallando).
- Histereis: use umbrales de entrada/salida separados (ej. alerta a >0 °C, limpiar a <-0.5 °C) para evitar aleteo de alerta en el limite.
Una maquina de estados minima:
estado: IDLE
al tick de temporizador:
v = leer_sensor()
v_f = paso_bajo(v)
if |v_f - ultimo_enviado| > banda_muerta:
publicar(v_f); ultimo_enviado = v_f
if v_f > umbral_alto and estado == IDLE:
estado = ALERTA; publicar_alerta(v_f, razon=ALTO)
if estado == ALERTA and v_f < umbral_bajo:
estado = IDLE; publicar_limpieza()
Esta logica corre en <1 ms en el nRF52 y cuesta corriente despreciable frente a la radio.
6. Patrones de Despliegue Reales
6.1 Monitoreo de cadena de frio
Un beacon temp+humedad en enfriador de vacunas. Muestree cada 5 min, publique por banda muerta (0.2 °C) o umbral (>8 °C alerta, <-0.5 °C limpieza con histereis). La pasarela registra la serie temporal; una violacion dispara notificacion push. Bateria: CR2477 (1000 mAh) dura 3+ anos a muestreo 5 min.
6.2 Vibracion mantenimiento predictivo
Un beacon acelerometro atornillado a un motor. En wake-on-motion, captura ráfagas de vibracion 1 kHz solo cuando el motor gira. La aceleracion RMS sobre una ventana indica desgaste de rodamiento. Comparar tendencias RMS semana a semana (calculado en pasarela) predice falla antes de la rotura. Energia: los 2 µA en reposo del acelerometro dominan; CR2032 dura 1-2 anos.
6.3 Ocupacion edificio inteligente
Un beacon luz+PIR (o mmWave) en cada habitacion. Nivel de luz + IR pasivo da presencia sin camaras. El beacon publica solo cambios de estado de ocupacion (entra/sale), no lux continuo. Corriente promedio dominada por el reposo de PIR ~5 µA — un pack AA dura anos.
7. Consideraciones de Pasarela
La pasarela debe entender el marco MSD personalizado. Puntos practicos:
- Escanee los 3 canales: los marcos sensor alternan con los de identidad; capturar ambos requiere permanencia multicanales ≥2-3 intervalos de publicidad.
- Analice el bitmap: decodifique solo los sensores presentes; ignore tipos de marco desconocidos con gracia.
- Maneje numeros de secuencia: detecte marcos perdidos (hueco en seq) para marcar enlaces no confiables.
- Almacene serie temporal: escriba a InfluxDB/TimescaleDB; el beacon mismo no guarda historial.
- Offset calibracion: aplique constantes de calibracion por dispositivo en el servidor (cada sensor tiene un sesgo).
8. Peligros
- Bloqueo bus I2C: un sensor que pierde un reloj puede mantener SDA bajo y congelar el bus. Agregue una secuencia de recuperacion (alternar SCL 9×, enviar STOP) en cada despertar.
- Offset arranque en frio: TMP117 necesita 15.5 ms de conversion promedio; muestrear muy rapido devuelve datos obsoletos. Respete t_conv.
- Voltaje bateria como proxy temperatura: muchos beacons reportan V_batt, pero bajo carga el voltaje cae — mida bateria solo despues de un periodo de reposo para precision.
- Condensacion RH: HDC2080 lee 100 % RH si se forma condensacion; la pasarela debe marcar 100 % RH sostenido como falla, no lectura valida.
- Colision de publicidad: agregar un marco sensor duplica el tiempo de aire; a alta densidad de beacons esto sube la probabilidad de colision (ver articulo colision). Mantenga el marco sensor corto y en un intervalo de publicidad separado si es posible.
9. Lista de Diseno
- [ ] Elija sensores cuya corriente quepa en la celda (evite CO2 18 mA en boton)
- [ ] Use marco de publicidad secundario; mantenga marco identidad para ubicacion
- [ ] Empaquete con punto fijo + bitmap; codifique delta deriva lenta
- [ ] Establezca banda muerta + histereis para suprimir chatter
- [ ] Prefiera umbral/wake-on-motion sobre muestreo fijo rapido
- [ ] Agregue recuperacion bus I2C en cada despertar
- [ ] Documente el diseño MSD para que la pasarela lo analice
- [ ] Verifique modelo bateria contra corriente sueno medida, no tip datasheet
10. Conclusion
Un beacon con sensor es un dispositivo de borde, no solo un transmisor. El valor de ingenieria esta en las decisiones tomadas en el dispositivo: cuando muestrear, cuando callar, y que bytes minimos enviar. Con empaquetado de punto fijo, carga util dirigida por bitmap, filtrado de banda muerta y ráfagas disparadas por umbral, un beacon de celda boton puede reportar condicion ambiental por anos mientras habla solo cuando importa.
La radio nunca fue el cuello de botella — la corriente del sensor y la cadencia de muestreo lo son. Disene la logica de despertar primero; el codificador de publicidad es la parte facil.
