Ricezione Autonoma dei Satelliti NOAA con Raspberry PI

Da tempo cercavo una soluzione per ottenere la decodifica dei satelliti NOAA senza dover tenere acceso il PC ma sfruttando qualcosa che consumasse meno energia, perchè non un Raspberry Pi 3B+ ? Con una chiavetta SDR e una Antenna munita di LNA tutto è possibile!

Materiale Occorrente:

  • Raspberry Pi (consigliata versione 3 o superiore)
  • Chiavetta SDR (ottima quella in foto, con un front end avanzato ma vanno bene anche le economiche di ebay)
  • Alimentatore da almeno 2A continui
  • Antenna a 137MHz per satelliti (sbizzarritevi con l’autocostruzione, io uso una Turnstile)

Materiale consigliato

  • LNA
  • Filtro Passa Banda (vedi anche QUI)

Ecco allora come fare, prima di tutto partiamo da una versione di Raspbian aggiornata scaricabile da QUI, una volta che abbiamo installato l’immagine sulla SD e avviato il Raspberry, per essere sicuri che tutto sia aggiornato diamo il comando:

sudo apt-get update
sudo apt-get upgrade
sudo reboot

Ci serviranno poi le librerie USBLib e i driver per la RTL2832 e un tool di compilazione che ci verrà utile più avanti

sudo apt-get install libusb-1.0
sudo apt-get install cmake

creiamo il file per evitare incompatibilità con il kernel installato modifichiamo un file di configurazione con:

sudo nano /etc/modprobe.d/no-rtl.conf

ed inseriamo:

blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830

Ora installiamo la suite SDR:

cd ~
git clone https://github.com/keenerd/rtl-sdr.git
cd rtl-sdr/
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON
make
sudo make install
sudo ldconfig
cd ~
sudo cp ./rtl-sdr/rtl-sdr.rules /etc/udev/rules.d/
sudo reboot

Nel caso in cui la compilazione dia qualche errore è necessario rilanciare il comando “apt-get update” e, se necessario ri-scaricare le librerie mancanti di “libusb” e “cmake” (comando più in alto).

Per poter registrare l’audio in uscita e far partire la decodifica ad un dato orario usiamo:

sudo apt-get install sox
sudo apt-get install at
sudo apt-get install predict

Ora rimane solamente da installare il sofware di decodifica (WxtoIMG):

cd ~
wget http://www.wxtoimg.com/beta/wxtoimg-armhf-2.11.2-beta.deb
sudo dpkg -i wxtoimg-armhf-2.11.2-beta.deb

Nel caso in cui il precedente passaggio non funzioni proviamo con:

cd ~
wget https://iu2frl.altervista.org/wp-content/uploads/2018/07/wxtoimg-armhf-2.11.2-beta.deb
sudo dpkg -i wxtoimg-armhf-2.11.2-beta.deb

Per verificare che la chiavetta sia riconosciuta spegnamo il Raspberry, colleghiamo la chiavetta e riaccendiamo, poi diamo il comando:

sudo rtl_test

apparirà un output simile a questo:

Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 ... 
Sampling at 2048000 S/s.

Info: This tool will continuously read from the device, and report if
samples get lost. If you observe no further output, everything is fine.

Reading samples in async mode...

Facciamo attenzione ai valori di “Gain” che riconosce il tuner, ci serviranno più avanti, se dopo questo testo (passati alcuni secondi) nel terminale non appare più nulla vuol dire che tutto sta funzionando correttamente e non vi sono errori di ricezione.

Ora prepariamo il software per prevedere i passaggi:

predict

Ci apparirà questa schermata:

                                    
                           --== PREDICT  v2.2.3 ==--         
                     Released by John A. Magliacane, KD2BD   
                                    May 2006                 
                                                             


                            --==[ Main Menu ]==--


 [P]: Predict Satellite Passes          [I]: Program Information
 [V]: Predict Visible Passes            [G]: Edit Ground Station Information
 [S]: Solar Illumination Predictions    [D]: Display Satellite Orbital Data
 [L]: Lunar Predictions                 [U]: Update Sat Elements From File
 [O]: Solar Predictions                 [E]: Manually Edit Orbital Elements
 [T]: Single Satellite Tracking Mode    [B]: Edit Transponder Database
 [M]: Multi-Satellite Tracking Mode     [Q]: Exit PREDICT

Premiamo “G” (se la schermata delle coordinate non appare automaticamente):

                *  Ground Station Location Editing Utility  *



                        Station Callsign  : IU2FRL
                        Station Latitude  : 40.0000 [DegN]
                        Station Longitude : -010.0000 [DegW]
                        Station Altitude  : 25 [m]



            Enter the callsign or identifier of your ground station

