Sonda Globo 2026

IES Juan de la Cierva Proyecto educativo · Misión 2026 Comunidad de Madrid

Cómo se construye y sobrevive a la estratosfera

El 26 de mayo de 2026, una sonda basada en ESP32 alcanzó los 25.527 metros transmitiendo telemetría por LoRaWAN. Esta es la otra mitad de la historia: el hardware, los sensores y el firmware que hicieron posible cada uno de esos datos.

ESP32-S3 + SX1262 + GNSS RadioLib 7.3.0 LoRaWAN EU868 Muestreo 3 s Uplink 30 s Apogeo 25.527 m
01 · Arquitectura del sistema

Del sensor físico al análisis de datos

La sonda es el primer eslabón de una cadena más larga. Un dato nace en un sensor a bordo, viaja por radio de largo alcance hasta la nube, se procesa, se almacena y termina convertido en conocimiento. Cada bloque es una pieza estándar de la industria; el reto está en encajarlas para que funcionen a −52 °C y 25 km de altura.

De la medida física al análisis de datos  ·  IES Juan de la Cierva  ·  Misión 2026
Adquisición
& red
ESP32
ESP32
Payload · GPS · altitud · temperatura
LoRaWAN
Radio de largo alcance
The Things Network
TTN
Plataforma IoT en la nube
MQTT
MQTT
Mensajería de datos
Proceso
& análisis
Node-RED
Node-RED
Integración y procesado
InfluxDB
InfluxDB
Datos: tiempo real + análisis posterior
Grafana
Grafana
Visualización técnica
Acceso web
Dashboard
Seguimiento en vivo · web pública
Conocimiento
Análisis
Python · modelos · patrones · conclusiones
Hardware Red & protocolo Procesamiento Visualización Análisis

Esta página se detiene en los dos primeros eslabones —los que van a bordo del globo—. Todo lo que ocurre a partir de Node-RED (el procesado, la reconstrucción de los tramos sin GPS y el reproductor de la misión) se cuenta en la página del vuelo.

02 · El cerebro

Una placa que ya lo trae casi todo

El núcleo es una Heltec HTIT-Tracker V1.2: en una sola placa del tamaño de un pulgar integra el microcontrolador, la radio y el GPS. Elegir una placa integrada en lugar de cablear tres módulos sueltos reduce peso, puntos de fallo y consumo —tres cosas que importan mucho cuando el sistema tiene que volar con batería y sobrevivir a su propio aterrizaje.

Tres chips, una placa

  • ESP32-S3 — el microcontrolador. Doble núcleo, mucha memoria y periféricos de sobra para leer sensores y gestionar la radio sin despeinarse.
  • Semtech SX1262 — el transceptor LoRa. Es quien pone los datos en el aire a decenas de kilómetros con apenas unos milivatios.
  • UC6580 — el receptor GNSS multiconstelación, con su antena de parche integrada. La posición y la altitud del vuelo salen de aquí… hasta que la normativa se interpone.

El software se construye con PlatformIO sobre el framework Arduino, apoyándose en cuatro librerías: RadioLib 7.3.0 para la pila LoRaWAN, TinyGPSPlus para interpretar las tramas del GPS, y los drivers del MS5611 y el MAX31865 para los sensores.

Detalle macro de la placa Heltec HTIT-Tracker con los módulos SX1262 y UC6580 y la antena GNSS
Fig. 1 · La placa base HTIT-Tracker con sus tres chips integrados
Payload completo sobre placa de prototipos con HTIT-Tracker, sensores, portapilas, sonda y antena LoRa
Fig. 2 · El payload completo: placa base, sensores, alimentación y antena, montados sobre placa perforada

Un detalle que cuesta descubrir: el TCXO

La radio no arrancaba de forma fiable hasta dar con un parámetro poco evidente. El SX1262 de esta placa usa un oscilador compensado en temperatura (TCXO) que necesita una tensión de alimentación concreta, y hay que declarársela al inicializar la radio. Con el valor por defecto la radio simplemente no sincroniza.

// La inicialización de la radio, con el TCXO declarado explícitamente
radio.begin(
  868.1,   // frecuencia (MHz)
  125.0,   // ancho de banda (kHz)
  9,       // spreading factor
  7,       // coding rate
  SYNC_WORD_PRIVATE,
  10,      // potencia (dBm)
  8,       // preámbulo
  1.8      // ← tensión del TCXO: el cambio clave
);

Es el tipo de detalle que no aparece en los tutoriales y que puede costar días: todo el código es correcto, pero el hardware no responde porque el oscilador de referencia no arranca.

Por qué importa la placa integrada

La placa expone los pines del ESP32-S3 directamente, así que quedan libres un segundo bus SPI y un bus I²C para colgar sensores externos sin tocar la radio ni el GPS. Sobre esa base se añaden los dos sensores que definen el perfil científico del vuelo: presión y temperatura.

03 · Los sentidos de la sonda

Dos sensores, tres magnitudes críticas

Sobre el bus I²C libre va un sensor de presión; sobre el segundo bus SPI, uno de temperatura. Entre los dos aportan las tres magnitudes que definen el perfil científico del vuelo: presión atmosférica, temperatura exterior y temperatura interior de la caja.

MS5611 — la presión que salvó la altitud

El sensor barométrico MS5611 mide presión con un ADC de 24 bits. Es el sensor más importante del vuelo por una razón que se entiende del todo en la página del vuelo: cuando el GPS se congeló por encima de los 18 km, la presión siguió midiéndose sin interrupción, y fue ella quien permitió recuperar la altitud del apogeo mediante la fórmula hipsométrica.

La clave estuvo en elegir el sensor con rango suficiente. El BMP280 que se probó primero solo es fiable hasta unos 9 km de altitud equivalente; el MS5611 llega hasta los ~31 km. Sin ese margen no habría dato de presión en el tramo más interesante del vuelo, y la reconstrucción habría sido imposible.

Se configura en sobremuestreo máximo (OSR_ULTRA_HIGH): el sensor promedia internamente muchas conversiones por lectura, reduciendo el ruido a costa de tardar algo más. Con un muestreo cada 3 segundos, ese tiempo extra sobra.

Además de la presión, este sensor aporta la temperatura interior de la caja —va montado dentro—, que resultó valiosa para comprobar cuánto protegía el aislamiento frente al frío exterior.

MS5611 · configuración
BusI²C · 0x76
SDA17
SCL18
ResoluciónADC 24-bit
SobremuestreoOSR_ULTRA_HIGH
Rango útil≈ 10–1200 hPa
Techo equiv.≈ 31 km
Aportapresión + temp. interior
Detalle de montaje

El módulo GY-63 que lo aloja tiene un pin PS que no existe en el BMP280: hay que llevarlo a 3V3 para forzar el modo I²C. Sin esa conexión, el sensor sencillamente no responde.

MAX31865 + PT100 — los −52 °C de la tropopausa

Módulo convertidor MAX31865 conectado a una sonda de temperatura PT100
Fig. 3 · Convertidor MAX31865 para sonda PT100

La temperatura exterior se mide con una sonda PT100: una resistencia de platino cuyo valor cambia de forma muy predecible con la temperatura. Es el patrón industrial cuando se quiere precisión y un rango amplio, muy por encima de lo que da un sensor integrado barato —y aquí hacían falta ambas cosas, porque se esperaban temperaturas por debajo de −50 °C.

Leer una PT100 con exactitud no es trivial: la variación de resistencia es diminuta. De eso se encarga el MAX31865, un convertidor dedicado que compara la resistencia de la sonda contra una referencia de precisión de 430 Ω (el «431» serigrafiado en la placa) y entrega el valor ya digitalizado.

MAX31865 · bus SPI dedicado
SeñalPin ESP32-S3
CS4
SCK5
MISO (SDO)6
MOSI (SDI)7
Dos decisiones de integración

Un segundo bus SPI, por hardware. El bus SPI principal del ESP32-S3 ya lo ocupa la radio SX1262 (pines 8–14). El MAX31865 cuelga de un segundo controlador SPI físico del chip (HSPI), configurado sobre los pines 4–7. Así sensor y radio no se estorban jamás, y se conserva la velocidad del SPI por hardware.

PT100 en 2 hilos. El montaje final quedó en configuración de dos hilos. La de tres hilos compensa automáticamente la resistencia del cableado y es preferible cuando la sonda va lejos de la placa; en este caso, tras las pruebas se optó por la de dos hilos, más simple de cablear. Con un cable corto la diferencia es pequeña, y cualquier desviación residual es un desplazamiento sistemático fácil de corregir en calibración.

El mapa completo de conexiones

Con la radio, el GPS y los dos sensores, casi cada pin del ESP32-S3 tiene un trabajo asignado. Este es el reparto final —útil si alguien quiere replicar el montaje:

Asignación de GPIOs · ESP32-S3
GPIOFunciónBloque
1Lectura ADC de bateríaAlimentación
2Activación del divisorAlimentación
3VEXT CTRL (alimenta el GNSS)GNSS
4CSMAX31865
5SCKMAX31865
6MISOMAX31865
7MOSIMAX31865
8–14NSS · SCK · MOSI · MISO · RST · BUSY · DIO1LoRa SX1262
17SDAMS5611
18SCLMS5611
33RX (NMEA)GNSS · UART1
35RSTGNSS
Trampas del ESP32-S3

No todos los pines son libres. Los GPIO 8–14 están ligados a la SX1262 interna, y los GPIO 19–20 son las líneas USB D−/D+: usarlos por error para I²C corrompe la comunicación con el equipo. El reparto de arriba esquiva esas trampas.

04 · El límite invisible

El GPS que se apaga a 18 km por ley

El reto técnico más peculiar del proyecto no es de hardware ni de software: es normativo.

Por un acuerdo internacional conocido como límite COCOM, los receptores GNSS civiles dejan de dar posición por encima de unos 18 km de altitud (combinado con alta velocidad). Es una salvaguarda histórica pensada para que un GPS comercial no pueda guiar un misil balístico. El chip UC6580 de la placa la aplica sin excepción.

El efecto durante el vuelo fue exactamente ese: al superar los 18 km, el receptor mantuvo un estado aparentemente «válido» pero congeló su última posición —justo en el tramo del apogeo y el burst—. El indicador que delató el bloqueo fue el número de satélites, que cayó a cero.

La otra mitad de esta historia

Cómo se recuperó la altitud y la trayectoria de ese tramo ciego —con la fórmula hipsométrica anclada a presión y una curva de Bézier para el recorrido horizontal— se cuenta en detalle en la página del vuelo.

La solución de hardware para el futuro

Aquí hay un matiz que descubrí investigando, y que merece contarse porque es contraintuitivo: en muchos módulos el techo de 18 km no es una barrera física, sino un parámetro de software. Los receptores u-blox modernos permiten seleccionar un «modelo dinámico» de vuelo; poniéndolo en modo aeronáutico se desbloquea la operación hasta los 50 km.

El detalle que lo cambia todo

En un u-blox, basta con configurar dynModel = 6 (Airborne <1g) mediante el comando UBX-CFG-NAV5 para elevar el techo a 50 km. El UC6580 de este proyecto, en cambio, no tiene un comando equivalente documentado: por eso el plan de evolución pasa por sustituirlo por un u-blox NEO-M9N.

Para este primer vuelo, la estrategia fue pragmática y con red de seguridad: usar el UC6580 para el seguimiento fiable de tierra a 18 km, y aceptar que el tramo alto se reconstruiría después con los datos de presión. Funcionó.

Defensa en profundidad

Como respaldo totalmente independiente del sistema principal, la sonda llevó también un rastreador SPOT por satélite, que reporta posición cada pocos minutos por su propia red y no depende ni del GPS de a bordo ni del enlace LoRa. Una segunda vía para no perder nunca el rastro del payload, sobre todo de cara a la recuperación.

05 · El software embebido

Firmware modular: cada fichero, una responsabilidad

