Wednesday, November 22, 2023

Adapting Ozito battery for ham radio power

We have quite a few low cost Ozito (Bunnings) battery powered tools around here even though I've been transitioning to Makita. The battery packs put out about 20V when fully charged which is too much for nominal 12V radios. I purchased a variable buck converter that can regulate this voltage down. 

To get power from an Ozito battery I butchered a spare single battery charger with pins like this:

Internally, there's quite a bit of circuitry - a bit surprising considering the low cost. The metal pins are soldered right through the board so rather than trying to remove the board I just clipped the power input and soldered on to the back of the battery + and - pads:

A few cables later and we were up and running receiving FT8:

Regrettably, the buck converter produces noticeable noise peaks on the waterfall:

Threading the output DC cable through a toroid improved things quite a bit:

The spectrum looks much better although there is room for improvement:

Credit to VK3KR, David, for the inspiration for this project.

Talking tech on ABC Radio

After contributing technology commentary for many years on ABC radio, I've had a break this year but now I'm back. This week I did a spot with Philip Clark on ABC local radio's Night Life program.

You can stream it here.

ABC Radio Sydney is turning 100 about now although NightLife is a national program.

It looks like I'll be a regular contributor to the program presented by Philip Clark.

Sunday, November 12, 2023

Rosebud Radiofest excellent again this year

Like 12 months ago, I joined Richard, VK3LRJ in the journey down to the Rosebud Radiofest.

It seemed bigger than last year. Certainly there was lots of great gear on sale.

Even Ralph, VK3ZZC, was tempted with some exotic equipment.

I came away with just one item. A rather mysterious Ten-Tec "Energy Amplifier":

It turned out to be what I had hoped - a nice little amplifier with decent speaker in a box. Very handy for monitoring projects on the workbench. It was missing a screw but on disassembly it was found stuck to the speaker magnet.

There were wonderful antique radios on display again this year.

Like last year it was a very well organised event with lots to see. I was tempted by quite a few items but managed to hold back. Great to catch up with a few friends.

Friday, November 10, 2023

FreeDV 700e contact with VK3RV

It's been a while since I've fired up FreeDV. For some reason there isn't a pre-made build for Linux so I grabbed the source code and simply followed the instructions to build it (really just a few dependencies and the build script does the rest).

The user interface looks nicer and there's a better initial setup dialog that makes it easier than when I last tried it. Peter, VK3RV, (who incidentally I first met on FreeDV), was kind enough to have a contact with me.

We first talked on 700e, then tried 1200 and finally 2200. Each sounded better although Peter couldn't copy me on 2200 but it looks like he had some local interference which was pretty severe:

Amazing he could hear me at all with that going on! His screen shot reminded me that you can have several of the visualisations showing at once. It's not obvious how to do this but the trick is to drag the additional tabs up and a bit to the left, until you see an area highlighting, then drop.

A terrific innovation is the new FreeDV reporter window which shows who's on and what frequency and mode they're set to:

FreeDV is looking better than ever and I know David, VK5DR, has received some funding to support additional work on the project.

Sunday, October 15, 2023

Latest OpenWebRX on Raspberry Pi 4 excellent

With a little travel on the agenda soon, I thought I'd run up OpenWebRX on a Raspberry Pi 4 in the shack.

The simplest approach is to download the pre-made SD Card image and boot from that.

The "whistlers" I've been seeing on 10m are less today than they were.

Getting started with OpenWebRX using the Pi image is a bit mysterious. There is a setup guide but I couldn't figure out how to log in. They say:

"The default user "pi" no longer exists. Please use the included agent"

What is the "included agent"?

My Pi is headless so to get it on the Wifi network here I had to use the Raspberry Pi imager which let me set a user and password and configure the Wifi.

Once logged in over ssh I created an admin user for OpenWebRX with:

sudo openwebrx admin adduser adminusername

If I edit the /var/lib/openwebrx/settings.json file directly, I found that it would be overwritten unless I forced a restart of openwebrx with:

sudo systemctl restart openwebrx 

Anyway, all good in the end. It works very well on a Raspberry Pi 4 and it's great to have FreeDV, M17 and DMR all built right in.

Friday, October 13, 2023

Put up a dipole for 10m - a very active band

Several people have commented that the 10m (28MHz) band is very active at the moment. Compared to my 80m dipole, a little dipole for 10m was not too much of a challenge.

The first thing I notice is that it's alive with quickly sweeping signals which I don't think are over the horizon radar of anything made by people.

Even in the middle of the day I can hear US stations piling on to DX stations that I can't hear. There's also some AM activity which doesn't sound like hams. I called CQ and got a reply from an Indonesian station that gave me a good report despite his local noise.

Very interesting patterns to be seen:

A commenter on YouTube suggested looking up Whistling Atmospherics for more information.

Sliding down to the old 27Mhz CB band shows that things haven't changed there. Stations seem to be yelling at each other or playing distorted music. There is sideband but also quite a lot of AM in use.

Here's a screen recording of me tuning around a bit using an AirspyHF+ remotely operated using SDR++ in server mode - which I really like.

It's an interesting band for sure. I now have a dipole for each of 80, 40, 20 & 10m. The antenna tree is looking rather busy.

Monday, September 25, 2023

Solar shack battery monitor mark 2 - simpler is better

