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

📅 2026/7/15 20:13:58
【花雕动手做】行空板 K10 系列实验之3640无刷电机三驱动全向福来轮语音识别控制智能小车
行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板100%采用国产芯片知识产权自主可控符合信息科技课程中编程学习、物联网及人工智能等教学需求。该板集成2.8寸LCD彩屏、WiFi蓝牙、摄像头、麦克风、扬声器、RGB指示灯、多种传感器及丰富的扩展接口。凭借高度集成的板载资源教学过程中无需额外连接其他设备便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等AI人工智能项目。主要特点集成摄像头内置算法可进行离线图像检测集成麦克风内置算法可进行离线语音识别集成扬声器内置算法可进行离线语音合成2.8寸彩色屏幕数据展示更清晰集成度高利于教学接口丰富兼容软件多扩展性好3640无刷电机三驱全向福来轮小车使用的特色底板、马达、7.4V锂电池、全向福来轮与扩展板主打人工智能模块语音识别合成相关说明辅助屏幕显示相关积木接脚 IO 扩展模块知识点三驱福来轮三轮全向轮控制原理一、福来轮全向 Omni 轮基础结构与力学特性福来轮vs麦克纳姆轮对比轮子结构福来轮由主驱动轮毂 一圈垂直于主轴的被动小滚轮组成电机驱动主轮毂旋转沿轮毂切线方向输出主动推力外圈小滚轮与主轴 90° 垂直可无阻力被动横向滑动单个轮子只能输出单方向主动力垂直主轴方向完全自由滑动。和麦克纳姆轮核心区别麦克纳姆轮斜 45° 辊子单轮可同时分解横向 纵向分力最少 4 轮底盘福来全向轮辊子垂直主轴单轮只有单向主动推力必须 3 轮呈 120° 三角布局依靠矢量叠加实现全向移动。二、三轮标准布局核心硬件前提三个福来轮在圆形底盘上均匀正三角分布两两夹角严格 120°每个轮子主轴指向底盘几何中心三轮120°布局坐标系1 号轮前轮安装角 90°主轴沿车身 Y 轴正方向2 号轮左后安装角 210°3 号轮右后安装角 330°每个轮子独立配 1 个直流减速电机 驱动芯片三路 PWM 独立调速、正反转控制。关键三个轮子缺一不可两轮福来轮无法实现全向平移 / 原地自转。三、底层力学运动原理矢量叠加核心单个福来轮仅能沿自身主轴方向产生推力垂直主轴方向可自由滑动无阻力三个轮子的推力矢量在 XY 平面叠加合成车身X 横向、Y 纵向平移速度 绕中心旋转角速度通过修改三个电机的转速大小、旋转方向正负速度改变三个推力矢量就能合成平面内任意运动直行、横移、斜走、原地零半径旋转。运动学速度换算公式主控代码核心计算设车身目标运动Vx车身左右横向速度右为正Vy车身前后纵向速度前为正ω车身原地旋转角速度顺时针为正R底盘中心到任意轮子的距离三个轮子目标线速度plaintextV1 Vy R·ωV2 -0.5·Vy - 0.866·Vx R·ωV3 -0.5·Vy 0.866·Vx R·ω计算结果正负号 电机转向数值绝对值 PWM 调速占空比主控收到前进 / 横移 / 转圈指令后先算出 Vx、Vy、ω再代入公式算出三路电机转速输出。四、6 种标准运动电机控制逻辑对应语音遥控场景直线向前Vy0Vx0ω0目标仅纵向向前无横向偏移、不旋转计算结果V1 正转V2 反转V3 反转三轮速度绝对值相等1 号轮向前推2、3 号轮向后抵消横向分力合力纯向前。直线向后Vy0Vx0ω0全部转向与前进反向V1 反转V2、V3 正转速度大小一致。车身整体向右横移Vx0Vy0ω0V10前轮停机V2 正转V3 反转速度相同2、3 轮推力合成纯向右合力前轮横向自由滑动无阻力。车身整体向左横移Vx0Vy0ω0V1 停机V2 反转V3 正转左右合力向左。原地顺时针转圈Vx0Vy0ω0V1、V2、V3 全部同向正转速度大小完全相等三轮推力形成环绕中心的旋转力偶无平移分量原地自转。斜向行走Vx、Vy 同时不为 0ω0三轮按公式分配不同转速同时产生纵向 横向合力车身斜向直行。停车V1V2V30三路电机全部断电刹车。五、电子控制完整流程行空板 / ESP32 语音小车适配硬件链路主控行空板 K10→ 三路 PWM 引脚 → L298N/L9110S 电机驱动 → 三路 N20 减速电机 → 福来轮PWM 占空比0~255 对应速度大小IO 高低电平控制电机 CW 正转 / CCW 反转可选电机 AB 相编码器采集脉冲做 PID 速度闭环修正打滑误差。软件控制流程语音小车逻辑语音识别模块接收口令前进 / 右横 / 转圈解析出目标 Vx、Vy、ω主控代入三轮运动学公式计算 V1/V2/V3 三路电机目标速度将速度正负转为电机转向数值转为 PWM 输出循环实时刷新三路电机转速屏幕同步显示运动状态喊 “停车” 时三路电机全部置 0 停机。六、三轮福来轮 vs 四轮麦克纳姆轮优缺点对比七、典型应用场景创客教育语音遥控小车你当前行空板语音项目小型桌面巡检机器人、绘图机器人狭小空间转运轻型物料 AGV云台小型全向移动底座。八、三轮驱动与四轮驱动全向福来轮配置图【花雕动手做】行空板 K10 系列实验之3640无刷电机三驱动全向福来轮语音控制智能小车实验开源代码// 引入离线语音识别核心库asr.h提供语音唤醒、拼音口令识别、持续收音监听功能#includeasr.h// 行空板K10主板底层驱动库封装屏幕画布、引脚配置pinMode、IO电平输出等硬件操作API#includeunihiker_k10.h// 全局硬件对象实例化 UNIHIKER_K10 k10;// 行空板主控对象统一管理LCD屏幕、板载GPIO、系统底层总线ASR asr;// 离线语音识别模块实例负责麦克风收音、人声解析、指令判断uint8_tscreen_dir2;// 屏幕旋转配置参数数值2代表屏幕倒置显示// // setup() 上电初始化函数设备开机/重启仅执行1次// 功能配置板载引脚输出模式、初始化主板/语音模块/屏幕、设置上电安全刹车电平、注册5条语音控制口令// voidsetup(){// 将板载物理引脚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._asrState0){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(01,qi dong);// ID1 语音口令启动asr.addASRCommand(11,ting che);// ID2 语音口令停车asr.addASRCommand(21,qian jin);// ID3 语音口令前进asr.addASRCommand(31,hou tui);// ID4 语音口令后退asr.addASRCommand(41,zhuan quan);// ID5 语音口令原地转圈}// // loop() 主循环函数硬件初始化完成后无限循环持续运行// 功能实时检测语音唤醒状态、识别语音口令、输出多路IO高低电平控制小车驱动、屏幕同步打印运行状态文字// voidloop(){// 判断麦克风是否识别到固定唤醒关键词【你好小新】if(asr.isWakeUp()){// 唤醒成功在画布第6行输出红色提示文字k10.canvas-canvasText(已唤醒行空板小车.......,6,0xFF0000);// 将画布缓存内所有文字一次性刷新输出到LCD实体屏幕k10.canvas-updateCanvas();}else{// 未唤醒待机状态画布第4行输出蓝色提示文字告知用户唤醒口令k10.canvas-canvasText(唤醒词为“你好小新”,4,0x0000FF);k10.canvas-updateCanvas();}// ---------------- 语音指令ID1qi dong 小车整机启动解锁 ----------------if(asr.isDetectCmdID(01)){// 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();}// ---------------- 语音指令ID2ting che 小车刹车停机锁定 ----------------if(asr.isDetectCmdID(11)){// 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();}// ---------------- 语音指令ID3qian jin 小车直线向前行驶 ----------------if(asr.isDetectCmdID(21)){// 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();}// ---------------- 语音指令ID4hou tui 小车直线向后倒退 ----------------if(asr.isDetectCmdID(31)){// 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();}// ---------------- 语音指令ID5zhuan quan 小车原地持续转圈 ----------------if(asr.isDetectCmdID(41)){// 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 电平控制式电机驱动底盘两轮差速小车固定唤醒口令你好小新唤醒后才能操控小车5 条语音拼音指令启动、停车、前进、后退、原地转圈依靠板载 IO (P0/P1) 扩展 IO (eP2/eP3/eP4/eP6) 输出高低电平组合切换电机锁定 / 直行 / 后退 / 自转模式LCD 屏幕使用 24 号大号字体实时展示小车当前运行状态。二、头文件与全局对象解析#includeasr.h#includeunihiker_k10.hasr.h离线语音识别库实现持续收音、唤醒检测、自定义拼音指令识别unihiker_k10.h行空板底层驱动库管理屏幕画布、引脚模式配置、IO 电平输出函数。UNIHIKER_K10 k10;ASR asr;uint8_tscreen_dir2;k10行空板主控实例统一管理屏幕、板载 GPIO、底层硬件初始化asr语音识别实例处理麦克风收音与人声解析screen_dir2设置屏幕倒置显示。三、setup () 上电初始化开机仅执行一次pinMode(P0, OUTPUT); pinMode(P1, OUTPUT);将板载 P0、P1 配置为数字输出引脚作为整机解锁总控信号。k10.begin();初始化行空板全部硬件、I2C / 串口总线、屏幕外设资源。语音模块初始化asr.asrInit(CONTINUOUS,CN_MODE,12000);while(asr._asrState0){delay(100);}CONTINUOUS不间断持续收音CN_MODE中文识别仅识别预存拼音口令12000抗噪灵敏度数值越大越不容易误唤醒循环阻塞等待语音模型加载完毕模块就绪才向下执行。屏幕初始化k10.initScreen(screen_dir);k10.creatCanvas();按照倒置参数点亮屏幕创建画布缓存文字先存入缓存再统一刷新减少屏幕闪烁。5. 上电安全默认电平digitalWrite(P0,HIGH);digitalWrite(P1,HIGH);digital_write(eP2,HIGH);整机控制引脚上电默认高电平小车初始锁定刹车避免开机窜动。6. 注册语音指令asr.addASRCommand(01,qi dong);// ID1 启动asr.addASRCommand(11,ting che);// ID2 停车asr.addASRCommand(21,qian jin);// ID3 前进asr.addASRCommand(31,hou tui);// ID4 后退asr.addASRCommand(41,zhuan quan);// ID5 原地转圈提前录入 5 条拼音口令语音模块仅能识别预存指令。四、loop () 无限主循环实时监听语音1. 唤醒状态判断asr.isWakeUp()检测是否识别唤醒词「你好小新」唤醒成功屏幕第 6 行红色文字提示 “已唤醒行空板小车”未唤醒待机屏幕第 4 行蓝色文字提示唤醒口令updateCanvas()将画布缓存文字一次性刷新到实体屏幕。2. 各语音指令硬件电平逻辑1qi dong 启动整机解锁digitalWrite(P0,LOW);digitalWrite(P1,LOW);digital_write(eP2,LOW);P0、P1 拉低解除整机锁定小车进入可运动状态。2ting che 停车整机锁定刹车digitalWrite(P0,HIGH);digitalWrite(P1,HIGH);digital_write(eP2,HIGH);总控引脚全部拉高电机切断动力小车立刻锁死静止。3qian jin 前进直线直行digitalWrite(P0,LOW);digitalWrite(P1,LOW);digital_write(eP2,HIGH);digital_write(eP4,HIGH);保持解锁状态eP2、eP4 拉高输出直行差速电平两轮同向正转向前。4hou tui 后退直线倒退digitalWrite(P0,LOW);digitalWrite(P1,LOW);digital_write(eP2,HIGH);保持解锁仅 eP2 拉高电机反向输出直线向后倒退。5zhuan 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 行及下方所有文字清除上一轮状态防止新旧文字重叠残影。五、引脚功能总表六、运动动作对照表七、完整运行流程上电配置 P0/P1 为输出引脚初始化行空板全部硬件启动离线语音识别循环等待语音模型加载完成初始化倒置 LCD 屏幕、创建绘图画布所有控制引脚默认拉高上电小车保持锁定刹车注册 5 条语音拼音控制指令麦克风不间断监听唤醒词 “你好小新”唤醒后说出对应口令多路 IO 输出对应电平驱动电机屏幕同步显示车辆状态循环末尾自动清空屏幕文字持续等待下一条语音指令。Mind图形编程实验场景图与视频记录【【花雕动手做】行空板 K10 系列实验之3640无刷电机三驱动全向福来轮语音控制智能小车 #厉害了我的车 #行空板K10 #人工智能技术 #DIY动手做】https://www.bilibili.com/video/BV1gMNX6jEjY/?share_sourcecopy_webvd_source371a292a55e5ca9be994cbb4a86cc987行空板 K10 之三驱动全向福来轮语音小车