El código está escrito en C++ sobre Arduino y PlatformIO, dividido en módulos pequeños con una sola responsabilidad cada uno. Esta separación no es estética: permite cambiar el sensor de temperatura sin arriesgarse a romper la lógica de radio, y —de cara a la próxima versión— permitirá sustituir el GPS tocando un solo fichero.

Código fuente · GitHub

Firmware completo, disponible en abierto

El firmware completo —arquitectura modular, drivers de sensores, buffer circular, protocolo adaptativo, gestión de sesión LoRaWAN y decoder de TTN— está publicado como repositorio abierto en GitHub, con las credenciales y los datos sensibles retirados.

Los ficheros .cpp están en src/, las cabeceras .h en include/ y el decoder de TTN en la raíz del repositorio. Las tarjetas de arriba permiten descargar directamente cada fichero mostrado.

El corazón: muestrear rápido, transmitir despacio

La decisión de diseño más importante del firmware es separar dos ritmos que no tienen por qué coincidir:

  • Se muestrea cada 3 segundos. Leer sensores es barato: no gasta radio, no consume tiempo de aire y no tiene límite regulatorio.
  • Se transmite cada 30 segundos. Emitir sí es caro: consume energía, ocupa espectro compartido y está limitado por normativa.

Entre ambos ritmos se interpone un buffer circular de 30 muestras, que guarda hasta 90 segundos de historia. Cada muestra es una fotografía completa del estado de la sonda en ese instante: posición, altitud, velocidad, las dos temperaturas, la presión y la batería.

Por qué un buffer circular

Porque garantiza que nunca se pierde el hilo del vuelo aunque falle un envío. Si un uplink no sale, las muestras siguen en el buffer y se reintentan en el ciclo siguiente. Solo se descartan del buffer las muestras que se han transmitido con éxito. Y si el buffer se llenara del todo, sobrescribe siempre la muestra más antigua: se prefiere perder el pasado lejano antes que el presente.

El ciclo principal, paso a paso

El loop() es deliberadamente simple y siempre hace lo mismo, en este orden:

1
Avisar al watchdog «Sigo vivo». Es lo primero de cada vuelta, para que el guardián no reinicie el equipo.
2
Alimentar el GPS Se vuelcan al parser los caracteres que hayan llegado del receptor GNSS por el puerto serie.
3
Muestrear si toca Si han pasado 3 segundos desde la última captura, se leen todos los sensores y se guarda una muestra nueva en el buffer.
4
¿Hay sesión de red? Si el nodo aún no está unido a la red, se reintenta el join cada 60 s y se vuelve al principio. El muestreo no se detiene mientras tanto: cuando el join tenga éxito, el primer envío arrastrará todo el historial acumulado.
5
Transmitir si toca Cada 30 s se pregunta a la pila LoRaWAN cuánto espacio hay disponible, se construye el paquete a medida y se envía.
6
Confirmar y liberar Solo si el envío ha ido bien se borran del buffer las muestras enviadas y se guarda el estado de la sesión.
06 · El protocolo

Un paquete que se estira con la calidad del enlace

Aquí está la parte de la que estoy más satisfecho. LoRaWAN impone un límite estricto al tamaño de cada mensaje, pero ese límite no es fijo: depende de la calidad del enlace en cada momento. En vez de programar para el peor caso, el firmware pregunta cuánto espacio hay y lo aprovecha entero.

El problema: el espacio disponible cambia solo

La red LoRaWAN ajusta automáticamente la velocidad de transmisión según lo bien que se reciba al dispositivo. Con buena señal usa una velocidad alta, que permite mensajes grandes; con mala señal baja la velocidad para llegar más lejos, y entonces solo caben mensajes pequeños. La diferencia es enorme:

Capacidad según la calidad del enlace (EU868)
VelocidadAlcanceMáximo por mensajeMini-muestras que caben
DR5 / DR4Enlace bueno222 Bhasta 18
DR3Enlace medio115 Bhasta 8
DR2Enlace pobre51 Bhasta 2

La solución: dos tipos de muestra

