在这里插入图片描述
在这里插入图片描述

行空板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 灯;
自定义唤醒词
修改库文件,把 “你好小新” 改成 “你好行空板”;
多句话语音交互
唤醒后连续识别多条语音命令;
调节收音灵敏度,解决误唤醒或者识别不到声音的问题。

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

在这里插入图片描述

在这里插入图片描述
知识点:直流无刷减速电机控制
一、电机基础结构与优势

  1. 整体组成
    分为两大核心部分:无刷电机本体 + 全金属减速箱 + 内置驱动板
    无刷电机:前后双滚珠轴承,运转顺滑、噪音低、寿命长;无碳刷结构,不会产生碳粉、火花。
    减速箱:五四钢精密齿轮,滚齿加工 + 热处理强化,耐磨承重,扭矩大幅提升,适合机器人关节(头、颈、手臂、行走脚)。
    内置驱动板:无需额外外置驱动模块,单 DC12V 一组电源即可供电,大幅简化接线。
  2. 对比有刷减速电机核心优点
    寿命更长:无碳刷磨损,长期连续工作不易损坏;
    电磁干扰小:无换向火花,不会干扰语音模块、单片机信号;
    功率密度高、发热更低;
    自带调速、正反转、刹车、两相 AB 相位反馈,功能一体化。

二、电气硬件参数(雅腾 12V 机器人无刷减速电机)
供电电压:统一 DC12V,仅需一组稳压电源供电;
调速方式:电压调速,调速控制线电压区间 0.4V~4.6V,电压越高转速越快;
控制功能:支持正反转切换、电平急停刹车;
信号反馈:AB 两相脉冲输出,相位差 90°,可简单测速、判断转向(非高精度独立编码器);
轴承:前后双滚珠支撑,负载能力强;
减速比:多款规格,分机器人头部、颈部、手臂、行走脚专用型号。

三、控制线
两种基础接线方案
1、最简固定转速运转
红线接 12V+,黑线接 12V-;白线串联 10K 电阻接到黑线,电机以固定速度持续转动。
2、电位器无级调速
自备 10K 固定电阻 + 10K 电位器,分压电路给白线提供 0.4~4.6V 可变电压,手动调节转速。

四、三种控制实现方案(结合行空板 K10 )
方案 1:IO 电平控制转向
硬件搭配:行空板 + I2C IO 扩展模块;
控制逻辑:扩展板输出高低电平接入电机蓝线(方向线);
IO 高电平悬空等效 → 电机正转
IO 低电平接 GND → 电机反转
配套交互:ASR 离线语音识别,说出 “正转 / 反转”,单片机自动切换 IO 电平,屏幕文字 + RGB 灯同步提示状态。
特点:接线简单、程序逻辑易懂,适合教学机器人关节控制;缺点:仅切换转向,无法调速。

方案 2:PWM 电压调速 + 转向双控制(进阶方案)
行空板 PWM 输出引脚,搭配分压电路,给电机白线输出可调 0.4~4.6V 模拟电压,实现无级调速;
另一路 IO 控制蓝线切换正反转;
语音指令可拓展:加速、减速、正转、反转、停止。

方案 3:闭环测速控制(机器人精准动作)
读取青线 A、棕线 B 两相脉冲,单片机统计脉冲数量计算转速、旋转角度,实现精准定位:
机械臂旋转固定角度;
行走电机匀速前进,不会左右跑偏。

五、内置驱动核心功能说明
正反转控制
依靠方向控制线电平切换,电机绕组换相,实现平稳换向,无冲击卡顿;
电压调速
通过改变调速脚电压,驱动板调节三相输出功率,连续平滑调速,无档位顿挫;
急停刹车
刹车线拉低接地,驱动板短接电机线圈,产生阻尼力矩,瞬间锁止输出轴,机器人停止姿态稳定;
两相相位反馈
电机每转一圈输出固定脉冲,仅用于基础测速,不支持高精度角度定位。