ed inseriamo i nostri dati, attenzione che la longitudine è espressa in gradi OVEST, per noi quindi dovremmo anteporre il segno “-“.

Ora avviamo WxtoIMG per accettare i termini di utilizzo:

wxtoimg

Chiudiamolo e creiamo il file di configurazione

nano ~/.wxtoimgrc

Anche qui dovremo inserire le nostre coordinate (a differenza del software precedente la longitudine è in gradi EST, non è quindi necessario il segno “-“)

Latitude: 40.0000
Longitude: 10.0000
Altitude: 25

OK! tutti i programmi sono pronti, ora mancano gli script di decodifica veri e propri, creiamo il primo file con:

cd ~
mkdir weather
cd weather
mkdir predict
cd predict
nano schedule_all.sh

e al suo interno inseriamo:

#!/bin/bash

# Update Satellite Information

wget -qr https://www.celestrak.com/NORAD/elements/weather.txt -O /home/pi/weather/predict/weather.txt
grep "NOAA 15" /home/pi/weather/predict/weather.txt -A 2 > /home/pi/weather/predict/weather.tle
grep "NOAA 18" /home/pi/weather/predict/weather.txt -A 2 >> /home/pi/weather/predict/weather.tle
grep "NOAA 19" /home/pi/weather/predict/weather.txt -A 2 >> /home/pi/weather/predict/weather.tle
grep "METEOR-M 2" /home/pi/weather/predict/weather.txt -A 2 >> /home/pi/weather/predict/weather.tle



#Remove all AT jobs

for i in `atq | awk '{print $1}'`;do atrm $i;done


#Schedule Satellite Passes:

/home/pi/weather/predict/schedule_satellite.sh "NOAA 19" 137.1000
/home/pi/weather/predict/schedule_satellite.sh "NOAA 18" 137.9125
/home/pi/weather/predict/schedule_satellite.sh "NOAA 15" 137.6200

premiamo CTRL+O per salvare e CTRL+X per chiudere e passiamo al secondo file:

nano schedule_satellite.sh

in cui incolleremo:

#!/bin/bash
PREDICTION_START=`/usr/bin/predict -t /home/pi/weather/predict/weather.tle -p "${1}" | head -1`
PREDICTION_END=`/usr/bin/predict -t /home/pi/weather/predict/weather.tle -p "${1}" | tail -1`


var2=`echo $PREDICTION_END | cut -d " " -f 1`

MAXELEV=`/usr/bin/predict -t /home/pi/weather/predict/weather.tle -p "${1}" | awk -v max=0 '{if($5>max){max=$5}}END{print max}'`

while [ `date --date="TZ=\"UTC\" @${var2}" +%D` == `date +%D` ]; do

START_TIME=`echo $PREDICTION_START | cut -d " " -f 3-4`
var1=`echo $PREDICTION_START | cut -d " " -f 1`

var3=`echo $START_TIME | cut -d " " -f 2 | cut -d ":" -f 3`

TIMER=`expr $var2 - $var1 + $var3`

OUTDATE=`date --date="TZ=\"UTC\" $START_TIME" +%Y%m%d-%H%M%S`