La idea es sencilla y eficaz. No todas las magnitudes cambian al mismo ritmo ni necesitan la misma frecuencia. La temperatura y la presión evolucionan despacio; la posición, en cambio, interesa con el mayor detalle posible para dibujar la trayectoria. Así que cada paquete lleva:

  • Una muestra completa (20 bytes) con absolutamente todo: posición, altitud, velocidad, las dos temperaturas, la presión y la batería. Siempre la más reciente.
  • Tantas mini-muestras (11 bytes cada una) como quepan, con solo posición, altitud y velocidad. Son el rastro fino de la trayectoria entre envíos.
MUESTRA COMPLETA20 B · todos los sensores
MINI11 B
MINI11 B
MINI11 B
MINI11 B
… hasta llenarsegún el enlace

Estructura de cada uplink: una cabeza fija con el estado completo, y una cola variable con el rastro de posiciones.

Muestra completa · 20 bytes
0Δt
1fix
sats
2lat
3·
4·
5lon
6·
7·
8alt
9·
10vel
11·
12T ext
13·
14T int
15·
16pres
17·
18batt
19·
Mini-muestra · 11 bytes
0Δt
1lat
2·
3·
4lon
5·
6·
7alt
8·
9vel
10·
Δt · antigüedad en segundos fix + satélites latitud longitud altitud velocidad temp. exterior temp. interior presión batería

Los trucos de codificación

Cada campo está exprimido al máximo. Estas son las decisiones que permiten meter tanta información en tan poco espacio:

Codificación de campos · todo big-endian
CampoTamañoTruco
Latitud / longitud3 BEntero de 24 bits en vez de 32: se multiplican los grados por 100.000, lo que da ~1 m de precisión y ahorra un byte por coordenada.
fix + satélites1 BComparten byte: un bit indica si hay posición válida, los otros siete cuentan los satélites.
Altitud2 BMetros enteros, sin decimales. Hasta 65.535 m: de sobra para un globo.
Velocidad2 BEn cm/s en lugar de m/s, para conservar dos decimales usando enteros.
Temperaturas2 BDécimas de grado (×10) con signo, cubriendo de −3.276 a +3.276 °C.
Presión2 BDécimas de hectopascal (×10).
Antigüedad (Δt)1 BSegundos transcurridos desde la muestra hasta el envío. Permite reconstruir el instante exacto de cada lectura en tierra.
El detalle del que estoy más orgulloso

Ese byte de antigüedad es lo que hace que el sistema funcione de verdad. Como las muestras viajan agrupadas y llegan todas juntas, sin él sería imposible saber a qué momento corresponde cada una. Con él, cada lectura lleva su propia marca de tiempo relativa y en tierra se reconstruye la secuencia real con precisión de segundo.

Solo viaja lo que aporta

Un último refinamiento: las mini-muestras sin posición válida se descartan del paquete. Si el GPS no tenía fix en ese instante, la mini-muestra solo contendría ceros, así que no se envía —pero sí se marca como procesada para que salga del buffer. El espacio ahorrado se aprovecha para enviar posiciones que sí existen.

El otro límite: cada cuánto se puede hablar

El tamaño del mensaje es solo la mitad de la historia. Hay un segundo límite, bastante más severo, que suele pillar por sorpresa a quien llega a LoRaWAN desde otras tecnologías: no se puede transmitir cuando uno quiera. Y no por falta de batería, sino por dos restricciones que se solapan.

1 · El ciclo de trabajo — el límite legal

La banda de 868 MHz es de uso libre pero compartido: no hay ningún operador repartiendo turnos, así que la normativa europea impone que cada aparato ocupe el aire solo una fracción minúscula del tiempo. En la sub-banda que usan los uplinks ese techo es del 1 %, y se traduce en una regla muy concreta: después de transmitir durante un tiempo, hay que callar 99 veces ese tiempo.

Con números: un mensaje que ocupe medio segundo de aire obliga a guardar silencio alrededor de 50 segundos antes del siguiente. No es una recomendación de buenas prácticas: es una condición legal de uso de la banda, y se aplica al dispositivo lo quiera o no su dueño.

2 · La política de uso justo — el límite de la red

