【花雕动手做】行空板 K10 系列实验之人工智能通过唤醒词“你好小新”启动语音识别

📅 2026/6/26 21:52:16
【花雕动手做】行空板 K10 系列实验之人工智能通过唤醒词“你好小新”启动语音识别
行空板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 系列实验之人工智能通过唤醒词“你好小新”启动语音识别实验开源代码// 引入硬件驱动头文件语音识别ASR模块#includeasr.h// 引入行空板K10核心驱动库#includeunihiker_k10.h// 实例化硬件对象后续调用硬件功能都依靠这两个对象UNIHIKER_K10 k10;// 行空板K10主控对象ASR asr;// 语音识别模块对象// 屏幕方向参数// 0~3代表屏幕四个旋转方向2为常用倒置方向uint8_tscreen_dir2;// Arduino框架初始化函数只在上电/重启时执行一次voidsetup(){// 初始化行空板K10所有底层硬件串口、IO、显示屏、外设总线等k10.begin();// 初始化语音识别模块// 参数1CONTINUOUS 持续识别模式// 参数2CN_MODE 中文识别模式// 参数312000 语音检测阈值数值越大越不容易误触发asr.asrInit(CONTINUOUS,CN_MODE,12000);// 阻塞等待循环检测直到语音模块初始化完成// _asrState 0 代表模块正在初始化未就绪while(asr._asrState0){delay(100);// 每100毫秒检测一次避免CPU空转占用资源}// 根据预设方向初始化显示屏k10.initScreen(screen_dir);// 创建画布对象所有文字、图形都绘制在这块画布上k10.creatCanvas();// 在画布上绘制第一行文字// 参数说明文字内容, 字体大小, 十六进制颜色RGBk10.canvas-canvasText(行空板K10系列实验,4,0x000000);// 绘制第二行文字青色k10.canvas-canvasText( 唤醒语音识别,6,0x339999);// 把画布内容刷新输出到LCD屏幕不调用则画面不会更新k10.canvas-updateCanvas();}// Arduino主循环函数初始化完成后无限循环反复执行voidloop(){// 判断是否检测到唤醒词// isWakeUp() 内部默认触发关键词你好小新if(asr.isWakeUp()){// 唤醒成功打印红色提示文字字号8k10.canvas-canvasText(已唤醒行空板.......,8,0xFF0000);// 刷新屏幕显示最新文字k10.canvas-updateCanvas();}else{// 未被唤醒显示蓝色唤醒词提示k10.canvas-canvasText(唤醒词为“你好小新”,10,0x0000FF);k10.canvas-updateCanvas();}// 延时1秒降低刷新频率减少屏幕闪烁与资源消耗delay(1000);// 清除从第8行开始的所有文字内容防止上下两行文字重叠k10.canvas-canvasClear(8);}代码解读一、整体程序框架这是运行在 ** 行空板 K10UNIHIKER_K10** 上的 Arduino 程序功能开启离线语音唤醒监测唤醒词「你好小新」并在 LCD 屏幕切换显示文字。程序分为两大块setup()上电只运行一次完成硬件初始化 屏幕标题显示。loop()无限循环持续检测语音唤醒状态刷新屏幕文字。二、逐段代码解读头文件与对象创建#includeasr.h#includeunihiker_k10.hasr.h离线语音识别库提供语音初始化、唤醒检测功能。unihiker_k10.h行空板 K10 主板驱动库控制显示屏。UNIHIKER_K10 k10;ASR asr;创建主板对象 k10用来操控屏幕创建语音识别对象 asr用来接收麦克风语音。uint8_tscreen_dir2;定义屏幕旋转参数值为 2设置屏幕倒置显示。2. setup () 初始化函数只执行 1 次k10.begin();启动行空板底层硬件初始化串口、显示屏、外设总线。asr.asrInit(CONTINUOUS,CN_MODE,12000);语音模块初始化3 个参数CONTINUOUS持续拾音模式麦克风一直收音CN_MODE仅识别中文12000语音灵敏度阈值数值越大越不容易误唤醒。while(asr._asrState0){delay(100);}_asrState 0 代表语音模块正在启动、未就绪程序卡在循环里每隔 100ms 检测一次直到模块初始化完成才往下运行。作用防止屏幕还没启动就调用语音功能避免程序异常。k10.initScreen(screen_dir);k10.creatCanvas();按照设定方向点亮 LCD 屏幕创建绘图画布所有文字都绘制在画布上。k10.canvas-canvasText(行空板K10系列实验,4,0x000000);k10.canvas-canvasText( 唤醒语音识别,6,0x339999);画布文字函数格式canvasText(文字内容, 字号, 颜色值)k10.canvas-updateCanvas();把画布内容刷新到实体屏幕。只写字不调用这条指令屏幕不会有任何画面。3. loop () 主循环反复无限执行if(asr.isWakeUp())核心判断语句isWakeUp() 函数会自动监听麦克风检测有没有说出唤醒词「你好小新」。检测到唤醒词 → 返回 true进入 if 分支没有听到唤醒词 → 返回 false进入 else 分支。分支 1被语音唤醒k10.canvas-canvasText(已唤醒行空板.......,8,0xFF0000);k10.canvas-updateCanvas();屏幕打印红色提示文字刷新画面。分支 2未唤醒k10.canvas-canvasText(唤醒词为“你好小新”,10,0x0000FF);k10.canvas-updateCanvas();屏幕打印蓝色文字提示唤醒关键词。delay(1000);暂停 1 秒钟降低屏幕刷新频率减少 CPU 占用。k10.canvas-canvasClear(8);清除画布第 8 行及以下所有文字防止新旧文字重叠粘连。三、完整运行流程开发板上电初始化主板硬件 等待语音模块启动完毕屏幕显示两行固定标题进入无限循环时刻监听麦克风听到 “你好小新”屏幕显示 “已唤醒行空板”没听到唤醒词屏幕显示唤醒词提示等待 1 秒后清空下方文字下一轮循环重新绘制。Mind图形编程实验场景图与视频记录