Arduino Project to add remote head hardware using CAT/CI-V.
Go to file
Loren Moore b25debc4e0 Initalizaion Alpha Two 2021-09-05 00:10:52 -04:00
alpha Initalizaion Alpha Two 2021-09-05 00:10:52 -04:00
images Initial Commit. Hello. 2020-02-08 11:58:42 -05:00
libraries/rotary More Functional Alpha. Change to GPLv3. 2021-08-31 19:26:08 -04:00
CHANGELOG More Functional Alpha. Change to GPLv3. 2021-08-31 19:26:08 -04:00
LICENSE More Functional Alpha. Change to GPLv3. 2021-08-31 19:26:08 -04:00 Initialization Alpha 2021-09-04 20:51:31 -04:00

HamHead - Remote Head For Your CAT Rig

By: Jay Moore/NQ4T -


8-Feb-2020: Repository Creation, Intitial Commit, Alpha Versions
31-Aug-2021: Name Change, More Alpha Code, Actually Control Radio
04-Sep-2021: Initialization Routine Alpha


HamHead (formerally ArFO) is an Arduino-based program that interfaces with an external display, external controls, and your ham rig; to allow you the convenience of a remote head for rigs that do not feature one. It is written in Arduino and commands your rig using it's CAT/CI-V connection. HamHead is a continuation/reboot of PiFO; a previous project that sought to do the same thing.

In addition to being able to control your operating mode, VFO, and a few other select options; HamHead also provides "advanced logic" for an otherwise older rig. When possible, it uses it's own programming rather than rely on the rig's internal functions. Planned features include a memory function, similar to what the proof-of-concept PiFO was; that will allow you to expand on the memory preset functions of older rigs as well as the ability to carry your memory presets with you between rigs. HamHead stores the frequency information and sends it to the radio as a frequency for the VFO.

HamHead will use it's own internal logic when necessary, meaning older rigs will get some new features. This means some limitations (like CI-V WARC band data) are irrelevant to HamHead as we can calculate and process things ourselves.

Why The Change To Arduino

When I originally came up with the idea for PiFO; the Raspberry Pi seemed like the easest development solution. With existing software in it's repositories the original idea was just a basic python script to interface with these. However as I began developing it I found a lot of limitations in the existing solutions that did not perform the way I thought they should, or wanted it to.

The other problem with the RPi is the amount of time it takes to boot. Even with a basic installation of Rasbian; 20 seconds was how long it took to become active without getting in to the OS and really stripping things down. When I created HiFiLOGIX I decided to go with the Arduino platform due to almost negligable boot-up time; the goal was to have it booted and ready to go within the 4.5 seconds it took for the stereo to activate it's speaker output relay.

The (relative) success of getting HiFoLOGIX to work and armed with new knowledge of Arduino; I decided it should be possible to build PiFO in a way that works entirely on a microcontroller. We don't need a full OS; and this means no long boot times.


Though I have not gotten to the full design of a "reference" remote head; I am shooting for the following:

  • easy-to-read seven-segment LED displays with a minimal amount of information
  • one (or more) rotary encoders for spinning the VFO/channels
  • dedicated buttons for functions that don't require you to navigate a menu
  • onboard level converters for your rig's communication protocol
  • two cables to the head; power and communications

Currently development is occuring on an Arduino Mega2560 and a simple 7404 based level converter for CI-V. This is actually the same converter used in the RPi version. If the code allows; the final product may contain an ATMega328. All hardware is planned to be integrated in to the head, meaning you should only need a power and communication cable going to your radio.

I will post full pictures and a schematic as I get further along in the development.

Usage of onboard USB controllers in newer rigs will depend on how difficult it is to implement. Unlike the RPi; the AVR based ATMegas do not feature native USB support and only offer serial communications. So plugging a rig's USB in to the thing won't work. The chip that handles serial-to-USB on the board would have to be reprogrammed to act as a USB host and understand all the various serial-to-USB adapters on the market. While USB controllers are available as an external module; the goal of this project is to keep costs to a minimum. No one wants to spend $300 on a remote head accessory!

Development for iCom stuff is being done primarily on an IC-7100, with a IC-706MKII and IC-725 to check compatibility. I won't mention the irony of developing a remote head on a rig with a remote head....or the fact I came up with the thing when I had no rigs with remote heads and now own two.

Additional display types may be supported depending on demand or user-submitted code. The project is open-source; you are welcome to contribute code.


All sketches are currently in the "alpha" folder.

This software currently uses two libraries:

LEDMatrixDriver by Bartosz Bielawski - Installable in the ArduinoIDE or from

Rotary by Ben Buxton -

A copy of the Rotary library has been included as it is not available in the ArduinoIDE.

I have also changed from my ususal BSD 2-Clause license to GPL v3 for better compatibility with any libraries.

Current DEV Status

Development offically started on 5-FEB-2020 with working out the physical interface betweent he rig and the radio. This has been fully tested and I'm able to send and receieve bytes.

Current development is extremely early alpha and is largely working on not just getting iCom CI-V communication working, but making sure I can actually get everything working the way I want. It's not considered ready for prime-time and the code will likely undergo reorganization to make customizations to physical UI and radio drivers easier.

Current Development VersionCurrent Development Version

Development was dorment from early 2020 until late summer 2021 when it was restarted. The current alpha is now capable of actually controlling a radio and displaying it's frequency.

[Video Showing Current Protptype] (

CI-V communication is being chipped away on. I now have an initalization routine going that gets the starting vfo, switches between the vfos, reads the frequency data of each, updates the appropiate variables, and resets the starting VFO. Echo and ACK responses are handled in getdata(). Support for activating 731 Mode is in code. This outputs some information to the serial monitor. Debugging routines also left in code but disabled.


HamHead - Remote Head For Ham Radios
Copyright (C) 2021 Jay Moore -

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <>.

Rotary encoder handler for arduino. v1.1
Copyright 2011 Ben Buxton. Licenced under the GNU GPL Version 3. Contact: