PA8W Amateur Radio              

MapApp: An Android app for plotting RDF bearings. 

April 3, 2021: Warning for excessive data usage:

MapApp can perfectly
work both online and offline but I noticed that online use may show unpredictable internet data consumption.
This is not really an issue using wifi but it may be when you're using mobile internet for longer time spans.

I found out that it is caused by the way Open Street Map is implemented in MIT App Inventor 2 which I used to build the app.
MIT App Inventor 2 has a bug.  
Convincing the specialists from MIT was almost as hard as finding the bug.. ;)

But now they have tested it following my directions and acknowledged there's a problem and promised to look into it.
I hope they will fix it soon.

In the mean time I  recommend to be careful using MapApp.
In a worst case scenario, depending on zoom level and the particular area you are focussing at, MapApp may download up to 500kB per second,
that's roughtly 30MB per minute or 1.8 GB per hour. 
You can however scroll through the area of interest using wifi, and use these loaded map tiles on the road with no internet connection.
(MapApp automatically stores map tiles on your device)
often use Mapapp on a tablet without internet this way, and it still adds a lot of information to your radio-hunt.

The latest app version is from september 20, 2021. 
I added a traject line in Mobile Mode and the user can set the minimum speed.


With a small hardware addition to the RDF41/42/43 radio direction finders, existing of a tiny BlueTooth module,
we can now wirelessly export bearing data to other BlueTooth devices like phones or tablets.
For this purpose I recently developed an Android application: MapApp.
The nice thing is that the upgrade is purely a hardware addition for all models RDF41/42/43.
Only the pre-2021 RDF43mono version needs a firmware update, the 2021 version is already updated.
So with the hardware update, you can use your Android cellphone or even an Android Tablet
(with BT and preferrably GPS for mobile use!) to present your bearings on a map.
With the Bluetooth extention your RDF can still export bearings to your PC via USB cable.
Even simultaneous use of a PC running RDF-Mapper and an Android running MapApp works fine, though I can't come up with a good reason to do that...  
Compatibility with RDF-Mapper for PC:
Data can be exchanged with remote RDF stations via the same server but MapApp can not display the extremely long bearing lines of RDF-Mapper accurately.
This is caused by the fact that MapApp can't display curved paths.
Further down we do a little more explaining.
RDF-Mapper however has no trouble displaying the shorter bearing lines of MapApp.

MapApp Features:

Imports RDF Bearings using BlueTooth.

Bearing lines can be saved temporarily by tapping a button.

MapApp can upload its bearings to the Remote RDF server,
and it can download and plot the bearings of two remote RDF stations.

Two operating modes:
Fixed Mode: For any fixed station, bearings are plotted referring to north.
Mobile Mode: The app calculates the direction you are driving to and then adds the imported bearings to that heading.
So the plotted bearing lines on the map are true.

Home Position and BlueTooth address plus some more user settings are automatically stored on your device.

V4.6 dated 28-3-2021 can be downloaded here:  MapApp4.apk

MapApp V4.7 dated 20-9-2021 can be downloaded here:  MapApp47.apk

Permissions needed: Location(GPS) and local Storage.

Note that installing and using the app is entirely at your own risk!

This first screenshot shows the app right after power-up.
Power-up is always in Fixed Mode.
Just below the title there's 4 buttons:
Settings gives access to the settings screen
Mode will let you swap between the two modes.
Home is to set your home position in Fixed Mode, and the same button will change to the Follow button in Mobile Mode, to keep your position in the middle of the map.
Select BT will open a list of available BT devices, so you can pick "PA8W_RDF"
(Before powering up the MapApp you will have to pair that BT device to your phone! Password is 1234)
Once you picked the right BT device, that device address is stored and used to auto-connect next time you power-up.
In case the BT connection is lost, the app will prompt you to re-connect.

Right below the buttons is the status bar, which shows mode, received bearing, etcetera.
It changes color depending on the mode:  Green for Fixed mode, Yellow for Mobile mode.

On the map there's a Red marker in the center. That's the stored home position.
To change that Home Position just swipe to your home position, hit the Home button, and tap on the exact spot on the map where you want to have your home position.
No hassle with GPS numbers...

At any time you can use the zoom- and zoom+ at will,
and swipe the map to see what's beyond the edge of the map.

The black line starting at the home marker is the 200km long bearing line.
In this case it points at zero RDF bearing (=north) because no bearing was imported yet.

By default the line length is set to 200km because of two reasons:
 (You can change the bearing line length in Setttings.)

