Mobile APRS Tracker & Hidden Electronics

A quick video of the APRS tracking system in my truck and other electronics hidden in the back storage compartment.

Gratiot County Mi Fire Tones

minitorV

Gratiot County Mi Fire Pager Tones

I will be gathering all of the tones as I hear them and am able to record / decode them .

Scanner Feed Antenna On Tower #2

VHF Scanner Feed Antenna In Merrill Mi

Today was a nice day out, so I decided to install the VHF scanner feed antenna on the Merrill Tower (#2). The antenna was a Radio Shack 2Meter 5/8wave mobile magnet mount. I removed the whip from the magnet assembly. I used a small “L” bracket for the mount. It is hose clamped to an existing pole that was unused on the tower. For now it just uses 50′ of RG-58 coax running down. I think the coax might be too short. I might need to extend it 10-15feet to reach where I want it inside the building, but maybe I can re-route it better. I need to look into that when I run the coax into the building.

Clinton County Mi Fire Pager Tones

minitorV

These are the Fire and EMS Pager tones for Clinton County Mi. on 154.220Mhz

I will correspond the dept with the tones, as I discover them. I grabbed these during the weekly tone test. They are a combination of Motorola and Plectron tones.

Tower #2 Site Survey

Close up of site from the road.

I was approved on getting a new tower site yesterday. This site is in the middle of my town, Merrill Mi. It is a very old grain mill. I went to inspect it today. I had to sign a liability release waiver for this site, which isnt too unusual, but after checking out the site, I now understand why. Its old, rickety, creepy and feels almost unsafe. I wasnt able to get to the top of the tower, since it was so windy, and I will need some more safety gear. My climbing harness isnt enough, Ill need some ropes too. I hope to do another site survey next week.

I plan to put up a Ham Radio POCSAG VHF + UHF paging system and some scanner feeds at this location.

Midland Co Sheriff + Fire
Midland City Police + Fire
Bay County PD + FD

I might be able to do feeds for
Arenac Co and Gladwin Co also, but I will have to get more scanners

Below are some pics that I took at the site. Quality is poor, since there is no working electricity in the building for lights.

Fox Hunt Beacon

FoxHunt Setup

A few months ago, I wrote some code for my Arduino board, to act as a Amateur Radio Fox Hunt Beacon. It is made to act as the hidden transmitter setup. Last week I was contacted by Dennis, N8ERF, asking if he could use the setup I had. He was doing a Fox Hunt for the school radio class that he teaches. I loaned him my Arduino board and a Yaesu VX-1, micro sized HT. It was set on low power with 200mw.

Today he held the Fox Hunt at the school. Unfortunately I couldn’t make it, since me kids get off the bus at the time he does the class. He Emailed me today and said it went well. They had 4 teams searching for the “Fox”. They want to do another hunt next week, with 2 hidden transmitters.

I have been asked by some other Hams to provide the code I used. Below is the Arduino sketch I have written.

/*
Foxhunt IDer
Written by
Mark Rodgers - KC8GRQ

http://Mark-Rodgers.com

http://Mark-Rodgers.com/fox-hunt-beacon

Morse blinker/sounder
Written By KB3VCQ
*/

// Global variables

boolean done = false; // initialize a Boolean flag if we don't want to endlessly loop

#define PTT_Low 2  // Transmitter PTT. If PTT goes LOW, use PIN 2
#define PTT_High 3  // Transmitter PTT. If PTT goes HIGH, use PIN 3
#define FOUND 4 // This is the IM FOUND button. Keep LOW for off. Switch HIGH for FOUND Tone Activation.
#define LED 13
#define SPEAKER 6  // Audio out to radio
#define TONE 600.0   // Tone of CWID
#define USESPEAKER true  

#define intracharacter 3 // delay between characters
#define dot 1 // length of a dit -- 1 unit
#define dash 3 // length of a dah
#define eow 7 // length at end of word
#define fiveWPM 240 // milliseconds for 5 wpm (based on sending PARIS 5 times for a total of 250 units)
#define wpm 15 // *** SET THIS TO YOUR DESIRED SPEED ***
#define speed fiveWPM / (wpm / 5) // multiplier to apply to 5 wpm rate. 2 = 10wpm, 2.5 = 15wmp, etc.

// CHANGE THESE SETTINGS
// CHANGE THESE SETTINGS

char send[] = "KC8GRQ FOXHUNT TRANSMITTER";  // SET THIS TO THE CW STRING YOU WANT TO SEND -- MUST BE UPPRCASE ***
int timer = 10; // Set the time between transmissions in SECONDS
char PTT_Setting = LOW; // Set how your radio transmits.     Low = PTT goes LOW.       High = PTT goes HIGH

// CHANGE THESE SETTINGS
// CHANGE THESE SETTINGS

int tx_hold = timer*1000;

// Morse code tokens. 0 = dit, 1 = dah any other character will generate 8 dit error. 

// NOTE: These need to be in ASCII code sequence to work

char tokens [][7] = { "110011","100001", // ,,-
"010101","10010", // .,/
"11111","01111","00111","00011","00001","00000", // 0,1,2,3,4,5
"10000","11000","11100","11110", // 6,7,8,9
"111000","10101","<", // :,;,<
"=",">","001100", // =,>,?
"@", // @,
"01","1000","1010", // A,B,C
"100","0","0010", // D,E,F
"110","0000","00", // G,H,I
"0111","101","0100", // J,K,L
"11","10","111", // M,N,O
"0110","1101","010", // P,Q,R
"000","1","001", // S,T,U
"0001","011","1001", // V,W,X
"1011","1100"}; // Y,Z }
;

// Arduino setup routine
void setup()

{

pinMode(SPEAKER,OUTPUT);
pinMode(PTT_Low, OUTPUT);
pinMode(PTT_High, OUTPUT);
pinMode(FOUND, INPUT);
digitalWrite(PTT_Low, HIGH); // Sets the PTT to OFF when its not supposed to TX
digitalWrite(PTT_High, LOW); // Sets the PTT to OFF when its not supposed to TX
}

// Routine to output a dit
void dit()
{
if (USESPEAKER)
{
tone(SPEAKER,TONE, dot * speed);
delay(dot * speed); }
else
{
digitalWrite(LED, HIGH); // set the LED on
delay(dot * speed); // wait for a dot's worth
digitalWrite(LED, LOW); // set the LED off
}

delay(speed);
}

// Routine to output a dah
void dah()
{
if (USESPEAKER)
{
tone(SPEAKER,TONE, dash * speed);
delay(dash * speed);
}
else
{
digitalWrite(LED, HIGH); // set the LED on
delay(dash * speed); // wait for a dah's worth
digitalWrite(LED, LOW); // set the LED off
}
delay(speed);
}

// Intracharacter delay
void ic()
{
digitalWrite(LED, LOW); // set the LED off
delay (intracharacter * speed); // wait for a half second
}

// a space is 7 units of off based on speed
void spaceCharacter()
{
digitalWrite(LED, LOW); // set the LED off
delay((eow * speed) + (intracharacter * speed)); // wait for 7 units
}

// Send a CW error for unknown characters
void error()
{
for (int i = 0; i < 8; i++)
{
dit();
}
ic();
}

// Look up a character in the tokens array and send it
void send_element(int c)
{
char token_to_send[7]; // allocate space for the token
strcpy(token_to_send,tokens[c]); // copy the token from the table into our variable

int len = strlen(token_to_send); // figure out how many dit dahs are in it
for (int i = 0; i < len; i++) // for each item in the token
{
if (token_to_send[i] == '0') // if its a 0
{
dit(); // send a dit
}
else if (token_to_send[i] == '1')
{
dah(); // otherwise we send a dah
}
else
{
error(); // we don't have a valid morse token
}
}
ic(); // after each character there is an intercharacter delay
}

// The main send routine. Pull each character apart and determine its corresponding token.
void send_code()
{
int len = strlen(send); // get the length of the string to send
int c;

for (int i = 0; i < len; i++) // loop thru each character in the string to send
{
c = send[i]; // get the ASCII integer value of the character
if (c == ' ') // see if we are between words
{
spaceCharacter(); // send a space
}
else
{
c -= ','; // offset it by the lowest ASCII character in the tokens table (a comma)
send_element(c); // send that element from the token array

}

}
}

void startup_tones()
{
tone(SPEAKER,300,500);
delay(1000);
tone(SPEAKER,350,500);
delay(1000);
tone(SPEAKER,400,500);
delay(1000);
tone(SPEAKER,450,500);
delay(1000);
tone(SPEAKER,500,500);
delay(1000);
tone(SPEAKER,550,500);
delay(1000);
tone(SPEAKER,600,500);
delay(1000);
tone(SPEAKER,650,500);
delay(1000);
tone(SPEAKER,700,500);
delay(1000);
tone(SPEAKER,750,500);
delay(1000);
tone(SPEAKER,800,500);
};

void found_tones()
{
tone(SPEAKER,400,500);
delay(130);
tone(SPEAKER,600,500);
delay(130);
tone(SPEAKER,800,500);
delay(800);
tone(SPEAKER,400,500);
delay(130);
tone(SPEAKER,600,500);
delay(130);
tone(SPEAKER,800,500);
delay(800);
tone(SPEAKER,400,500);
delay(130);
tone(SPEAKER,600,500);
delay(130);
tone(SPEAKER,800,500);
delay(3000);
};

// The Arduino main run loop
void loop()

{
if (!done) // see if we are done the loop
{

digitalWrite(PTT_Low, LOW);    // Enable PTT for "Low" type radios
digitalWrite(PTT_High, HIGH);  // Enable PTT for "High" type radios
delay(2000); // Wait 2 seconds to allow radio to Key Up
startup_tones(); // Play the startup tones
delay(3000);  // Wait 3 seconds
if (digitalRead(FOUND) == HIGH) { found_tones();  };  // Check to see if FOUND button was pressed, if YES, then play tones
send_code(); // send the string
spaceCharacter(); // make sure we have a space if we loop around to the beginning
delay(1000); // Wait 1 second to allow radio to UnKey
digitalWrite(PTT_Low, HIGH);  // Disable PTT for "Low" type radios
digitalWrite(PTT_High, LOW);  // Disable PTT for "High" type radios

// Multiple delays are used below, since the code doesnt like to run long delays. Use multiples for more time.
delay(tx_hold);  // Delay between transmissions, set above in config area
delay(tx_hold);  // Delay between transmissions, set above in config area
//delay(tx_hold);  // Delay between transmissions, set above in config area
//delay(tx_hold);  // Delay between transmissions, set above in config area
//delay(tx_hold);  // Delay between transmissions, set above in config area
done = false; // Uncomment to set our flag to finish sending
}

}

 

Upgraded Digipeater Antenna

New Antenna installed behind me. I LOVE tower climbing!

On Sunday, March 11th I upgraded thye VHF antenna at the ELSIE Mi APRS digipeater site. My brother had bought me a new 3 point climbing harness and lanyard as a gift the week before and I was itching to use it.

The previous antenna was a mobile 5/8wave VHF, attached to a “L” bracket and then mounted to the highest point of the grain leg (tower). It used about 10′ of RG-58 coax to a barrel connector, and then to the 100′ run of RG-8 going into the shack.The antenna has about 3dbi gain.

I had a VHF 5/8wave x2 mobile antenna at home, that the digipeater previously used. It has 6dbi gain. I got a 6′ long 1/2″ thick electrical conduit pipe from my step dad. He had some laying in his junk pile. that was nice, since I didnt have to use my 10′ section that I had planned for another project.

At the site I noticed that I had a long coax run into the shack and I could easily re-route it at the bottom to save some coax. Redoing it gained me about 12 feed of extra length, so I slid it up, as I climbed the tower.

At the top I disconnected the existing antenna and left it in place, for future/backup use, for my live scanner feeds at that site. I mounted the 6′ pole and new antenna to the top of the silo leg rail. The bottom of the antenna is now above head height, in case anyone happens to be working at the top, while it transmits. I happened to have almost exactly the right amount of extra coax. It has about 6-8″ of extra room, so it turned out perfect.I  removed 1 barrel connector and 10′ of RG-58. This should help reduce some line loss.

Before the antenna upgrade, it was hearing a digipeater (KB8VEE-11) from 94.8 miles away. I was hoping to break the 100 mile distance. After the antenna upgrade, I am now hearing multiple stations regularly, around 103-130 miles away. This is a great improvement. Sure they are other tall digipeaters, but it proves that the extra 3dbi gain and less coax loss really helps out.

I still plan to upgrade the antenna 1 more time, to use a dual-band antenna, for APRS and GMRS. The farmer who owns the site wants to use a GMRS repeater, so Ill set one up for him. Id like to share 1 antenna, to avoid using another coax run.

Old Antenna On Left, New Antenna On Right

Tour of Tower #1

This is a video tour of Tower #1, at Ridge Rd in Elsie Mi.
This was before I installed the radio gear in the room at the bottom. 1 VHF antenna is already placed at the top.

Update your APRS position via Text Msg

APRS

APRS can be confusing for a beginner and even some experts. Equipment can be found easily, but it can cost a lot to buy and piece together. Some new handhelds like the Yaesu VX-8 and some D-Star radios can do APRS positioning right out of the box, but they still cost $500+ new.

Want to post your APRS position for FREE?
Want to do it without any software to download and learn?
Want to do it anywhere?
Want to do it easily?
That’s what I was thinking too!

Introducing APRS via Text Message!

I wrote an script using Tropo, (a voice, sms, Twitter and IM cloud server) that enables you to simply send a text message to a phone number, with your callsign and position, and it will be automatically posted to the APRS network.

Want to know how to do it? I bet you do…

Surge Protection Lies

CPS650SL_296x296

CyberPower CPS650SL = CRAP

I bought a Surge Protector / UPS used at a garage sale for $5 last summer. I intended to use it for a tower site, to provide backup power in case of a power failure, so I dont have to drive to reset a PC and radios.

Since I am getting everything ready for the tower site this week, I grabbed the unit from my garage and went to test it. Upon plug in and power on, all I get is 3 beeps. I’m guessing that this is due to a dead battery, which I expected. I know that lead acid batteries don’t last long when discharged, and I planned to replace it with some external wiring and a large gel-cell or car battery, for much longer backup time.