K3LTC.com Experimentation

Vibroplex Champion

I've been practicing CW for a couple months now online using lcwo.net. I've managed to get through all 40 of the lessons but I'm still horribly slow and thats just listening and copying it down, I haven't even really begun to start sending morse code yet. The last time I was up to see my folks my mom gave me her old Vibroplex Champion key. It needed a little cleanup and to be set up properly. I found this page by Neal K5RW to be the clearest description of the process for setting it up. The serial number indicates that it was made during WWII (~1943). I tested the keyer for shorts using a multi-meter and made a case for it out of an old Pelican 1150 case with some closed cell foam I had in the basement.

I banged my head against the wall for trying to get a couple very simple oscillator circuits working - a couple with a 555 chip and another without, and I'm sure its just something stupid I missed but I couldn't get it to generate a tone. Today I decided to see if there was a raspberry pi project I could use instead. One of my kids had a pi-top from a summer science class which has a hub and a ProtoPlus board in it. I found this project on github which explained just how easy it is to use the Raspberry Pi as a tone generator and add a keyer as a switch in the circuit.

Using a Vibroplex is challenging. I can see why so many people suggest against using one as your first key. Even with the weight as far down towards the damper as possible its still sounding dits at about 20 wpm. Also, I need to figure out why it seems to sound them irregularly spaced sometimes. I managed to key out something very close to: CQ CQ CQ DE K3LTC but the dits were very sloppy and that was after a bunch of tries to get it right but here's a video of it:

I didn't use the entire script - just the part to generate the tone:


#!/usr/bin/python3
import pygame
import time
import gpiozero as gpio
from gpiozero import Button
from array import array
from pygame.locals import *

pygame.mixer.pre_init(44100, -16, 1, 1024)
pygame.init()

class ToneSound(pygame.mixer.Sound):
    def __init__(self, frequency, volume):
        self.frequency = frequency
        pygame.mixer.Sound.__init__(self, buffer=self.build_samples())
        self.set_volume(volume)

    def build_samples(self):
        period = int(round(pygame.mixer.get_init()[0] / self.frequency))
        samples = array("h", [0] * period)
        amplitude = 2 ** (abs(pygame.mixer.get_init()[1]) - 1) - 1
        for time in range(period):
            if time < period / 2:
                samples[time] = amplitude
            else:
                samples[time] = -amplitude
        return samples

tone_obj = ToneSound(frequency = 800, volume = .5)
pin = 4
key = gpio.Button(pin, pull_up=True)
DOT = "."
DASH = "-"

key_up_time = 0
key_down_time = 0
key_down_length = 0

print("Ready")

while True:
    key.wait_for_press()
    key_down_time = time.time() # record the time when the key went down
    tone_obj.play(-1) # -1 means to loop the sound
    key.wait_for_release()
    key_up_time = time.time() # record when key released
    key_down_length = key_up_time - key_down_time # get how long it was held down
    tone_obj.stop()