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

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

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

在这里插入图片描述
3640无刷电机三驱全向福来轮小车使用的特色底板、马达、7.4V锂电池、全向福来轮与扩展板

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

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

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

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

主打:人工智能模块

在这里插入图片描述

语音识别合成相关说明

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

辅助:屏幕显示相关积木

在这里插入图片描述
接脚 IO 扩展模块
在这里插入图片描述

知识点:三驱福来轮(三轮全向轮)控制原理

一、福来轮(全向 Omni 轮)基础结构与力学特性
福来轮vs麦克纳姆轮对比

  1. 轮子结构
    福来轮由主驱动轮毂 + 一圈垂直于主轴的被动小滚轮组成:
    电机驱动主轮毂旋转,沿轮毂切线方向输出主动推力;
    外圈小滚轮与主轴 90° 垂直,可无阻力被动横向滑动;
    单个轮子只能输出单方向主动力,垂直主轴方向完全自由滑动。
  2. 和麦克纳姆轮核心区别
    麦克纳姆轮:斜 45° 辊子,单轮可同时分解横向 + 纵向分力,最少 4 轮底盘;
    福来全向轮:辊子垂直主轴,单轮只有单向主动推力,必须 3 轮呈 120° 三角布局,依靠矢量叠加实现全向移动。

二、三轮标准布局(核心硬件前提)
三个福来轮在圆形底盘上均匀正三角分布,两两夹角严格 120°,每个轮子主轴指向底盘几何中心:

在这里插入图片描述

三轮120°布局坐标系
1 号轮(前轮):安装角 90°,主轴沿车身 Y 轴正方向;
2 号轮(左后):安装角 210°;
3 号轮(右后):安装角 330°;
每个轮子独立配 1 个直流减速电机 + 驱动芯片,三路 PWM 独立调速、正反转控制。
关键:三个轮子缺一不可,两轮福来轮无法实现全向平移 / 原地自转。

三、底层力学运动原理(矢量叠加核心)
单个福来轮仅能沿自身主轴方向产生推力,垂直主轴方向可自由滑动,无阻力;
三个轮子的推力矢量在 XY 平面叠加,合成车身X 横向、Y 纵向平移速度 + 绕中心旋转角速度;
通过修改三个电机的转速大小、旋转方向(正负速度),改变三个推力矢量,就能合成平面内任意运动:直行、横移、斜走、原地零半径旋转。
运动学速度换算公式(主控代码核心计算)
设车身目标运动:
Vx:车身左右横向速度(右为正)
Vy:车身前后纵向速度(前为正)
ω:车身原地旋转角速度(顺时针为正)
R:底盘中心到任意轮子的距离
三个轮子目标线速度:
plaintext
V1 = Vy + R·ω
V2 = -0.5·Vy - 0.866·Vx + R·ω
V3 = -0.5·Vy + 0.866·Vx + R·ω
计算结果正负号 = 电机转向;数值绝对值 = PWM 调速占空比;
主控收到前进 / 横移 / 转圈指令后,先算出 Vx、Vy、ω,再代入公式算出三路电机转速输出。

四、6 种标准运动电机控制逻辑(对应语音遥控场景)

  1. 直线向前(Vy>0,Vx=0,ω=0)
    目标:仅纵向向前,无横向偏移、不旋转
    计算结果:
    V1 = 正转,V2 = 反转,V3 = 反转,三轮速度绝对值相等
    1 号轮向前推,2、3 号轮向后抵消横向分力,合力纯向前。
  2. 直线向后(Vy<0,Vx=0,ω=0)
    全部转向与前进反向:V1 反转,V2、V3 正转,速度大小一致。
  3. 车身整体向右横移(Vx>0,Vy=0,ω=0)
    V1=0(前轮停机),V2 正转,V3 反转,速度相同;
    2、3 轮推力合成纯向右合力,前轮横向自由滑动无阻力。
  4. 车身整体向左横移(Vx<0,Vy=0,ω=0)
    V1 停机,V2 反转,V3 正转,左右合力向左。
  5. 原地顺时针转圈(Vx=0,Vy=0,ω>0)
    V1、V2、V3 全部同向正转,速度大小完全相等;
    三轮推力形成环绕中心的旋转力偶,无平移分量,原地自转。
  6. 斜向行走(Vx、Vy 同时不为 0,ω=0)
    三轮按公式分配不同转速,同时产生纵向 + 横向合力,车身斜向直行。
  7. 停车
    V1=V2=V3=0,三路电机全部断电刹车。

五、电子控制完整流程(行空板 / ESP32 语音小车适配)

  1. 硬件链路
    主控(行空板 K10)→ 三路 PWM 引脚 → L298N/L9110S 电机驱动 → 三路 N20 减速电机 → 福来轮
    PWM 占空比:0~255 对应速度大小;
    IO 高低电平控制电机 CW 正转 / CCW 反转;
    可选:电机 AB 相编码器,采集脉冲做 PID 速度闭环,修正打滑误差。
  2. 软件控制流程(语音小车逻辑)
    语音识别模块接收口令(前进 / 右横 / 转圈),解析出目标 Vx、Vy、ω;
    主控代入三轮运动学公式,计算 V1/V2/V3 三路电机目标速度;
    将速度正负转为电机转向,数值转为 PWM 输出;
    循环实时刷新三路电机转速,屏幕同步显示运动状态;
    喊 “停车” 时三路电机全部置 0 停机。

六、三轮福来轮 vs 四轮麦克纳姆轮优缺点对比

在这里插入图片描述

七、典型应用场景
创客教育语音遥控小车(你当前行空板语音项目);
小型桌面巡检机器人、绘图机器人;
狭小空间转运轻型物料 AGV;
云台小型全向移动底座。

八、三轮驱动与四轮驱动全向福来轮配置图

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

【花雕动手做】行空板 K10 系列实验之3640无刷电机三驱动全向福来轮语音控制智能小车

实验开源代码

// 引入离线语音识别核心库asr.h,提供语音唤醒、拼音口令识别、持续收音监听功能
#include "asr.h"
// 行空板K10主板底层驱动库,封装屏幕画布、引脚配置pinMode、IO电平输出等硬件操作API
#include "unihiker_k10.h"

// ====================== 全局硬件对象实例化 ======================
UNIHIKER_K10 k10;        // 行空板主控对象,统一管理LCD屏幕、板载GPIO、系统底层总线
ASR          asr;         // 离线语音识别模块实例,负责麦克风收音、人声解析、指令判断
uint8_t      screen_dir=2; // 屏幕旋转配置参数:数值2代表屏幕倒置显示

// ==================================================================
// setup() 上电初始化函数,设备开机/重启仅执行1次
// 功能:配置板载引脚输出模式、初始化主板/语音模块/屏幕、设置上电安全刹车电平、注册5条语音控制口令
// ==================================================================
void setup() {
	// 将板载物理引脚P0配置为数字输出模式,用于电机驱动逻辑控制
	pinMode(P0, OUTPUT);
	// 将板载物理引脚P1配置为数字输出模式,另一路电机逻辑控制引脚
	pinMode(P1, OUTPUT);

	// 初始化行空板全部底层硬件资源:串口、I2C通信总线、LCD屏幕、板载IO外设
	k10.begin();

	// 初始化离线语音识别模块三大核心配置参数
	// CONTINUOUS:持续收音模式,麦克风不间断循环监听环境人声
	// CN_MODE:中文识别模式,仅能识别预先注册的中文拼音口令
	// 12000:收音抗噪灵敏度阈值,数值越大过滤环境杂音、防止误唤醒能力越强
	asr.asrInit(CONTINUOUS, CN_MODE, 12000);

	// 阻塞循环等待语音模块加载语音识别模型完成
	// _asrState == 0 代表模块未就绪,每100ms循环检测一次状态,避免未初始化调用报错
	while(asr._asrState == 0){delay(100);}

	// 根据预设screen_dir参数初始化LCD显示屏
	k10.initScreen(screen_dir);
	// 创建屏幕绘图画布缓存区,所有文字先存入缓存,再统一刷新到实体屏幕,减少刷屏闪烁
	k10.creatCanvas();

	// 上电初始化全部控制引脚为高电平,小车默认刹车静止,防止开机瞬间误冲,保障硬件安全
	digitalWrite(P0, HIGH);    // 板载引脚P0上电拉高
	digitalWrite(P1, HIGH);    // 板载引脚P1上电拉高
	digital_write(eP2, HIGH);  // 扩展IO引脚eP2上电拉高

	// 批量注册5条离线语音拼音控制指令,离线识别模块仅能识别提前录入的口令
	asr.addASRCommand(0+1, "qi dong");   // ID=1 语音口令:启动
	asr.addASRCommand(1+1, "ting che");  // ID=2 语音口令:停车
	asr.addASRCommand(2+1, "qian jin");  // ID=3 语音口令:前进
	asr.addASRCommand(3+1, "hou tui");   // ID=4 语音口令:后退
	asr.addASRCommand(4+1, "zhuan quan");// ID=5 语音口令:原地转圈
}

