120浏览
查看: 120|回复: 9

[K10教程] 【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车

[复制链接]
【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图1

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

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


【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图2

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】行空板K10之TT马达双驱五角轮语音小车

小车方案使用的铝制底板、TT电机与扩展板

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图2

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图1

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图3
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】行空板K10之TT马达双驱五角轮语音小车

主打:人工智能模块

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图1


语音识别与合成模块相关说明

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图2

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图3


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】行空板K10之TT马达双驱五角轮语音小车

辅助:屏幕显示相关积木

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图1

扩展板模块

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图3

LED控制模块

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图2

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】行空板K10之TT马达双驱五角轮语音小车

知识点:语音识别(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. 代码里的唤醒检测函数

  1. asr.isWakeUp()
复制代码

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

  1. asr._asrState
复制代码

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

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

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

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

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

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图1

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】行空板K10之TT马达双驱五角轮语音小车

【花雕动手做】行空板 K10 系列实验之TT马达差速双驱五角轮语音识别智能小车

实验开源代码

  1. // 行空板离线语音识别ASR库,提供唤醒词、语音指令识别功能
  2. #include "asr.h"
  3. // 行空板K10硬件底层库:屏幕、画布、字体等外设驱动
  4. #include "unihiker_k10.h"
  5. // Microbit电机拓展板驱动库,控制直流电机M1~M4
  6. #include <Microbit_Motor.h>
  7. // 全局对象实例化
  8. UNIHIKER_K10   k10;         // K10主控硬件对象
  9. ASR            asr;          // 离线语音识别对象
  10. uint8_t        screen_dir=2; // 屏幕方向参数 2:正向竖屏
  11. Microbit_Motor motorbit;     // 电机驱动对象
  12. // 上电初始化函数,通电仅运行一次
  13. void setup() {
  14.     // 初始化行空板全部硬件(屏幕、外设底层驱动)
  15.         k10.begin();
  16.     // 初始化语音识别模块
  17.     // CONTINUOUS:持续识别模式;CN_MODE:中文识别模式;10000:语音超时阈值(ms)
  18.         asr.asrInit(CONTINUOUS, CN_MODE, 10000);
  19.     // 阻塞等待语音模块初始化完成
  20.     // _asrState == 0 代表未就绪,循环等待直到初始化成功
  21.         while(asr._asrState == 0){delay(100);}
  22.     // 初始化屏幕方向
  23.         k10.initScreen(screen_dir);
  24.     // 创建画布,所有文字图形绘制载体
  25.         k10.creatCanvas();
  26.     // 注册语音指令:指令ID , 识别关键词(空格分隔拼音)
  27.     // ID+1 是库规范用法,ID从1开始计数
  28.         asr.addASRCommand(0+1, "qian jin");    // ID1 前进
  29.         asr.addASRCommand(1+1, "ting che");    // ID2 停车
  30.         asr.addASRCommand(2+1, "hou tui");      // ID3 后退
  31.         asr.addASRCommand(3+1, "you zhuan");   // ID4 右转
  32.         asr.addASRCommand(4+1, "zuo zhuan");    // ID5 左转
  33.         asr.addASRCommand(5+1, "zhuan quan");  // ID6 原地转圈
  34. }
  35. // 主循环,初始化完成后无限循环执行
  36. void loop() {
  37.     // 判断:是否检测到唤醒词【你好小新】
  38.         if (asr.isWakeUp()) {
  39.         // 唤醒成功,第7行打印红色提示文本
  40.                 k10.canvas->canvasText("  已唤醒行空板.......", 7, 0xFF0000);
  41.                 k10.canvas->updateCanvas();
  42.         }
  43.         else {
  44.         // 未唤醒,显示待机界面提示文字
  45.                 k10.canvas->canvasText(" 行空板K10系列实验", 3, 0x009900);
  46.                 k10.canvas->canvasText("唤醒词为“你好小新”", 5, 0x0000FF);
  47.                 k10.canvas->updateCanvas();
  48.         }
  49.     // 检测识别到【前进】指令
  50.         if (asr.isDetectCmdID(0+1)) {
  51.                 motorbit.motorRun(M1, CW, 200);   // M1正转
  52.                 motorbit.motorRun(M4, CCW, 200);  // M4反转
  53.         // 自定义位置文字:X坐标0,Y坐标210,黑色字体,24号中英文字体,透明度50,抗锯齿开启
  54.                 k10.canvas->canvasText("      K10 小车前进", 0, 210, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
  55.                 k10.canvas->updateCanvas();
  56.         }
  57.     // 检测识别到【停车】指令
  58.         if (asr.isDetectCmdID(1+1)) {
  59.                 motorbit.motorStop(ALL);          // 停止全部电机
  60.                 k10.canvas->canvasText("      K10 小车停止", 0, 210, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
  61.                 k10.canvas->updateCanvas();
  62.         }
  63.     // 检测识别到【后退】指令
  64.         if (asr.isDetectCmdID(2+1)) {
  65.                 k10.canvas->canvasText("      K10 小车后退", 0, 210, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
  66.                 k10.canvas->updateCanvas();
  67.                 motorbit.motorRun(M1, CCW, 120);  // M1反转
  68.                 motorbit.motorRun(M4, CW, 120);   // M4正转
  69.         }
  70.     // 检测识别到【右转】指令
  71.         if (asr.isDetectCmdID(3+1)) {
  72.                 k10.canvas->canvasText("      K10 小车右转", 0, 210, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
  73.                 k10.canvas->updateCanvas();
  74.                 motorbit.motorRun(M1, CCW, 200);
  75.                 motorbit.motorRun(M4, CCW, 200);
  76.                 delay(1000);       // 持续转动1秒
  77.                 motorbit.motorStop(ALL);
  78.         }
  79.     // 检测识别到【左转】指令
  80.         if (asr.isDetectCmdID(4+1)) {
  81.                 k10.canvas->canvasText("      K10 小车左转", 0, 210, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
  82.                 k10.canvas->updateCanvas();
  83.                 motorbit.motorRun(M1, CW, 200);
  84.                 motorbit.motorRun(M4, CW, 200);
  85.                 delay(1000);       // 持续转动1秒
  86.                 motorbit.motorStop(ALL);
  87.         }
  88.     // 检测识别到【原地转圈】指令
  89.         if (asr.isDetectCmdID(5+1)) {
  90.                 k10.canvas->canvasText("   K10小车原地转圈", 0, 210, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
  91.                 k10.canvas->updateCanvas();
  92.                 motorbit.motorRun(M1, CW, 200);
  93.                 motorbit.motorRun(M4, CW, 200);
  94.         }
  95.     // 清空画布第7行文字,防止唤醒提示文字残留
  96.         k10.canvas->canvasClear(7);
  97. }
复制代码





回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】行空板K10之TT马达双驱五角轮语音小车

# 行空板 K10 离线语音控制两轮差速小车 代码解读

一、头文件

  1. #include "asr.h"
  2. #include "unihiker_k10.h"
  3. #include <Microbit_Motor.h>
复制代码

1. `asr.h`:行空板离线语音识别库,支持唤醒词 + 自定义语音指令识别,**不需要联网**;
2. `unihiker_k10.h`:行空板 K10 底层硬件库,驱动屏幕、画布;
3. `Microbit_Motor.h`:microbit 电机拓展板驱动库,控制直流电机 M1/M2/M3/M4。

二、全局对象

  1. UNIHIKER_K10   k10;
  2. ASR            asr;
  3. uint8_t        screen_dir=2;
  4. Microbit_Motor motorbit;
复制代码

- `k10`:行空板主控硬件对象;
- `asr`:离线语音识别实例;
- `screen_dir=2`:屏幕正向竖屏;
- `motorbit`:四路电机驱动对象。

三、setup () 上电初始化(仅执行一次)

  1. void setup() {
  2.         k10.begin();
  3.         asr.asrInit(CONTINUOUS, CN_MODE, 10000);
  4.         while(asr._asrState == 0){delay(100);}
  5.         k10.initScreen(screen_dir);
  6.         k10.creatCanvas();
  7.         asr.addASRCommand(0+1, "qian jin");
  8.         asr.addASRCommand(1+1, "ting che");
  9.         asr.addASRCommand(2+1, "hou tui");
  10.         asr.addASRCommand(3+1, "you zhuan");
  11.         asr.addASRCommand(4+1, "zuo zhuan");
  12.         asr.addASRCommand(5+1, "zhuan quan");
  13. }
复制代码

逐行解析:

1. `k10.begin()`:初始化行空板所有硬件;
2. `asr.asrInit(CONTINUOUS, CN_MODE, 10000)`
   - `CONTINUOUS`:持续监听模式
   - `CN_MODE`:中文识别模式
   - `10000`:语音会话超时时间(毫秒)
3. `while(asr._asrState == 0)` 阻塞等待语音模块初始化完成,初始化不成功不往下执行;
4. 初始化屏幕方向、创建绘图画布;
5. `asr.addASRCommand(指令ID,拼音)`
注册语音指令,**识别关键词必须填写拼音,不能写汉字**;

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图1

> 默认唤醒词:**你好小新**
> 规则:必须先说唤醒词,再下达运动指令,语音模块才会识别命令。

四、loop () 无限主循环

  1. void loop() {
  2.         if (asr.isWakeUp()) {
  3.                 k10.canvas->canvasText("  已唤醒行空板.......", 7, 0xFF0000);
  4.                 k10.canvas->updateCanvas();
  5.         }
  6.         else {
  7.                 k10.canvas->canvasText(" 行空板K10系列实验", 3, 0x009900);
  8.                 k10.canvas->canvasText("唤醒词为“你好小新”", 5, 0x0000FF);
  9.                 k10.canvas->updateCanvas();
  10.         }
复制代码

- `asr.isWakeUp()`:判断是否识别到唤醒词【你好小新】
- 唤醒成功:屏幕第 7 行红色文字提示;
- 未唤醒:显示待机提示,告知用户唤醒词。

  1. if (asr.isDetectCmdID(0+1)) {
  2.                 motorbit.motorRun(M1, CW, 200);
  3.                 motorbit.motorRun(M4, CCW, 200);
  4.                 k10.canvas->canvasText("      K10 小车前进", 0, 210, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
  5.                 k10.canvas->updateCanvas();
  6.         }
复制代码

识别到【前进】:M1 正转,M4 反转,小车向前直行。

> 文字语法:canvasText (x 坐标,y 坐标,颜色,字体,透明度,抗锯齿),自由位置文字,不按行排布。

  1. if (asr.isDetectCmdID(1+1)) {
  2.                 motorbit.motorStop(ALL);
  3.                 k10.canvas->canvasText("      K10 小车停止", 0, 210, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
  4.                 k10.canvas->updateCanvas();
  5.         }
复制代码

识别【停车】:停止全部电机。

  1. if (asr.isDetectCmdID(2+1)) {
  2.                 k10.canvas->canvasText("      K10 小车后退", 0, 210, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
  3.                 k10.canvas->updateCanvas();
  4.                 motorbit.motorRun(M1, CCW, 120);
  5.                 motorbit.motorRun(M4, CW, 120);
  6.         }
复制代码


识别【后退】:电机反向运转,速度 120(比前进慢)。

  1. if (asr.isDetectCmdID(3+1)) {
  2.                 k10.canvas->canvasText("      K10 小车右转", 0, 210, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
  3.                 k10.canvas->updateCanvas();
  4.                 motorbit.motorRun(M1, CCW, 200);
  5.                 motorbit.motorRun(M4, CCW, 200);
  6.                 delay(1000);
  7.                 motorbit.motorStop(ALL);
  8.         }
复制代码

识别【右转】:原地转向,持续 1 秒后自动停机。

  1. if (asr.isDetectCmdID(4+1)) {
  2.                 k10.canvas->canvasText("      K10 小车左转", 0, 210, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
  3.                 k10.canvas->updateCanvas();
  4.                 motorbit.motorRun(M1, CW, 200);
  5.                 motorbit.motorRun(M4, CW, 200);
  6.                 delay(1000);
  7.                 motorbit.motorStop(ALL);
  8.         }
复制代码

识别【左转】:原地转向,持续 1 秒自动停机。

  1. if (asr.isDetectCmdID(5+1)) {
  2.                 k10.canvas->canvasText("   K10小车原地转圈", 0, 210, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
  3.                 k10.canvas->updateCanvas();
  4.                 motorbit.motorRun(M1, CW, 200);
  5.                 motorbit.motorRun(M4, CW, 200);
  6.         }
复制代码

识别【原地转圈】:电机持续旋转,**不会自动停止**。

  1. k10.canvas->canvasClear(7);
  2. }
复制代码

循环末尾清空屏幕第 7 行文字,避免唤醒提示文字长期残留叠加。

# 功能总览

**离线语音两轮差速小车控制系统**
工作流程:
上电 → 语音模块初始化完成 → 持续监听唤醒词

1. 说出:**你好小新** → 系统唤醒;
2. 紧接着说出语音指令,小车执行动作。

指令清单

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图2

# 核心要点与代码缺陷【实操重点】

## 1、硬件底盘

仅使用 M1、M4 两路电机,**适配两轮差速小车**
不能直接用于三轮全向轮 / 四轮麦克纳姆轮。

## 2、阻塞问题

左转、右转内部使用 `delay(1000)`
delay 运行期间整个程序暂停,**语音识别暂时失效**,这段时间无法接收新指令。

## 3、运动模式区分

- 左转 / 右转:点动,1 秒自动停
- 前进 / 后退 / 转圈:持续运行,必须语音下达【停车】才能停机

## 4、语音识别关键规则

指令只能用拼音注册;必须先唤醒,否则所有指令无效;离线识别,不需要 WiFi、互联网。

## 5、两种屏幕文字接口区别

1. `canvasText(文字,行数,颜色)`:按固定行排版;
2. `canvasText(x,y,颜色,字体,...)`:自由坐标绘制,适合状态标题。

# 运行必备条件

1. Mind + 扩展库:unihiker\_k10、Microbit\_Motor、asr 离线语音库
2. 开发板:行空板 K10(esp32s3bit)
3. 硬件接线:左右两轮电机分别接 M1、M4。

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】行空板K10之TT马达双驱五角轮语音小车

Mind+图形编程

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图1
   【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图2
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】行空板K10之TT马达双驱五角轮语音小车

实验场景图与视频记录

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图1

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图2

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图3
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】行空板K10之TT马达双驱五角轮语音小车

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图2

【花雕动手做】行空板 K10 之TT马达双驱五角轮语音小车图1



【行空板 K10 系列实验之TT马达差速双驱五角轮离线语音识别智能小车 #行空板K10 #人工智能技术   #语音识别 #手工机械爱好者 #diy机器人】

https://www.bilibili.com/video/BV1ok3E61Evv/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987








回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2026 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail