【花雕动手做】行空板 K10 系列实验之TT马达双路差速智能小车方案三号特色底盘 行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板100%采用国产芯片知识产权自主可控符合信息科技课程中编程学习、物联网及人工智能等教学需求。该板集成2.8寸LCD彩屏、WiFi蓝牙、摄像头、麦克风、扬声器、RGB指示灯、多种传感器及丰富的扩展接口。凭借高度集成的板载资源教学过程中无需额外连接其他设备便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等AI人工智能项目。主要特点集成摄像头内置算法可进行离线图像检测集成麦克风内置算法可进行离线语音识别集成扬声器内置算法可进行离线语音合成2.8寸彩色屏幕数据展示更清晰集成度高利于教学接口丰富兼容软件多扩展性好小车方案三使用的特色底板、TT电机与扩展板小车动力电池方案使用移动电源主打人工智能模块语音识别合成相关说明辅助屏幕显示相关积木接脚 IO 扩展模块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 系列实验之TT马达双路差速智能小车方案三号特色底盘实验开源代码// 引入离线语音识别库asr.h提供语音唤醒、拼音指令识别功能#includeasr.h// 引入IOBOX专用电机驱动库封装双路电机调速、转向、停止API简化小车控制#includeIOBOX_Motor.h// 行空板K10主板底层驱动库用于屏幕初始化、画布文字绘制#includeunihiker_k10.h// 硬件对象实例化UNIHIKER_K10 k10;// 行空板主控对象统一管理LCD屏幕、系统底层硬件ASR asr;// 离线语音识别模块对象处理麦克风收音、人声解析uint8_tscreen_dir2;// 屏幕旋转参数数值2代表屏幕倒置显示IOBOX_Motor motor_ib;// IOBOX电机驱动实例控制小车M1左电机、M2右电机//// setup() 上电初始化函数设备开机/重启仅执行1次// 作用初始化主板、语音模块、屏幕提前注册5条小车语音控制指令//voidsetup(){// 初始化行空板全部底层硬件串口、I2C总线、屏幕外设、IO资源k10.begin();// 初始化离线语音识别模块三大参数// CONTINUOUS持续收音模式麦克风不间断监听环境人声// CN_MODE中文识别模式仅识别中文拼音口令// 12000收音灵敏度阈值数值越大抗环境噪音、误唤醒能力越强asr.asrInit(CONTINUOUS,CN_MODE,12000);// 阻塞等待语音模块加载语音模型完成// _asrState 0 代表语音模块未就绪每100ms循环检测一次状态避免未初始化调用报错while(asr._asrState0){delay(100);}// 根据预设screen_dir参数初始化LCD显示屏k10.initScreen(screen_dir);// 创建屏幕绘图画布缓冲区所有文字先写入画布缓存统一刷新到实体屏幕k10.creatCanvas();// 批量注册5条离线语音小车控制指令拼音匹配识别asr.addASRCommand(01,qian jin);// ID1 语音口令前进asr.addASRCommand(11,ting che);// ID2 语音口令停车asr.addASRCommand(21,hou tui);// ID3 语音口令后退asr.addASRCommand(31,you zhuan);// ID4 语音口令右转asr.addASRCommand(41,zuo zhuan);// ID5 语音口令左转}//// loop() 主循环函数初始化完成后无限循环运行// 作用实时检测语音唤醒、识别语音口令调用电机库控制小车同步屏幕状态文字//voidloop(){// 语音唤醒判断检测麦克风是否识别到唤醒词【你好小新】if(asr.isWakeUp()){// 唤醒成功画布第6行输出红色提示文字k10.canvas-canvasText(已唤醒行空板小车.......,6,0xFF0000);// 将画布缓存内容刷新输出到LCD屏幕k10.canvas-updateCanvas();}else{// 未唤醒待机状态第4行输出蓝色文字提示用户唤醒关键词k10.canvas-canvasText(唤醒词为“你好小新”,4,0x0000FF);k10.canvas-updateCanvas();}// 语音指令1qian jin 小车前进if(asr.isDetectCmdID(01)){// motorRun(电机通道, 转向, 速度)// motor_ib.ALL同时控制M1、M2两路全部电机// motor_ib.CW电机顺时针同向转动小车直线向前行驶// 200速度参数范围0~255数值越大转速越快200为中高速motor_ib.motorRun(motor_ib.ALL,motor_ib.CW,200);// 全屏居中24号黑色大字显示小车状态// 参数X坐标、Y坐标、文字颜色、中英文字体、字号、自动换行开关k10.canvas-canvasText(K10 小车前进,0,180,0x000000,k10.canvas-eCNAndENFont24,50,true);k10.canvas-updateCanvas();}// 语音指令2ting che 小车全部停车刹车if(asr.isDetectCmdID(11)){// motorStop(电机通道)切断对应电机输出电机断电锁死小车立刻停止motor_ib.motorStop(motor_ib.ALL);k10.canvas-canvasText(K10 小车停止,0,180,0x000000,k10.canvas-eCNAndENFont24,50,true);k10.canvas-updateCanvas();}// 语音指令3hou tui 小车直线后退if(asr.isDetectCmdID(21)){// motor_ib.CCW电机逆时针同向转动小车向后倒退速度200motor_ib.motorRun(motor_ib.ALL,motor_ib.CCW,200);k10.canvas-canvasText(K10 小车后退,0,180,0x000000,k10.canvas-eCNAndENFont24,50,true);k10.canvas-updateCanvas();}// 语音指令4you zhuan 小车原地右转if(asr.isDetectCmdID(31)){// 差速转向逻辑左轮M1顺时针、右轮M2逆时针反向转动实现原地向右转向motor_ib.motorRun(motor_ib.M1,motor_ib.CW,200);motor_ib.motorRun(motor_ib.M2,motor_ib.CCW,200);k10.canvas-canvasText(K10 小车右转,0,180,0x000000,k10.canvas-eCNAndENFont24,50,true);k10.canvas-updateCanvas();}// 语音指令5zuo zhuan 小车原地左转if(asr.isDetectCmdID(41)){// 差速转向逻辑左轮M1逆时针、右轮M2顺时针反向转动实现原地向左转向motor_ib.motorRun(motor_ib.M1,motor_ib.CCW,200);motor_ib.motorRun(motor_ib.M2,motor_ib.CW,200);k10.canvas-canvasText(K10小车左转,0,180,0x000000,k10.canvas-eCNAndENFont24,50,true);k10.canvas-updateCanvas();}// 清空画布第6行及下方所有文字清除上一轮状态提示防止新旧文字重叠残影k10.canvas-canvasClear(6);}代码解读一、项目整体功能概述本程序运行在行空板 K10搭配离线 ASR 语音识别模块、IOBOX 双路电机驱动实现语音遥控两轮差速小车。唤醒口令固定你好小新支持 5 种语音动作指令前进、停车、后退、原地右转、原地左转IOBOX 电机库封装电机控制自带 PWM 调速屏幕用大号字体实时显示小车运行状态。二、头文件与硬件对象逐段解析#includeasr.h#includeIOBOX_Motor.h#includeunihiker_k10.hasr.h离线语音识别专用库提供持续收音、唤醒检测、自定义拼音指令识别功能IOBOX_Motor.hIOBOX 电机驱动扩展库封装双路直流电机的正反转、PWM 调速、刹车停止无需手动操作 IO 电平unihiker_k10.h行空板 K10 底层驱动库负责 LCD 屏幕初始化、画布文字绘制、硬件底层初始化。UNIHIKER_K10 k10;ASR asr;uint8_tscreen_dir2;IOBOX_Motor motor_ib;k10行空板主控对象统一管理屏幕显示、系统硬件总线asr语音识别模块实例处理麦克风收音与人声解析screen_dir2屏幕旋转参数数字 2 代表屏幕倒置显示motor_ibIOBOX 电机驱动实例控制小车左电机 M1、右电机 M2。三、setup () 上电初始化函数仅开机执行 1 次k10.begin();初始化行空板全部底层硬件包括串口、I2C 总线、屏幕、外设资源。asr.asrInit(CONTINUOUS,CN_MODE,12000);while(asr._asrState0){delay(100);}初始化语音模块CONTINUOUS持续收音模式麦克风不间断监听人声CN_MODE中文识别模式仅识别中文拼音口令12000收音灵敏度数值越大抗环境噪音、防误唤醒能力越强循环等待语音模块加载语音模型_asrState0代表模块未就绪每 100ms 检测一次防止未初始化调用报错。k10.initScreen(screen_dir);k10.creatCanvas();按倒置参数点亮 LCD 屏幕创建画布缓冲区所有文字先存入缓存再统一刷新到屏幕。asr.addASRCommand(01,qian jin);// ID1 前进asr.addASRCommand(11,ting che);// ID2 停车asr.addASRCommand(21,hou tui);// ID3 后退asr.addASRCommand(31,you zhuan);// ID4 右转asr.addASRCommand(41,zuo zhuan);// ID5 左转批量注册 5 条离线语音指令离线语音模块仅能识别提前录入的拼音口令。四、loop () 无限主循环实时监听语音指令唤醒状态判断逻辑if(asr.isWakeUp())函数isWakeUp()用于检测是否识别唤醒词「你好小新」唤醒成功屏幕第 6 行红色文字提示 “已唤醒行空板小车”未唤醒待机屏幕第 4 行蓝色文字提示唤醒关键词updateCanvas()将画布缓存文字刷新输出到实体屏幕。IOBOX 电机核心函数说明motorRun(通道, 转向, 速度)通道M1左电机、M2右电机、ALL同时控制两路电机转向CW顺时针、CCW逆时针速度范围0~255数值越大转速越快本程序统一使用 200 中高速motorStop(通道)切断电机输出电机断电刹车小车立即静止。每条语音指令动作拆解1qian jin 前进motor_ib.motorRun(motor_ib.ALL,motor_ib.CW,200);左右电机同时顺时针同向转动小车直线向前屏幕显示 “K10 小车前进”。2ting che 停车motor_ib.motorStop(motor_ib.ALL);两路电机全部断电刹车小车立刻停止屏幕显示 “K10 小车停止”。3hou tui 后退motor_ib.motorRun(motor_ib.ALL,motor_ib.CCW,200);左右电机同时逆时针同向转动小车直线后退屏幕显示 “K10 小车后退”。4you zhuan 原地右转motor_ib.motorRun(motor_ib.M1,motor_ib.CW,200);motor_ib.motorRun(motor_ib.M2,motor_ib.CCW,200);差速转向逻辑左轮顺时针、右轮逆时针反向转动小车原地持续右转屏幕同步提示。5zuo zhuan 原地左转motor_ib.motorRun(motor_ib.M1,motor_ib.CCW,200);motor_ib.motorRun(motor_ib.M2,motor_ib.CW,200);差速转向逻辑左轮逆时针、右轮顺时针反向转动小车原地持续左转屏幕同步提示。4. 屏幕清理语句k10.canvas-canvasClear(6);清空画布第 6 行及下方所有文字清除上一轮运行状态避免新旧文字重叠产生残影。五、小车运动逻辑对照表六、完整设备运行流程设备上电初始化主板硬件、语音模块循环等待语音芯片加载完成初始化倒置 LCD 屏幕创建绘图画布录入 5 条小车语音控制口令麦克风不间断持续监听唤醒词 “你好小新”说出唤醒词解锁语音控制权限屏幕红色文字提示已唤醒下达对应语音口令IOBOX 驱动控制小车执行动作屏幕同步大字显示当前运行状态循环自动清空屏幕下方文字持续等待下一条语音指令。Mind图形编程实验场景图与视频记录【【花雕动手做】行空板 K10 系列实验之TT马达双路差速智能小车方案三号特色底盘#行空板K10 #DIY小车 #人工智能机器人 #语音识别控制系统】https://www.bilibili.com/video/BV1jfTp62EKg/?share_sourcecopy_webvd_source371a292a55e5ca9be994cbb4a86cc987