if [ $MAXELEV -gt 19 ]
  then
    echo ${1//" "}${OUTDATE} $MAXELEV

    echo "/home/pi/weather/predict/receive_and_process_satellite.sh \"${1}\" $2 /home/pi/weather/${1//" "}${OUTDATE} /home/pi/weather/predict/weather.tle $var1 $TIMER" | at `date --date="TZ=\"UTC\" $START_TIME" +"%H:%M %D"`

fi

nextpredict=`expr $var2 + 60`

PREDICTION_START=`/usr/bin/predict -t /home/pi/weather/predict/weather.tle -p "${1}" $nextpredict | head -1`
PREDICTION_END=`/usr/bin/predict -t /home/pi/weather/predict/weather.tle -p "${1}"  $nextpredict | tail -1`

MAXELEV=`/usr/bin/predict -t /home/pi/weather/predict/weather.tle -p "${1}" $nextpredict | awk -v max=0 '{if($5>max){max=$5}}END{print max}'`

var2=`echo $PREDICTION_END | cut -d " " -f 1`

done

Ci siamo quasi, ultimo file:

nano receive_and_process_satellite.sh

Questo è il file in cui avverrà ricezione e decodifica, incolliamo:

#!/bin/bash

# $1 = Satellite Name
# $2 = Frequency
# $3 = FileName base
# $4 = TLE File
# $5 = EPOC start time
# $6 = Time to capture

sudo timeout $6 rtl_fm -f ${2}M -s 60k -g 45 -p 0 -E wav -E deemp -F 9 - | sox -t wav - $3.wav rate 11025

PassStart=`expr $5 + 90`

if [ -e $3.wav ]
  then
    /usr/local/bin/wxmap -T "${1}" -H $4 -p 0 -l 0 -o $PassStart ${3}-map.png
    /usr/local/bin/wxtoimg -m ${3}-map.png -e ZA $3.wav $3.png
    /usr/local/bin/wxtoimg -m ${3}-map.png -e MCIR $3.wav ${3}.MCIR.png
    /usr/local/bin/wxtoimg -m ${3}-map.png -e MSA $3.wav ${3}.MSA.png
fi

In questo file facciamo attenzione ad un parametro, ovvero il numero dopo “-g” che dovrà variare da chiavetta a chiavetta a seconda dei parametri supportati del “Gain” che abbiamo letto prima, cerchiamo di trovare il valore che corrisponda al 70-75% del massimo supportato, ci garantirà la migliore qualità. Probabilmente dovremo cambiarlo in futuro a seconda della qualità immagini ricevute. Un altro parametro di cui tener nota è la correzione in ppm (il numero dopo il parametro “-p”) del quarzo della nostra chiavetta, di default è a 0 ma andrà aggiustato a seconda del nostro hardware

per rendere il tutto eseguibile usiamo:

chmod +x schedule_all.sh
chmod +x schedule_satellite.sh
chmod +x receive_and_process_satellite.sh

e poi rendiamo il tutto autonomo:

export EDITOR=nano
crontab -e

inseriamo qui queste due righe:

1 0 * * * /home/pi/weather/predict/schedule_all.sh
@reboot /home/pi/weather/predict/schedule_all.sh

Un ultimo riavvio e siamo pronti a partire!!

Ad ogni passaggio nella cartella “weather” verranno salvate tre immagini e il file audio del passaggio (nel caso in cui vorremo rielaborarlo nuovamente).


Possiamo in ogni momento controllare i prossimi passaggi con il comando:

atq

Nota, se siete particolarmente pigri eccovi il link di download degli script: Files SH per Noaa

Credit: Haslettj

Aggiornamento Luglio 2018: da qualche giorno il sito wxtoimg.com risulta offline, ecco allora il file DEB per poterlo installare WxtoImg_ARM

Per chi volesse registrarlo come versione professional potete usare questi dati:

  • user: Kevin Schuchmann
  • email: [a vostra scelta]
  • upgrade key: CGHZ-PP9G-EAJZ-AWKK-NDNX

Aggiornamento Luglio 2018 – 2: Ho trovato il modo per far funzionare correttamente anche il ricevitore di Nuova Elettronica (questo) con il Raspberry, ho provato decine di schede audio USB di ogni marca, modello e prezzo ma nessuna dava risultati accettabili, le immagini apparivano distorte (vedi foto sotto).

Un giorno, tra una prova e l’altra ho trovato la “Roccat JUKE 7.1 USB Soundcard” che si trova ad una decina di euro su internet, con un paio di passaggi aggiuntivi finalmente si riesce a registrare correttamente, prima bisogna controllare di aver installato alsamixer e pulseaudio:

sudo apt-get install pulseaudio
sudo apt-get install alsamixergui

Controlliamo il nome dell’interfaccia con

aplay -l

Apparirà una schermata con

**** List of PLAYBACK Hardware Devices ****
card 1: Juke [ROCCAT Juke], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0

nel mio caso la mia scheda è #1, quindi:

touch /etc/asound.conf
nano /etc/asound.conf

ed inseriamo:

pcm.!default {
type hw
card 1
}
ctl.!default {
type hw
card 1
}

Ovviamente sostituiamo 1 con il numero trovato al passo precedente. Ora verifichiamo i livelli del volume e disattiviamo tutte le migliorie audio che troviamo in:

alsamixer

e verifichiamo che le opzioni di registrazione siano simili a queste (impostando correttamente quale scheda audio utilizzare e soprattutto samplerate a 11025):


Dopo le dovute calibrazioni ecco che tutto funziona alla grande:

le immagini vengono costantemente caricate a questo indirizzo: Immagini NOAA

Raccolta installer WXtoIMG: https://iu2frl.altervista.org/installer-wxtoimg/

Precedente LX1163 Nuova Elettronica - Ricevitore NOAA - APT Successivo Panadapter pronti per il laboratorio

10 commenti su “Ricezione Autonoma dei Satelliti NOAA con Raspberry PI

  1. Luca il said:

    Ciao, non riesco ad avere immagini… con il pc e sdr sharp funziona con raspy niente.
    Ho provato ad avviare predict e a fare la previsione dei passaggi ma nell’elenco non figurano ne NOAA18 ne NOAA19, come mai?
    Dando il comando atq vengono forniti solo ora e data e un numero a lato, come faccio a capire di che satellite si tratta?
    Grazie ciao
    Luca

    • iu2frl il said:

      Ciao,

      Ti ho aggiunto in fondo al articolo il file ZIP contenente gli script funzionanti nel caso in cui ci siano errori di battitura.

      Il comando ATQ ti mostra semplicemente i prossimi passaggi, senza specificare quale satellite sia (cosa che vedi invece quando esegui il file “schedule_all.sh”). Puoi prima di tutto controllare di aver inserito correttamente le coordinate sia in predict (occhio al segno “-” davanti ai gradi ovest!) che in wxtoimg, se tutto è in ordine prova ad aumentare il guadagno della chiavetta nel file “receive and process satellite” mettendo acanto al parametro “-g” un valore di 43 o 46. Rispetto ad un ricevitore a conversione ho notato che la sensibilità è inferiore ma si comporta comunque bene, il passaggio migliore è sempre quello intorno alle 16

  2. Luca il said:

    Grazie mille! Ho risolto, vorrei inoltre capire che cosa sono gli altrii parametri nello script receive and process perché pur abbassando il guadagno da 45 a 40 l’i magine Risulta ancora troppo chiara. In sdr sharp abbasso un po’ il volume, qui dove agisco?

    • iu2frl il said:

      Dovresti distinguere se il bianco sia dovuto ad una saturazione del segnale RF o BF, se ti riesce, mandami una foto

  3. fausto il said:

    gentile iu2frl.
    Ho molto apprezzato la tua guida, semplice e con le spiegazione passo passo, soprattutto per me che sono neo SWL e molto meno neoRaspberry!..
    Ho comunque trovato un intoppo nel creare il file del black list.
    al momento digito il comando :Sudo nano….conf, mi si apre una scermatina con dei comandi sottostanti, ed ancjhe se scrivo le tre stringhe blacklist, non mi fa ne salvare ne chiudere..e non riesco ad andare avanti..
    cortesemente un aiutino!
    garazie per l’attenzione.
    cordiali saluti
    Fausto

    • iu2frl il said:

      Ciao, prima devi essere sicuro di aver digitato il comando con la aprila “sudo” all’ inizio del comando, poi quando sei pronto a chiudere il file dai prima CTRL-O e poi CTRL-X. Se nemmeno in quel modo riesci a salvarlo prova prima a dare il comando “sudo -s” poi dare invio, digitare la tua password è ripetere il comando per creare il file. Fammi sapere

  4. Roberto il said:

    Ciao, ti scrivo perchè dopo aver provato pi volte la tua procedura seguendola alla lettera e reisntallando più sistemi operativi, non mi è mai funzionata, ho un’antenna qfh autocostruita e con il pc riesco a ricevere le immagini.
    Ti allego la mail che loschedulatore genera automaticamente ad ogni orario di passaggio del satellite, nella quale è indicato l’errore.
    Ti ringrazio.

    Received: from pi by raspberrypi with local (Exim 4.89)
    (envelope-from )
    id 1fmuYH-0002ii-JS
    for [email protected]; Tue, 07 Aug 2018 07:29:01 +0200
    Subject: Output from your job 8
    To: [email protected]
    Message-Id:
    From: [email protected]
    Date: Tue, 07 Aug 2018 07:29:01 +0200

    Found 1 device(s):
    0: Realtek, RTL2838UHIDIR, SN: 00000001

    Using device 0: Generic RTL2832U OEM
    Found Rafael Micro R820T tuner
    Tuner gain set to 44.50 dB.
    Tuner error set to 55 ppm.
    Tuned to 138100000 Hz.
    Oversampling input by: 32x.
    Oversampling output by: 1x.
    Buffer size: 4.27ms
    Allocating 15 zero-copy buffers
    Sampling at 1920000 S/s.
    Output at 60000 Hz.
    sox FAIL formats: can’t open input `-‘: WAVE: RIFF header not found
    Signal caught, exiting!

    User cancel, exiting…

    • iu2frl il said:

      Ciao,

      Dal tuo output vedo due errori, il primo è che la chiavetta tenta di ascoltare a 138.100MHz, mentre il secondo è che qualche errore ti impedisce di aprire lo stream audio e quindi SOX va in errore

  5. Fabio il said:

    Ciao come faccio a salvare in automatico sul web i risultati? Come nell’esempio la pagina web generata in automatico da wxtoimg andrebbe bene.
    Grazie

    • iu2frl il said:

      Ciao, direttamente da terminale ti consiglio di spostare le immagini nella cartella dove gira il server web oppure tramite il comando “curl” le puoi trasferire via FTP su un server esterno

Lascia un commento