// ==================================================================
// loop() 主循环函数,硬件初始化完成后无限循环持续运行
// 功能:实时检测语音唤醒状态、识别语音口令、输出多路IO高低电平控制小车驱动、屏幕同步打印运行状态文字
// ==================================================================
void loop() {
	// 判断麦克风是否识别到固定唤醒关键词【你好小新】
	if (asr.isWakeUp()) {
		// 唤醒成功:在画布第6行输出红色提示文字
		k10.canvas->canvasText("已唤醒行空板小车.......", 6, 0xFF0000);
		// 将画布缓存内所有文字一次性刷新输出到LCD实体屏幕
		k10.canvas->updateCanvas();
	}
	else {
		// 未唤醒待机状态:画布第4行输出蓝色提示文字,告知用户唤醒口令
		k10.canvas->canvasText("唤醒词为“你好小新”", 4, 0x0000FF);
		k10.canvas->updateCanvas();
	}

	// ---------------- 语音指令ID1:qi dong 小车整机启动解锁 ----------------
	if (asr.isDetectCmdID(0+1)) {
		// P0、P1、扩展eP2全部拉低,解除电机锁定,进入可运动状态
		digitalWrite(P0, LOW);
		digitalWrite(P1, LOW);
		digital_write(eP2, LOW);
		// 屏幕居中显示24号黑色大字运行状态
		// 参数说明:X坐标,Y坐标,文字RGB颜色,中英文字体,字号大小,自动换行开关
		k10.canvas->canvasText("K10 小车启动", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
	}

	// ---------------- 语音指令ID2:ting che 小车刹车停机锁定 ----------------
	if (asr.isDetectCmdID(1+1)) {
		// P0、P1、eP2全部拉高,电机驱动锁定,切断动力输出,小车立即静止
		digitalWrite(P0, HIGH);
		digitalWrite(P1, HIGH);
		digital_write(eP2, HIGH);
		k10.canvas->canvasText("K10 小车停车", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
	}

	// ---------------- 语音指令ID3:qian jin 小车直线向前行驶 ----------------
	if (asr.isDetectCmdID(2+1)) {
		// P0、P1拉低保持解锁;eP2拉高、eP4拉高,输出直行差速电平组合
		digitalWrite(P0, LOW);
		digitalWrite(P1, LOW);
		digital_write(eP2, HIGH);
		digital_write(eP4, HIGH);
		k10.canvas->canvasText("K10 小车前进", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
	}

	// ---------------- 语音指令ID4:hou tui 小车直线向后倒退 ----------------
	if (asr.isDetectCmdID(3+1)) {
		// P0、P1拉低解锁;仅eP2拉高,输出后退差速电平组合
		digitalWrite(P0, LOW);
		digitalWrite(P1, LOW);
		digital_write(eP2, HIGH);
		k10.canvas->canvasText("K10 小车后退", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
	}

	// ---------------- 语音指令ID5:zhuan quan 小车原地持续转圈 ----------------
	if (asr.isDetectCmdID(4+1)) {
		// P0、P1、eP2拉低解锁;eP3/eP4/eP6拉高,输出原地自转差速电平组合
		digitalWrite(P0, LOW);
		digitalWrite(P1, LOW);
		digital_write(eP2, LOW);
		digital_write(eP3, HIGH);
		digital_write(eP4, HIGH);
		digital_write(eP6, HIGH);
		k10.canvas->canvasText("K10小车原地转圈", 0, 180, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
		k10.canvas->updateCanvas();
	}

	// 清空画布第6行及下方全部文字,清除上一轮状态残留文字,避免新旧文字重叠产生残影
	k10.canvas->canvasClear(6);
}

代码解读

一、项目整体功能

硬件组合:行空板 K10 + 离线 ASR 语音识别 + IO 电平控制式电机驱动底盘(两轮差速小车)

  1. 固定唤醒口令:你好小新,唤醒后才能操控小车;
  2. 5 条语音拼音指令:启动、停车、前进、后退、原地转圈;
  3. 依靠板载 IO (P0/P1)+ 扩展 IO (eP2/eP3/eP4/eP6) 输出高低电平组合,切换电机锁定 / 直行 / 后退 / 自转模式;
  4. LCD 屏幕使用 24 号大号字体,实时展示小车当前运行状态。

二、头文件与全局对象解析

#include "asr.h"
#include "unihiker_k10.h"
  1. asr.h:离线语音识别库,实现持续收音、唤醒检测、自定义拼音指令识别;
  2. unihiker_k10.h:行空板底层驱动库,管理屏幕画布、引脚模式配置、IO 电平输出函数。
UNIHIKER_K10 k10;
ASR          asr;
uint8_t      screen_dir=2;
  • k10:行空板主控实例,统一管理屏幕、板载 GPIO、底层硬件初始化;
  • asr:语音识别实例,处理麦克风收音与人声解析;
  • screen_dir=2:设置屏幕倒置显示。

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

  1. pinMode(P0, OUTPUT); pinMode(P1, OUTPUT);
    将板载 P0、P1 配置为数字输出引脚,作为整机解锁总控信号。
  2. k10.begin();
    初始化行空板全部硬件、I2C / 串口总线、屏幕外设资源。
  3. 语音模块初始化
asr.asrInit(CONTINUOUS, CN_MODE, 12000);
while(asr._asrState == 0){delay(100);}
  • CONTINUOUS:不间断持续收音;
  • CN_MODE:中文识别,仅识别预存拼音口令;
  • 12000:抗噪灵敏度,数值越大越不容易误唤醒;
    循环阻塞等待语音模型加载完毕,模块就绪才向下执行。
  1. 屏幕初始化
k10.initScreen(screen_dir);
k10.creatCanvas();

按照倒置参数点亮屏幕,创建画布缓存,文字先存入缓存再统一刷新,减少屏幕闪烁。
5. 上电安全默认电平

digitalWrite(P0, HIGH);
digitalWrite(P1, HIGH);
digital_write(eP2, HIGH);

整机控制引脚上电默认高电平,小车初始锁定刹车,避免开机窜动。
6. 注册语音指令

asr.addASRCommand(0+1, "qi dong");   // ID1 启动
asr.addASRCommand(1+1, "ting che");  // ID2 停车
asr.addASRCommand(2+1, "qian jin");  // ID3 前进
asr.addASRCommand(3+1, "hou tui");   // ID4 后退
asr.addASRCommand(4+1, "zhuan quan");// ID5 原地转圈

提前录入 5 条拼音口令,语音模块仅能识别预存指令。

四、loop () 无限主循环,实时监听语音

1. 唤醒状态判断

asr.isWakeUp() 检测是否识别唤醒词「你好小新」:

  • 唤醒成功:屏幕第 6 行红色文字提示 “已唤醒行空板小车”;
  • 未唤醒待机:屏幕第 4 行蓝色文字提示唤醒口令;
    updateCanvas() 将画布缓存文字一次性刷新到实体屏幕。

2. 各语音指令硬件电平逻辑

1)qi dong 启动(整机解锁)
digitalWrite(P0, LOW);
digitalWrite(P1, LOW);
digital_write(eP2, LOW);

P0、P1 拉低解除整机锁定,小车进入可运动状态。

2)ting che 停车(整机锁定刹车)
digitalWrite(P0, HIGH);
digitalWrite(P1, HIGH);
digital_write(eP2, HIGH);

总控引脚全部拉高,电机切断动力,小车立刻锁死静止。

3)qian jin 前进(直线直行)
digitalWrite(P0, LOW);
digitalWrite(P1, LOW);
digital_write(eP2, HIGH);
digital_write(eP4, HIGH);

保持解锁状态,eP2、eP4 拉高,输出直行差速电平,两轮同向正转向前。

4)hou tui 后退(直线倒退)
digitalWrite(P0, LOW);
digitalWrite(P1, LOW);
digital_write(eP2, HIGH);

保持解锁,仅 eP2 拉高,电机反向输出,直线向后倒退。

5)zhuan quan 原地转圈
digitalWrite(P0, LOW);
digitalWrite(P1, LOW);
digital_write(eP2, LOW);
digital_write(eP3, HIGH);
digital_write(eP4, HIGH);
digital_write(eP6, HIGH);

