Esta entrada como las del resto del blog son mis apuntes de mi "cuaderno de laboratorio" por loq eu encontrará comentarios y el proceso seguido incluyendo los errores y dudas que se me han planteado, no es un manual al uso, pero con el aprenderá mas cosas.
Para construir y poner en funcionamiento una baliza WSPR TX necesitamos:
Autorización
- Las emisiones en bandas de radioaficionado, como es el caso de las balizas WSPR, precisan, en todo el mundo, disponer de una licencia de radioaficionado. Si no la tiene, piense que es mas fácil y económico de obtener que una licencia o permiso de conducir y le permitirá disfrutar de la afición a la radio como nunca antes lo habia hecho.
Hardware
- Un procesador que sea capaz de definir un mensaje WSPR con el indicativo y la posición y lo transmita de forma síncrona: para esta función utilizaremos placa de desarrollo con Arduino /ESP32
- Un patron de tiempo: para eso usaremos un chip GPS que en principio puede estar o no integrado en la placa. Elegiremos una placa ESP32 con GPS
- Un generador de RF: para ello usaremos una placa SI5351, que es un modulo generador de reloj de 8 kHz a 160 MHz con una potencia de salida de 8 dBm (6mW) que trabaja con un cristal de 25 a 27 MHz se puede adquirir en Aliexpress por menos de 2€ si bien hay placas mas completas que incluyen pantalla TFT por unos 30€ por unos
Resumiendo, nos basta en principio con estas dos placas:
- Lilygo ESP32 LoRa GPS 433MHz (T-Beam)
- Lilygo ESP32 LoRa GPS es una placa de desarrollo compatible con Arduino que entre otras funcionalidades incorpora un receptor GPS que permite obtener la posición y el patrón de tiempo, por lo que es un buen candidato como controlador de un TX WSPR. El GPS es un poco perezoso en el arranque si quiere una respuesta mas rápida elija la placa con GNSS
![]() |
El Si5351 dispone de 3 salidas de RF con conectores SMB (CLK0, CLK1 y CLK2) ademas de 7 pines (0,1,2,SCL, SDA, GND y VIN) |
Es muy conveniente disponer de :
- Un receptor de RF (p.e. SDR) para comprobar que el WSPR TX transmite y en que frecuencia lo hace
- Un receptor WSPR para monitorizar las transmisiones WSPR o SPOTS
- Una analizador de espectros como tinySA para comprobar la calidadd dee la señal de RF generada
Adicionalmente podriamos necesitar:
- Un amplificador lineal de potencia, para aumentar la potencia de saldia del WSPR TX
- Un filtro pasa bajos para disminuir los armónicos que genere el conjunto
Software
He hecho una pequeña búsqueda de proyectos de WSPR TX disponible en Internet y he encontrado el siguiente software:
- wsprbeacon con GPS externo
- wspr-si5351
- The $50 Ham: A Simple WSPR Beacon
- wspr
- wspr encoder
- Easy-Digital-Beacons-v1 usa NTP
WSPRBEACON
Después de analizar brevemente cada uno de ellos hemos elegimos este proyecto que requiere las siguientes librerías:
- https://github.com/etherkit/Si5351Arduino (Se instala en la libreria de Arduino IDE, en el programa #include <si5351.h>)
- https://github.com/mikalhart/TinyGPSPlus (Ya estamos familiarizados con ella por ESP32 LoRa for dummys - Baliza (Beacon) con GPS en el programa #include <TinyGPS++.h>)
- https://github.com/etherkit/JTEncode (Se instala en la libreria de Arduino IDE)
- Wire (en el programa #include "Wire.h )
- WSPR_beacon_ESP32.ino
- GPS.ino
- Messages.ino
- settings.h (En el programa #include "settings.h") es un fichero de parámetros de funcionamiento, solamente pongo los que modifique por que sabia que hacian
- #define MYCALL "MYCALL" => Poner nuestro indicativo
- #define DBMPOWER 8 => Es la potencia que entrega Si5351
- #define SI5351FREQ => poner 0 pues la frecuencia del SI5351 comprado en aliexpress es de 25 MHz, debe comprobar cual es la del suyo
- #define SI5351_CORRECTION => Atención hay que calibrar el SI5351 en caso contrario no funcionara, el valor está en centesimas de HZ Ver SI5351: primeros pasos
- static const unsigned long long freqArray[6] => es la tabla con el ciclo de trabajo, en principio no la toco pero se pueden incluir mas bandas y ajustarla al International WSPR Projct) en cada entrada hay que poner la frecuencia en Hz
- Si va usar la pantalla OLED necesitará:
- Adafruit_SSD1306.cpp
- Adafruit_SSD1306.h
- Fixed8x16.h
![]() |
Mensaje del programa que indica que está esperando captar un primer paso de GPS, cuando lo haga el led rojo parpadeará. Mientras no lo haga no comenzará a emitir |
![]() |
Ajuste de frecuencia con SDR-RTL 6 SDR++ Tabla de los ajustes finales, con la frecuencia leida en SDR-RTL y la leida con openWSPR cuando es leida y decodificada |
Para las bandas de 160m, 80m y 60m la señal recibida por el SDR estaba a nivel de ruido por lo que no se pudo ajustar y se decidió no usarlas de momento.
Con una analizador de espectros TinySA ULTRA provisto de una atenuador de 30 dB (No conecte nunca una fuente de RF directamente al analizador pues podría destruir su paso de entrada) procedimos a medir la potencia real de salida para las distintas bandas corregida la atenuación:
- 7 MHz -53 dBm (se observa armonico en 21 MHz de potencia similar)
- 10 Mhz -49 dBm
- 14 MHz -46 dBm
- 21 MHz -43 dBm
- 24 MHz -37 dBm
- 28 MHz -36 dBm
![]() |
Descubriendo el problema de la potencia de emisión con TinyAS |
Esto nos plantea una duda ¿Qué está ocurriendo para que saque tan poca potencia cuando esperábamos de 8 a 10 dBm?
Cambiamos la salida a CLK1 y a CLK2 y obtenemos un valor parecido por lo que pensamos que debe ser un problema de soldadura del conector SMA (la tiene que hacer el usuario, si no tiene una puede pensar en Estación de soldadura: QUICKO T12-952 que es la opción que elegí despues de variso fiascos con soldadores tradicionales y viejunos).
Cambiamos en el en el programa CLK0 por CLK1, conectamos el TinyAS al CLK1 y comprobams que nuestras sospechas estaban fundadas era una mala soldadura en el CLK=, pues ahora los valores son:
- 7 MHz -8 dBm (se observa armonico en 21 MHz -18 dBm ,35 y 49 MHz)
- 10 Mhz -7,9dBm (se observa armonico en 20 MHz -24 dBm)
- 14 Mhz -7,9dBm (se observa armonico en 28 MHz -22,7 dBm)
- 18 MHz -7,6 dBm
- 21 MHz -7,5 dBm (se observa armonico en 42 MHz -20 dBm)
- 24 MHz -8,2 dBm (se observa armonico en 49,8 MHz -20,5 dBm)
- 28 MHz -8,2 dBm (se observa armonico en 56 MHz -20,5 dBm)
![]() | |
|
![]() | |
|
Como se ve un filtro pasabajos a 30 MHz puede ayudar a mantener el espectro mas limpio. Por ejemplo por unos 6 € puede disponer de un filtro pasa bajos en aliexpress que:
- Admite hasta 2 W de potencia (sobrado)
- presenta unas perdidas inferiores a 2 dB
![]() |
Es dificil concretar el efecto real de un filtro como el indicado en la propagación, de estas 3 entradas la primera es sin y las dos ultimas con, la diferencia sería de -1 dB para 14MHz |
![]() |
La primera es SIN y la segunda CON , no habría diferencias para 14MHz |
![]() |
Las dos primeras son SIN y la ercera es CON, para la banda de 18 MHz. Tenemos la paradoja de que la señal es mejor con el filtro 8algo imposible) y esto se debe a la variabilidad de la propagación |
Por último y por si le viene a la cabeza el que el voltaje de entrada del Si5351 sea 3,3 o 5V, esto no influye en la potencia de salida pues cuenta con un regualdor de voltaje interno
En otro momento veremos si este era el problema de las bandas de 160m, 80 y 60m o es la gran cantidad de armónicos que generan.
5- Se comprueba que los spots se reciben por WSPR RX en local
![]() |
Monitorización con el RX de openWSPR de remoteQTH |
- SELECT
- id AS WSPRnet_id,
- formatDateTime(time, '%d/%m/%Y') AS DATE,
- replace(formatDateTime(time, '%R'), ':', '') AS TIME,
- replace(toString(frequency/1000000), '.', ',') AS f_MHz,
- 'WSPR' AS Mode,
- tx_sign AS Callsign_TX,
- power AS pwr_dBm,
- rx_sign AS Callsign_RX,
- snr AS SNR_dB,
- distance AS d_km
- FROM wspr.rx
- WHERE
- tx_sign='XXXXX' AND
- time > '2025-09-03' AND
- time < NOW()
- order by time
![]() |
Spots recibidos en ls bandas de 7, 10, 14, 18, 21 y 24 MHz por 54 estaciones diferentes de 16 territorios DXCC durante las primeras 24h horas de trabajo de EA5JTT en WSPR con 7dBm (5 mW) La distancia máxima alcanzada es 7.339 km por W4HOS en 14 MHz Fuente: https://wspr.aprsinfo.com/ |
7 - Mejoras
Una elemento importante es disponer de un interruptor con mando a distancia que permita reiniciar el sistema en caso de qe se vea que se ha podido colgar.
Una posible mejora es incluir un amplificador de potencia para mejorar la señal
Queda pendiente averiguar por que no se han obtenido informes de spots en las bandas de 1,8; 5 y 28 MHZ
He disfrutado mucho con este proyecto que es mas sencillo de lo que parece, aunque reconozco que conceptualmente es complejo.
Para continuar ...
- Tambien he pensado en reutilizar una raspberry que tengo para el mismo fin dado que no precisaria Si5351 al obtener la señal directamente del puerto GIO, Tengo visto este proyecto https://github.com/JamesP6000/WsprryPi que usa NTP (con la prueba anterior saldria de dudas si funciona o no) o precisa adquirir un GPS remoto (me da pereza), aunque tambien podemos usar un telefono móvil en desusso apra este fin (ya lo he probado en proyectos anteriores). LA raspberry con un RTL-SDR y openwebSDR ya funciona como receptor sin problemas
. Alguna cosa mas se me ocurrirá
No hay comentarios:
Publicar un comentario