Por encima de lo anterior está la red concreta que se utilice. Este proyecto emite a través de The Things Network, una red comunitaria y gratuita sostenida por estaciones que instalan voluntarios. Para repartir esa capacidad donada entre todos, TTN fija un presupuesto por dispositivo: 30 segundos de emisión al día y 10 mensajes de bajada.

Conviene leer bien la cifra, porque es más restrictiva de lo que parece: no son 30 segundos de conexión, sino 30 segundos de radio efectivamente emitiendo, acumulados a lo largo de 24 horas. Con mensajes de unas décimas de segundo, ese presupuesto da para unas pocas decenas de envíos diarios —del orden de uno cada veinte o treinta minutos si se quiere operar de forma continua.

Una confesión: cada 30 segundos no es sostenible

La sonda transmitió cada 30 segundos durante más de dos horas: unos 270 mensajes, que suponen varias veces el presupuesto diario de uso justo consumido en una sola mañana. Es admisible como lo que fue —una misión puntual y acotada en el tiempo, planificada de antemano—, pero sería un abuso del recurso común si un dispositivo se quedara emitiendo a ese ritmo de forma permanente. Un sensor fijo en producción debe ir a cadencias de minutos u horas, no de segundos.

Y aquí encaja todo el diseño del protocolo. Si no se puede transmitir más a menudo, la única forma de ganar resolución es meter más información en cada transmisión. Eso es exactamente lo que hacen las mini-muestras: no aumentan el número de envíos —que es lo caro y lo limitado—, sino la cantidad de vuelo que cuenta cada envío. Mandar diez posiciones dentro de un mensaje consume muchísimo menos aire que mandar diez mensajes de una posición, porque cada mensaje arrastra su propia cabecera y su propio tiempo de preámbulo.

Entonces, ¿por qué no transmitir más, si sobraba batería?

Es la pregunta natural al descubrir que la energía no fue problema. La respuesta es que la batería nunca fue el factor limitante. Emitir es, con diferencia, lo que más energía consume del sistema —la radio en transmisión gasta mucho más que todo lo demás junto—, pero el techo real no lo pone la batería: lo ponen el reglamento de la banda y el presupuesto de aire de la red. Se puede tener energía de sobra y aun así no tener derecho a hablar.

El decoder: la operación inversa

En el otro extremo, un decoder JavaScript alojado en The Things Network hace el camino contrario: recibe los bytes crudos, extrae la muestra completa, recorre las mini-muestras que vengan detrás y entrega un objeto legible con todos los campos en sus unidades naturales. Es la contraparte exacta del firmware —si uno cambia, el otro debe cambiar con él— y es lo que alimenta a Node-RED y, de ahí, a la base de datos y al dashboard.

// Salida del decoder para un uplink típico
{
  "altitud"  : 647,
  "lat"      : 40.00418,
  "lon"      : -3.57523,
  "fix"      : true,
  "sats"     : 18,
  "temp_ext" : 19.5,
  "temp_int" : 20.3,
  "presion"  : 949.2,
  "batt_raw" : 889,
  "minis"    : [ /* rastro de posiciones */ ],
  "n_minis"  : 7
}
Una nota que sorprende

Antes del vuelo se asumía que la cobertura LoRa se perdería al ascender. Ocurrió lo contrario: a más altura, mejor enlace. Desde 20 km hay línea de visión directa a multitud de estaciones a la vez. La sonda solo dejó de transmitir en el descenso, al bajar de los 2,2 km y quedar de nuevo tapada por el terreno.

07 · Volar sin poder tocar nada

Tres medidas para un sistema que nadie puede reiniciar

Durante más de dos horas de vuelo no hay forma de intervenir. No hay botón de reinicio, ni consola, ni posibilidad de corregir nada. Todo lo que pueda fallar tiene que recuperarse solo. Estas son las tres defensas del sistema.

1 · Persistencia de la sesión de red

Unirse a la red LoRaWAN es un proceso costoso y delicado. Además, cada mensaje lleva un contador que la red vigila: si el dispositivo se reinicia y ese contador vuelve atrás, la red interpreta los mensajes como repeticiones sospechosas y los descarta. Un reinicio en pleno vuelo podría, por tanto, dejar la sonda emitiendo al vacío.

