Icom 对讲机外置 S 表:基于 CI-V 协议与 Arduino 实现
零部件与材料
- Arduino UNO × 1
- 单圈电位器 10kΩ × 1
- 电阻 10kΩ × 1
- 电阻 4.75kΩ × 1
- 二极管 1N4148 × 1
- 电解电容 10µF × 1
- 铁氧体磁环 × 2
- 3.5mm 音频插头 × 1
- Icom 天线调谐器插头(可用电脑电源插头改装) × 1
项目原理
利用 Arduino Uno/Nano 向 Icom 对讲机发送 CI-V 命令查询信号强度,读取回复,转换后输出模拟电压驱动模拟指针式 S 表(阿松伐计)。
- 供电取自对讲机天调端口(+12V,≥200mA)。无天调口可用其他 +12V 输出口或外部电源。
- 无天调插头可用电脑电源插头修剪适配。
- 本项目针对 IC-7000,可适配任何带 CI-V 端口的 Icom 机型。
- 可使用 CI-V 通用地址 0x00,无需修改代码即兼容多机型。
- 输入输出线缆加磁环抑制射频干扰。S 表 +12V 供电非必须,可用于背光等扩展。
- 10k 电位器衰减输出信号(过大不适合模拟表头),校准使强本地信号(+60dB)指针满刻度。
同类参考项目
- IC-7300 电键接口
- ON7EQ 项目页(点击 Projects)
代码
// IC7300 S表读取测试平台及其他功能
// by Luc Decroos - ON7DQ/KF0CR
// modified & adapted by Daniel VE2BAP, 2018-12-01
#include <SoftwareSerial.h> // 与 IC7000 通信
#define BAUD_RATE 19200 // CI-V 波特率
#define TRX_address (0x70) // HEX $70 = Icom IC-7000
//#define TRX_address ((byte)00) // $00: Icom 通用地址(适用于所有无线电)
// 串口连接
// RX = Icom 无线电到 Arduino : 接 pin 2 经 4k7 电阻
// TX = Arduino 到 Icom 无线电 : 接 pin 7 经二极管 1N4148,3.5mm 插头尖端接 10k 上拉到 Vcc (5V)
SoftwareSerial mySerial = SoftwareSerial(2, 7); // (RX, TX)
int readCounter;
int sMeterVal1;
int sMeterVal2;
int sMeterOut = 11; // 外置模拟 S 表接 pin 11
void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, LOW); // 关闭板载 LED
pinMode(2, INPUT); // CI-V 从 IC7000 接收
pinMode(7, OUTPUT); // CI-V 发送到 IC7000
pinMode(sMeterOut, OUTPUT);
mySerial.begin(BAUD_RATE);
mySerial.listen(); // 软串口同一时间只能监听一个
while (mySerial.available()) mySerial.read(); // 清空缓冲
}
void loop() {
mySerial.flush();
// 发送“读取 S 表”命令
mySerial.write(0xFE);
mySerial.write(0xFE);
mySerial.write(TRX_address);
mySerial.write(0xE0);
mySerial.write(0x15);
mySerial.write(0x02); // 读 S 表,命令 15 02
mySerial.write(0xFD); // 结束序列
delay(20);
// 读取无线电回复
int nbChar = mySerial.available();
if (nbChar > 0) {
for (int readCounter = 0; readCounter < nbChar; readCounter++) {
byte byteRead = mySerial.read();
if (readCounter == 6) {
sMeterVal1 = ((byteRead / 16 * 10) + (byteRead % 16)); // 高字节 BCD 转十进制
}
if (readCounter == 7) {
sMeterVal2 = ((byteRead / 16 * 10) + (byteRead % 16)); // 低字节 BCD 转十进制
analogWrite(sMeterOut, ((sMeterVal1 * 100) + sMeterVal2)); // 计算并输出 PWM
delay(20);
}
}
}
}
3D 打印/外壳文件
项目附件含多张外壳组装照片,可参考自行设计。
原理图
原理图见项目附件。
制造工艺
- 体外除颤器:历史、设计与制造
- 无线电技术演进与工程:从马可尼到数字广播
- 柔软纸巾:乳液如何提升舒适度与性能
- 树莓派精准监测机柜温度:DS18B20 多点部署实战
- 智能窗帘:基于Arduino与太阳能的自动光控系统
- 自制简易红外避障传感器:IR LED + 光电二极管 + Arduino
- 3D 打造紧凑型 MIDI 架子鼓套件
- RDA5807M 迷你立体声 FM 收音机:Arduino Nano + Nokia 5110 + PAM8403 功放
- E3.Series:利用超链接外部 PDF 简化项目文档
- Xilinx 推出 Zynq RFSoC DFE:面向 5G 射频的高性能、低功耗硬核方案
- 瑞萨与 eProsima 为 RA MCU 移植 micro-ROS,赋能 ROS 2 机器人开发
- Acceed IGS-9822DGP:12 口千兆交换机含 4 个 SFP 口——高性能工业网络解决方案