【花雕动手做】行空板 K10 系列实验之人工智的语音识别来控制板载WS2812灯

📅 2026/6/26 17:32:24
【花雕动手做】行空板 K10 系列实验之人工智的语音识别来控制板载WS2812灯
行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板100%采用国产芯片知识产权自主可控符合信息科技课程中编程学习、物联网及人工智能等教学需求。该板集成2.8寸LCD彩屏、WiFi蓝牙、摄像头、麦克风、扬声器、RGB指示灯、多种传感器及丰富的扩展接口。凭借高度集成的板载资源教学过程中无需额外连接其他设备便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等AI人工智能项目。主要特点集成摄像头内置算法可进行离线图像检测集成麦克风内置算法可进行离线语音识别集成扬声器内置算法可进行离线语音合成2.8寸彩色屏幕数据展示更清晰集成度高利于教学接口丰富兼容软件多扩展性好主打人工智能模块语音识别相关说明辅助屏幕显示相关积木LED控制模块知识点语音识别ASR一、什么是语音识别ASR语音识别英文缩写是 ASRAutomatic Speech Recognition简单来说让单片机、电脑听懂人说话把麦克风采集到的声音信号转换成文字或者指令。分为两大类在线语音识别需要联网把声音上传到云端服务器解析识别词汇量巨大离线语音识别不需要 WiFi、不需要网络语音模型预先存放在芯片内部本地直接处理声音适合单片机、行空板、Arduino 这类硬件。你代码里使用的就是离线本地 ASR 语音模块。二、离线语音模块核心功能对应你 K10 代码两种工作模式1持续拾音模式 CONTINUOUS麦克风一直处于收音状态不间断监听声音专门用来做语音唤醒。对应代码asr.asrInit(CONTINUOUS, CN_MODE, 12000);2按键触发模式按下按键才开始录音识别省电一般用于命令词识别。语言模式 CN_MODECN_MODE中文模式只识别汉语EN_MODE英文模式识别英语。本程序开启中文识别用来识别唤醒词你好小新。灵敏度阈值第三个参数 12000数值代表声音检测灵敏度数值越大越不容易被环境杂音误触发抗干扰强数值越小轻声说话就能识别但是容易被噪音误唤醒。12000 属于中等灵敏度适合室内环境使用。三、语音唤醒技术本项目核心唤醒词机制唤醒词就是开门密码。模块平时处于低功耗监听状态只监听这一句话其他普通对话会直接忽略。只有说出预设唤醒词你好小新模块才会被 “唤醒”进入待命状态之后才可以识别后续控制指令。代码里的唤醒检测函数asr.isWakeUp()检测到唤醒词函数返回 true没有检测到唤醒词返回 false。3. 模块状态标志asr._asrState值 0语音模块正在启动、模型加载中暂时无法工作值 ≠ 0初始化完成可以正常收音识别。程序中用 while 循环等待模块就绪避免硬件未启动造成程序崩溃。四、硬件运行完整工作流程上电初始化行空板主板与显示屏启动 ASR 语音芯片加载离线语音模型等待语音模块就绪屏幕打印实验标题模块持续收音安静待机只监听唤醒词使用者说出你好小新程序捕捉到唤醒信号屏幕切换文字提示 “已唤醒行空板”没有听到唤醒词则一直显示唤醒词提示语句每秒刷新一次屏幕并清除文字防止画面重叠。五、离线语音识别优缺点优点完全离线不用网络、不用流量响应速度极快话音刚落立刻识别单片机就能驱动成本低非常适合机器人、智能音箱、门禁、实验教具不受网络波动影响设备在野外也能正常使用。缺点词汇数量有限一般只能预先录入几十条唤醒词 控制指令对嘈杂环境比较敏感噪音大会出现识别失败无法自由识别任意一句话只能识别预先烧录好的词语。六、拓展功能可以在现有代码上升级多级指令识别唤醒之后再识别 “开灯”“关灯”“前进”“后退”控制电机与 LED 灯自定义唤醒词修改库文件把 “你好小新” 改成 “你好行空板”多句话语音交互唤醒后连续识别多条语音命令调节收音灵敏度解决误唤醒或者识别不到声音的问题。七、容易遇到的常见问题识别不到唤醒词调低阈值数值靠近麦克风降低环境噪音。无缘无故自动唤醒误触发把灵敏度数值调高提高抗干扰能力。程序卡死在初始化循环语音模块接线异常串口通信断开导致模块始终处于未就绪状态。【花雕动手做】行空板 K10 系列实验之人工智的语音识别来控制板载WS2812灯实验开源代码// 导入语音识别功能头文件提供ASR语音唤醒、指令识别相关函数#includeasr.h// 导入行空板K10主控库用来控制屏幕、RGB彩灯等硬件外设#includeunihiker_k10.h// 实例化硬件对象UNIHIKER_K10 k10;// 行空板主板对象操控屏幕、板载彩灯ASR asr;// 离线语音识别模块对象处理收音、语音识别// 定义屏幕旋转方向参数数值2代表屏幕倒置显示uint8_tscreen_dir2;//初始化函数// setup函数设备上电或者重启时只运行一次完成硬件初始化与指令配置voidsetup(){// 初始化行空板底层硬件开启串口、总线、外设基础资源k10.begin();// 初始化离线语音识别模块// 参数1CONTINUOUS 持续收音模式时刻监听人声// 参数2CN_MODE 中文识别模式// 参数312000 声音灵敏度数值越大越不容易被杂音误触发asr.asrInit(CONTINUOUS,CN_MODE,12000);// 阻塞等待语音模块启动完成// _asrState0 代表模块正在加载语音模型尚未就绪// 每隔100ms检测一次状态避免硬件未就绪导致程序出错while(asr._asrState0){delay(100);}// 根据设定的方向初始化LCD显示屏k10.initScreen(screen_dir);// 创建屏幕绘图画布所有文字都绘制在画布缓冲区中k10.creatCanvas();// 添加第一条语音指令// 参数1指令编号ID01 1号指令// 参数2语音拼音指令 kai deng 对应中文开灯asr.addASRCommand(01,kai deng);// 添加第二条语音指令// 指令ID11 2号指令拼音 guan deng 对应中文关灯asr.addASRCommand(11,guan deng);}//主循环函数// loop函数初始化结束后无限循环运行实时监测语音信号voidloop(){// 判断是否识别到唤醒词“你好小新”if(asr.isWakeUp()){// 唤醒成功在第6行写入红色提示文字k10.canvas-canvasText(已唤醒行空板.......,6,0xFF0000);// 将画布内容刷新到实体屏幕上k10.canvas-updateCanvas();}else{// 未被唤醒第4行写入蓝色文字提示唤醒关键词k10.canvas-canvasText(唤醒词为“你好小新”,4,0x0000FF);k10.canvas-updateCanvas();}// 判断是否识别到1号语音指令开灯if(asr.isDetectCmdID(01)){// 第8行写入黑色文字k10.canvas-canvasText(检测语音命令,8,0x000000);// 第10行写入蓝色文字k10.canvas-canvasText(打开白色灯光,10,0x0000FF);k10.canvas-updateCanvas();// 控制板载全部RGB灯点亮为纯白色// 参数-1代表控制所有灯珠0xFFFFFF为纯白色RGB值k10.rgb-write(-1,0xFFFFFF);}// 判断是否识别到2号语音指令关灯if(asr.isDetectCmdID(11)){// 清空第10行文字防止文字重叠k10.canvas-canvasClear(10);k10.canvas-canvasText(检测语音命令,8,0x000000);k10.canvas-canvasText(关闭白色灯光,10,0x0000FF);k10.canvas-updateCanvas();// 关闭所有RGB彩灯颜色值0x000000代表熄灭k10.rgb-write(-1,0x000000);}// 延时2秒保持屏幕文字停留显示delay(2000);// 清空第6行及以下所有文字清除上一轮显示内容k10.canvas-canvasClear(6);}代码解读本程序运行在行空板 K10实现离线语音唤醒 语音指令控制彩灯先说唤醒词 “你好小新” 唤醒设备再说出 “开灯”“关灯”屏幕同步显示文字同时控制板载 RGB 灯亮灭。第一部分头文件与对象创建#includeasr.h#includeunihiker_k10.hasr.h离线语音识别驱动提供唤醒检测、自定义语音命令功能。unihiker_k10.h行空板硬件库用来操控屏幕、RGB 彩灯。UNIHIKER_K10 k10;ASR asr;k10行空板硬件实例管理屏幕、彩灯。asr语音识别实例管理收音、语音解析。uint8_tscreen_dir2;定义屏幕旋转方向数值 2 代表屏幕倒置。第二部分setup () 初始化函数上电只运行一次k10.begin();初始化行空板所有底层硬件开启串口、屏幕、外设总线。asr.asrInit(CONTINUOUS,CN_MODE,12000);语音模块初始化CONTINUOUS持续收音一直监听人声CN_MODE中文识别模式12000收音灵敏度数值越大抗噪音能力越强不容易误触发。while(asr._asrState0){delay(100);}等待语音模块启动完成。_asrState0代表模块正在加载语音模型未就绪。程序暂停循环等待每 100ms 查询一次状态避免硬件未就绪造成程序卡死。k10.initScreen(screen_dir);k10.creatCanvas();按照预设方向初始化 LCD 屏幕。创建画布所有文字先写入画布缓冲区再统一刷新到屏幕。asr.addASRCommand(01, “kai deng”);asr.addASRCommand(11, “guan deng”);预先添加自定义语音命令离线指令函数格式addASRCommand (指令编号拼音口令)编号 1拼音 kai deng 对应中文 “开灯”编号 2拼音 guan deng 对应中文 “关灯”。离线语音只能识别提前注册好的命令必须使用拼音填写汉字口令。第三部分loop () 无限主循环唤醒状态判断if(asr.isWakeUp())检测是否说出唤醒词 “你好小新”唤醒成功屏幕显示红色文字 “已唤醒行空板”未唤醒屏幕蓝色文字提示唤醒词。执行updateCanvas()把文字刷新到显示屏。2. 第一条语音指令开灯if(asr.isDetectCmdID(01))检测是否识别到 1 号指令 “开灯”在屏幕指定行打印提示文字刷新屏幕画面k10.rgb-write(-1, 0xFFFFFF);参数 -1控制所有板载 RGB 灯珠0xFFFFFF纯白色灯光点亮彩灯。3. 第二条语音指令关灯if(asr.isDetectCmdID(11))检测到 2 号指令 “关灯”先清空第 10 行文字防止文字重叠屏幕打印 “关闭白色灯光”0x000000RGB 灯熄灭。4. 屏幕刷新延时与清理delay(2000);k10.canvas-canvasClear(6);延时 2 秒让文字保持显示 2 秒钟清空第 6 行及下方所有文字清除本次显示内容准备下一轮循环。完整运行流程设备上电初始化主板与语音模块等待语音芯片加载完成预先录入两条语音命令开灯、关灯麦克风不间断监听唤醒词说出 “你好小新”设备唤醒屏幕弹出唤醒提示说出 “开灯”屏幕更新文字彩灯变白灯亮起说出 “关灯”屏幕切换文字彩灯熄灭文字停留 2 秒后自动清空继续等待下一次语音指令。Mind图形编程实验场景图与视频记录