解锁 + 转圈模式,eP3/eP4/eP6 拉高,左右电机反向差速,原地持续自转。

3. 屏幕清理

k10.canvas->canvasClear(6);

清空画布第 6 行及下方所有文字,清除上一轮状态,防止新旧文字重叠残影。

五、引脚功能总表

在这里插入图片描述

六、运动动作对照表

在这里插入图片描述

七、完整运行流程

  1. 上电配置 P0/P1 为输出引脚,初始化行空板全部硬件;
  2. 启动离线语音识别,循环等待语音模型加载完成;
  3. 初始化倒置 LCD 屏幕、创建绘图画布;
  4. 所有控制引脚默认拉高,上电小车保持锁定刹车;
  5. 注册 5 条语音拼音控制指令;
  6. 麦克风不间断监听唤醒词 “你好小新”;
  7. 唤醒后说出对应口令,多路 IO 输出对应电平驱动电机,屏幕同步显示车辆状态;
  8. 循环末尾自动清空屏幕文字,持续等待下一条语音指令。

Mind+图形编程

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

实验场景图与视频记录

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

【【花雕动手做】行空板 K10 系列实验之3640无刷电机三驱动全向福来轮语音控制智能小车 #厉害了我的车 #行空板K10 #人工智能技术 #DIY动手做】

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

行空板 K10 之三驱动全向福来轮语音小车

Logo

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

更多推荐