SDR na Raspberry Pi: Śledzimy samoloty nad naszymi głowami, czyli odbiornik i wizualizacja danych ADS-B

SDR na Raspberry Pi: Śledzimy samoloty nad naszymi głowami, czyli odbiornik i wizualizacja danych ADS-B

Uwaga: Ten wpis ma nowszą wersję – nowe wersje programów i znacznie ułatwiona instalacja: https://blog.jokielowie.com/en/2017/01/sledzimy-samoloty-cz-2-ads-b-i-mlat-najtanszy-odbiornik-dla-flightaware-oraz-flightradar-24

Poprzednio podzieliłem się z Wami hobbystycznym komputerem Raspberry Pi za przysłowiowe grosze. O ile sami jeszcze nie uczycie się na nim Pythona, albo nie gracie w Minecraft – albo nawet lepiej – już się tym znudziliście, mam dla was połączenie kilku innych hobby, a wszystko to dzięki doposażeniu naszego Pi w odbiornik/dongle DVB-T/DAB. Celem jest uzyskanie bardzo taniej platformy do odbioru i przekazywania informacji o przelatujących samolotach – dla siebie i dla FlightRadar24, za co dostaniemy darmowy dostęp do wersji premium. Zanim przejdziemy do techniki – o jakie hobby chodzi ?

sdr-pi-icon-e1451988334732-625x770

  • spotting – czyli fotografowanie samolotów rejsowych nad naszymi głowami, lecących na RNAV. Aby fotografować należy wiedzieć kiedy nadlecą, oczywiście wiedzieć też KTO leci
  • odbiór sygnałów radiowych – analogowych i cyfrowych i odpowiednia ich demodulacja/interpretacja, więcej za chwilę
  • wykreślanie na mapie aktualnie przelatujących samolotów i udostępnianie tego w sieci lokalnej lub internecie
  • odbieranie zwykłego radia analogowego
  • słuchanie transmisji z CB radia, TAXI
  • śledzenie projektów stratosferycznych/kosmicznych – a więc nasłuch transmisji z balonów jakie są wypuszczane przez koła naukowe lub hobbystów
  • jeśli blisko lotniska – komunikacji z wieżą, kontrolą podchodzenia etc. (LiveATC.net)
  • słuchanie dowolnej transmisji z przedziału 50MHz – 2GHz, demodulacja danych cyfrowych
  • przesyłanie danych do FlightRadar24 celem poszerzenia zasięgu działania usługi oraz uzyskania dostępu do portalu Premium tegoż

Jak widać ma to wiele wspólnego z HAM Radio, krótkofalarstwem i „modelarstwem”. Przed erą Internetu popularne, potem zapomniane – dziś dzięki łatwemu dostępowi do elektroniki hobbystycznej – przeżywającej często drugą młodość. Niemniej pamiętajmy, że nie NADAJEMY, a więc nie potrzebujemy licencji krótkofalarskiej, nie musimy też stawiać nadajników. Czy potrzebujemy więc specjalistycznego sprzętu ? Nie! Dzięki pracom nad sterownikami do dongle z chipsetem Realtek’a (DVB-T, DAB czy FM) na USB Antti Palosaari, odkrył że pozwalają one przekazać dowolną transmisję radiową, tak aby ją odpowiednio zinterpretować na komputerze – innymi słowy pozwalają na demodulację odebranego z dowolnej częstotliwości sygnału przez oprogramowanie (aplikację).

Lista sprzętu:

  • Raspberry Pi – model B z 256 lub 512MB RAM – najlepsza jest wersja z portem Ethernet
  • Dongle DVB-T/USB – tuner USB do odbioru DVB-T. Preferujemy te z tunerem Eltronics 4000 (E4000). Można testować dowolne, ale wymagany jest chip RTL2832U na donglu.
  • opcjonalnie – kawałek miedzianego drutu, lutownica oraz akcesoria aby uzyskać lepszą odbiór na bardziej dostosowanej do naszych potrzeb antenie

Let's build it

antena_parts-300x258

Dongle DVB-T – możemy znaleźć wiele na Allegro, Ebay czy też stacjonarnych sklepach, ważne aby posiadał odpowiedni tuner. Najpierw upewniamy się, że nasz Raspbian pracuje z jądrem co najmniej 3.6.11+. Wydajemy komendę:

root@raspberrypi:~# uname -a

Powinna ona zwrócić: (6.x.yz też jest OK – po prostu powyżej 3.6.11+):

Linux raspberrypi 3.6.11+ #385 PREEMPT Fri Mar 1 21:53:22 GMT 2013 armv6l GNU/Linux.

Jeśli mamy starsze jądro systemu – w prosty sposób uaktualniamy je przez komednę:

root@raspberrypi:~# rpi-update

Po ponownym uruchomieniu powinniśmy już mieć najnowsze jądro

Włączamy naszego dongla do portu USB, i piszemy:

root@raspberrypi:~# dmesg | grep RTL

powinniśmy otrzymać:

[    3.452787] usb 1-1.3: Product: RTL2838UHIDIR.

Oznacza to, że nasz dongle został rozpoznany. Nie zapomnijmy podłączyć owej małej anteny dostarczanej z urządzeniem i umieścić jej w pobliżu okna (jeśli możemy nawet na balkonie, podstawka anteny jest magnetyczna). Na załączonym „patyku” powinniśmy odebrać transmisję w granicach 50 do nawet 80km od naszej lokalizacji. Częstotliwość transponderów ADS-B 1090MHz jest dość mocno tłumiona, przy zachmurzeniu zasięg może zmniejszyć się do 30-40km. Na początek taka antena wystarczy, ale potem warto zagadnąć znajomego krótkofalowca – jak powinna wyglądać antena aby odbierać dane w promieniu do nawet 200km. Przygotujcie się na terminy takie jak impedancja oraz Ohm.

Instalujemy kilka pakietów potrzebnych do skompilowania programów służących do dekodowania wiadomości z ADS-B:

apt-get install cmake build-essential git libusb-1.0-0-dev pkg-config

Teraz pobieramy dzięki git pakiet rtl-sdr. Podobnie jeśli jest to Gentoo, Ubuntu czy ArchLinux. Dla Raspbian/Raspbery Pi OS wydajemy kolejno komendy::

sudo su -
git clone git://git.osmocom.org/rtl-sdr.git
mkdir rtl-sdr/build
cd rtl-sdr/build
cmake ../
make
make install
ldconfig

Spowoduje to pobranie niezbędnych plików i rozpoczęcie kompilacji (kompilacja, łączenie itp.). Jeśli to się nie powiedzie – wpisz swój błąd w komentarzach. Przetestujmy naszą bibliotekę rtl_sdr (najprawdopodobniej to się nie powiedzie, ale czytaj dalej):

pi@raspberrypi ~ $ rtl_test

Found 1 device(s):
0: ezcap USB 2.0 DVB-T/DAB/FM dongle
Using device 0: ezcap USB 2.0 DVB-T/DAB/FM dongle
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
Reading samples in async mode...

Ponieważ większość nowych jąder posiada już sterowniki do popularnych dongli DVB-T prawie z pewnością trzeba będzie utworzyć plik, który zapobiegnie wczytaniu sterowników dla trybu odbioru DVB, ponieważ my chcemy użyć trybu bezpośredniej komunikacji z urządzeniem. W tym celu należy stworzyć plik:

/etc/modprobe.d/rtl_sdr-blacklist.conf

który informuje system o zablokowaniu ładowania następujących modułów przy uruchamianiu systemu:

blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830

Aby nie komplikować – sugeruję teraz ponowne uruchmienie Raspberry Pi.
eśli wreszcie działa – odkładamy rtl_sdr na półkę i pobieramy następny program służący do interpretowania i wyświetlania danych z przelatujących samolotów, autora Salvatore Sanfilippo – dump1090:

git clone git://github.com/antirez/dump1090.git
cd dump1090
make

Teraz wystarczy już tylko wydać:

./dump1090 --interactive --net

które - jeśli antena poprawnie odbiera sygnał - powinno pokazać podobną tabelę do poniższego przykładu:

Hex    Flight   Altitude  Speed   Lat       Lon       Track  Messages Seen .
--------------------------------------------------------------------------------
47340d WZZ106   37000     458     50.794    16.537    103   184       0 sec
3c56ab CLS203   38025     449     49.975    17.407    274   303       2 sec
47340e WZZ52N   36000     446     50.651    17.662    340   1064      0 sec

Tak więc ciągu kilku minut można już uzyskać niezły efekt na dostarczonej do dongla antenie!

Yeah it works just using this little antenna! But how to display that in some fancy way ? Let’s choose a very nice and well maintained VirtualRadar, which works using .NET 3.5 in Windows or with mono on Linux
After instalaltion we should change the protocol to BaseStation, and in network options we set our IP address of Raspberry Pi running dum1090 (here it’s 10.0.0.212), with default port of 30003.
VirtualRadar shows the data using Google Maps and local webpage, so start your fav browser and enter: http://127.0.0.1:8080/VirtualRadar/GoogleMap.htm

vr-config-300x2411

vr-1-1024x418

How to get Flight Radar Premium account

Let’s share the data for fun and profit! Download always updated fr24feed_arm-le_225s and register on Flight Radar 24 webpage to get the key. Type it as HERETYPETHEKEY:

#export FR24AUTHIP=83.140.247.20
fr24feed_arm-le_225s --fr24key=HERETYPETHEKEY

If it’s correctly connecting – it will look like this:

[i]sent 1 planes in 1 packets
[n]pinging the server
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets

And after a short while you will get your premium access – confirm you’re feedeing the data. dump1090 works now both for our VirtualRadar and simultaneously for Flight Radar 24

Auto start at boot

Our software should be able to run during startup, and we should monitor if they are working, so let’s start by installing the screen program

sudo apt-get install screen

Then we will tell Pi to periodically check if our software is running – using the system scheduler – cron, while we can see how they are doing by using screen:
On the console:

crontab -e

type in the editor, and replace the values in caps:

#FR24AUTHIP=83.140.247.20
*/1 * * * * if [ `/bin/ps a | /bin/grep dump1090 | /bin/grep -v grep | wc -l` -gt 0 ]; then echo "dump1090 dziala"; else screen -dmS dump1090 dump1090 --interactive --net --interactive-rows 5; fi > /home/pi/dump1090.log 2>&1
*/1 * * * * if [ `/bin/ps a | /bin/grep fr24feed_arm-le_233 | /bin/grep -v grep | wc -l` -gt 0 ]; then echo "fr24feed_arm-le_233 dziala"; else screen -dmS fr24feed /usr/local/bin/fr24feed_arm-le_233 --fr24key=TYPEYOURKEYHERE ---lattitude=ENTER --longitude=ENTER; fi > /home/pi/fr24arm-le.log 2>&1

That’s it! It will start at latest in 30 minutes.

Previous Post Next Post