客户喊一声“小智“,机器人当场转头:我们靠AR1106拿下30万订单
一个 18×16mm 的小模组,让我在客户现场演示时,一句话就让机器人转头看向说话的人。订单当场敲定。
一、故事的开头
上周三,客户工厂里,噪音不小。
我拿着一个巴掌大的机器人原型,跟对方技术总监说:"您喊一声'小智'试试。"
他半信半疑地喊了一声,机器人脑袋立刻转过来,直勾勾"看"着他。他往左走了两步,机器人跟着转头;走到 3 米外再喊,依然精准锁定。在场几个工程师都凑过来轮流喊,机器人挨个"点名"转向,无一落空。
"这个声源定位,用的什么方案?"总监问。
"AR1106,一个声源定位模组。"我说,"双麦阵列,180° 范围,10° 精度,5 米内稳定拾音。我们全程没写一行驱动代码。"
当天下午,30 万的订单意向书签了。
二、为什么是 AR1106:选型时的纠结
项目需求其实很朴素:
- 机器人要能听到人声来源方向,转头跟随;
- 环境有噪音,不能随便哪个声音都触发;
- 开发周期短,不想从零做算法;
- 成本敏感,模组体积要小。
一开始团队内部讨论过三种路线:
|
方案 |
优点 |
缺点 |
|
自研双麦 TDOA 算法 |
完全可控 |
麦克风标定、相位校准、算法调优,周期以月计 |
|
麦克风阵列 + DSP 处理 |
精度高 |
成本高、开发复杂,杀鸡用牛刀 |
|
AR1106 现成模组 |
即插即用,成本低 |
精度 10°,极致场景不够用 |
我们的场景是"简易安防 + 智能交互",10° 精度完全够用——因为舵机跟着动,10° 的步进在 1 米距离上也就十几厘米的偏差,人眼根本感觉不出来。选型就是妥协的艺术,AR1106 是最省时间的那个答案。
三、极简到什么程度:一块小板,5 根线
拿到模组第一感受:小。长 18mm、宽 16mm,比一枚硬币大不了多少,标准 2.54mm 排针间距,面包板直接怼。
引脚定义(来自规格书):
|
引脚 |
功能 |
|
GND / 5V |
电源 |
|
MICL+ / MICL- |
左麦克风 |
|
MICR- / MICR+ |
右麦克风 |
|
PWM |
SG90 舵机控制输出 |
|
TX |
串口输出(9600 波特率) |
|
AOUT |
语音播报角度 |
|
IO |
预留 |
接线就 4 件事:
AR1106 5V ──── 5V(模组) AR1106 GND ──── GND(共地) AR1106 TX ──── 主控 RX AR1106 PWM ──── SG90 信号线(舵机单独供 5V,注意大电流)
注意一个工程坑:SG90 堵转瞬间电流能到 500mA 以上,千万别和模组共用同一路 5V,我们第一版就因为这个把模组干重启了,后来舵机单独供电,稳了。
双麦阵列是模组自带的:2 个驻极体麦克风,间距约 4cm,推荐选信噪比 70dB、灵敏度 -27dB 的型号。这是官方实测优化过的间距,拾音清晰度和抗干扰能力平衡得不错,我们直接照抄。
四、串口协议:一个字节就是角度
最爽的是协议——输出就是 16 进制的角度值,一个字节,没有协议解析的折磨。
规格书写得很明白:
- 90° 输出
0x5A(十进制 90)
- 100° 输出
0x64(十进制 100)
- 以此类推,
0x00 ~ 0xB4对应 0° ~ 180°
而且只在识别到预设命令词后才输出,平时串口安静如鸡,不会拿一堆噪声角度去骚扰下游设备。这一点对联动稳定性太重要了。
Arduino 端代码短得离谱:
#include <SoftwareSerial.h>
#include <Servo.h>
SoftwareSerial mod(10, 11); // RX, TX 接 AR1106
Servo head;
void setup() {
Serial.begin(9600);
mod.begin(9600);
head.attach(9);
head.write(90); // 上电回中
}
void loop() {
if (mod.available()) {
uint8_t angle = mod.read(); // 读到一个字节,就是角度
angle = constrain(angle, 0, 180);
head.write(angle); // 舵机转向声源
Serial.print("声源角度: ");
Serial.println(angle);
}
}
总共 20 行不到,声源跟随就通了。演示时客户看到这里已经点头了。
如果主控是树莓派这类 Linux 设备,Python 更简单:
import serial
ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=0.1)
while True:
if ser.in_waiting:
angle = ser.read(1)[0] # 一个字节 = 角度值
print(f"声源角度: {angle}°")
# 转发给舵机控制板或下位机
五、命令词定制:"小智"是怎么来的
模组默认只认预设命令词。我们要"小智"当唤醒词,走的是厂商定制流程,单次最多 10 个命令词(唤醒词 + 免唤醒词总数),把使用频率最高的几个短语一次配齐。
这里有几个实测下来的避坑经验,规格书里也写了:
- 4-6 个字最佳。太短误唤醒率高(喊一声"在"都可能触发),太长用户记不住喊不出口;
- 别用叠字,"宝宝""贝贝"这类重叠音容易误识别,我们第一批词表里就有个叠字词,误触发率高到离谱,后来换掉了;
- 别用口语高频词,"你好啊"这种日常高频短语就是误唤醒重灾区;
- 避免多音字、连续零声母;
- 敏感词、伟人名字、黄赌毒绝对不碰,这是红线;
- 词条之间如果只有一个字不同,那个字尽量不要放在末尾,能明显降误识别率。
最终词表定了:"你好小智""嗨小智""转过来""看这边"等几条,每条发音抑扬顿挫、辨识度高。实测在车间 70dB 左右的背景噪音下,5 米内喊"小智"基本无漏报无错报。
六、效果与落地:从原型到订单
整套方案最终形态:
- 拾音:AR1106 双麦阵列,5 米内触发即定位;
- 执行:SG90 舵机带动头部/摄像头,180° 无死角跟随;
- 联动:串口一字节角度值,任何主控都能接,兼容性拉满;
- 防误触发:只认命令词,车间里机器轰鸣、工人聊天都不会乱转。
演示那天,客户总监自己围着机器人转了一圈,机器人从 0° 跟到 180°,又倒着跟回来,全程零卡顿、零误转。他说了句让我印象很深的话:"这个'转头'的动作,就是我想要的产品体验。"
30 万订单,就这么拿下了。
七、总结与建议
AR1106 不是什么黑科技,但它把"声源定位"这个原本要啃算法的事,压缩成了一块 18×16mm 的模组 + 一个字节的串口协议。它解决的痛点不是'能不能做',而是'值不值得自己做'——当你的产品只需要 180° 范围、10° 精度、5 米拾音这个量级时,现成模组比自研香太多了。
几点落地建议:
- 舵机务必单独供电,别跟模组抢 5V;
- 命令词词表一次规划好(上限 10 条),别频繁找厂商返工;
- 5 米是甜蜜点,超出这个距离拾音灵敏度断崖式下降,安装位置提前规划;
- 对精度有极致要求的场景(比如远距离、多声源区分),再考虑更高级的阵列方案。
顺手算一笔账:自研双麦算法,两个工程师一个月的人力成本,足够买上百片 AR1106 了。能用现成的成熟方案解决的事,别用时间去赌。
本文基于 AR1106 声源定位模组规格书撰写。规格书关键参数:180° 定位范围 / 10° 精度 / 5 米拾音 / SG90 舵机联动 / 9600 波特率串口输出(16 进制角度值)。详细咨询请私信公众号后台,期待与您交流。
更多推荐



所有评论(0)