六、供电与安全注意事项
电源要求:必须使用12V 稳压开关电源,避免电池电压波动导致转速不稳、驱动损坏;
接线红线黑线严禁反接,一旦接反内部驱动芯片瞬间击穿;
电机负载不能超过额定扭矩,长时间堵转会发热烧毁驱动;
库存电机外壳存在轻微氧化,不影响电气性能,外观要求高需谨慎选购;
减速齿轮定期补充润滑黄油,减少噪音、延长齿轮寿命。

七、典型应用场景
教育智能机器人:头部旋转、脖子俯仰、机械臂抓取、底盘行走驱动;
小型云台、摄像头转向机构;
小型自动化传送、简易物料分拣设备。

八、整体控制流程
行空板上电初始化 ASR 语音模块、I2C 扩展 IO;
麦克风持续监听唤醒词 “你好小新”;
唤醒后识别语音指令 “正转 / 反转”;
单片机控制扩展 IO 输出对应电平给到电机方向控制线;
电机切换旋转方向,屏幕打印状态文字,RGB 彩灯区分正反转;
拓展升级:可增加 PWM 调速、刹车停止、脉冲测速闭环控制。

【花雕动手做】行空板 K10 系列实验之语音控制3630机器人电机的启动刹车、高低速与正反转向
实验开源代码

// 引入离线语音识别库,提供ASR唤醒、语音命令识别功能
#include "asr.h"
// 行空板K10核心驱动库,控制LCD屏幕、画布绘制
#include "unihiker_k10.h"
// 行空板I2C IO扩展模块库,拓展多路GPIO输出,控制无刷电机控制线
#include "DFRobot_UnihikerExpansion.h"

// 实例化硬件对象
UNIHIKER_K10 k10;                              // 行空板主板对象
ASR asr;                                        // 语音识别模块对象
DFRobot_UnihikerExpansion_I2C eunihiker(&Wire);// I2C扩展IO对象,使用默认I2C总线
uint8_t screen_dir=2;                           // 屏幕方向参数:2代表倒置显示

//=====================================================================
// setup()上电初始化函数,设备重启/开机仅执行1次
//=====================================================================
void setup() {
	// 初始化行空板底层硬件、总线资源
	k10.begin();

	// 初始化语音识别模块
	// CONTINUOUS:持续收音模式,时刻监听人声
	// CN_MODE:中文识别模式
	// 12000:收音灵敏度,数值越大抗环境噪音越强
	asr.asrInit(CONTINUOUS, CN_MODE, 12000);

	// 阻塞循环等待语音模块加载模型完成
	// _asrState == 0 代表语音模块未就绪,每100ms查询一次状态
	while(asr._asrState == 0){delay(100);}

	// 循环检测I2C扩展板硬件通信,连接失败则1秒后重试
	while(!eunihiker.begin()){delay(1000);}

	// 将扩展板C0引脚配置为数字输出模式,用于电机启停刹车控制
	eunihiker.setMode(eC0, eWriteGpio);
	// 根据预设方向初始化显示屏
	k10.initScreen(screen_dir);
	// 创建屏幕绘图缓冲区画布,所有文字先写入画布再刷新
	k10.creatCanvas();
	// C1引脚配置为输出,控制电机正反转信号线
	eunihiker.setMode(eC1, eWriteGpio);
	// C2引脚配置为输出,搭配分压电路实现高低速档位控制
	eunihiker.setMode(eC2, eWriteGpio);

	// 批量注册6条离线语音控制指令(拼音匹配)
	asr.addASRCommand(0+1, "qi dong");   // ID=1 语音:启动
	asr.addASRCommand(1+1, "ting zhi");  // ID=2 语音:停止
	asr.addASRCommand(2+1, "zheng zhuan");// ID=3 语音:正转
	asr.addASRCommand(3+1, "fan zhuan"); // ID=4 语音:反转
	asr.addASRCommand(4+1, "di su");     // ID=5 语音:低速
	asr.addASRCommand(5+1, "gao su");     // ID=6 语音:高速

	// 上电默认C0输出高电平,电机初始为停止刹车状态
	eunihiker.setGpioState(eC0, eHIGH);
}

