Scenes from a typical cycle ride to work

The riverside path in to Oxford from the south has recently been resurfaced making the journey by the Thames much more pleasant. To add to the excellent riding surface, there is a spectacular array of wildflowers to see as I ride along. I took the opportunity to grab a few photos…

The view to the north of the Thames towards Oxford just after coming off the ring-road at Isis Bridge
Just some of the wild flowers growing along the river bank at this location
Another view looking north towards Oxford

A Transistor Tester Kit

MyGoodLadyWife told me recently that she would like to assemble another electronic device kit of some sort.  How could I say no? A quick trip to Ebay resulted in the purchase of an absurdly cheap little transistor tester kit including a clear plastic case. Even if it didn’t ultimately work I could probably re-use some of the parts in other projects.

A few days later, the package arrived and ended up on the G7IVF workbench readyfor MGLW to have fun with…

A random-looking jumble of parts in a clear plastic bag.

MGLW then set about inspecting all the parts of the kit for any damaged items that might need replacing. Although an IC and its corresponding socket looked like they had been trodden on, thrown across the room, thrown back and finally trodden on again, MGLW was confident all would be well after some TLC applied with some suitably small pliers.

Most components have survived their postal adventure, but the IC and its socket needed some TLC.

Next up, MGLW sorted the components and checked against the parts list downloaded earlier for correct values.

Checking resistor values and placing them on the sort list.

Assembly proceeded quickly – MGLW was pleased with the quality of the circuit board. Here’s how things looked after all the resistors had been placed.

All resistors soldered to the board.

Very soon after, the main board was fully assembled and ready for the display to be fitted.

Main board now assembled and waiting for the display screen to be fitted.

Once the screen was in place, a suitable 12 Volt DC supply was hooked up and… it lives!

MGLW powering up the tester for the very first time.

Now we knew the tester was powering up, we fitted a 150nF capacitor and ran the self-test and calibration program. After a short while, all the tests had passed and the device reported the capacitor was measured as a 140nF device. That’s less than 10% off… not bad!

Self-test completed and first measurement made – a 150nF nominal capacitor coming up as 140nF so well within spec.

Build and test complete, it was time to case up the unit. Here it is!

Cased up and ready to make useful measurements on the G7IVF workbench

We finished up by picking a random transistor from the junk drawers and ran a test. It passed!

Testing an old BSY25 transistor found gathering dust in a junk drawer. It still works!

I was very impressed with this little tester. It was very cheap to buy and simple to build and MGLW had great fun assembling it for me. I suspect there will be another order for a different kit very soon…

Creating a virtual router in KVM

Its been a little while since a did some work on this project and in that time I have upgraded my virtualisation computer to run OpenSuse LEAP 42.3
Mikrotik have also upgraded their software, so I am intending to use version 6.40.2 of the router OS.

Having downloaded the OS file and made it available in the ISO store, before I can run it, I need to create some storage for the router OS to be installed into and to keep its configuration. I will create a 10 Gig virtual hard disk for it as follows:

In the Virtual Machine manager, double click on QEMU/KVM to connect to the hypervisor, then click on the storage tab. Highlight the ‘VMachines’ pool and click on the blue cross where it says ‘Volumes’ to create the virtual hard disk in the VMachines storage pool.

Add a new storage Volume, (NOT Pool)

Edit the name and size of the disk and set it to use the qcow2 format.

Setting the parameters for the new disk

The storage pool now looks like this:

Newly created 10G disk for the router

I can now create the router by returning to the Virtual Machine Manager and clicking on the ‘Create a new virtual machine’ icon at the top left:

Click the New Virtual machine icon, top left.

Configure the new machine to use a local install media, and because the router software is 32-bit, use an i686 architecture.

Local install media and i686 architecture

Click ‘Forward’ and on the next pane, select the ‘Use ISO image’ option and browse the ISO pool for the router downloaded earlier.

Select the Mikrotik router ISO

Click ‘Forward’. I will allocate 2 Gigabytes of RAM to the router (the maximum it currently supports) and two processor cores.

Allocate 2 Gigs of RAM and 2 processor cores

Clicking ‘Forward’ takes me to a pane where I can select the hard disk image I created earlier.

Select the hard disk image created earlier

Clicking ‘Forward’ allows me to name this virtual machine, in this case ‘MRouter’. Also note that by default I am connecting it to the house network, via the bridge connection I configured in an earlier post. Check the box to allow further configuration. There are more networks to add…

Name the machine and connect it to the house network.

Click ‘Forward’ and I get the customisation panel. I will add three more network interfaces and connect them to each virtual network in turn.

Click on ‘Add hardware’ to create new virtual network interfaces

Each new network adapter gets its own unique MAC address and can connect to any of the real or virtual networks available to the Virtual Machine Manager. For example:

Creating a new adapter and connecting it to a network

When all three adapters are added, the virtual machine can be started by clicking on the green tick marked ‘Begin Installation’. I now get a window showing the running virtual machine. Using the on screen instructions I selected various packages to install as follows:

Initial package selection

Press ‘i’ to install… say no to keeping the old configuration and yes to continuing…

Press enter to reboot and…

Waiting for login…

More on what to do in the next post…

Creating virtual networks in KVM

In earlier posts I installed the KVM hypervisor on an openSUSE Leap system and added a bridged network connection. That will allow virtual machines to use IP addresses on my house network. However, what if I want to use ‘private’ networks for the experiments I wish to run? That is easily done so let’s see how to create networks and address ranges as follows:


Bring up the ‘details’ pane for the hypervisor and select the ‘Virtual Networks’ tab as follows:

The list of virtual networks, currently empty

Clicking on the small blue cross opens the dialog for adding a new network. Let’s define the ‘management’ LAN as follows:

Setting the name of the management LAN

Next, define the IP address and subnet mask ( and untick the ‘Enable DHCPv4’ option. DHCP will be provided by the virtual Mikrotek router.

Setting the IP address range and disabling DHCP

On the next pane, disable IPv6 for the time being.

Disable IPv6 for this network

Finally, select the option to create an isolated network and keep the DNS Domain Name as shown.

Creating an isolated network called ‘management’

Repeating the process for the other networks produces a network list as follows:

The completed list of virtual networks

As a final check to see that everything is working as expected, bring up a console as the root user and type the following commands:

virsh net-list

virsh net-list
 Name                 State      Autostart     Persistent
 management           active     yes           yes
 site1                active     yes           yes
 site2vlan1           active     yes           yes
 site2vlan2           active     yes           yes

ip addr

ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet brd scope global br0
       valid_lft forever preferred_lft forever
    inet6 fd00::1:8ca0:7c31:ae16:2e0e/64 scope global temporary dynamic 
       valid_lft 6233sec preferred_lft 6233sec
    inet6 fd00::1:12bf:48ff:fe88:f355/64 scope global mngtmpaddr dynamic 
       valid_lft 6233sec preferred_lft 6233sec
    inet6 fe80::12bf:48ff:fe88:f355/64 scope link 
       valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:c4:63:38 brd ff:ff:ff:ff:ff:ff
    inet brd scope global virbr0
       valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:c4:63:38 brd ff:ff:ff:ff:ff:ff
6: virbr1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:53:8a:0c brd ff:ff:ff:ff:ff:ff
    inet brd scope global virbr1
       valid_lft forever preferred_lft forever
7: virbr1-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr1 state DOWN group default qlen 1000
    link/ether 52:54:00:53:8a:0c brd ff:ff:ff:ff:ff:ff
8: virbr2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:cf:6f:e2 brd ff:ff:ff:ff:ff:ff
    inet brd scope global virbr2
       valid_lft forever preferred_lft forever
9: virbr2-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr2 state DOWN group default qlen 1000
    link/ether 52:54:00:cf:6f:e2 brd ff:ff:ff:ff:ff:ff
10: virbr3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:26:84:24 brd ff:ff:ff:ff:ff:ff
    inet brd scope global virbr3
       valid_lft forever preferred_lft forever
11: virbr3-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr3 state DOWN group default qlen 1000
    link/ether 52:54:00:26:84:24 brd ff:ff:ff:ff:ff:ff

The results show the four virtual networks (virbr0 to virbr3), but they also show that four virtual network adapters (virbr0-nic to virbr3-nic) have been created that connect each of these new networks to the host machine itself.

In another post, the virtual Mikrotek router will be installed and a basic configuration applied to allow it to route between the four virtual networks.

Setting up Virtual Machine Manager to work with the KVM hypervisor

I want to use the Virtual Machine Manager application in openSUSE to manage my virtual machines and networks. Before that, I needed to create some areas on the hard disk to store information used by the hypervisor as follows. From the command line in my home directory I typed:

mkdir ISO
mkdir vmachines

This created two directories, one (ISO) for storing bootable images used to install virtual machines and the other (vmachines) to hold the virtual hard disks used by those machines. Now that’s done, I can launch the VMM application from ‘System’ -> ‘Virtual Machine Manager’

‘Front Page’ of Virtual Machine Manager

Double clicking on ‘QEMU/KVM’ promped me to input my root password and connected me to the hypervisor. Then, right clicking on ‘QEMU/KVM’ allowed me to select ‘Details’ which then gave me the following information pane about my hypervisor.

Basic performance details about the hypervisor. Options for this pane can be changed by clicking on ‘File’ near the top-left of the window

I first needed to tell the hypervisor where I was going to put bootable disk images for it to use. Clicking on the ‘Storage’ tab produced this window:

Click on the blue cross at the very bottom left of this window to add a new storage pool

Call the new storage pool ‘ISO’

Naming the new ISO sotrage pool

Then point to the newly created ISO directory created earlier.

Browse to ISO directory created earlier

Next, I created another new storage pool, but this time called it ‘VMachines’ and linked it to the ‘vmachines’ directory created earlier. Now my storage pools look like this:

I now have three storage pools. The ‘default ‘ pool will be unused, but I will put bootable image files in ISO and store virtual hard disks in VMachines

Finally, I will go and fetch a copy of RouterOS for experimenting with Mikrotik routers. The file needed is on the Mikrotik download page. It is possible to fetch the file into the correct location on the hard disk via the command line as follows:

cd ~/ISO

I could now add that ISO to the storage pool by clicking on the swirly arrow icon which made VMM re-read the contents of the ‘ISO’ storage pool allowing it to find the newly downloaded router software image.

Clicking on the swirly arrow icon has added the mikrotik ‘volume’ to the ISO storage pool. That makes it available to the hypervisor for installing a virtual router

Next time I will install the Mikrotik router as well as create some virtual networks for it to route between.

Installing KVM-based virtualisation on openSuse

Recently I was speaking to a friend about Mikrotik routers and he mentioned that you could download a copy of their RouterOS software to experiment with. I hatched a plan to model a small network with such a router at its core and see what can be done with it in terms of monitoring using SNMP-based tools.

First, I would need to set up a fresh virtualisation platform to play with. I plopped a spare hard drive in to my gaming rig and installed openSUSE LEAP 42.2 on to it. That’s the easy bit of course, but I thought it would be interesting to look in more detail at setting up virtualisation using KVM as the hypervisor and some of the issues I encountered.

The ‘Yast ‘ application has a very useful option for installing a hypervisor. Here’s what it looks like:

Click here to begin configuring a hypervisor

Clicking on this item then gave me an option to choose which hypervisor:

Make sure to tick both KVM related boxes

Part of the installation process includes offering to set up a network ‘bridge’. My PC has one physical network device, ‘eth0’ and it has a static IP address ( on my house network. The bridge will appear as ‘br0’ and will allow my virtual machines to access the house network using IP addresses in the same range as my other computers (i.e. 192.168.1.x)

Saying ‘yes’ to this option creates the ‘default’ virtual network attached to ‘br0’


Let’s check that the network has been created by using the ‘ip’ command line tool to see what the state of my network is…

The IP address has moved from ‘eth0’ to ‘br0’ as expected

Ah, but there’s a problem… when I booted up the computer a little while later, I had no network connection. For some reason the routing table had become confused. The IP address was linked to the bridge ‘br0’ but the default gateway was linked to the original ethernet adapter ‘eth0’. This is easy to fix in Yast under ‘System’ -> ‘Network Settings’. Find the entry on routing and change the device from ‘eth0’ to ‘br0’. Fixed!

Use the dropdown to select the correct interface – br0

In another post I will look at setting up ‘Virtual Machine manager’ and install a copy of RouterOS to play with.

Lambourn Vintage Machinery Society Show 2017

David M0ICZ invited me to this year’s Lambourn Vintage Machinery Society 2017 show. Part agricultural show, part auto jumble and part vintage vehicle and machinery exhibition, it was a fascinating day out. I was particularly keen to go, as David had been working very hard in restoring his 1941 Austin K2 van so that he could display it.

Austin K2 front view
1941 Austin K2, proud to be on display at Lambourn in May 2017

K2 information board
Austin K2 information board

K2 Offside
Another view of the K2

K2 rear view
K2 Rear view

Another item that will always get my attention at these sort of events is the static engine. Little Lister and Petter engines that pop and burble away happily, pumping water or generating electricity are fascinating. Lambourn had a very good selection this year – here are just some…

Idling engine
Small static engine just idling

red pump
Engine driving a very nice red pump

Lister pump set
A combination Lister engine and pump set

There are always some rarities and oddities at these shows. The rare…

M3 half track
US World war two M3 half track

…and the odd!

raleigh moped
Raleigh moped-shopping-bike-thing

Trying out the Raspberry Pi Touch-screen

Its time to power up the Pi and its touch screen. It is necessary to apply two sources of power, one for the screen and one for the Pi. I bought a suitable cable from SmartiCase at the same time as the case itself.

USB Splitter cable for powering two devices.

Place the two micro-USB plugs carefully in to the sockets – its a bit fiddly – and trail the cable away from the back of the device.

Fitting the micro-USB power leads.
Fitting the micro-USB power leads.

Now to power up!

Oops! The wrong OS.
Oops! The wrong OS.

Oh dear. I forgot to wipe the SD card from the last time I used the Pi, helping to test a friend’s arcade machine build. Now here’s where things get fiddly. It will be necessary to undo the screws on the audio hat in order to allow its extraction before the trap-door can be opened and the Pi flipped out to allow the SD card to be extracted and replaced. Give me a moment to burn a new image on the card…

While I’m preparing a new Raspian image, let’s have a look at Hector having fun checking the case for Lego compatibility…

Hector checking Lego compatibility

Hector with the old Pi2 in its SmartiCase, down from the attic after working as a Dump1090 server.

OK, the SD card is now loaded with Raspbian. Lets see how it looks…

Raspian on the touch screen. It worked first time out of the box.

It works beautifully. I plugged in a USB souncard into the hub that is powering everything and used it to hook up to one of my radio receivers. (Note, the Pi-DAC is for high quality audio output only. There is no line in). Forty metres was quite lively so I installed FLDIGI and tuned to the PSK section of the band…

Decoding PSK31 on forty metres.
Decoding PSK31 on forty metres.

It works beautifully. There is no jerkiness or lag on the waterfall display. I had to tweak the microphone level a bit to prevent it overloading. Finally I tried a screen capture on the Pi.

DD2MON in a conversation or ‘QSO’ with F4HGE on forty metres PSK31.

Adding a Pi-DAC Audio Output Hat to the Touch-screen Pi

I mentioned in the last post that I had another treat in store for my lucky little Pi. This comes in the form of an audio ‘hat’ that the SmartiPi Touch is designed to accomodate. Let’s see what it looks like and how to fit it…

A brand new Pi-DAC board for output to an audio amplifier or headphones.


The bare hat and mounting kit.

We will not need the supplied mounting kit, but instead we will use the two small black spacers and screws supplied with the screen case. Place the spacers on the case over the screw holes and push the long black connector in the the corresponding slot and on to the pins on the Pi circuit board.

The hat is in place, plugged in to the Pi and screwed to the back of the case.

In the next post I will go in to applying power to the Pi and screen and show some of the results.

Assembling the SmartiPi Touch

Here is how a fitted I Raspberry Pi 3 with a 7-inch touch screen using a SmartiPi Touch case.

Start off by placing four sticky feet on the base.

Adding the sticky feet to the base
Adding the sticky feet to the base

Now we move on to the ‘door’ at the back of the case. Find one of the small rubber patches…

Trap door and rubber patch.
Trap door and rubber patch.

…and stick it in place.

All done.
All done.

There is another of these patches to fit to the back of the case…

Fit patch to the top right of the case rear.
Fit patch to the top right of the case rear.


Case is now prepped.
Case is now prepped.

Next up is to offer the base up to the case hinges and fit the two bolts. It is important not to tighten these bolts too much or the hinge will not operate.

Checking hinge alignment.
Checking hinge alignment.

Fit the supplied ribbon cable to the slot in the back of the display screen control board with the silver contacts facing up…

Check the silver contacts. They must face up where they slot in to the control board.

…and offer up the screen to the case, threading the ribbon cable through.

Thread the ribbon cable through carefully.
Thread the ribbon cable through carefully.

Once in place, the screen can be fixed in to the case with four black screws.

Screw the screen in to place with four black screws.
Screw the screen in to place with four black screws.

Now let’s fit the Pi. Again, look carefully at how the ribbon cable exits the case and orientates with the Pi’s connector.

Careful how you orient the ribbon cable.
Careful how you orient the ribbon cable.

Slide the pi in to place and it will mate up with two small pegs in the recess where the Pi sits. At this point you may fix the Pi in place with two screws leaving the board accessible for experiments. However, at this point I will fit the trap door I prepared earlier.

The trap door holds the Pi in place without screws allowing quick access.
The trap door holds the Pi in place without screws allowing quick access.

In the next post, another treat for a very deserving little Pi…