十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

离线语音模块CI-03T改造老空调:红外码库与声学结构实战

离线语音模块CI-03T改造老空调:红外码库与声学结构实战 我一直觉得把带红外功能的离线语音模块塞进空调内机是智能家居改造里性价比最高的玩法之一。前阵子朋友让我帮他家的老式柜机做语音控制第一反应其实是加个智能插座结果空调是红外的插座根本管不了开关机换通用红外遥控器又得单独配网、找码折腾半天还不一定对得上。最后我直接在空调内机里塞了一颗 CI-03T用红外码库接管原遥控器挂机、柜机通吃。这篇文章就把整个项目拆开讲为什么这颗模块值得选、5V 供电和 3.3V 串口之间的坑在哪、麦克风和声学结构怎么装才不出幺蛾子。想自己动手的朋友照着抄基本不会翻车。1. 为什么选 CI-03T一颗模块吃下空调语音控制做硬件选型第一步不是看参数而是先想清楚要解决什么问题。我的需求很明确改造传统红外空调让它能听懂“打开空调”“设定 26 度”这类口令而且要离线运行不依赖家里的 Wi-Fi 和云端。这样一来能够闭环的候选方案其实不多CI-03T 属于各方面都比较平衡的选择。1.1 语音模块怎么选从离线识别聊起语音控制这块市面上粗分两大流派在线方案和离线方案。在线方案依赖云端识别比如用某个智能音箱加上红外发射器优点是语义理解强缺点是断网就废而且改造时要考虑音箱放在哪、红外朝向哪离线方案则是在本地完成关键词识别和命令解析部署简单、延迟低最关键的是没有隐私和联网问题。CI-03T 就是典型的离线语音模块。它的工作方式很像“录音机拨号盘”把命令词烧进去用户说出来它识别到之后执行对应动作通过串口、PWM 或者红外发射输出控制信号。这类模块最大的好处是免训练、免网络普通人用手机 App 或串口工具就能配置适合我这种“拿现成方案改到具体产品里”的项目。我当时也对比过其他离线模块比如纯语音识别GPIO 控制的裸芯片方案、带 WiFi 的语音模组。结果发现纯 GPIO 控制的模块要自己接线给红外发射管还要自己维护红外遥控码表带 WiFi 的又绕回云端的坑。而 CI-03T 把“语音识别、红外码库、串口通信”三者打包在一起本质上就是一个能听懂人话的红外遥控器天然适配空调这种纯红外控制的电器。1.2 红外码库是决定胜负的核心空调控制和其他家电最大的不同它不只是开和关还涉及模式、温度、风速、扫风一大堆状态而且每个品牌的红外编码格式都不一样甚至同一个品牌不同系列都有差异。你自己去抓红外波形、解 NEC 码、整理品牌协议做一两个型号还行想覆盖全市场根本不现实这就是红外码库的价值所在。CI-03T 内置的红外码库就是把常见的格力、美的、海尔、奥克斯、志高、TCL、长虹、海信等主流品牌空调的遥控码记在了模块里。你不需要去分析 38kHz 载波的脉冲宽度不需要写码表只需要告诉模块“我家空调是哪个品牌、什么型号”它就能直接匹配对应的红外协议。这个环节省掉的工作量是用普通红外发射方案完全比不了的。选型时我还特意确认了一件事码库是固化在模块本地还是需要联网下载。CI-03T 是本地码库配置一次之后离线可用这对我这种放在空调内机里的场景非常重要。空调内机的位置通常信号不好如果模块整天惦记着联网拉数据迟早出问题。1.3 CI-03T 的硬件基本面引脚、供电和对外接口虽然没有把所有引脚都列进官方一页纸但这类语音红外模块的基本组成大同小异。从项目角度我需要关注五组接口电源VCC、GND典型供电电压 5V模块内部自己转到 3.3V 给主控芯片供电串口TX、RX用于配置命令和接收识别结果逻辑电平是 3.3V这是全文最重要的一处坑红外输出一个 IO 引脚接红外发射管常用 38kHz 载波调制麦克风输入接驻极体麦克风有的模块直接板上带了麦克风有的需要外接喇叭输出接 8Ω 或 4Ω 小喇叭用于语音反馈比如“好的温度已调到 26 度”。对于改造项目我建议优先买带板载麦克风的版本省去自己设计咪头偏置电路的麻烦如果必须外接麦克风就要额外注意偏置电压和走线屏蔽这部分我在“声学结构规范”一节详细展开。2. 红外码库深度拆解不是“学习遥控器”而是“预置码库”很多人一听红外码库下意识以为是“学习型遥控器”其实这是两种完全不同的东西。搞清楚这个区别你在配置 CI-03T 的时候就能少走一大半弯路。2.1 预置码库和学习型遥控器的差异学习型方案让我先拿原装遥控器对着模块录一遍理论上任何品牌都能用但实际操作有三个烦人问题第一码库命中率取决于学习时红外波形的完整度受遥控器电池、距离、角度影响很大第二每个按键都要单独录空调有几十个按键录一遍人都麻了第三红外学习对存储空间要求高经常出现码太长存不下、回放丢码的情况。预置码库方案则完全不同。厂商已经提前把不同品牌、不同型号空调的红外编码整理成了数据库模块出厂时就内置了。我做的不是“录音”而是“查字典”告诉模块我家空调的品牌和型号范围模块直接读取对应的红外码表。好处非常明显配置效率高、稳定性好而且厂商在码库维护上比我一个人的力量专业得多。需要注意预置码库有一个前提它覆盖的是“常见品牌常见型号”。如果你家是特别小众的牌子或者老古董空调码库里找不到匹配项那就只能退回学习型方案或者去官方渠道反馈看能否后期补码。选 CI-03T 之前先确认家里空调品牌在不在覆盖列表里这一步能省不少事。2.2 从语音指令到红外发出的完整链路理解码库的工作机制需要把整个链路串一遍。用户说“空调开机”模块上的麦克风采集声音离线识别引擎在本地完成命令词匹配识别成功后内部逻辑去码库检索对应的“空调品牌开机指令”查出一串红外码最后模块在红外输出引脚上生成 38kHz 载波调制信号驱动红外发射管发出去空调接收端收到后执行开机。这个链路里语音识别和码库查询是软件层面的事真正容易出问题的是最后一环红外信号的电气和光学质量。很多人在这一步踩了坑以为码库对就能控制结果发现红外发射距离只有半米或者隔一会就失灵。2.3 配置实操绑定品牌和调试验证不同厂家的 CI-03T 配套配置工具不太一样有的用串口调试助手发 AT 指令有的用专用 App但步骤逻辑基本一致给模块通电串口接 USB-TTL 适配器波特率一般 9600进入配置模式选择语音唤醒词例如“小智小智”和命令词表在红外码库列表里选择空调品牌和型号区间下载配置模块复位先不装进空调直接把红外发射管对准空调遥控接收窗测试“开机/关机/温度调节”。我实际用的过程里最烦的一步反而是空调型号的选择。现在很多空调面板型号和遥控器型号对不上我建议直接看原装遥控器背面的型号那个通常比机身铭牌更准。如果型号区间给你几个选项用温度加减一个来回就能确认到底哪个对得上。调试时还有一个细节红外发射管有正负极角度不同效果差异很大。测试阶段先用短距离验证码库是否正确再考虑发射管的角度和固定方式。如果同样的码库近距离能控制、远距离不行问题基本出在发射电路功率或发射管朝向而不是码库本身。3. 5V 供电 ≠ 3.3V 串口电平匹配的三种接线方案这颗模块我最早接废过一次起因就是想当然既然 VCC 是 5V那串口电平应该也是 5V直接拿 5V 单片机的串口去对接。结果模块隔三差五乱码最后干脆不识别。查了半天才明白5V 供电是给模块内部稳压器的主控芯片和串口引脚都是 3.3V 逻辑用 5V 电平去驱动 3.3V 引脚完全是在作死。3.1 为什么 5V 供电的模块串口却是 3.3V 逻辑大多数带语音识别能力的模块内部主控都是低功耗物联网芯片核心电压 1.8V 到 3.3V外部为了降低电源设计成本才把电源输入做成 5V让用户可以直接用 USB 供电或者从开发板取电。模块和外界交互的 UART 引脚直接连在主控 GPIO 上没有做电平转换所以对外呈现的是 3.3V 逻辑。这就产生了一个典型误区很多人以为供电电压等于 IO 电平结果用 5V 单片机直连 3.3V 模块串口。轻则通信不稳定、随机乱码重则把模块的 GPIO 烧掉。判断一个设备串口逻辑电平不能只看供电要看芯片手册里的 IO 电压范围或者直接量 TX 引脚高电平时的电压这是最基本的排查习惯。3.2 三极管 1.8V 转 3.3V 串口这个热搜电路到底能不能用最近“三极管 1.8v 转 3.3v 串口”这个词挺火很多人想用电平转换把模块和低压单片机接起来。三极管做电平转换确实可行但直接用 NPN 三极管做反相器是有问题的这里我把原理说透。经典电路长这样NPN 三极管发射极接地基极通过一个电阻接信号输入集电极通过上拉电阻接 3.3V集电极作为信号输出。当输入为高电平时三极管导通输出被拉到接近 0V输入为低电平时三极管截止输出通过上拉电阻升到 3.3V。这个电路确实能把 1.8V 高电平转成 3.3V 的逻辑摆幅但问题是信号被反相了。串口通信有个特点空闲状态是高电平起始位是低电平。如果直接把 UART 信号接进这种反相电路空闲电平就变成低了接收端会一直认为总线处于起始位大概率直接乱码。所以正确做法是要么用两个三极管做两级反相把极性翻回来要么放弃三极管反相方案改用下面的分压或者 MOSFET 方案。MCU_TX 1.8V/3.3V ──[1kΩ]──┬── CI-03T RX │ [2kΩ] │ GND这个分压网络不会反相信号只把电压按比例压低。比如 3.3V 串一个 1k、再串一个 2k 到地取 2k 上的电压就是 2.2V落在 3.3V 逻辑的高电平范围内如果是 5V 输出可以改成 2k3.3k 之类的比例。这种方法简单可靠适合信号方向单一的场景。3.3 推荐方案MOSFET 双向电平转换电路如果你像我一样不仅要给 CI-03T 发指令还要读回它的识别结果也就是 TX 和 RX 两个方向都要通信那分压法就不够用了。分压只能单向降压反向的信号还是 3.3V 输出接 5V 单片机一般是能接受的但如果你对接的是 1.8V 单片机RX 方向就又超压了这时候最稳妥的是用 MOSFET 双向电平转换模块。直接用现成的 BSS138 四路电平转换模块最省事电路原理是两个上拉电阻分别接 3.3V 和另一侧电源MOSFET 的门极接低压侧电源源极接地漏极接高压侧。低压侧发高电平时MOSFET 截止高压侧被上拉低压侧发低电平时MOSFET 导通把高压侧也拉低。特点是双向传信号、不反相、速度快9600 波特率下完全无压力。接线上注意不要共地忘接板上除了信号线之外两侧 GND 必须连在一起否则电平转换无从谈起。我见太多人信号线接得对GND 没接结果设备互相飘通信时好时坏。3.4 电源、接地与串口共地细节除了电平转换电源质量也要单独说。CI-03T 的识别稳定性受电源纹波影响很大如果直接从空调内机板上取 5V而那块板子上的 5V 是给摆风电机、显示面板用的电机启停瞬间会把电压拉出尖峰模块可能随机复位或识别率下降。我常用的做法是从空调内机板取 12V 或 5V经过一级低压差 LDO 或者 DC-DC 模块输出干净的 5V 再接 CI-03T。如果手头有 3.3V 稳压芯片也可以先把外部电源降到 3.3V再把模块的 5V 输入和 3.3V 短接——不推荐很多模块 5V 输入端和 3.3V 之间是板载 LDO直接并接会有压差问题老老实实按规格供 5V 最好。串口共地、电源共地这两条原则看似简单却是嵌入式改造项目里最大的隐形杀手。我在给模块刷配置时USB-TTL 转接器要么是 5V 逻辑要么是 3.3V 逻辑插上之前一定先用万用表量一下 TX 引脚空闲电压确认是 3.3V 再接线。这一下量测能省掉后面一小时的抓瞎。4. 声学结构规范把麦克风装进空调里的正确姿势语音模块最怕的不是码库不对而是听不清。空调内机里风扇转、风道响、塑料件共振麦克风放的位置不对识别率会直接从 95% 跌到 50%。这一节说的“声学结构规范”是很多人容易忽略却决定成败的部分。4.1 空调内机的声学环境为什么这么恶劣空调内机本身就是一个噪声源。风扇电机转动、贯流风叶切风、冷媒流动、导风板摆动都会产生持续的环境噪声。更麻烦的是内机内部是一个半封闭的塑料腔体声音会在里面反射叠加麦克风如果直接贴在壳体内部拾取到的往往是腔体混响和结构振动而不是用户的语音。我实测过空调开启中高风速时内机附近的环境噪声能到 50dB 到 60dB而正常说话距离 1 米多时语音约 60dB 到 65dB信噪比并不高。语音识别芯片虽然都有一定的降噪能力但它是基于算法判断的如果麦克风的声学入口设计有问题算法再强也救不回来。4.2 麦克风开孔与安装规范孔径、方向和防尘先说麦克风位置怎么定。最理想的地方是空调前面板靠近用户的一侧孔位朝向前下方让麦克风正对使用者的嘴巴方向而不是朝上、朝墙壁或者正对出风口。我见过有人把麦克风孔开在顶部进风处结果拾取的全是风扇噪声识别率惨不忍睹。开孔直径有讲究。驻极体麦克风的拾音孔通常是一个 1mm 到 2mm 的小孔孔开太大容易引入风噪孔开太小则高频衰减严重。我一般情况下开 1.5mm 左右如果壳体比较厚还会用钻头倒一个 45 度的小喇叭口减少声波进入时的阻碍。麦克风本体不要直接硬固定在塑料壳上。电机和风叶带来的机械振动会沿着壳体传进麦克风产生低频噪声。正确做法是用硅胶套或者软性海绵包裹麦克风再卡进一个开好的安装槽里让它在声学上与壳体“软隔离”。如果模块板载麦克风已经焊死在 PCB 上那就要在 PCB 与壳体之间加海绵垫减振。防尘也别忘了。空调内机长期运行会积灰麦克风孔如果直通外界灰尘很容易把拾音孔堵住。我会在孔内侧贴一层透声海绵既挡灰尘又能稍微防风。透声海绵选薄一点的太厚会吃掉高频细节影响语音清晰度。4.3 喇叭放置、回音与啸叫的处理CI-03T 通常会接一个喇叭做语音反馈比如“好的空调已打开”。喇叭放在空调里也有讲究一方面要给喇叭一个后腔也就是让喇叭背面的声波不要和正面的声波直接抵消否则声音会变小另一方面喇叭不要正对着麦克风安装否则容易形成声学反馈虽然离线语音识别一般不会啸叫但音量开大时仍可能干扰识别。我的经验是喇叭朝前面板下方开口稍微偏离麦克风轴线扬声器背后用一个塑料盒或热熔胶做一个半封闭腔体。如果空调内部空间太小我会开一个反射孔让喇叭声音从面板上的格栅透出来尽量保证语音提示清晰。麦克风和喇叭之间的距离我一般控制在 10cm 以上。太近了语音播放的同时麦克风还在工作识别引擎虽然支持打断和播放抑制但声音反射路径复杂时仍可能把喇叭声当成用户语音出现自己和自己说话的鬼畜现象。4.4 软件层面降噪、唤醒灵敏度与误触发的平衡硬件装好了并不代表一劳永逸。CI-03T 这类模块通常在配套软件里提供唤醒灵敏度、命令词拒识、降噪等级等配置项。空调环境噪声高灵敏度调太高会导致误触发比如风声、空调提示音都可能唤醒调太低又会导致叫不醒。我自己的调试方法是梯度调整先在最安静的时候确认唤醒词能稳定识别然后把空调开到中档风把灵敏度从低往高调直到唤醒成功率和误唤醒率达到一个平衡点最后再开着电视、开着风扇测一轮。实测下来灵敏度通常是中等偏下同时开启模块的降噪选项。不同产品对这个参数叫法不一样但大体思路一致宁可稍微难唤醒一点也不要误唤醒。还有一点要提醒命令词不要设置成太短的词语比如“开”这种单字非常容易误触。我建议用两个字以上的完整词组比如“打开空调”“温度调高”识别稳定性和抗误触都会明显改善。5. 完整改造实录把 CI-03T 装进空调内机的全过程前面把原理讲明白了这一步直接看我踩出来的实操流程。我以一台普通壁挂式空调为例记录从拆机到装回的完整过程所有关键节点都标注了注意细节。5.1 器件清单与工具准备项目需要的物料不复杂CI-03T 语音红外模块一块带板载麦克风优先8Ω 1W 到 3W 小喇叭一个尺寸根据安装空间定红外发射管如果模块带板载红外发射管可跳过电源方案DC-DC 降压模块或者 LDO从空调内机板取电电平转换模块如果串口只需要一次性配置用 USB-TTL 也可以若干杜邦线、硅胶套、透声海绵、热熔胶、尼龙扎带工具十字螺丝刀、电钻开孔用、万用表、电烙铁。如果只是临时给自家空调改造不需要买太贵的工具。万用表必须有用来确认取电点和电平别的都可以将就。5.2 拆机取电与模块布线每一步都别踩插座坑第一步是断电拆机。壁挂空调内机拆壳方式各品牌略有不同一般是掀开前面板、拧下两侧和底部的螺丝再把外壳整体取下。拆之前务必断电并且等几分钟让电容放电不要带电操作。第二步是找取电点。我是用万用表直流电压档在内机主板上的电容两端找稳定电压。空调主板通常有 12V、5V、3.3V 等电压轨找 5V 最方便直接接 CI-03T 的 VCC如果主板上不方便焊接就找空调主板供电进来的 12V接一个小 DC-DC 降压模块转成 5V 供给模块。取电点要选滤波电容旁边不要选在继电器或电机驱动附近否则干扰会大很多。第三步是固定模块。CI-03T 模块本体尽量固定在距离风扇电机远一点的位置我用尼龙柱架空固定在空调内机底壳上避免直接接触金属和大型塑料件。如果底壳空间不够也可以固定在内机侧面但要注意不要挡住原来的排水管和电控盒。红外发射管的方向要单独调整。很多 CI-03T 模块的红外发射管是独立的我会先把发射管朝下前方让红外光可以覆盖房间中下部空间而不是直射天花板。固定发射管时用热熔胶做临时固定测试没问题后再用结构胶加固。5.3 上电配置与红外码库调试记录模块装好、线接好后先不要合上外壳。此时把红外发射管对准空调遥控接收窗口距离控制在 30cm 以内开始配置码库。我用的配置链路是把 CI-03T 的串口通过 USB-TTL 接到电脑打开串口助手先用 AT 指令查询模块版本确认通信正常。这里就会碰到电平匹配问题如果我的 USB-TTL 是 3.3V 逻辑就直接连如果是 5V 逻辑就必须在 TX/RX 之间加电平转换。电脑端配置完成后断开 USB-TTL让 CI-03T 独立运行。紧接着做红外码库确认。我设置的命令词包括“打开空调”“关闭空调”“制冷模式”“设定 26 度”等红外码库选择品牌后逐条测试。如果某条命令没反应先检查码库品牌选择是否正确如果整个控制方向都对但个别按键功能不对大概率是型号区间偏了换下一个型号区间再试。5.4 合盖前的老化测试与最终固定合盖之前我建议保持通电运行一整天测试三种状态正常遥控、语音控制、空调自身运行时模块是否稳定。我遇到过一个问题空调制冷时内机塑料件热胀冷缩刚好压住了模块上的麦克风引脚导致识别时好时坏。这种问题只有长时间运行才能发现短时间测试根本看不出来。外壳重新安装时麦克风开孔位置要跟模块麦克风位置对齐。如果孔位对不上可以在外壳上重新开孔然后用透声海绵盖住原孔。装壳之后再连续测几十次语音命令统计一次通过率顺便确认喇叭反馈音量是否合适。我最终把喇叭音量调到中等既不会吵到人又能在环境噪声下听清反馈。6. 常见问题与排查技巧实录语音红外改造项目做完之后最大的乐趣在于排查各种稀奇古怪的问题。我整理了一份自己的排查记录按故障现象分类希望能帮你少走弯路。6.1 语音唤醒无反应、识别率低这类问题优先查声学链路麦克风孔是否被外壳遮挡堵住麦克风离风扇噪声源是否太近唤醒词设置是否太短灵敏度是否过低电源纹波过大导致识别芯片工作不稳定。我的排查顺序是先看电源再用万用表量麦克风偏置电压再人工开一个孔测试最后才调灵敏度。很多人第一步就冲进软件调参其实硬件声学问题用软件根本救不回来。6.2 红外发射距离短或方向不对红外发射管的作用半径通常 5m 到 8m如果实际只有 1m大概率是以下原因发射管供电不足红外发射电流不够发射管角度装反外壳遮挡了红外光路码库波形幅度被限流电阻压低。红外线不可见但可以用手机摄像头对着发射管看按遥控器时能拍到发紫白色的光如果看不到或者很弱说明驱动电路有问题。这个方法排查红外故障非常管用强烈推荐。6.3 模块反复重启或随机死机如果空调运行时模块频繁重启基本是电源问题。空调内机电机启动电流很大会把电源电压拉低或者你从空调主板取的 5V 是带干扰的 PWM 信号模块直接“吃”坏了。应对办法是加强电源去耦模块 VCC 和 GND 之间并联一个 100uF 电解电容和一个 100nF 陶瓷电容如果还不行就换成独立电源方案从室内机 220V 端取电接一个隔离 DC-DC彻底和电机电源隔离。6.4 环境噪声大时误唤醒、误识别空调风量大、旁边有人看电视或者开吸尘器时模块容易被误唤醒。除了调低灵敏度外可以把命令词改成更长的词组或者开启唤醒确认功能。另外检查麦克风孔是否在空调出风口附近如果是把孔位重新布局避开直接气流误唤醒率会下降很多。再补充一条如果模块支持“播放提示音后等待命令”也就是一次唤醒后边对话边执行建议打开。这样用户说完“打开空调”后模块再说“好的”并等待下一条指令比每次都重新唤醒要自然得多也能减少被环境噪声打断的概率。故障现象大概率原因排查手段解决方式唤醒无反应麦克风孔被挡、灵敏度低查声学通路重新开孔、调高灵敏度识别率低麦克风离噪声源近听录音对比移动麦克风、加海绵减振红外距离短发射电流不足或方向不对手机摄像头看红外灯加大限流、调整朝向通信乱码串口电平不匹配量 TX 空闲电压加电平转换电路频繁重启电源纹波大示波器看 VCC加电容或隔离 DC-DC误唤醒信噪比低、灵敏度高环境噪声实测调灵敏度、改长命令词自己在项目里一路折腾下来我最深的体会是这种语音红外改造真正的技术含量不在接线而在“把话说清楚”和“把信号送出去”这两个看似简单的环节。红外码库帮你解决了协议层最难的部分电平匹配和声学结构则需要你自己判断。如果你正准备给家里的老空调做语音控制先别急着买材料把空调内机拆开看一遍内部空间再决定麦克风孔开在哪、发射管朝哪装比什么都重要。
返回列表