From December 26, 2021 through December 31, 2021, the International Space Station (ISS) sent a series of 12 Slow Scan Television (SSTV) images.
Below are the images I collected at the home KC4RCR station. I’m using nothing special other than my Yaesu FT-2980 2m radio, my Tram 1481 antenna and the MMSSTV software with an audio cable between the radio and computer.
(If better images are received prior to the end of the event, images here will be updated.)
I recently acquired an intertest in Slow Scan TV (SSTV) and one of the most popular frequencies for SSTV exchanges is 14.230 MHz. My 270 foot Off-Center Fed Multiband has a Standing Wave Ratio (SWR) of 3:1 on 14.230 MHz before tuning so I was looking for better efficiency. Here is a great presentation on the end-fed by K1RF if you are interested in learning a lot more.
Ground connection (I used the MFJ-270 capable of 400 watts). Remember the coax shield is a counterpoise.
Here is a little more explanation of what I was trying to do… I wanted a very specific single band antenna tuned to 14.230 in the 20m band, preferably end-fed for the location I wanted. Most EFHW antennas I found online for purchase were rated at 100 watts (some up to 300w) peak envelope power and are okay for my 100w radio if I were in single side band mode which has a lower duty-cycle. Digital is different. The duty cycle is much more intense lending itself to a max PEP of maybe 30w on the 100w pre-made antennas found on DX Engineering (I reached out to the manufacturer Par EndFedz to confirm their design max before attempting the build). My hope is that my three core design should do the trick for whatever power I want to run in the future on 20m. By the way, these are what I had left over from a previous similar project so I found a good use for them here.
A transformer is needed for this type of antenna to match the high-impedance feed point down to something that is suited for the cable and radio (aka 50 ohms). With an EFHW, a 49:1 is needed for this. I used the 49:1 transformer design found on Ham Radio Archives – Jason Jardina which is an excellent resource and explanation of the transformer.
There really wasn’t much to the winding of the cores, but of note, I did have to use electrical tape because the enameled wire I used got nicked really easily on the first try. Cores are zip-tied together as well as to the box itself via a couple holes I drilled in the back (later sealed). Also, I fiddled with the windings a bit to make sure I got the results I wanted. I tried to use a plastic bolt to hold in the cores but that did not work so the zip ties were my second choice. I am unsure of the heat generated so I may need to check this from time to time. I am hoping with the large box and three cores, heat will be less of an issue.
The hook in the center is for hanging, the other hook is for stress relief of the connector. This early version had a wingnut for the antenna connection, but I ended up changing that out for a third eye-bolt.
Okay so here’s where I goofed with what I wanted. I thought I had 14 AWG stranded wire for the antenna. Turns out I had solid. But I was really excited to get this on the air, so I used it anyway. Definitely not going to tolerate flexing as much in the trees but it still radiates and when it comes time to replace it, I’d have to buy new wire anyway. So just kept it moving…
The image is at an odd angle, so I assure you, that LMR400 is not a sharp kink! I have a piece of automotive fuel hose over the LMR400 with a pipe clamp holding the paracord in place. Paracord is also what I am using to hang the box with. There are small weep holes in the bottom as well.
Since trees move, there is always strain on the antenna wire. Sometimes I loosen antenna ropes if there is predicted high winds. I also have one antenna (80m EFHW) with springs inserted in the rope section. I was looking for a good insulator at the local hardware store when I found a cheap automotive rubber strap. Insulator and flexible, perfect! I probably would have preferred something with even more give considering I have solid wire, but again, that’s fine for now. The nice thing about wire antennas is that a broken wire is an easy fix.
The paracord hanging is my pull strap to lower to ground level to trim antenna to resonance. I started with a significantly longer antenna than I needed (tuned at about 9 MHz at start) and then gently cut the wire in small increments to get it to almost exactly 14.230 MHz. The pull down string made this fast and easy. I raised it to full height every few cuts to see exactly what the readings would be raised.
Using my AA-650 antenna analyzer, I obtained the following readings which was better than I had hoped:
With those results, I have also been using this antenna for FT4 and FT8. I can hear the difference in those modes when I switch the antennas. I definitely hear more audible frequencies in the mix.
And here is the final setup!
Interestingly enough, the day after I finished this project, the ARRL sent out an advertisement with a kit for a multiband EFHW with a rated power of 250 watts (ARRL EFHW Kit). Might be a good place to start experimenting for some folks!
If you need to be notified of a power outage at your equipment location, this is a quick and cheap way of doing just that. This method will allow you to use a Raspberry Pi, connected to both an Uninterruptible Power Supply (UPS) and a commercial power outlet, to monitor and send email/text alerts with power changes.
You have a Raspberry Pi already set up which is networked
You have an SMTP service installed and setup on the Pi like sSMTP
You have the ability to execute Python (or can install it if your distro does not have it)
Raspberry Pi (any model, even Zeros as long as you can network)
Here is the relay I used. It takes 5v from a standard USB so it is quite universal but it does require one quick modification to simplify the power need. Remember the USB power goes to a commercial power outlet not serviced by a UPS system.
The modification is this: you probably don’t want to plug in a USB power and input power to control the relay. Just using one is fine and the USB power can act as both. If the unit is powered by the USB, you can trigger the relay by pushing the “Button Trigger”. Well, just keep it on if there is power and it will disconnect when there is no power. Simple. How do you keep the button pressed? Jumper it always on.
You can remove the button if you like, but I just jumper-ed over it (yellow wire). Power at USB now always turns on the relay (at the Normally Open terminal).
The relay has three screw terminals. Common (COMM), Normally Open (NO), and Normally Closed (NC). Technically you can write the code anyway you want to as long as the logic is the same or inverse. I wrote it such that COMM is 3.3V and the NO terminal went to GPIO 26 (BCM). That is, if input BCM 26 is HIGH (3.3V) there is power. If input BCM 26 is 0V, there is no power.
Connect the COMM wire (RED) to any 3.3V pin (in the pic here I used physical pin number 17) and the NO terminal wire (YELLOW) to BCM GPIO 26 (physical pin number 37). You can vary this depending on your code, if you prefer. For clarification the other pins used at the top are for a room temperature and humidity sensor and not part of this project.
Below is the code. Because it may be hard to read on WordPress, here is a link to the file. Remember to change it from .txt to .py to run.
import RPi.GPIO as GPIO # import GPIO library
import subprocess # needed for subprocess call
from time import sleep # this lets us have a time delay
GPIO.setmode(GPIO.BCM) # set up BCM GPIO numbering
GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # set up pin 26 for input detection of 3.3V
init = 1 # set inital state for boot message
while True: # this will carry on until you hit CTRL+C
if GPIO.input(26): # if port 26 == 1 (there is power)
if init == 1: # we must have cold booted on purpose or from a failure on UPS dead battery extended outage
email = 'echo "REBOOT from extended power failure or device reset. Power is ON." | mail email@example.com, firstname.lastname@example.org'
subprocess.call(email, shell=True) # send email command
email = 'echo "Power restored at site. Commercial power is ON." | mail email@example.com, firstname.lastname@example.org'
subprocess.call(email, shell=True) # send email command
while GPIO.input(26): # do nothing if the power state stays on
else: # there is no power detected at pin 26
init = 0 # why bother checking every time it happens only once
email = 'echo "Power failure at site. Commercial power is OFF." | mail email@example.com, firstname.lastname@example.org'
subprocess.call(email, shell=True) # send email command
while GPIO.input(26) == 0: # do nothing if the power state stays off
finally: # this block will run no matter how the try block exits
GPIO.cleanup() # clean up on exit
A couple notes on the code. You can add as many email addresses as you want separated by commas. The sleep is very short, you can adjust if too much CPU is used. Don’t use “shell=True” in a subprocess.call if you don’t control what is going into it. If you use that based on user input, they could execute. Here, there is no user input requested.
Also, DO NOT use the 5v pins. The header cannot tolerate that much voltage and you will burn it out. Only use 3.3V.
You probably want this to start automatically each time the RPi is booted. You can add a line in /etc/rc.local to do this (modified for your file location):
It is easy to use a Raspberry Pi to stream audio to your own webserver (running on the RPi) or using a global site such as Broadcastify. Though I used a RPi to build this, it is not unique to the RPi and can run on a variety of systems (I have used the same setup on my Ubuntu laptop).
Here’s what you will need:
Raspberry Pi (any will work but I use a RPi4 with 4GB RAM)
USB Audio Dongle
Speaker to Line Audio Converter (build or buy)
Scanner (or other radio output device)
Assorted audio connectors and cables
An Internet connection of course
You have a working knowledge of installing the Raspberry Pi Operating System and can access it on your network or directly from a console setup
Your scanner or radio receiving device works and has an antenna and can receive the frequency or range you wish to broadcast
You are able to open a port for port forwarding on your Internet router to the port running Icecast (if you want to open the server to the world)
First, get your Raspberry Pi set up however you like with the Raspberry Pi Operating System according to the instructions found here (or using your own method). The instructions here should work for pretty much any modern Debian-based Linux distribution.
Now for the hardware setup. Your scanner or radio’s audio needs to be taken down from speaker level to line level. They do make converters you can buy such as these on Google. But you can also build one. I used this design found here with two 3.5mm jacks for the connections:
One note on this, it assumes your scanner is mono so no reason to use a stereo 3.5mm plug. Here’s my built version on the above diagram:
On an older version I had a commercial converter shows in this picture:
Now let’s put it all together with the USB Audio device inserted into the RPi and the microphone jack running through the speaker to line converter to the speaker out jack of the scanner. By the way, this setup is in my laundry room because it is opposite the ham antenna side. There will still be some de-sensing on transmit especially with these older scanners. There is an external discone antenna it is connected to (see BC760XLT Scanner Repair for the background story).
Now we move on to the software side of things. Boot up your RPi and once you have the system up and running how you like it, install Darkice via the command:
sudo apt-get install darkice
You will need to create/modify the Darkice configuration file. The default location is in /etc but you can specify an alternate location when you run the darkice command to start your streaming.
There is a great darkice.cfg example at the following link which is the one I used as my starting point on the Raspberry Pi:
You will need to sign up for a Broadcastify feed provider account and get the “mountpoint” and “password” from your account page and input it in the configuration file. Also note you may have to change the configuration slightly depending on your hardware. I had to change the “device” setting to “hw:2,0” and “sampleRate” to “44100” based on my configuration. You can view your hardware location via the “aplay -l” command. NOTE! When I rebooted headless (no monitor) the HDMI connection changed the hardware ports, so be aware this might happen.
Similar to the issue described on the page linked above, Darkice does not reliably restart on reboot. I’ve tried various configurations, running it as root, etc. and nothing has proven effective. If I find a solution I will post it.
Darkice should be run as a normal user, not root. The reason for the comment here is that when you run it as a normal user it will tell you try running as root, that is not needed.
If all is well, run darkice from the command prompt and your feed will show active over at Broadcastify! As I said before, you might have to fiddle around with the sample rate or other settings to get it just right for your configuration. For reference, here is how I start my Darkice instance:
nohup darkice -c /home/pi/darkice.cfg &
The “nohup” signifies No Hangup which leaves the process running after I log out. The “-c” specifies the configuration file and the “&” means run as a daemon/background process. Since I run headless, I ssh into my RPi and start darkice this way from my remote terminal.
BREAK BREAK BREAK… Okay you are done if all you wanted is a Broadcastify feed. But some have asked how you would host streaming audio on your own. the following section describes the additional steps which will be needed to do this.
If you want to run your own server you can install Icecast2. Darkice will feed to Icecast. Install Icecast using apt:
sudo apt-get install icecast2
Icecast will install in /etc/icecast2 and run the auto configure program for you. Be sure to remember your passwords as you will need the source password in the darkice.cfg file. The port you choose to run on (default 8000) is the one you will point your browser to on the RPi IP address. You can always edit the icecast.xml configuration file found in the installed directory mentioned above. Another good install document can be found here. Once you have finished the configuration, run:
sudo systemctl start icecast2
You can always replace “start” with “restart” or “stop”. You can also enable it to always run on reboot with “enable” (or do the opposite with “disable”). Once running you can point your browser to http://yourRPiaddress:port where that is the RPi’s IP and port number you chose in the setup. If you are local, you could use http://127.0.0.1:8000, for example. You should see this:
If that page came up, great news you are almost there. The next step is to feed Darkice into Icecast. You do that by adding an Icecast section to the darkice.cfg file using the password you set up in the Icecast installation for sources. If your darkice.cfg has an “[icecast2-1]” section already you can edit it, otherwise add the following, tailored for your installation:
[icecast2-1] bitrateMode = abr # average bit rate format = vorbis # format of the stream: ogg vorbis bitrate = 96 # bitrate of the stream sent to the server server = 127.0.0.1 port = 8000 # port of the IceCast2 server, usually 8000 password = SOURCEPWD # source password to the IceCast2 server mountPoint = KC4RCR # mount point of this stream on the IceCast2 server name = DarkIce description = KC4RCR Scanner Traffic url = http://www.kc4rcr.com genre = Mostly 2 meter ham repeaters around the VA area public = no # advertise this stream?
Now restart the service using sudo systemctl restart icecast2 if applicable and go back to your web browser and reload the Icecast page. You should see something similar to the following:
You can also login via your admin password (username admin) and see the stream stats and listener info. It is just one mount point here so that’s all that is displayed. Icecast supports a variety of configurations if you are interested. Visit icecast.org for more information.
I have a 270 foot off-center fed dipole which works pretty well for my 160m and other band needs (with an external tuner). My HF rig is a Yaesu FT-450D which appears to have a great front end to suppress unwanted signals. Occasionally I like to look at the spectrum in Gqrx with my RTL-SDR dongle. But take a look at the image below!
The RTL-SDR does very little to clear this up, but given the reasonable price and utility of the device, it is not unexpected.
I have a number of very strong AM broadcast stations nearby so I thought I would give a couple filters a go at it. First, I tested with a cheap RTL-SDR brand “Broadcast AM Reject Filter” which attenuates below 2.6MHz.
Now let’s take a look at the Gqrx spectrum waterfall
That’s a great amount of cleanup! Now I know my FT-450D does a better job than the SDR dongle, but I figured I would check out a legitimate filter which can be used with a transmitter. I found the M-402x by Morgan Systems which attenuates below 1.8MHz and can tolerate 200 watts of power (they have another version if you don’t use 160m). I ordered this from KF7P Metalwerks which came quickly and excellently packaged.
Now let’s take a look at this filter in the Gqrx spectrum waterfall like we did with the other. Obviously my attenuation is a little bit less because I wanted to use 160m which is close to the AM broadcast band. Also, these pictures were taken at night when the signal was hitting me the hardest (in the day it looked even better).
I am very happy with the results and the M-402x is now installed with the FT-450D and I am currently listening to a great signal on 1.900MHz!
So the preamble to the story is that I just moved into a new QTH and while my ham gear is protected by multiple ground rods and polyphasers, my scanner was not.
Now, it was a cheap scanner (found on eBay for under $50) connected to a Raspberry Pi 4. It was at the service entry point to the house and I hastily set it up. I used it to live stream audio to a web server on the Pi that I could access with my phone. The antenna was set outside, not raised up much or anything (power lines above). I just needed to pick up the local repeaters when I was away and wanted to listen in. Everything was plugged into a small UPS but I knew the antenna was susceptible. It would work for now until I can get back to it.
The very day I set out to ground and protect the antenna, I was outside trying to get things finished when a freak storm rolled up. Well glad I came in to take a break with the rain because lightning lit up my property (my ham shack was disconnected). I am sure I heard electrical arcing in the house when it hit.
Later that evening I noticed things were offline with the Pi. And as you probably guess from this title blog, my scanner was dead from the lightning induced voltage spike in the antenna. That and the Raspberry Pi were toast.
Nothing I could do for the Raspberry Pi. No way I could solder that. Next for the scanner. There were no visible marks but it did turn on with distorted garbled audio which faded off to nothing. It smelled of burning electronics. That was GOOD for me! I opened it up and poked around. The part that was smoking was definitely a problem!
Looking up the part number it turned out to be an audio amplifier circuit. That made sense why the audio went out! I also tested the voltage regulator (8V as designed according to the part number). Strangely the power supply transformer was putting out 18V instead of 13.5! At least that was within range of the voltage regulator to handle (I changed that out too).
Well I am terrible at soldering and the leads on the printed circuit board burned very easily so I decided to make a modular design (hopefully not to replace often). While waiting on the $5 part, I soldered jumper wires in the IC socket to connect to a solder-less breadboard just awaiting the IC.
Now here is the modular design in action. Luckily the age of the scanner makes for a lot of extra space in the case.
And now here is the final product. I wouldn’t want this rattling around in a mobile installation but it works well for a stationary setup. It will have adhesive to keep it somewhat fixed.
I enjoy ham radio nets and try to reach out to the furthest ones I can pull off with my 2-meter radio and J-pole antenna (81.4 miles is the record to the K3NQT repeater as of this posting on 21 Apr 2020). I have used EchoLink to reach out to some West Coast nets in California and Washington (usually the Puget Sound Repeater Group nets) but I prefer using a radio over my cell phone. Also, building my own AllStar node would allow me the flexibility to control the link. Furthermore, I wanted to join in the East Coast Reflector which I could only break the squelch on the nearest repeater.
Credit goes to K3KDX for providing me with instructions as to how he set up his node which I based this built off of.
A second radio that is the control point you wish to use
The first recommended step is to register with AllStar. They validate your license and it takes a bit of time for them to set up your node in the database. This only took a few hours in my case, but it’s better to do this ahead of time if you can. You need to register and set up a “server” under the “Portal” menu. The server is just the name and location. Next you have to create a “node” for that server, also under the “Portal” menu. AllStar will take the time to create a node number and password. You will need these in the setup of HAMVOIP.
Next load the HAMVOIP image onto the SD card. Choose a good quality card. I had a Samsung 32 GB card handy, so I used that. The HAMVOIP site has instructions on how to install the image on to the card (if you have not done this before). I already had win32diskimager on a Windows machine so I downloaded the Windows .exe (execute to decompress the image) and used the win32diskimager to write the image to the SD card.
Here is how the RIM-Alinco device arrived. It looks of excellent quality. Note that this is a mini-USB not the more common micro-USB. The RIM-Alinco comes with this cord so no worries about finding one if you don’t have it. Install this to the DB-9 connector on the radio. Note the lack of heat sink fins on the bottom side of the radio, we will come back to that later…
I had an unused SMB-201 cooling stand which fits the form-factor exactly. The only catch was the Alinco radio has the majority of the heat sink fins on the top, not the bottom. Originally I set this up facing the “proper” direction.
However, look at the above picture. There is a lack of heat sink fins on the bottom side (do not run the length of the radio). While the fan on the bottom still kept the radio at a reasonable temperature (low power), I decided to flip it over for proper cooling. Eventually I’ll make a stand that inverts the entire setup.
Remember, the radio is a node so the TX and RX duty cycles are reversed. That means the TX duty time is the time you are listening on your node channel on your other radio. That is a very heavy duty cycle especially for long nets. I am hoping the Alinco can handle this long term. This is why cooling is extremely important. Also, setting the power at the lowest setting necessary is also very important. Right now I use a dummy load because the radio is nearby. Low power on this radio is listed as <5 Watts. This is 50 Watt dummy load so I have no overheating issues or SWR problems. I measured around 4.5 Watts output at the radio on low power. Oh, and I recommend setting the radio to tone-coded squelch so you don’t rebroadcast other simplex users inadvertently. Set the radio to the simplex frequency you plan to contact your node with.
If not done already, connect everything together as appropriate and power the devices. Set up the RPi to display the HDMI on a monitor/TV and have a USB keyboard plugged in. When you boot the RPi, it will launch the installation program. It will ask for your assigned node number and password (from registering with AllStar). It will also ask you for a number of setting choices. The RIM-Alinco page provided a few seen here:
I noticed my TX was quiet, so I modified a few settings. Don’t worry you can always go back in and adjust things as needed. When you boot from now on you will see this screen allowing you to modify the settings as needed. I performed the system updates after I set up WiFi. There is also an echo function in the simpleusb-tune program which helped me set the audio levels.
AllStar has a list of commands you give the node over the radio (starting with a “*”). I prefer to use the command line (Asterisk CLI client). That way I’m not keying the radio all the time to issue commands via RF. This is not necessary but a preference on my part.
That’s all there is to it! It took me no more than an hour to set up. The hardest part was waiting for the parts to arrive.
Next, I plan to dual-purpose the Alinco. Since it’s a well-performing 2-meter radio, I want to use this as a base-station as well when not in use on a node. I have programmed a momentary switch in Python which is connected to the RPi GPIO pins to shutdown and restart the AllStar node asterisk service. That way I can disable the node and use the radio as a normal 2-meter transceiver when I want without having to SSH to the RPi and turn off the node. Once I formalize this, I will publish the process and Python code.
Built only from parts found at your local hardware store. No modifications to vehicle for mounting.
Initially I built this as a single mount for my BTech GMRS-50×1 mobile radio. I have a bench seat in my Dodge Ram but very little room elsewhere to mount the radio. Years ago you could drill into the dash when they were metal…not so easy anymore.
I bought two L-shape brackets and two straight brackets with assorted hex bolts. I also included four rubber feet with the intent of sliding the bracket under the center front seat.
It started out wide but I had to make it more narrow due to restrictions under the seat. The holes already drilled made this easy.
As you can see the BTech GMRS-50×1 radio fit quite well on the bracket and with the rubber feet, it slipped great under the seat. For added security I left the bottom metal strap long and zip-tied the two side holes to the seat mount points.
Later on, I got my ham license and wanted to add my Yaesu FT-2980. That radio is larger so I decided to flip the BTech GMRS-50×1 GMRS one to the top and put the Yaesu on the bottom.
I already had wires through the plastic firewall knockout and I didn’t want to disturb them so I found it easier to drill a second small hole in the same knockout. I removed the connector (the pic was actually to make sure I put it back on with the correct polarity…I triple checked!).
I mounted the BTech GMRS-50×1 radio on top and fitted the Yaesu FT-2980 bracket on the bottom side. Because the bracket wasn’t originally designed for this alignment, I had to add some spacers, etc. but it did fit exactly in the space between the seat and extended cup holders. The angles changed a little as well, but it wasn’t bad.
All in all, the entire bracket seems quite secure and does not vibrate or move when on the road!
(Oh and if you are wondering why I have green and red labels on equipment it is for the family. That way they know NOT to pick up ham equipment but they can use GMRS as covered by the WREY366 license).