Overview
This project aimed to be a weekend project, to create a system that can display nearby aircraft. The system will consist of a Raspberry Pi, a software defined radio (SDR), and a display. The SDR will be used to receive ADS-B signals from aircraft, and the Raspberry Pi will process and display the data. The ADS-B signals are sent to FlightRadar24, a public service that tracks aircraft and displays them on a map.
Components
- Raspberry Pi 4 with case
- RTLSDR v3 dongle
- Telescoping antenna included with the dongle
- 7" 800x480 HDMI screen
I had most of these on hand, however if purchasing from scratch, the total cost would be roughly $100-150.
ADS-B
Briefly, ADS-B is a system that aircraft use to broadcast their position, speed, and other information. The system is used by air traffic control to track aircraft, and is also used by services like FlightRadar24 to provide real-time tracking of aircraft. The system operates on 1090MHz, and is unencrypted. The SDR dongle is capable of receiving these signals, and the Raspberry Pi is capable of processing them. These signals are rather powerful, around a few hundred watts, so a small antenna is sufficient for reception even from several miles away and indoors.
Hardware
The screen included a stand, and the Raspberry Pi included a case. Assembly was simple, the screen is powered from the one of the Pi’s USB ports, and gets video from the onboard HDMI port. The SDR dongle is also USB, and the antenna included a suction cup which I attached it to the desk with. The telescoping antenna is adjustable, and was adjusted to 27.5cm, which corresponds with the 1090MHz frequency that ADS-B uses.
OS and software
Initially, I used the latest version of Raspbian available, which was based on Debian 12 bookworm. It ships with Wayland out of the box, which with Wayfire nearly worked with this application, but was missing a few features related to hiding the cursor. I made the switch back to X11 with raspi-config
. In order to display the Chromium web browser at boot, I added the following line to /etc/xdg/lxsession/LXDE-pi/autostart
:
@chromium-browser --kiosk https://flightradar24.com/radarview
Then to hide the cursor I added:
@unclutter -idle 0.1 -root
To prevent the screen from sleeping I added:
@xscreensaver -no-splash
To the start of the file.
After all that, I still wanted to click the fullscreen button on the browser, so I installed xdotool
to call xdotool mousemove x y
and xdotool click
, then created a new .sh script so I could add a delay, and added a line after opening the chromium browser:
@/home/aidan/click_fullscreen.sh
In the end, autostart
contained this:
@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash
@chromium-browser --kiosk https://flightradar24.com/radarview
@/home/aidan/click_fullscreen.sh
@unclutter -idle 0.1 -root
And the helper script just had this:
|
|
Finally, to set up sharing with FlightRadar24, I first prevented the OS from using the dongle as a TV tuner by blacklisting the dvb_usb_rtl28xxu
module. Then I followed the instructions at https://www.flightradar24.com/build-your-own. Then I VNC’d into the Pi and logged in to the FlightRadar24 website so the display will be allowed to use the radar scope view as long as that cookie exists. Afterwards I disabled VNC, left the Pi only accessible via SSH public key auth, and configured unattended-upgrades
since I wouldn’t be touching the system for a while.
Results
The system works reasonably well for a weekend project, it has been on my desk only ever failing if the internet goes out. Since it’s reset at boot, fixing it is a simple matter of power cycling the Pi. Range is poor, up to 5 miles, as expected by a small antenna, no LNA, and indoors placement. FlightRadar is kind enough to provide contributors with network data exceeding that which they contribute, allowing me to see aircraft in the area beyond the range of my antenna.