ARDF Telemetry Unit - SARCNET

School Amateur Radio Club Network
School Amateur Radio Club Network
School Amateur Radio Club Network
School Amateur Radio Club Network
Title
Go to content
Amateur Radio Direction Finding Telemetry Unit


Amateur Radio Direction Finding Telemetry Unit mounted on a VK3YNG Sniffer and 3-Element Yagi
Introduction
The School Amateur Radio Club Network runs simulated Search and Rescue Missions for primary school students. This usually entails a role-play event where students form into Search And Rescue (SAR) groups allocated the task of searching for a "downed aircraft in rough terrain". The groups are: SAR Centre; SAR Base and SAR Team. The aircraft has an Electronic Position Indicating Radio Beacon (EPIRB) and the SAR Team has Amateur Radio Direction Finding (ARDF) equipment. Each group has Amateur Radio HF, VHF or UHF communications equipment. The students have a fun day learning all about Amateur Radio, bushcraft and first-aid skills. We have run these events in Churchill National Park in Victoria and also at Hahndorf oval in South Australia.


SAR goups at Churchill National Park in Victoria


SAR group at Hahndorf Oval in South Australia

With so many groups working simultaneously at different locations and with different frequencies, modes and callsigns, a communications plan or COMPLAN is absolutely necessary:


COMPLAN for Hahndorf Oval SAR Mission

Communications between the three groups is paramount, particularly for sending the location of the SAR Team and their reported bearings to the target. The SAR Team has to get three separate bearings in order to triangulate the downed aircraft.


Triangulation of three bearings required to locate the downed aircraft

The SAR Team uses an ARDF Tracker, comprising a VK3YNG Sniffer and 3-element, measuring tape, Yagi antenna. The Sniffer provides a audible tone with a frequency proportional to the signal strength of the beacon. By rotating the antenna and listening to the tone, it is easy to find the direction to the target. A magnetic compass is then used to get an accurate bearing in degrees and a GPS is used to get an accurate location in Latitude and Longitude. The location and bearing are then radioed to the SAR Base, who plots the bearings on a map and then relays the possible location of the downed aircraft to the SAR Centre.

ARDF Beacon and Tracker

The operational task of updating the location and bearings from the SAR Team and plotting these on a map was particularly challenging for our young students. We wondered if this could be automated by attaching a ARDF Telemetry unit to the tracker. This project was the result and it has been trialled with great success.
System Design
The system comprises a telemetry encoding unit, transmitting and receiving units and a telemetry decoding and mapping unit:
  • The telemetry encoding unit comprises a GPS Receiver, 3D Accelerometer/Magnetometer and BPSK31 encoder.
  • The transmitting and receiving units comprise an Amateur Radio transceiver.
  • The telemetry decoding and mapping unit comprises a Raspberry Pi computer running FLDIGI and Open Street Maps

To send the location and bearing of the ARDF tracker from the SAR Team to the SAR Base a digital communications mode would be required. The possible candidates were APRS or BPSK31. These days, with many APRS-capable radios, the former would be a more logical solution. However, at the time, a DIY BPSK solution was chosen for simplicity.

The BPSK message would contain:
  • Amateur radio call sign
  • Date and Time of GPS fix
  • Latitude, Longitude and Altitude of SAR Team
  • Azimuth (Bearing) and Elevation to target
  • CCITT CRC-16 Checksum
Examples:
VK3YSP,28/06/17,07:47:22,-3754.44899,14505.53473,73.7,56,19*5B4C
VK3YSP,28/06/17,07:48:02,-3754.45083,14505.53826,68.9,151,-8*0392
VK3YSP,28/06/17,07:48:36,-3754.45026,14505.53719,66.7,-45,23*807D
Telemetry Encoder
The Arduino reads the GPS date, time and location and it resolves the true azimuth and elevation of the unit using a 3D Accelerometer/Magnetometer. When the TX button is pressed it encodes this information into a BPSK31 message and uses PWM to generate a signal. A bandpass filter is required to reduce the sidebands of the PWM signal to a minimum. An audio line transformer is used to couple the BPSK31 signal to the radio. A MOSFET provides the Press-To-Talk signal for the radio.

ARDF Telemetry Unit Pictorial Schematic

The ARDF Telemetry Unit is assembled in a Hammond H9004 ABS Enclosure with the sensor, Arduino and SMT components mounted on prototyping PCB. The unit is wired using solderable enamelled copper wire.



ARDF Telemetry Unit Assembly

Telemetry Decoder
A Raspberry Pi running FLDIGI is used to decode the BPSK31 messages. The signal can be sent over HF, VHF or UHF channels.


Mapping
The recovered locations and bearing lines can be plotted on the Raspberry Pi computer using either Google Maps + Google Maps API or OpenStreetMap + OpenLayers. The latter was chosen because it is open source and has better map detail in some cases.


Google Maps vs Open Street Maps

Triangulation
Drawing geo-located bearing lines on an Open Street Map is easily handled using Open Layers. The following web page shows how to plot three such bearings on a map:

<!DOCTYPE html>
<html>
   <head>
       <title>ARDF Bearings</title>
       <meta charset="utf-8" />
   </head>
   <body>
       <div id="map" style="top: 0; left: 0; bottom: 0; right: 0; position: fixed;"></div>
       <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
       <script type="text/javascript">
           // Initialize map, projection, zoom and centre point
           var mapnik         = new OpenLayers.Layer.OSM(); // OpenStreetMap
           var fromProjection = new OpenLayers.Projection("EPSG:4326");   // Transform from WGS84 Projection
           var toProjection   = new OpenLayers.Projection("EPSG:900913"); // To Spherical Mercator Projection
           var zoom           = 16;
           var centre = new OpenLayers.LonLat(145.2514789795087, -37.94967535743975).transform( fromProjection, toProjection);
           var map = new OpenLayers.Map("map");
           map.addLayer(mapnik);
           // Add markers at the start of each line
           var markers = new OpenLayers.Layer.Markers( "Markers" );
           map.addLayer(markers);
           markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(145.25001449338987, -37.95097399227748).transform( fromProjection, toProjection)));
           markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(145.25134486906768, -37.951388535373304).transform( fromProjection, toProjection)));
           markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(145.2524391432882, -37.951367332396515).transform( fromProjection, toProjection)));
           // Add Vector
           var vector = new OpenLayers.Layer.Vector();
           // Add first bearing line
           var start_point1 = new OpenLayers.Geometry.Point(145.25001449338987, -37.95097399227748).transform( fromProjection, toProjection);
           var end_point1 = new OpenLayers.Geometry.Point(145.2530024742338, -37.948355548677064).transform( fromProjection, toProjection);
           var line1 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString([start_point1, end_point1]));
           vector.addFeatures([line1]);
           // Add second bearing line
           start_point2 = new OpenLayers.Geometry.Point(145.25134486906768, -37.951388535373304).transform( fromProjection, toProjection);
           end_point2 = new OpenLayers.Geometry.Point(145.25165064088503, -37.94791560715396).transform( fromProjection, toProjection);
           var line2 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString([start_point2, end_point2]));
           vector.addFeatures([line2]);
           // Add third bearing line
           var start_point3 = new OpenLayers.Geometry.Point(145.2524391432882, -37.951367332396515).transform( fromProjection, toProjection);
           var end_point3 = new OpenLayers.Geometry.Point(145.25064213029793, -37.94813557824445).transform( fromProjection, toProjection);
           var line3 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString([start_point3, end_point3]));
           vector.addFeatures([line3]);
           // Draw map and layers
           map.addLayers([vector]);
           map.setCenter(new OpenLayers.LonLat(145.2514789795087, -37.94967535743975).transform( fromProjection, toProjection), zoom);
       </script>
   </body>
</html>


Geo-located Triangulation Bearings plotted on Open Street Maps using Open Layers
Operation
Operation of the ARDF Telemetry Unit is easy:
  • LED on for 5 seconds at power up
  • LED displays the GPS 1-PPS signal when 3D-Fix is valid
  • Press the button to transmit ARDF telemetry
  • LED remains on while transmission is in progress


Refrences

Back to content