ECE497 Project: Local Air Traffic Radio

Team members: Adam Bretsch

Executive Summary
RTL-SDR radios can monitor local air traffic via ADS-B signals. These signals include much information about the flight, including latitude, longitude, height and other flight charactertics.

Currently the utility dump1090 can output plane data to a html page. This page shows the direction and location of each plane in sensor range, but is only accessible in the local network.

The goal of this project is to create a device that will track the local air traffic and alert the user whenever a plane comes close enough to look out the window and see

This tool will have many different applications. The overall goal is to be able to set up the BeagleBone with an SDR and have it give alerts whenever a plane is close enough to see. These planes will be found using the dump1090 utility and the system will alert the user via both a buzzer and by tweeting the plane's information at https://twitter.com/FlightsOverRose.

Packaging
Components used are listed below:

BeagleBone Blue: https://beagleboard.org/blue

Software Defined Radio: https://www.rtl-sdr.com/buy-rtl-sdr-dvb-t-dongles/

Electronic Buzzer: https://www.adafruit.com/product/1536

Installation Instructions
This program relies on several utilities. Most of them are python specific and can be installed with the python utility of pip. This can be accomplished with the commands: pip install tweepy pip install geopy For the buzzer, the library adafruit BBIO is used for GPIO. it can be found and installed from https://github.com/adafruit/adafruit-beaglebone-io-python. The buzzer is connected to GP1_5, also known as LED_RED.

The main repo is: https://github.com/AdamBretsch/SDRFlights This includes the dump1090 utility, prebuilt and ready to use. No compiling is needed before running. This utility is originally from https://github.com/mutability/dump1090.

User Instructions
After cloning the repo, plug in the SDR. I've found that using a externally powered usb hub can improve signal strength. Connect to the BeagleBone and make sure it has Internet access. From here, navidate to the SDRFlights directory and run the scripts ./localdumo.sh, HTTPserver.sh and tweetPlanes.py to run the utility. The raw HTML data can be found at 192.168.7.2:8090/gmap.html. The console should readout any tweets, as well as updating the actual twitter at https://twitter.com/FlightsOverRose. Whenever a plane passes overhead, the buzzer will beep and the twitter account will update with the new information.

Highlights
Example of use: https://www.youtube.com/watch?v=JTODDWsaSgg

Past tweets: https://twitter.com/FlightsOverRose

Theory of Operation
The utility dump1090 calibrates and begins the SDR's collection of data. The script begindump.sh starts this process and starts dump1090 with the option to deposit all data gathered into a .json file ./dump1090/public_html/data/aircraft.json. Using the script ./HTMLserver.sh, a basic python html server is started on port 8090 that views that data in an html form.

For my project, the same aircraft.json file that serves the html page is queried and used to compile data on the local flights. The program ./listPlanes.py gathers this data and filters out the planes that don't have a strong enough signal to give specific aircraft information such as flight number or speed. If this information is present, each plane and its values are recorded, and the distance to each plane from the local position (currently assume to be Rose-Hulman in Terre Haute, IN) is calculated using geopy's vincety distance between two points in the form (latitude, longitude). This program was the first step in processing the information used in the project, and can currently be used to check the distance to each fully visible plane.

In ./tweetPlanes.py, ./listPlanes.py has been expanded to include the functionality to tweet and activate a buzzer to inform the user whenever a plane is close enough to be locally seen. The distance is set to 20 miles by default, and whenever a plane is detected within this distance, a tweet including its flight number, distance, speed, altitude, and a link to a third party flight-tracker is included in the tweet. The twitter feed operates through use of the utility tweepy, which integrates with a custom-made application on apps.twitter.com, communicating via public and private keys to the twitter account.

Work Breakdown
Installed dump1090 - 10/22/17

Tested dump1090 -10/22/17

Installed dump978 - 10/29/17

Tested dump978 - 10/29/17

Analyze dump1090 source - 11/2/17

Create listPlanes.py program - 11/5/17

Finish implementation of listPlanes.py - 11/6/17

Create tweetPlanes.py - 11/7/17

Finish implementation of tweetPlanes.py 11/10/17

Finish documentation on wiki - 11/13/17

Future Work
A great deal of time was spent trying to integrate planes from the 978 MHz band using another utility dump978, but the information was presented in a different manner that I found difficult to integrate into the project. This is possible however, and would expand the usefulness of the tool.

More information from the flight, such as flight origin and destination could be included.

Weather information could be pulled from an open API, and visibility information could be used to make sure all planes that trigger an alert are actually in the seeable range.

Conclusions
This project has been quite a learning experience for me. I've never before worked with both .json files or twitter, so learning to use both has been a learning experience. My original project goal was to combine the dump1090 and dump978 utilities, but I could never get the dump978 program to fully function, so I switched the scope of the project to the current scope, which has worked out well. I think the project turned out great, with a solid product thats rather fun to play with.