【花雕动手做】行空板 K10 系列实验之人工智能通过唤醒词“你好小新”启动语音识别
2026/6/26 21:51:41 网站建设 项目流程


行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板,100%采用国产芯片,知识产权自主可控,符合信息科技课程中编程学习、物联网及人工智能等教学需求。该板集成2.8寸LCD彩屏、WiFi蓝牙、摄像头、麦克风、扬声器、RGB指示灯、多种传感器及丰富的扩展接口。凭借高度集成的板载资源,教学过程中无需额外连接其他设备,便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等AI人工智能项目。

主要特点
集成摄像头&内置算法,可进行离线图像检测
集成麦克风&内置算法,可进行离线语音识别
集成扬声器&内置算法,可进行离线语音合成
2.8寸彩色屏幕,数据展示更清晰
集成度高,利于教学
接口丰富,兼容软件多,扩展性好


主打:人工智能模块

语音识别相关说明

辅助:屏幕显示相关积木


LED控制模块

知识点:语音识别(ASR)
一、什么是语音识别(ASR)
语音识别英文缩写是 ASR(Automatic Speech Recognition),简单来说:让单片机、电脑听懂人说话,把麦克风采集到的声音信号,转换成文字或者指令。
分为两大类:
在线语音识别:需要联网,把声音上传到云端服务器解析,识别词汇量巨大;
离线语音识别:不需要 WiFi、不需要网络,语音模型预先存放在芯片内部,本地直接处理声音,适合单片机、行空板、Arduino 这类硬件。
你代码里使用的就是离线本地 ASR 语音模块。

二、离线语音模块核心功能(对应你 K10 代码)

  1. 两种工作模式
    (1)持续拾音模式 CONTINUOUS
    麦克风一直处于收音状态,不间断监听声音,专门用来做语音唤醒。
    对应代码:asr.asrInit(CONTINUOUS, CN_MODE, 12000);
    (2)按键触发模式
    按下按键才开始录音识别,省电,一般用于命令词识别。
  2. 语言模式 CN_MODE
    CN_MODE:中文模式,只识别汉语;
    EN_MODE:英文模式,识别英语。
    本程序开启中文识别,用来识别唤醒词:你好小新。
  3. 灵敏度阈值(第三个参数 12000)
    数值代表声音检测灵敏度:
    数值越大:越不容易被环境杂音误触发,抗干扰强;
    数值越小:轻声说话就能识别,但是容易被噪音误唤醒。
    12000 属于中等灵敏度,适合室内环境使用。

三、语音唤醒技术(本项目核心)

  1. 唤醒词机制
    唤醒词就是开门密码。模块平时处于低功耗监听状态,只监听这一句话,其他普通对话会直接忽略。
    只有说出预设唤醒词(你好小新),模块才会被 “唤醒”,进入待命状态,之后才可以识别后续控制指令。
  2. 代码里的唤醒检测函数
asr.isWakeUp()

检测到唤醒词,函数返回 true;
没有检测到唤醒词,返回 false。
3. 模块状态标志

asr._asrState

值 = 0:语音模块正在启动、模型加载中,暂时无法工作;
值 ≠ 0:初始化完成,可以正常收音识别。
程序中用 while 循环等待模块就绪,避免硬件未启动造成程序崩溃。

四、硬件运行完整工作流程
上电初始化行空板主板与显示屏;
启动 ASR 语音芯片,加载离线语音模型;
等待语音模块就绪;
屏幕打印实验标题;
模块持续收音,安静待机,只监听唤醒词;
使用者说出:你好小新;
程序捕捉到唤醒信号,屏幕切换文字提示 “已唤醒行空板”;
没有听到唤醒词,则一直显示唤醒词提示语句;
每秒刷新一次屏幕,并清除文字,防止画面重叠。

五、离线语音识别优缺点
优点
完全离线,不用网络、不用流量;
响应速度极快,话音刚落立刻识别;
单片机就能驱动,成本低,非常适合机器人、智能音箱、门禁、实验教具;
不受网络波动影响,设备在野外也能正常使用。
缺点
词汇数量有限,一般只能预先录入几十条唤醒词 + 控制指令;
对嘈杂环境比较敏感,噪音大会出现识别失败;
无法自由识别任意一句话,只能识别预先烧录好的词语。

六、拓展功能(可以在现有代码上升级)
多级指令识别
唤醒之后,再识别 “开灯”“关灯”“前进”“后退”,控制电机与 LED 灯;
自定义唤醒词
修改库文件,把 “你好小新” 改成 “你好行空板”;
多句话语音交互
唤醒后连续识别多条语音命令;
调节收音灵敏度,解决误唤醒或者识别不到声音的问题。

七、容易遇到的常见问题
识别不到唤醒词
调低阈值数值,靠近麦克风,降低环境噪音。
无缘无故自动唤醒(误触发)
把灵敏度数值调高,提高抗干扰能力。
程序卡死在初始化循环
语音模块接线异常,串口通信断开,导致模块始终处于未就绪状态。





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

// 引入硬件驱动头文件:语音识别ASR模块#include"asr.h"// 引入行空板K10核心驱动库#include"unihiker_k10.h"// 实例化硬件对象,后续调用硬件功能都依靠这两个对象UNIHIKER_K10 k10;// 行空板K10主控对象ASR asr;// 语音识别模块对象// 屏幕方向参数// 0~3代表屏幕四个旋转方向,2为常用倒置方向uint8_tscreen_dir=2;// Arduino框架初始化函数,只在上电/重启时执行一次voidsetup(){// 初始化行空板K10所有底层硬件(串口、IO、显示屏、外设总线等)k10.begin();// 初始化语音识别模块// 参数1:CONTINUOUS = 持续识别模式// 参数2:CN_MODE = 中文识别模式// 参数3:12000 = 语音检测阈值,数值越大越不容易误触发asr.asrInit(CONTINUOUS,CN_MODE,12000);// 阻塞等待:循环检测,直到语音模块初始化完成// _asrState == 0 代表模块正在初始化未就绪while(asr._asrState==0){delay(100);// 每100毫秒检测一次,避免CPU空转占用资源}// 根据预设方向初始化显示屏k10.initScreen(screen_dir);// 创建画布对象,所有文字、图形都绘制在这块画布上k10.creatCanvas();// 在画布上绘制第一行文字// 参数说明:文字内容, 字体大小, 十六进制颜色(RGB)k10.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);}

代码解读

一、整体程序框架
这是运行在 ** 行空板 K10(UNIHIKER_K10)** 上的 Arduino 程序,功能:
开启离线语音唤醒,监测唤醒词「你好小新」,并在 LCD 屏幕切换显示文字。
程序分为两大块:
setup():上电只运行一次,完成硬件初始化 + 屏幕标题显示。
loop():无限循环,持续检测语音唤醒状态,刷新屏幕文字。

二、逐段代码解读

  1. 头文件与对象创建
#include"asr.h"#include"unihiker_k10.h"

asr.h:离线语音识别库,提供语音初始化、唤醒检测功能。
unihiker_k10.h:行空板 K10 主板驱动库,控制显示屏。

UNIHIKER_K10 k10;ASR asr;

创建主板对象 k10,用来操控屏幕;
创建语音识别对象 asr,用来接收麦克风语音。

uint8_tscreen_dir=2;

定义屏幕旋转参数,值为 2,设置屏幕倒置显示。
2. setup () 初始化函数(只执行 1 次)

k10.begin();

启动行空板底层硬件,初始化串口、显示屏、外设总线。

asr.asrInit(CONTINUOUS,CN_MODE,12000);

语音模块初始化,3 个参数:
CONTINUOUS:持续拾音模式,麦克风一直收音;
CN_MODE:仅识别中文;
12000:语音灵敏度阈值,数值越大越不容易误唤醒。

while(asr._asrState==0){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+图形编程


实验场景图与视频记录


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询