
BermejaSat #6: Operación Rescate — Construyendo un “radar” inalámbrico para localizar el satélite
Introducción
En todo lanzamiento de un CanSat hay un momento crítico del que se habla poco: el aterrizaje. Cuando nuestra lata descienda en paracaídas y caiga a varios kilómetros de distancia entre matorrales o árboles, ¿cómo vamos a encontrarla?
Aunque más adelante integraremos un GPS, la tecnología satelital puede fallar si la lata queda boca abajo o bajo un techo de vegetación densa. Por eso, en esta sesión hemos entrenado un “Plan B” infalible utilizando puramente la física de las ondas de radio: convertir nuestra Estación Terrena en un radar direccional basado en la potencia de la señal (RSSI).
Aprovechando las dos placas LILYGO LoRa V1.3 y sin necesidad de conectar ningún sensor adicional, hemos programado un sistema de baliza y rastreo para jugar al “frío o caliente” a nivel de telecomunicaciones.
📡 La Ciencia detrás del Radar: El RSSI
El RSSI (Received Signal Strength Indicator) mide la potencia con la que la onda de radio de 868 MHz impacta contra la antena receptora. Se mide en decibelios-milioctavios (dBm), y al ser una escala logarítmica negativa, se lee así:
- -30 dBm: Señal perfecta (las placas están casi pegadas).
- -70 dBm: Buena señal (las placas están a unos metros de distancia sin obstáculos).
- -100 dBm: Señal débil (lejos o con paredes por medio).
- -120 dBm: Límite de desconexión (a punto de perder el satélite).
Si programamos la pantalla OLED para que dibuje una barra gráfica en función de este valor, obtenemos un rastreador visual perfecto.
Paso 1: El código de la Baliza (El Satélite Escondido)
A esta placa solo hay que conectarle una batería o un powerbank (y por supuesto, su antena). Su única misión es gritar un “¡Bip!” electrónico (un paquete LoRa) tres veces por segundo para que podamos rastrearlo.
C++
#include <SPI.h>
#include <LoRa.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire, -1);
void setup() {
Wire.begin(21, 22);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
SPI.begin(5, 19, 27, 18);
LoRa.setPins(18, 14, 26);
LoRa.begin(868E6);
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(2);
display.setCursor(10, 25);
display.println("BALIZA ON");
display.display();
}
void loop() {
// Emitir un pulso cada 300 milisegundos
LoRa.beginPacket();
LoRa.print("BIP");
LoRa.endPacket();
delay(300);
}
Paso 2: El código del Radar (Estación de Búsqueda)
Esta es la placa que llevaremos en la mano. Su código mapea el valor matemático del RSSI (entre -120 y -30) y lo transforma en el ancho de un rectángulo (entre 0 y 128 píxeles) para llenar la pantalla OLED.
C++
#include <SPI.h>
#include <LoRa.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire, -1);
void setup() {
Wire.begin(21, 22);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
SPI.begin(5, 19, 27, 18);
LoRa.setPins(18, 14, 26);
LoRa.begin(868E6);
}
void loop() {
int packetSize = LoRa.parsePacket();
if (packetSize) {
int rssi = LoRa.packetRssi();
// Convertir el RSSI en el ancho de una barra para la pantalla
// map(valor, rssi_min, rssi_max, pixel_min, pixel_max)
int anchoBarra = map(rssi, -120, -30, 0, 128);
// Evitar que la barra se salga de la pantalla si hay picos
if (anchoBarra < 0) anchoBarra = 0;
if (anchoBarra > 128) anchoBarra = 128;
display.clearDisplay();
// Textos informativos
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("BUSCANDO SATELITE...");
display.setCursor(0, 15);
display.print("Senal (RSSI): ");
display.print(rssi);
display.println(" dBm");
// Dibujar la barra de intensidad
display.drawRect(0, 35, 128, 20, SSD1306_WHITE); // Borde
display.fillRect(0, 35, anchoBarra, 20, SSD1306_WHITE); // Relleno dinámico
// Mensaje de proximidad
display.setCursor(0, 65);
if (rssi > -50) {
display.setTextSize(2);
display.setCursor(30, 50);
display.println("¡AQUI!");
}
display.display();
}
}
🏃♂️ La práctica: Caza del Zorro en el Instituto
Con el código cargado, el alumnado ha realizado una práctica de campo dividiéndose en dos equipos:
- Un equipo ha escondido la baliza emisora (alimentada con un powerbank) en algún lugar del instituto.
- El otro equipo, portando la Estación Terrena, ha tenido que localizarla fijándose únicamente en cómo crecía o disminuía la barra gráfica de la pantalla OLED.
Conclusión Pedagógica
Lo que parece un simple juego del “frío o caliente” es una clase magistral de telecomunicaciones prácticas. El alumnado descubre por sí mismo cómo los muros de hormigón atenúan la señal abruptamente, cómo el propio cuerpo humano hace de “escudo” (bloqueando la señal si nos ponemos de espaldas a la baliza), y cómo las ondas de radio rebotan en los pasillos creando ecos (fenómeno de multipath).
Si el día del lanzamiento oficial nuestro CanSat se pierde en la sierra, BermejaSat ya cuenta con la tecnología y la experiencia táctica para rescatarlo.
Etiqueta:AIDARAC, BermejaSat, cansat, ESA, esp32, Fox Hunt, ies monterroso, LILYGO, LoRa, montesteam, RSSI, Telemetría