La solución fue guardar el estado completo de la sesión en memoria no volátil —la que sobrevive a un corte de alimentación— y actualizarlo después de cada envío correcto. Si el equipo se reinicia, recupera la sesión y continúa en el punto exacto donde estaba, sin volver a unirse y sin romper el contador.

Detalle fino

El firmware distingue entre las credenciales de unión y la sesión activa, y las guarda por separado. Así, ante un problema, puede descartar la sesión y renegociarla desde cero sin perder los contadores de unión —que también deben crecer siempre—. Es una separación sutil que evita quedarse permanentemente fuera de la red.

2 · Watchdog por hardware

Un watchdog es un temporizador de guarda independiente del programa: si el software no le avisa periódicamente de que sigue vivo, asume que se ha quedado colgado y reinicia el chip. Aquí está configurado con un margen de 60 segundos, y el aviso es la primera instrucción de cada vuelta del bucle principal.

Si un sensor dejara de responder y bloqueara el programa —un riesgo real con buses I²C a temperaturas extremas—, el sistema se reinicia solo, recupera la sesión de la memoria no volátil y retoma la transmisión en menos de un minuto. Es lo que permite soltar el globo y no volver a tocarlo.

3 · Reintentos que no pierden datos

La tercera defensa ya la hemos visto: el buffer no se vacía hasta que el envío se confirma. Un uplink fallido no cuesta datos, solo retrasa su llegada. Y como el muestreo continúa incluso mientras el equipo intenta unirse a la red, el primer envío tras recuperar la conexión arrastra consigo todo el historial pendiente.

Las tres juntas

Cada una cubre un tipo distinto de fallo: la persistencia protege frente a reinicios, el watchdog frente a bloqueos, y el buffer frente a pérdidas de cobertura. Ninguna es complicada por separado; juntas convierten un prototipo de sobremesa en algo que puedes soltar a 25 km de altura.

08 · Alimentación y salud del sistema

El frío amenazaba la batería; el vuelo dijo lo contrario

La sonda se alimenta con una celda de litio recargable CR123A de 750 mAh. Sobre el papel, da para unas 14 horas a temperatura ambiente —de sobra para un vuelo de dos horas y cuarto.

El problema es que en la estratosfera la temperatura exterior cae hasta −52 °C, y la capacidad de una batería de litio se desploma con el frío. Una batería que a 20 °C rendiría sin problema puede quedarse en una fracción de su capacidad a esas temperaturas. Por eso el aislamiento térmico del compartimento de la batería no es opcional: es un requisito de diseño tan importante como cualquier elección de sensor.

Un aliado inesperado: la propia electrónica disipa calor al trabajar, lo que ayudó a mantener el interior templado. Y como la sonda mide las dos temperaturas, en los datos del vuelo se ve exactamente cuánto: el interior se mantuvo decenas de grados por encima del exterior durante todo el trayecto.

Un detalle de eficiencia

Medir la tensión de la batería consume corriente, porque el circuito divisor que permite leerla drena algo de energía de forma continua. Por eso el divisor solo se activa durante la medición —unos milisegundos cada 3 segundos— y se apaga inmediatamente después. Un detalle pequeño que, multiplicado por horas de vuelo, ahorra energía real.

Portapilas con celda de litio CR123A recargable integrada en el conjunto electrónico del payload
Fig. 4 · La celda que alimentó el vuelo, junto al conjunto de sensores

Salud del sistema: la sonda también se cuenta a sí misma

Además de medir la atmósfera, la sonda informa de su propio estado. Es una distinción clásica en cualquier misión: por un lado están los datos científicos —lo que se quiere estudiar—, y por otro la telemetría de servicio, que responde a una pregunta muy distinta: «¿sigue el equipo en condiciones de trabajar?». En el panel de seguimiento esos indicadores tienen su propio bloque, Salud del Sistema, con tres semáforos:

Bloque «Salud del Sistema» · panel de seguimiento
IndicadorQué vigilaDe dónde sale
Batería
% y voltios
Autonomía restante y estado de la celda.Viaja en el paquete, como lectura cruda del conversor
Señal LoRaWAN
dBm
Calidad del enlace de radio con tierra.La mide la estación que recibe · no ocupa ni un byte
Satélites
recuento
Fiabilidad de la posición. Por debajo de 4, alerta.Viaja en el paquete, compartiendo byte con el indicador de fix
Dos suben; la tercera la regala la red

Un detalle bonito de eficiencia: la batería y los satélites tienen que viajar dentro del paquete, ocupando bytes preciosos. La potencia de señal, no —la mide la estación de tierra al recibir cada mensaje y la red la adjunta como metadato—. Es información de diagnóstico que llega gratis, sin gastar ni un byte de un presupuesto que va muy justo.

Hay otra decisión coherente con el resto del diseño: la sonda envía el número crudo que le da el conversor analógico-digital, no los voltios ya calculados. La conversión a tensión y a porcentaje se hace en tierra, en Node-RED. Así el firmware no gasta ciclos ni bytes en algo que puede resolverse abajo, y —más importante— el dato original queda guardado tal cual: si mañana se recalibra la curva de la batería, se puede recalcular todo el histórico sin haber perdido nada.

El indicador que destapó el problema del GPS

Este bloque no es decoración. El recuento de satélites fue precisamente lo que delató el bloqueo COCOM a 18 km: el receptor seguía declarando una posición «válida», pero los satélites habían caído a cero. Sin ese indicador de servicio, el congelamiento habría pasado desapercibido y los datos del apogeo se habrían dado por buenos.

El veredicto: sobraba batería

Y aquí llega el resultado que más tranquiliza. Pese a las temperaturas extremas, el consumo fue muy reducido y la batería aguantó con holgura todo el vuelo, con margen de sobra al aterrizar. El colapso de capacidad que se temía nunca llegó a materializarse.

Contribuyeron varias cosas a la vez: el aislamiento térmico, el calor que la propia electrónica disipa al trabajar, el divisor de batería que solo se enciende para medir, y una radio que —al contrario de lo que se suponía— tuvo enlace tan bueno en altura que no necesitó insistir. Para la próxima misión, ese margen abre la puerta a gastar energía en otras cosas: más sensores, muestreo más frecuente o vuelos más largos.

Lo que ese margen no permite es transmitir más a menudo. Ese límite no lo pone la batería, sino el reglamento de la banda de 868 MHz y el presupuesto de aire de la red —como se explica en «El otro límite: cada cuánto se puede hablar»—. Se puede tener energía de sobra y seguir sin poder hablar más.

La evolución completa de estos indicadores, minuto a minuto, se puede seguir en el reproductor de la misión ↗, que reconstruye el vuelo entero con todos los paneles funcionando en tiempo real.

09 · Estado y evolución

Lo que voló y lo que viene después

El sistema que alcanzó los 25.527 m está plenamente operativo y validado en vuelo real. Pero un proyecto así nunca se da por cerrado: estas son las mejoras en marcha para la siguiente iteración.

  • En vuelo Cadena completa operativa Join OTAA con persistencia de sesión, muestreo cada 3 s en buffer circular, protocolo adaptativo al enlace, watchdog de 60 s y telemetría de posición, presión y doble temperatura. Validado hasta 25.527 m.
  • Siguiente GPS u-blox NEO-M9N Sustituir el UC6580 por un receptor con modo aeronáutico configurable (dynModel=6), para tener posición real más allá de los 18 km y no depender de la reconstrucción. La arquitectura modular hace que el cambio afecte esencialmente a un solo fichero.
  • Siguiente Sensor inercial (IMU ICM-42688-P) Añadir aceleración y giro para caracterizar la rotación y las oscilaciones del ascenso con datos propios, en lugar de inferirlos de la trayectoria.
  • Siguiente Calibración del PT100 y paso a 3 hilos Volver a la configuración de tres hilos y calibrar contra referencia para afinar la medida de temperatura exterior en el rango extremo.