Monitor de WSPR com raspberry pi + dongle RTL-SDR

Uma ideia simples e que permitirá receber spots de WSPR (Weak Signal Propagation Reporter Network) e registá-los na rede, utilizando apenas um dongle USB, o RTL-SDR v3 RTL2832U, um raspberry pi 2 B+ ou superior, em linha de comandos.

O modo WSPR utiliza uma largura de banda de 6Hz numa transmissão durante 110,6s. A duração de cada tom é de 0,6827s com um desvio máximo de 1Hz. Permite assim a escuta de sinais até -30dB!
Esta técnica pode ser utilizada também em testes de comunicação EME sem grandes antenas ou recursos especiais…

Depois de ter construído o kit da qrp-labs Ultimate3S para o envio de beacons em “whisper” fiquei com a sensação de não estar a contribuir para a comunidade também com a recepção e registo de spots na http://wsprnet.org

Para isso era necessário uma solução que se revelasse barata, sem a necessidade de um receptor por cada banda, ou a utilização de equipamento caro e redundante aos rádios de HF que por cá tenho. Teria de ser um sistema autónomo!

Finalmente encontrei algumas páginas a falarem sobre o tema e experimentei. Apesar de só ouvir sinais fortes, fica a ideia… Pode ser que alguns de vós façam algumas experiências e consigamos este projecto, do qual me limitei a traduzir do nosso colega VK6FLAB, Onno Benschop, e testar.

Não me vou perder em detalhes, de como instalar o sistema operativo, configurar acessos por SSH ou a rede wireless, fi-lo noutros posts mais antigos e há muita documentação online.

Não demora mais que 15 minutos a configurar tudo…

Instalar o software WSPR

Segue o conjunto de instruções que deve executar,

$ cd ~
$ sudo apt-get -y install build-essential cmake libfftw3-dev curl libcurl4-gnutls-dev ntp libusb-1.0-0-dev librtlsdr-dev git
$ git clone https://github.com/Guenael/rtlsdr-wsprd
$ cd rtlsdr-wsprd/
$ make
$ sudo cp rtlsdr_wsprd /usr/local/bin

Configurar o dongle RTL-SDR

Se já tiver ligado o dongle ao raspberry, desligue-o e aguarde uns 10s.
Execute as seguintes instruções na linha de comandos,

$ cd ~
$ cat > blacklist-rtl.con
blacklist rtl8192cu
blacklist rtl8xxxu
blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830
<CTRL+D>
$ sudo mv blacklist-rtl.conf /etc/modprobe.d/

Ligue agora o seu dongle RTL-SDR…

Primeiros testes

Para reduzir consumos desnecessários, supondo que tem acesso ao raspberry por SSH, desligue o port HDMI, evita também algum ruído fundamental eliminar na escuta de sinais fracos,

$ /opt/vc/bin/tvservice -o

Execute a aplicação rtlsdr-wsprd substituindo na expressão seguinte o seu indicativo e o QRA locator com 4 ou 6 digitos,

$ rtlsdr_wsprd -f 14.0956M -c [indicativo] -l [locator] -d 2 -S

Os parametros possíveis são,

-f dial frequency [(,k,M) Hz], check http://wsprnet.org/ for freq.
-c your callsign (12 chars max)
-l your locator grid (6 chars max)

Receiver extra options:
-g gain [0-49] (default: 29)
-a auto gain (default: off)
-o frequency offset (default: 0)
-p crystal correction factor (ppm) (default: 0)
-u upconverter (default: 0, example: 125M)
-d direct dampling [0,1,2] (default: 0, 1 for I input, 2 for Q input)
-n max iterations (default: 0 = infinite loop)
-i device index (in case of multiple receivers, default: 0)

Decoder extra options:
-H use the hash table (could caught signal 11 on RPi)
-Q quick mode, doesn't dig deep for weak signals
-S single pass mode, no subtraction (same as original wsprd)

Nota final: é muito importante que o seu raspberry pi tenha a data e hora rigorosamente certas, pois o protocolo WSPR começa ao minuto exacto e prolonga-se por cerca de 2 minutos mais.

Se pretender pode automatizar o processo. Onno criou 3 simples scripts para o fazer. Se fizer login com o user “pi” devem ser guardados nas directorias indicadas no nome de cada um deles.

Cada frequência é lida aleatoriamente e escutada por 15 minutos. Pode eliminar frequências para as quais não tem antena, ou utilizar uma antena activa de banda larga.

/home/pi/bin/start-wsprd

#!/bin/bash

# If you're running this somewhere else and logging it, knowing the time is helpful
date -R

callsign=«your_callsign»
location=«your_locator»

# set a default frequency if we don't specify one, 20m WSPR

if [ $# -eq 0 ] ; then
  freq=14.0956
else
  freq=$1
fi

# bash does not have floating point math, this if statement checks to see if
# our frequency is less than 28.8 MHz, so we have to use the "Q" stream, otherwise
# we can use the default for anything above 28.8 MHz
if [ "${freq}" = "$(echo -e "${freq}\n28.8" | sort -g | head -1)" ] ; then
  stream=2
else
  stream=0
fi
rtlsdr_wsprd -f ${freq}M -c ${callsign} -l ${location} -S -a 1 -d ${stream}
/home/pi/bin/monitor-wspr

#!/bin/bash
duration=15m
killsignal=SIGINT

while true ; do
  sudo /usr/bin/sntp -s ntp02.oal.ul.pt
  shuf /home/pi/frequencies | while read freq ; do
  timeout -s ${killsignal} ${duration} /home/pi/bin/start-wsprd ${freq}
  done
done
/home/pi/frequencies

0.136
0.4742
1.8366
3.5686
5.2872
5.3647
7.0386
10.1387
14.0956
18.1046
21.0946
24.9246
28.1246
50.293
70.091
144.489
432.3
1296.5

Referências:
https://projects.vk6flab.com/projects/rtl-sdr-projects/wspr-monitoring-node
https://lms.onnocenter.or.id/wiki/index.php/WSPR:_pakai_raspberrypi_dan_RTL2832U
https://libraries.io/github/Guenael/rtlsdr-wsprd
http://wsprnet.org/drupal/node/6215

Leave a Reply

Your email address will not be published. Required fields are marked *