Many years ago, Sam, K9SD, added some interesting functionality to his Icom 781 radios – an external encoder wired in parallel to the VFO control. This may seem trivial, but his modification actually wired an encoder in parallel to the radio’s internal encoder. The benefit and beauty to this arrangement is that the radio could be put up on a shelf in front of the operator, and still comfortably controlled – ergonomics!!

Fast forward several years…. I called Sam to ask about how he did this (hoping it was a CI-V or CAT thing), and quickly decided that further modifications to my equipment were not really something I was interested in.

While Sam did this on his Icom radio, I really wanted this for my Yaesu FT-1000, which has a “remote” port, which I believe to have CI-V functionality. I can also wire it into the CAT port, but that might interrupt PC communication, so care has to be taken to not interfere with PC control of the radio.

After some digging, i discovered that the Arduino might be a good candidate for this purpose – others have begun experimenting with rig control from the Arduino, with some success.

Because communication over CI-V is preferred, and my Yaesu is in storage as I move, i decided that my Icom 706 will be the test bed radio for this project.

I picked up an Inland branded Arduino starter kit from Microcenter because I had a number of ideas in mind for Arduino projects… after wiring the system, I started with some simple polling to try and get data from the radio. Using existing code, i could poll the radio’s frequency, and display it on the IDE Serial Monitor, but there were some interesting issues – it would only work ONCE, then start displaying trash.

Some experimenting revealed that the serial buffer was not clearing even with the Serial.Flush() method. I quickly discovered that the following method worked much better:

int dump[14];
{dump[0] =;}

this just repeatedly dumps data at the serial port to a dummy variable until the buffer is empty.

Once that worked, then I decided to experiment a little with the LCD module included with the kit – I wanted to add a display to this little project.

Wiring the display as shown on the Arduino help pages was a breeze, and the example code worked perfectly. The biggest issue I had was decoding the frequency data to something easy to display – this proved a lot more difficult than I thought. Here’s the first attempt:

Note the hangup on certain bands – that’s 10 MHz, and anything above 28 MHz (6 meters, 2 meters, 440 MHz).

Some deeper digging and experimentation made me realize that I could massage the data a bit, and directly display it. The second attempt yielded the following:

This obviously uses the same double decimal format of many radios.

Following this success, I moved on to writing frequency data to the radio. The toughest part about the CI-V protocol is determining how things are encoded, and getting it right. At the end of day 1, I DID get the arduino to successfully send a fixed frequency to the radio, which means my next task is dynamically sending some frequency based on input – so adjusting the frequency before I send it.

I still have some work ahead, such as massaging data mathematically, and actually integrating a rotary encoder. I have example code for the encoder, but in order to make the control “feel” good, because so many off-the-shelf cheap encoders have detents in them, I purchased a used FT-1000 main VFO encoder and knob off Ebay. My plan is to mount these on an enclosure, with the Arduino inside the enclosure. Ultimately, I plan on adding some additional features, such as tuning speed or other control functions into the device, and possibly even keeping the display circuit in the system, if it proves worthwhile.


More to come!