//=====================================================================
// loop()主循环,初始化完成后无限循环运行,实时监听语音指令
//=====================================================================
void loop() {
	// 判断是否识别到唤醒词“你好小新”
	if (asr.isWakeUp()) {
		// 唤醒成功:第6行打印红色提示文字
		k10.canvas->canvasText("已唤醒行空板.......", 6, 0xFF0000);
		k10.canvas->updateCanvas(); // 将画布内容刷新到实体屏幕
	}
	else {
		// 未唤醒待机:第4行蓝色文字提示唤醒关键词
		k10.canvas->canvasText("唤醒词为“你好小新”", 4, 0x0000FF);
		k10.canvas->updateCanvas();
	}

	// ==========语音指令1:qi dong 启动电机==========
	if (asr.isDetectCmdID(0+1)) {
		// 全屏居中24号黑色大字显示状态,参数:X坐标、Y坐标、颜色、字体、字号、自动换行
		k10.canvas->canvasText("电机启动", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
		// C0拉低,刹车线悬空,解除刹车,电机允许运转
		eunihiker.setGpioState(eC0, eLOW);
	}

	// ==========语音指令2:ting zhi 停止电机==========
	if (asr.isDetectCmdID(1+1)) {
		k10.canvas->canvasText("电机停止", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
		// C0拉高,刹车线接地,电机急停锁死
		eunihiker.setGpioState(eC0, eHIGH);
	}

	// ==========语音指令3:zheng zhuan 正转==========
	if (asr.isDetectCmdID(2+1)) {
		k10.canvas->canvasText("电机正转", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
		// C1高电平,电机方向线悬空,正向旋转
		eunihiker.setGpioState(eC1, eHIGH);
	}

	// ==========语音指令4:fan zhuan 反转==========
	if (asr.isDetectCmdID(3+1)) {
		k10.canvas->canvasText("电机反转", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
		// C1低电平,电机方向线接地,反向旋转
		eunihiker.setGpioState(eC1, eLOW);
	}

	// ==========语音指令5:di su 低速档位==========
	if (asr.isDetectCmdID(4+1)) {
		k10.canvas->canvasText("电机低速", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
		// C2高电平,分压后给调速脚低电压,低速运行
		eunihiker.setGpioState(eC2, eHIGH);
	}

	// ==========语音指令6:gao su 高速档位==========
	if (asr.isDetectCmdID(5+1)) {
		k10.canvas->canvasText("电机高速", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
		// C2低电平,分压后给调速脚高电压,高速运行
		eunihiker.setGpioState(eC2, eLOW);
	}

	// 清空第6行及下方所有文字,清除上一轮状态提示,防止文字重叠残影
	k10.canvas->canvasClear(6);
}

代码解读
一、项目整体功能概述
本程序运行在行空板 K10,搭配离线 ASR 语音模块、I2C IO 扩展板,实现语音全功能控制 12V 内置驱动直流无刷减速电机。
唤醒口令:你好小新;
六条控制语音指令:启动、停止、正转、反转、低速、高速;
通过扩展板 3 路 GPIO 输出电平,分别控制电机刹车、旋转方向、高低速档位;
屏幕用大号字体实时显示电机当前工作状态。

二、头文件与对象定义解读

#include "asr.h"
#include "unihiker_k10.h"
#include "DFRobot_UnihikerExpansion.h"
asr.h:离线语音识别库,提供语音唤醒、自定义指令识别;
unihiker_k10.h:行空板 K10 底层库,管理 LCD 屏幕、画布绘制;
DFRobot_UnihikerExpansion.h:I2C 扩展 IO 驱动,拓展多路数字输出引脚,专门控制电机控制线。

UNIHIKER_K10 k10;
ASR asr;
DFRobot_UnihikerExpansion_I2C eunihiker(&Wire);
uint8_t screen_dir=2;

k10:行空板主控对象,操控屏幕;
asr:语音识别对象,处理麦克风收音识别;
eunihiker:I2C 扩展板对象,调用系统默认 I2C 总线通信;
screen_dir=2:设置屏幕倒置显示。

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

k10.begin();

初始化行空板全部硬件、通信总线。

asr.asrInit(CONTINUOUS, CN_MODE, 12000);

语音模块初始化:持续收音、中文识别、12000 中等灵敏度,抗环境噪音。

while(asr._asrState == 0){delay(100);}

循环等待语音模块加载完成,模块未就绪时阻塞程序,避免调用报错。

while(!eunihiker.begin()){delay(1000);}

持续检测 I2C 扩展板通信,硬件未连接则每秒重试一次。

eunihiker.setMode(eC0, eWriteGpio);

把扩展板 C0 引脚设置为数字输出,用于电机刹车控制。
屏幕初始化

k10.initScreen(screen_dir);
k10.creatCanvas();

按设定方向点亮屏幕,创建绘图缓冲区画布。
配置剩余两路输出引脚

eunihiker.setMode(eC1, eWriteGpio); // C1控制电机正反转
eunihiker.setMode(eC2, eWriteGpio); // C2控制高低速档位

注册 6 条离线语音指令

asr.addASRCommand(0+1, "qi dong");     // ID1 启动
asr.addASRCommand(1+1, "ting zhi");    // ID2 停止
asr.addASRCommand(2+1, "zheng zhuan"); // ID3 正转
asr.addASRCommand(3+1, "fan zhuan");   // ID4 反转
asr.addASRCommand(4+1, "di su");       // ID5 低速
asr.addASRCommand(5+1, "gao su");       // ID6 高速

离线语音只能识别提前录入的拼音口令。

eunihiker.setGpioState(eC0, eHIGH);

上电默认 C0 高电平,电机默认刹车锁死,开机不转动,保证安全。

四、loop () 无限主循环

  1. 唤醒状态判断
if (asr.isWakeUp())

识别到 “你好小新” 唤醒词:屏幕第 6 行红色文字提示已唤醒;
未唤醒:屏幕蓝色文字提示唤醒口令;
updateCanvas() 将画布内容刷新到屏幕。

  1. 语音指令逻辑分段
    (1)qi dong 启动电机
    C0 输出低电平 → 电机刹车线悬空,解除刹车,电机允许运转;屏幕显示 “电机启动” 大号字体。
    (2)ting zhi 停止电机
    C0 输出高电平 → 刹车线接地,电机急停锁死;屏幕显示 “电机停止”。
    (3)zheng zhuan 正转
    C1 高电平,电机方向线悬空,正向旋转;屏幕同步提示。
    (4)fan zhuan 反转
    C1 低电平,电机方向线接地,反向旋转;屏幕同步提示。
    (5)di su 低速
    C2 高电平,搭配分压电路给电机调速脚输出低电压,低速运行。
    (6)gao su 高速
    C2 低电平,调速脚电压升高,电机高速运转。
  2. 屏幕清理
k10.canvas->canvasClear(6);

清空第 6 行及下方全部文字,清除上一轮状态信息,防止文字重叠残影。

五、语音指令对照表

在这里插入图片描述

六、完整运行流程
设备上电,初始化主板、语音模块、I2C 扩展板;
配置 C0/C1/C2 为输出引脚,上电电机默认刹车停止;
录入 6 条语音控制指令;
麦克风不间断监听唤醒词;
说出 “你好小新” 完成唤醒;
说出对应语音口令,三路 IO 同步切换电平,电机切换启停、转向、速度,屏幕大字展示状态;
自动清空屏幕文字,持续等待下一条语音指令。

Mind+图形编程

在这里插入图片描述
实验场景图与视频记录

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【【花雕动手做】行空板 K10 系列实验之语音控制3630机器人电机的启动刹车、高低速与正反转向#k10行空板#直流电机 #单片机 #科技改变生活】

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

语音控制3630机器人电机的启动刹车、高低速与正反转向

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