1, Practically all VHF/UHF/SHF signals sources you hunt will be less than 200km away.
Only satellite signals may come from farther away but they are generally too weak for a doppler RDF.
2, When the App calculates a bearing line, it will have the starting point (GPS) and depending on the bearing angle it determines an end point of the bearing line.
The map this app uses, will plot a straight line between the two points, which should in many cases be a curved line really, when the line goes east or west, due to the curvature of the earth.
(Sorry I don't join the Flat-Earth society...)
So, with a correct starting point and correct end point, the straight line will show a small error margin especially at the middle section of the line.
This error will stay within a few degrees but with a much longer bearing line the error will get bigger as well. 

If you can't live with this tiny error you will have to use
RDF-Mapper for PC:
It does plot a neat curved line.
(Note that the "straight line error" is not present in bearings pointing north or south, and maximum for bearings going west or east on the northern or southern hemisphere.)

This screenshot shows that BlueTooth is connected, and that a bearing of 179 degrees was imported in Fixed Mode.
Initially this bearing line was RED meaning that it was very recent.
But after less than a second the red line turns black until a new RED bearing line is imported over BlueTooth.

In Cyan and Magenta there are two more bearing lines and station markers.
These are remote station bearings imported via the bearing server.

In RDF-Mapper it the same situation looks like this:

I made sure that both systems are compatible.
They can exchange bearings and together they form a great RDF-team platform.

Now Mobile Mode is entered and the GPS managed to get a lock.
(First time the App will have asked for permission to use your Location/GPS)
As soon as it locks the home marker might disappear, when your actual location is not on the current map...
Just hit the Follow button at the bottom and the map will center at the GPS postition.
You can simply switch Follow on and off at will.

In this situation I drove off just a few kilometers from my home-base before I switched to Mobile Mode.
The black line is the latest bearing line from my home position.

The status bar says Speed Low:

In Mobile Mode the app calculates the Heading of your vehicle by comparing the two latest GPS fixes.
An imported RDF bearing will be added to the Heading,
so that it is plotted the map at the right angle.
To achieve a fair accuracy, your speed should be higher than approx. 4 meters per second or 9 miles per hour.

Below that speed GPS heading errors may degrade overall accuracy,
so the App will plot no bearings at speeds below a set minimum speed.
In the latest version of MapApp (V4.7) this minimum speed can be user set between 1 and 8 meters per second.
The lowest setting may come in handy when your'e hunting from a motorboat or any other slower means of transport.

Also be aware that -for good reasons- GPS and my RDF's react slow to sudden changes.
So a curvy road is not the best environment to get the best accuracy.

When you tap on a Marker, a pop-up label will tell you the name of that remote station and how old (in seconds) that upload is.
So you can check whether the remote station is still providing useful information.

In both Fixed and Mobile mode you can tap the Save button to save your latest bearing line.

It will then turn blue and stay on the map even when a new bearing is plotted.
This way you can collect 10 bearing lines to be used for cross-bearings.
If you have 10 blue lines stored on the map and tap Save once more,
the oldest bearing will be overwritten by the new one.

If you tap the button by accident and some useless bearing is stored in blue,
you can tap the Erase button to erase the latest stored bearing.
You can erase all 10 lines this way if you want.
The last one you erase is the oldest one.

Saving bearing lines during your car hunt can reveil pretty clear where to expect the
signal source,
like this screenshot shows.

It's best to only collect bearings on a nice open traject, to achieve the best accuracy.

In MapApp version 4,7 I added a traject line in Mobile Mode,
so you can see exactly which part of an area you have been cruising.

Only once every 10 seconds a new traject position is calculated, but this is sufficient to
help your situational awareness in unknown areas.

The Settings screen:

The left row exists of text boxes.

In the top textbox you can enter your remote ID in case you want to export your bearings to the server.
After each input, hit the Apply Button to enter your input.
Note that an export call to the server is done only right after you get a fresh (Red) bearing from the RDF.

The second and third textbox accept the ID's of remote stations you want to plot on the map.
hit the Apply Button to enter your input and you will see a piece the data found for this station.
If that station is not found you will be prompted so.
If you get no reaction at all, try again, because if the server doesn't respond within 1.8 seconds your request will be ignored.

Textbox number 4 accepts Interval in seconds, the "heartbeat" rate of the system, which is 2 by default.
In this case, every single second your bearing plot will be refreshed and one of the server actions (read remote1, read remote2 or maybe a save) will be performed.
When you have entered two remote stations, every remote station will be questioned every four seconds.
However, a good new bearing of your RDF will be given priority and exported immediately, after which the normal import sequence is resumed.
A higher time interval means less internet traffic, so lower data consumption.

If you want to stop uploading or downloading simply erase the full ID or remote station in the textbox and hit the Apply button again.
The text to the right of each button should disappear completely to show that you succesfully removed that ID.

Textbox # 5 accepts the lenght of your bearing lines. (Not the remote ones!)
200km is a good compromise, but if you only hunt earthbound transmitters 50km will do fine as well.
Shorter lines are more accurate, by minimizing the mentioned "straight line error".

Textbox # 6 accepts the Minimum Speed for acceptance of a bearing AND for plotting your traject.
Default is 5 meter per second. The user can set this value to 1 up to 8.
So, only if you go faster than the set speed, new bearing lines will be plotted and your trajectory will be plotted in black on the map. (with intervals of 10 seconds)

Another word to data consumption:
The app automatically stores map tiles, so it is advantageous to use wifi first and scroll through the area of interest in several zoom levels, so these map tiles are already stored before you continue on the mobile network.
Zooming in during mobile applications is a bad idea if you want to save data, because a zoomed-in map needs a lot of extra map tiles when you're on the move.
Map tiles will stay stored if you close the app, but if you choose to remove the app from your device and install it again later, you will notice that all stored map tiles have been lost as well.
Having enough map tiles stored, you can perfectly hunt without internet connection unless you want to import/export via the remote server.
Exporting and importing bearing data is not data-intensive at all.


Let's focus on the hardware addition now:
We need a programmed BlueTooth module, which I can provide.
(It has to be custom-programmed because otherwise a Firmware update of your specific RDF would be necessary)

Below drawing shows how to wire it up in your RDF.

In case of an Arduino UNO (RDF41) it works exactly the same way.

The BT module can be wired to the pins of the interface PCB, or even easyer: Directly to the back of the Arduino.

(use a well grounded soldering iron to prevent Electro-Static Discharge damage!)

In a metal enclosure, it is good practice to tape the BT-module to the 12V power supply line, close to the DC entrance.
power supply line will leak enough RF energy of the BT-module to the outside world to give you a few meters of coverage to your Android device.

73, Wil.