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:

Materiale consigliato

Ecco allora come fare, prima di tutto partiamo da una versione di Raspbian aggiornata scaricabile da QUI (scegliamo la versione a 32 bit, altrimenti potremmo avere incompatibilità), 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

Installiamo proma Git che ci servirà per recuperare tutti i files necessari:

sudo apt-get install -y git

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 -y libusb-1.0
sudo apt-get install -y cmake
sudo apt-get install -y libxft2

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 -y sox
sudo apt-get install -y at
sudo apt-get install -y 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://www.iu2frl.it/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:

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 -y pulseaudio
sudo apt-get install -y 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://www.iu2frl.it/installer-wxtoimg/

Suggerimento di IS0HHA 11/2021:

aggiungerei una funzione molto semplice e comoda per tutti, ossia creare un link simbolico che possa essere lanciato a mano, qualora l’aggiornamento automatico non andasse a buon fine
Si potrebbe aggiungere il seguente commando:

ln -s /home/pi/weather/predict/schedule_all.sh /usr/local/bin/aggiorna_satelliti

In questo caso, da qualsiasi directory ci si trovi sul sistema, basterà dare il commando “aggiorna_satelliti” affinché faccia eseguire la pianificazione

Post Disclaimer

Informazioni Importanti

Note generali: Le informazioni contenute in questo articolo sono di carattere informativo e rispecchiano le opinioni personali del autore. Tutte le guide nel sito vengono proposte "as it is" puramente a scopo didattico. L'utente che accetta di seguirne i passaggi si assume ogni responsabilità in caso di guasto/malfunzionamento o altro problema come conseguenza della modifica.

Link di affiliazione e contenuti promozionali: Nei post di iu2frl.it posso includere collegamenti a rivenditori. Posso ricevere una piccola commissione dal rivenditore se effettui un acquisto dopo aver fatto clic su uno di questi link. I post non sono espressamente sponsorizzati da rivenditori, editori, promotori o produttori, se non diversamente specificato chiaramente e tutte le decisioni editoriali sono prese esclusivamente dagli autori dei singoli articoli.

Contenuti riguardanti regolamenti e/o normative: Eventuali riferimenti a normative non costituiscono valore legale, si tratta di libere interpretazioni ed estratti di circolari corredate da eventuali commenti, si invitano tutti gli utenti a verificare la veridicità di tali informazioni sugli organi ufficiali di riferimento, nessuna colpa o responsabilità può essere data agli autori degli articoli.

Licenza di utilizzo: Tutti i contenuti vengono condivisi con licenza CC BY-NC-SA 4.0: Questa licenza consente ad altri di remixare, adattare e sviluppare i contenuti in modo non commerciale, purché accreditino l'autore originale e concedano in licenza le loro nuove creazioni con gli stessi termini. Per maggiori informazioni visitare il sito Creative Commons.

Important Informations

General notes: The information contained in this article is of an informative nature and reflects the personal opinions of the author. All the guides/tutorial on the website are offered "as it is" for educational purposes only. The user who agrees to follow the steps assumes all responsibility in case of failure/malfunctioning or other problem as a result of the modification.

Affiliate links and promotional products: In some posts of iu2frl.it I can include links to resellers. I can get a small commission from the reseller if you make a purchase after clicking on one of these links. The posts are not expressly sponsored by resellers, publishers, promoters or producers, unless otherwise clearly specified and all editorial decisions are made solely by the authors of the individual articles.

Contents about rules and laws: Some articles may contain portions or whole laws or rules regarding specific areas, these kind of content are meant to be indicative only, no responsability can be given to the authors. Always refer to official sources when looking for rules or laws.

Contents licenses: All the contents are published as CC BY-NC-SA 4.0: This license lets others remix, adapt, and build upon your work non-commercially, as long as they credit you and license their new creations under the identical terms.. For more informations please visit Creative Commons website.