After the failure of my ESP32 web server to monitor battery voltage I reverted back to a simple system with an Arduino Nano reading analog voltage from a 5k-1k resistor divider to bring 15V down to 3V. Every second it takes a reading and sends on serial over USB to a Linux computer.

I love these little nano boards - very cheap and easy to use. The code is very simple, here's a screen shot from my favourite Arduino environment PlatformIO.

The battery (a 105Ah flooded lead acid battery charged from a 100W panel), is charged for some of the day and over night runs the computer and any radios I have on for WSPR. Here's a plot from 5pm until the next 5pm.

It's a deep cycle battery so I think there's a fair bit of voltage drop to go if required.

At the moment I'm taking a sample every second which is clearly way too much and rather hammers the spreadsheet. I'll back it off to every 10 minutes.

I mentioned that I like PlatformIO and one reason is that it's so fast compared to the Arduino IDEs. Here is a screen recording of building and uploading that little sketch above.

This is not sped up! The Arduino IDE v2 is better than v1 but still not a patch on Visual Studio Code with PlatformIO. There's more to set up and learn but it's worth it.

There is one complexity that needs to be solved. Reading ASCII voltage readings from the serial port and writing them to a file is more complex than it should be. I think the problem is that I'm using python 3 which defaults to unicode. I've got it working but it's more complex than it should be.

Writing serial data from Arduino to a file

I ran into a few puzzling issues getting this simple thing to work. Firstly, writing to the file is buffered quite a bit so nothing appears for some time. I thought it wasn't working. In the end I use this command to write the lines written by the voltage logger (now only once a minute) to a file with a prepended timestamp.

nohup tail -f /dev/ttyUSB0 | gawk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0 }' > voltMinutes.txt&

The file looks like this:

2023-09-26 11:29:07 14.46

2023-09-26 11:29:57 14.40

2023-09-26 11:30:57 14.37

2023-09-26 11:31:57 14.51

2023-09-26 11:32:57 14.46

2023-09-26 11:33:57 14.54

2023-09-26 11:34:57 14.49

2023-09-26 11:35:56 14.46

2023-09-26 11:36:56 14.46

2023-09-26 11:37:56 14.49

2023-09-26 11:38:56 14.46

2023-09-26 11:39:56 14.29

2023-09-26 11:40:56 14.49

The nohup and ampersand mean that I can kick it off and disconnect from the terminal and it keeps going.

A problem with this simple approach is that Linux buffers the writes to the file so tailing the output file shows results from hours before. A possible solution I found is to install the expect package and then use the unbuffer command like this:

nohup tail -f /dev/ttyUSB0 | unbuffer -p gawk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0 }' >> voltMinutes.txt &

This isn't quite working as I expect so I'll continue to search for the simplest and working solution.


Here's a neater solution. There's a ts (timestamp) command in the moreutils package. Install that and then:

ts </dev/ttyUSB0 >>received.log &

produces a file like this:

Sep 27 07:49:48 12.26

Sep 27 07:51:48 12.23

Sep 27 07:52:48 12.23

(There are time stamp format options).

Here's a Gnuplot showing several days. The last day has been very dark with lots of rain.


set terminal png size 800, 600
set title "Solar Battery Voltage"
set output "Volts.png"
set xlabel "DATE"
set ylabel "Volts"
set xdata time
# Sep 28 09:19:21
set timefmt "%b %d %H:%M:%S"
set xtics format "%d/%m %H"
set datafile separator ","
plot "volts.log" using 1:2 title 'Volts' with points smooth bezier

Here's the Arduino Nano code. (Note that I use PlatformIO these days). I found that if I sent serial with println() I get an extra timestamp line from ts so I manually add the \n.

#include <Arduino.h>

// divide the ADC by this to get volts (with my divider)
const float kVoltageFactor = 35.0;

void setup() {
// put your setup code here, to run once:
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
// analogReadResolution(10);

void loop() {
// put your main code here, to run repeatedly:
int pin = 0;
int voltageRaw = analogRead(pin);
float voltage = voltageRaw / kVoltageFactor;
String voltageString = String(",") + String(voltage) + String("\n");
// briefly flash the LED at each read
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(50); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(950); // wait for a second
//delay(1000UL * 59UL); // wait for a minute

Sunday, September 24, 2023

Solar shack battery monitor mark 1 - failed project

The radios in my shack are now powered by a 12V flooded deep cycle lead acid battery with 105Ah capacity charged from a 100W solar panel. So far all seems well. I'd like to know how low the voltage drops in the early morning so my project is a voltage monitor that can be logged to disk.

An ESP32 board with Wifi and an OLED screen was used. The analog input has a resolution of 12 bits. I grabbed bits of sample code from the ESP32 Arduino examples and created a tiny web server that registers itself on the network using multicast DNS so that a web browser can simply poll the ADC value.

The maximum that the analog input can take is 3.3V so I used a resistor divider with 5k and 1k to divide down up to 15V to something the input can handle.

A 7805 regulator was used to give 5V to power the board. All seemed well.

Unfortunately the Wifi is not strong in the shack and the ESP32, while it could see the network on a scan, could not connect.

As you can see from the photo above, I tried cutting the on-board antenna and attaching a wire antenna. I'm not sure that this improved things but in any case it didn't fix my problem.

Of course doing all this over Wifi with a web server is a rather complex arrangement so I have another, simpler plan under way. I'll post when it's been running long enough to draw a graph.