ADS-B
antenna:
The idea
for this project sprang from a published list of interesting things to do with a Raspberry
Pi. One suggestion was to receive and decode navigational
information transmitted by aircraft using a system called ADS-B. The ADS-B system operates
at 1090 MHz (or 1.090 GHz). By way of comparison, the AIS system used by ships operates
at 161.975 MHz, not very far above marine VHF frequencies and the
2 meter ham band.
Out of curiosity I tuned SDR#
to 1090 MHz using a 2-meter antenna. With this arrangement I could see
occasional activity above the noise in the SDR’s spectrum display,
especially when an
aircraft was near enough to hear its engines.
A quick Google search yielded several excellent ‘how to’ articles for
making a 1090 MHz antenna, for example, https://www.balarad.net/
and http://ei6gsb.conorfarrell.com/construction/constructing-an-ads-b-collinear-antenna/.
From these and similar articles it seemed the design of choice for this
frequency and service is a collinear, made from 75-ohm
coax.
In less time than a typical search
consumes I found a piece of RG6X that
was still in a sealed plastic wrapper—it must have belonged to some
appliance from years ago, maybe a TV or video player. Being unsure what
sort of precision was needed I looked up the velocity factor for
RG6X and found that published values vary by manufacturer and type, but
hover around 80%. Thus, at 1090 MHz a half wavelength is about 11
centimeters, which is not coincidentally the value cited in
construction
articles.
I
clipped the
F connectors off the ends of the 4-foot length of RG6X, and cut the
remainder
into 15 cm pieces. Following published guidance, I trimmed 2
centimeters of braid and foam from each end of the cut pieces.
Unfortunately I did not take
photos of construction in progress. The piece shown above
was left over, as I used only 8 segments in making the antenna.
Construction was simple, though. The center conductor of one piece gets
connected to the outer shield of the next, by pushing the solid center
conductor between the shield and outer plastic jacket. A couple of
details may be
worth noting. First after cutting, I cleaned the cut ends
carefully to ensure that no stray ‘hairs’ from the shield could short
to the center conductor. Then on joining each segment I tested the
entire length up to that point with an ohmmeter, both for
continuity and the
absence of a
short. Articles I’d read suggested wrapping the joints with
electrical tape. I did this and also covered the tape with
shrink wrap. When finished the total length of the 8 connected
half-wave segments came to approximately 35 inches.
The next problem was to figure out how
to make the antenna stand straight up, while avoiding the use of metal
parts. To this end I spent $2.00 for a 10 foot length of CPVC, and from
that cut a 35 inch piece. The blue plastic cap at the top
(photo)
came
from the ‘strings too short to use’ jar. Two questions still confused
me. Should the end of the antenna be terminated with a 75 ohm resistor
or not? I had a 75 ohm resistor but couldn’t think why it would be
needed, so I did not use it. The second question was whether or not to
make a 75 ohm to 50 ohm transformer. At least one article suggested
connecting two 1/12 wavelength pieces of coax (75 ohm and 50 ohm) for
impedance matching. One twelfth wavelength would be less than 1-inch at
1090 MHz,
but how would that differ from connecting the 50 ohm coax directly to
the 75 ohm antenna? It is surely different in some way that escapes my
understanding. However, I did not do this.
On placing the 1090 MHz collinear
antenna on the balcony outside
and connecting it to the
NooElec RTL-SDR, I found that 1090 MHz was
alive with some sort of signal, but what? Through earphones it sounded
like a mix of tones and static. I didn’t know what modulation mode or
bandwidth to
set in the SDR, but surely these signals must be ADS-B because they
were the right
frequency, and much stronger and more continuous than those previously
observed with the 2-meter antenna.
Yet another Google search led to several
ADS-B decoding accessories, including RTL 1090, DUMP 1090, ADS-B#, FlightAware
ProStick, MATLAB(!), and the one I ended up using for this
test ModeSDeco2.
Figuring out how to run ModeSDeco2 was a little tricky. The supplied
example .bat file referenced a couple of databases that were not
included. However, I found through experimentation that the program
would start and run without these databases. In retrospect, it would
have been beneficial to have read the ‘Help’ file before starting! I
had expected at first to
use an SDR program, such as SDR# to receive the signal, and then pipe
audio to the decoding program. However, ModeSDeco2 does not work this
way. Rather it receives the signal itself directly from the RTL. Thus
this program can be used without an SDR program. In fact, it is not
possible to monitor the signal concurrently (using the same physical
device) with another SDR
application, as the
decoder ‘owns’ the RTL-SDR.
At first I did not believe the displayed data, thinking both quantity
and quality were too good to be true. However, upon
disconnecting
the antenna decoding stopped completely. Moreover, the
information being displayed described flights that were currently
within about 50 nautical miles of my location. There could be no
question that the program was decoding real-time radio transmissions as
received by the antenna that was sitting out on the balcony table.
ModeSDeco2
serves decoded data as HTML pages, over whatever TCP/IP port was
specified when starting the program. In addition to the tabular form
illustrated above, the program also produces a Google maps projection,
showing the current position and direction of flight for tracked
aircraft (video demo below). Other pages show charts and statistics,
such as the number of messages decoded per second or per hour, and a
graph of contacts by distance. Based on data from the latter chart, the
most distant messages decoded in the first day of testing were 80
nautical miles away.
Collinear demo (with assist of RTL-SDR and ModeSDeco2): ADS-B.mp4
Project descriptions
on this page are intended for entertainment only.
The author makes no claim as to the accuracy or completeness of the
information presented. In no event will the author be liable for any
damages, lost effort, inability to carry out a similar project, or
to reproduce a claimed result, or anything else relating to a decision
to
use the information on this page.