Ham Radio Digital Relay Board
Using Altium and JLCPCB
Problem
I want to be able to use my Icom IC-2730A for FM voice, using the handmic and internal speaker. However, I also want to have the radio hooked up to a DigiRig digital interface for packet operation. I should be able to remotely control my Icom IC-2730A through the use of a networked Raspberry Pi.
Research and Prototyping
I spent many weeks trying to prototype this board by using a breadboard and ethernet jack breakout boards (for the hand-mic cable). However, I kept having issues with the radio still being able to PTT (or unable to in some cases). I also ran into an issue with having enough current to supply relays using the Raspberry Pi, whose GPIO pins can only source about 16 mA. Most of the relays I found needed much more than that.
Hardware Design
I settled on a design that uses two dual-channel relay surface-mount devices, which are controlled by a bipolar NPN transistor. Using the transistor instead of a GPIO pin directly solved my issue of needing more than 16 mA of current. I could now pull current from the Raspberry Pi's 5V line, which can source much more than 16 mA. Also, the relays I used were relatively low-current, and they saved a lot of space on the board. I also included a status LED on the board to show when the 'digital' mode was activated (or when the relays were switched to the normally open channel). When no power is provided to the board, or when the GPIO pin is set to high, the relays close the hand-mic and speaker circuit, and the radio can be used manually. I used Altium for the design of the board, and JLCPCB for the manufacturing. See an image of the final assembled PCB below.
Remote Control Software
Because I wanted to use the radio 'remotely' for packet operation (i.e. APRS, Winlink, etc.), I used the connected Raspberry Pi and DigiRig Interface to control the radio. During the design process, I included CI-V control of the radio using one of the speaker jacks (actually the same one as where the audio goes to on the PCB). The DigiRig supports CI-V, and I installed rigctl on the Pi to do the command communication. In the end, I also created a simple browser-based Flask server GUI to set the radio frequency, power, and other settings from anywhere with an internet connection (I used Tailscale VPN for this project). See a screenshot of the GUI below (coming soon).