159浏览
查看: 159|回复: 15

[K10教程] 【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车

[复制链接]
【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图1

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

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


【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图2

驴友花雕  高级技神
 楼主|

发表于 2026-7-24 15:10:27

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车

实验扩展板与福来轮小车

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图1

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图2
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-7-24 15:14:31

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车

陀螺仪端掌控宝(带锂电池)

掌控板是国内专为**中小学 Python 创客教育**设计的开源微型开发板,搭载 ESP32 主控,自带 WiFi + 蓝牙,是一块 “掌上微型电脑”DFRobot。

一、核心板载硬件(不用外接配件就能玩)

1. **1.3 寸 OLED 显示屏**:128×64 分辨率,显示文字、动画、图片,支持中文;
2. **交互部件**:A/B 物理按键、6 路金手指触摸键、3 颗全彩 RGB 灯、蜂鸣器(播放音乐);
3. **内置传感器**:麦克风(拾音)、光线传感器、三轴加速度 / 磁场传感器(做电子罗盘、计步器);
4. **通信**:WiFi、蓝牙双无线,可联网、两块板子无线互传数据;
5. **拓展**:底部金手指引出全部 IO,能外接舵机、温湿度、电机等模块。

二、两种编程方式,零基础友好

1. **图形化积木编程(mPython/Mind+)**:拖拽模块,小学生也能上手;
2. **MicroPython 代码编程**:直接写 Python 代码,衔接初高中信息技术课程。

三、常见用途

- 课堂教学:编程入门、物联网、STEAM 科创课;
- 趣味制作:电子表、声光小游戏、声控彩灯、便携噪声 / 光照检测仪;
- 物联网:联网看天气、远程控制设备、环境数据上传云端;
- 可穿戴:智能手环、电子徽章、便携小仪器。

四、特点

体积小巧、一体化集成传感器、国产教育硬件、软硬件全开源,不用复杂接线就能快速做出智能小作品。

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图1

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-7-24 15:15:43

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车

添加通信模块——无线广播(简版蓝牙)

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图1

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图2

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-7-24 15:18:15

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车

板载传感器与小车扩展板相关积木

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图1

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图2

语音识别与合成模块积木

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图4

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图3

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-7-24 15:19:36

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车

辅助:屏幕显示相关积木

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图2

LED控制模块
【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图1


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-7-24 15:20:47

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车

知识点:无线广播------行空板 K10 BLE、BLE Mesh 广播 (简版蓝牙)

一、BLE 普通广播(广播包 Advertising,非连接型)
1. 工作原理
发送板不建立蓝牙配对连接,定时(间隔可设)向外发送短小广播数据包;周围所有开启蓝牙扫描的 K10/ESP32 设备被动抓取数据,属于一对多离线通信,全程不用 WiFi、路由器。
发送端:只发包,不等待应答
接收端:持续扫描,识别目标设备标识后读取内容
2. 核心参数
传输距离:空旷 5–10 米,隔墙大幅衰减
功耗优势:发送、待机电流都很低,电池供电可长时间运行
数据限制:单帧广播载荷很短,一般几十字节以内
拓扑:1 个发射源→N 个接收机,接收机之间互不通信
3. 适用场景
一块主控批量控制多台 LED、蜂鸣器、小电机开关
手环式传感器广播温湿度、按键状态给多块行空板
无网络教室简易一控多教具
4. 短板
不能传长文本、语音、图片、大量数值
无可靠重传机制,干扰环境容易丢包
只能单向发,接收端无法回传数据给发射板

二、BLE Mesh 网格广播组网
1. 工作原理
所有行空板加入同一个 Mesh 网络,节点地位平等:
任意一块板子发送一条消息,全网所有 Mesh 节点同步收到;信号弱的节点还能中继转发消息,扩大覆盖范围,属于多向全网广播。
完全离线运行,不需要 WiFi 路由。
2. 对比普通 BLE 广播优势
信号中继:远距离、隔墙场景靠中间板子接力传递信号
双向互通:每个节点既能发全网广播,也能接收全网消息
分组控制:可划分分组,消息只发给指定分组设备,不用全部设备响应
稳定性高于单纯 Advertising 广播,自带简单纠错
3. 典型应用
教室几十台行空板灯光同步亮灭、抢答同步触发
多房间灯光、智能开关统一控制
分布式传感器,任意节点上报数据全网可见
4. 固有局限
单条消息数据量依旧偏小,依旧无法承载音频、大图
组网设备数量过多时,消息延迟会上升
相比 WiFi UDP,传输速度慢很多

三、两者统一短板汇总
大数据传输能力弱:仅适配开关指令、1–2 组数字、简短标识
高速传输不行:实时音频、大屏多行文字、图像一律不推荐
穿墙能力一般,密集金属遮挡信号暴跌
大量设备同时发包容易产生蓝牙信道冲突丢包

四、行空板 K10 实操区分选择
简单一控多、电池低功耗、距离近 → BLE 普通 Advertising 广播(代码简单、资源占用最小)
多设备互相收发、需要中继扩距离、批量分组控制 → BLE Mesh(组网复杂一点,功能更强)
要传文字、声音、大量数据、距离远、设备多稳定通信 → 优先改用 WiFi UDP 广播

补充简易实操要点
BLE 广播必须设置唯一设备名称 / UUID,接收端过滤识别,避免抓取无关蓝牙设备数据包;
Mesh 组网所有设备必须写入同一组网密钥、同一网络 ID 才能互相通信;
电池供电项目首选 BLE 体系,插电稳定大数据项目优先 WiFi。

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图1

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-7-24 17:05:16

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车

掌控宝陀螺仪简版蓝牙发送端

【花雕动手做】行空板 K10 系列实验之简版蓝牙掌控板陀螺仪三驱全向福来轮小车

实验开源代码

  1. // 掌控板底层驱动库,提供屏幕、加速度传感器、按键、RGB灯带硬件接口
  2. #include <MPython.h>
  3. // DFRobot ESP32 2.4G私有射频通信库,实现掌控板与小车点对点无线收发字符串指令
  4. #include <DFRobot_ESP32_Radio.h>
  5. // 函数前置声明,告知编译器后续定义的按键回调函数
  6. void onButtonAPressed();
  7. void onButtonBPressed();
  8. // 实例化2.4G射频通信对象,负责无线报文发送
  9. DFRobot_ESP32Radio Radio;
  10. // 上电初始化函数,通电/复位仅执行一次
  11. void setup() {
  12.     // 初始化掌控板全部硬件(屏幕、传感器、按键、灯光驱动)
  13.         mPython.begin();
  14.     // 绑定A按键按下事件:按下A键自动执行onButtonAPressed函数
  15.         buttonA.setPressedCallback(onButtonAPressed);
  16.     // 绑定B按键按下事件:按下B键自动执行onButtonBPressed函数
  17.         buttonB.setPressedCallback(onButtonBPressed);
  18.     // 开启2.4G射频模块,进入收发就绪状态
  19.         Radio.turnOn();
  20.     // 设置无线通信分组号13
  21.     // 重点:小车接收端必须设置相同分组13,收发分组不一致无法通信
  22.         Radio.setGroup(13);
  23.     // 设置RGB灯带全局亮度等级8,亮度取值区间 0 ~ 255
  24.         rgb.brightness(round(8));
  25.     // 光标定位屏幕第1行,打印标题文字
  26.         display.setCursorLine(1);
  27.         display.printLine("掌控板陀螺仪发送端");
  28.     // 光标定位屏幕第2行,打印操作提示
  29.         display.setCursorLine(2);
  30.         display.printLine("前后左右四个方向");
  31.     // 光标定位屏幕第4行,标注适配车型
  32.         display.setCursorLine(4);
  33.         display.printLine("三驱动全向轮小车");
  34. }
  35. // 主循环,初始化完成后无限循环持续运行
  36. void loop() {
  37.     // 持续读取加速度传感器姿态
  38.     // 向前倾斜
  39.         if ((accelerometer.isGesture(accelerometer.TiltForward))) {
  40.                 Radio.send("qian");                 // 2.4G射频发送前进指令 qian
  41.                 rgb.write(1, 0x00FF00);             // 点亮第1颗RGB灯:绿色
  42.                 display.setCursorLine(3);
  43.                 display.printLine("前进");          // 屏幕第3行刷新状态
  44.         }
  45.     // 向后倾斜
  46.         if ((accelerometer.isGesture(accelerometer.TiltBack))) {
  47.                 Radio.send("hou");                  // 发送后退指令 hou
  48.                 rgb.write(1, 0xFF0000);             // 点亮第1颗RGB灯:红色
  49.                 display.setCursorLine(3);
  50.                 display.printLine("后退");
  51.         }
  52.     // 向左倾斜
  53.         if ((accelerometer.isGesture(accelerometer.TiltLeft))) {
  54.                 Radio.send("zuo");                  // 发送左横走指令 zuo
  55.                 rgb.write(1, 0x0000FF);             // 点亮第1颗RGB灯:蓝色
  56.                 display.setCursorLine(3);
  57.                 display.printLine("左横走");
  58.         }
  59.     // 向右倾斜
  60.         if ((accelerometer.isGesture(accelerometer.TiltRight))) {
  61.                 Radio.send("you");                  // 发送右横走指令 you
  62.                 rgb.write(1, 0xFF9900);             // 点亮第1颗RGB灯:橙黄色
  63.                 display.setCursorLine(3);
  64.                 display.printLine("右横走");
  65.         }
  66.     // 注意:代码未实现 ScreenDown(屏幕朝下)手势识别,无停车姿态触发
  67. }
  68. // ===================== 按键事件回调函数 =====================
  69. // A按键按下触发
  70. void onButtonAPressed() {
  71.         Radio.send("deng");                  // 无线发送指令 deng(开灯)
  72.         rgb.write(1, 0xFFFFFF);              // 第1颗RGB灯白色
  73.         display.setCursorLine(3);
  74.         display.printLine("开灯");
  75. }
  76. // B按键按下触发
  77. void onButtonBPressed() {
  78.         Radio.send("ting");                  // 无线发送指令 ting(停车)
  79.         rgb.write(1, 0x6600CC);              // 第1颗RGB灯紫蓝色
  80.         display.setCursorLine(3);
  81.         display.printLine("停车");
  82. }
复制代码


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-7-24 17:09:49

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车

本帖最后由 驴友花雕 于 2026-7-24 17:16 编辑

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

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

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图1

三轮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 四轮麦克纳姆轮优缺点对比

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图5

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


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

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图3

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图4

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图2


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-7-24 17:18:44

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车

# 掌控板 2.4G 射频遥控发送端 代码解读

一、头文件

  1. #include <MPython.h>
  2. #include <DFRobot_ESP32_Radio.h>
复制代码

1. `MPython.h`:掌控板官方底层库,驱动屏幕、六轴加速度传感器、实体按键、RGB 灯带;
2. `DFRobot_ESP32_Radio.h`:DFRobot 私有 2.4G 射频通信库,实现 ESP32 设备之间点对点无线收发文本指令,**不依赖 WiFi、路由器**。

二、函数前置声明

  1. void onButtonAPressed();
  2. void onButtonBPressed();
复制代码

C++ 语法规则:回调函数定义写在`loop`之后,必须提前声明,通知编译器函数原型。

- `onButtonAPressed()`:A 按键按下触发;
- `onButtonBPressed()`:B 按键按下触发。

三、全局对象


  1. DFRobot_ESP32Radio Radio;
复制代码

无线射频通信实例,负责发送字符串指令。

四、setup () 上电初始化(仅运行一次)

  1. void setup() {
  2.         mPython.begin();
  3.         buttonA.setPressedCallback(onButtonAPressed);
  4.         buttonB.setPressedCallback(onButtonBPressed);
  5.         Radio.turnOn();
  6.         Radio.setGroup(13);
  7.         rgb.brightness(round(8));
  8.         display.setCursorLine(1);
  9.         display.printLine("掌控板陀螺仪发送端");
  10.         display.setCursorLine(2);
  11.         display.printLine("前后左右四个方向");
  12.         display.setCursorLine(4);
  13.         display.printLine("三驱动全向轮小车");
  14. }
复制代码

逐行解析:

1. `mPython.begin()`:启动掌控板全部硬件驱动;
2. `setPressedCallback()`:给 A、B 按键绑定按下事件,采用**异步回调**,无需在 loop 循环扫描按键;
3. `Radio.turnOn()`:开启 2.4G 射频模块;
4. `Radio.setGroup(13)` 设置通信分组
> 核心约束:小车接收端射频分组必须同样设置 13,分组不一致无法收到任何信号;
5. `rgb.brightness(8)` 设置灯带全局亮度(0~255);
6. `display.setCursorLine(行号)`:定位光标,打印标题与操作提示文字。

五、loop () 主循环

  1. void loop() {
  2.         if ((accelerometer.isGesture(accelerometer.TiltForward))) {
  3.                 Radio.send("qian");
  4.                 rgb.write(1, 0x00FF00);
  5.                 display.setCursorLine(3);
  6.                 display.printLine("前进");
  7.         }
  8.         if ((accelerometer.isGesture(accelerometer.TiltBack))) {
  9.                 Radio.send("hou");
  10.                 rgb.write(1, 0xFF0000);
  11.                 display.setCursorLine(3);
  12.                 display.printLine("后退");
  13.         }
  14.         if ((accelerometer.isGesture(accelerometer.TiltLeft))) {
  15.                 Radio.send("zuo");
  16.                 rgb.write(1, 0x0000FF);
  17.                 display.setCursorLine(3);
  18.                 display.printLine("左横走");
  19.         }
  20.         if ((accelerometer.isGesture(accelerometer.TiltRight))) {
  21.                 Radio.send("you");
  22.                 rgb.write(1, 0xFF9900);
  23.                 display.setCursorLine(3);
  24.                 display.printLine("右横走");
  25.         }
  26. }
复制代码

1. `accelerometer.isGesture()`:循环轮询姿态;
2. **关键特性(和 UDP 姿态方案最大区别)**
只要持续保持倾斜姿态,loop 不断循环,就会**持续重复发送无线指令**;
适配需求:小车持续行进。
3. 每种姿态下发对应指令,同时点亮第 1 颗 RGB 灯,屏幕第 3 行刷新状态;
4. 代码**没有检测 “放平姿态”**:当你松开倾斜、板子回正后,不会自动发送停车指令`ting`,小车继续运行;想要停车必须手动按 B 键。

六、按键回调函数

  1. void onButtonAPressed() {
  2.         Radio.send("deng");
  3.         rgb.write(1, 0xFFFFFF);
  4.         display.setCursorLine(3);
  5.         display.printLine("开灯");
  6. }
  7. void onButtonBPressed() {
  8.         Radio.send("ting");
  9.         rgb.write(1, 0x6600CC);
  10.         display.setCursorLine(3);
  11.         display.printLine("停车");
  12. }
复制代码

- A 键:发送指令`deng`,用于控制小车车载灯光;
- B 键:发送指令`ting`,强制小车停机;
- 按键属于边沿触发:按下一瞬间发送一次指令,不会持续发包。

# 指令映射总表

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图1

# 五大核心要点解读

## 1. 通信方式:2.4G 私有射频 vs UDP WiFi

- 2.4G Radio:不需要 WiFi 热点、无路由器,点对点直连;延迟低;缺点传输距离有限、不能接入互联网;
- 你之前 UDP 方案依靠 WiFi 组网,本套方案为独立射频方案。

## 2. 两种检测机制并存

- 姿态:loop 循环轮询 → **持续倾斜持续发包**(持续运动)
- 按键:异步回调 → **按下瞬间单次发包**

## 3. 重大逻辑短板(实操重点)

板子放平后不会自动发送停车指令!
场景问题:遥控松手,小车继续行驶,只能依靠 B 按键人工停机。
优化思路:增加判断,如果没有任何倾斜姿态,持续发送`ting`。

## 4. 射频通信硬性匹配条件

1. 收发两端库统一使用`DFRobot_ESP32_Radio`;
2. `setGroup(13)`分组完全一致;
3. 指令字符串大小写完全一致。

## 5. 适配车型

代码标注:三驱动全向轮小车;指令`qian/hou/zuo/you`可以直接给三轮全向轮或者四轮麦克纳姆轮小车共用,只需要接收端电机逻辑对应修改。

# 配套运行要求

1. Mind + 扩展库:MPython、DFRobot ESP32 Radio;
2. 开发板选择:掌控板;
3. 上电顺序无强制要求,射频模块上电后自动搜索同分组设备;
4. 需要配套【行空板 K10 射频接收端】代码,识别上述 6 条指令驱动电机。

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-7-24 17:20:38

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车

Mind+图形编程

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图1
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-7-24 17:23:44

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车

行空板K10无线广播(简版蓝牙)接收端小车

【花雕动手做】行空板 K10 系列实验之简版蓝牙掌控板陀螺仪三驱全向福来轮小车

实验开源代码

  1. // 语音播报驱动库,提供TTS文本转语音朗读功能
  2. #include "asr.h"
  3. // 行空板K10硬件底层库:屏幕、画布、RGB灯带驱动
  4. #include "unihiker_k10.h"
  5. // microbit电机拓展板库,控制M1/M2/M3直流电机(三驱动全向轮)
  6. #include <Microbit_Motor.h>
  7. // DFRobot 2.4G私有射频通信库,接收掌控板遥控器下发无线指令
  8. #include <DFRobot_ESP32_Radio.h>
  9. // 函数前置声明:不同射频指令对应的回调函数
  10. void onRadioReceive_0();  // 收到指令"qian"触发
  11. void onRadioReceive_1();  // 收到指令"hou"触发
  12. void onRadioReceive_2();  // 收到指令"deng"触发
  13. void onRadioReceive_3();  // 收到指令"zuo"触发
  14. void onRadioReceive_4();  // 收到指令"ting"触发
  15. // 全局对象实例化
  16. DFRobot_ESP32Radio Radio;    // 2.4G射频通信对象
  17. Microbit_Motor     motorbit; // 三路电机驱动对象(三驱动全向轮底盘)
  18. UNIHIKER_K10       k10;      // 行空板K10主控硬件对象
  19. uint8_t            screen_dir=2; // 屏幕方向参数2:正向竖屏显示
  20. ASR                asr;     // TTS语音播报对象
  21. // 上电初始化函数,通电/复位仅执行一次
  22. void setup() {
  23.     // 绑定射频字符串指令与回调函数:收到指定文本自动执行对应函数
  24.         Radio.setCallback("qian", onRadioReceive_0);
  25.         Radio.setCallback("hou", onRadioReceive_1);
  26.         Radio.setCallback("deng", onRadioReceive_2);
  27.         Radio.setCallback("zuo", onRadioReceive_3);
  28.         Radio.setCallback("ting", onRadioReceive_4);
  29.     // 初始化行空板全部硬件驱动
  30.         k10.begin();
  31.     // 初始化屏幕显示方向
  32.         k10.initScreen(screen_dir);
  33.     // 创建绘图画布,文字图形必须绘制在画布才能输出屏幕
  34.         k10.creatCanvas();
  35.     // 设置语音播报语速,数值越大语速越快,范围1~5
  36.         asr.setAsrSpeed(2);
  37.     // 开启2.4G射频模块
  38.         Radio.turnOn();
  39.     // 设置射频通信分组13
  40.     // 关键:遥控器掌控板必须同样 setGroup(13),分组不一致无法通信
  41.         Radio.setGroup(13);
  42.     // 设置屏幕背景黑色 0x000000
  43.         k10.setScreenBackground(0x000000);
  44.     // 在画布第5行绘制白色标题文字
  45.         k10.canvas->canvasText("行空板K10全向轮小车", 5, 0xFFFFFF);
  46.     // 刷新画布,文字显示到屏幕
  47.         k10.canvas->updateCanvas();
  48.     // 设置RGB灯带全局亮度等级6(0~255)
  49.         k10.rgb->brightness(round(6));
  50.     // 上电语音提示:文本转语音播报
  51.         asr.speak("行空板小车准备就绪");
  52. }
  53. // 主循环
  54. void loop() {
  55.     // 全部功能依靠射频异步回调触发,无需循环轮询,循环留空
  56. }
  57. // ======================射频指令回调函数======================
  58. // 收到指令【qian】前进
  59. void onRadioReceive_0() {
  60.         motorbit.motorStop(M1);                // M1电机停止
  61.         motorbit.motorRun(M2, CW, 200);        // M2正转,速度200
  62.         motorbit.motorRun(M3, CCW, 200);       // M3反转,速度200
  63.         k10.rgb->write(-1, 0x00FF00);          // 全部RGB灯绿色
  64. }
  65. // 收到指令【hou】后退
  66. void onRadioReceive_1() {
  67.         motorbit.motorStop(M1);                // M1电机停止
  68.         motorbit.motorRun(M2, CCW, 200);       // M2反转
  69.         motorbit.motorRun(M3, CW, 200);        // M3正转
  70.         k10.rgb->write(-1, 0xFF0000);          // 全部RGB灯红色
  71. }
  72. // 收到指令【deng】开灯+语音播报
  73. void onRadioReceive_2() {
  74.         k10.rgb->write(-1, 0xFFFFFF);          // 全部RGB白色常亮
  75.         asr.speak("打开白色灯光");             // TTS语音播报
  76. }
  77. // 收到指令【zuo】转圈(三轮全向轮横向移动逻辑)
  78. void onRadioReceive_3() {
  79.         motorbit.motorRun(M1, CW, 200);        // M1正转
  80.         motorbit.motorRun(M2, CW, 200);        // M2正转
  81.         motorbit.motorRun(M3, CW, 200);        // M3正转
  82.         k10.rgb->write(-1, 0x0000FF);          // 全部RGB蓝色
  83. }
  84. // 收到指令【ting】整车停止
  85. void onRadioReceive_4() {
  86.         motorbit.motorStop(ALL);               // 停止所有电机
  87.         k10.rgb->write(-1, 0x6600CC);          // 全部RGB紫蓝色
  88.         asr.speak("小车停止");                 // 语音播报停车提示
  89. }
复制代码


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-7-24 17:33:28

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车

# 行空板 K10【三轮全向轮小车 2.4G 射频接收端】代码解读

一、头文件清单

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

1. `asr.h`:离线 TTS 语音播报库,实现中文文本朗读;
2. `unihiker_k10.h`:行空板 K10 硬件驱动,管理屏幕画布、RGB 灯带;
3. `Microbit_Motor.h`:多路直流电机驱动库,控制 M1/M2/M3 三路电机;
4. `DFRobot_ESP32_Radio.h`:DFRobot 私有 2.4G 射频通信库,无线接收掌控板遥控器下发指令,**无需 WiFi**。

二、函数前置声明

  1. void onRadioReceive_0();
  2. void onRadioReceive_1();
  3. void onRadioReceive_2();
  4. void onRadioReceive_3();
  5. void onRadioReceive_4();
复制代码

预先声明射频指令对应的回调函数。
该射频库特色:支持直接绑定【字符串指令→回调函数】,收到指定报文自动触发对应函数,不需要手动写大量 if 判断。

三、全局对象与变量

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

- `Radio`:2.4G 射频通信实例;
- `motorbit`:三路电机驱动对象;
- `k10`:行空板主控硬件对象;
- `screen_dir=2`:屏幕正向竖屏;
- `asr`:语音播报实例。

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

  1. void setup() {
  2.         Radio.setCallback("qian", onRadioReceive_0);
  3.         k10.begin();
  4.         Radio.setCallback("hou", onRadioReceive_1);
  5.         Radio.setCallback("deng", onRadioReceive_2);
  6.         Radio.setCallback("zuo", onRadioReceive_3);
  7.         Radio.setCallback("ting", onRadioReceive_4);
  8.         k10.initScreen(screen_dir);
  9.         k10.creatCanvas();
  10.         asr.setAsrSpeed(2);
  11.         Radio.turnOn();
  12.         Radio.setGroup(13);
  13.         k10.setScreenBackground(0x000000);
  14.         k10.canvas->canvasText("行空板K10全向轮小车", 5, 0xFFFFFF);
  15.         k10.canvas->updateCanvas();
  16.         k10.rgb->brightness(round(6));
  17.         asr.speak("行空板小车准备就绪");
  18. }
复制代码

逐行解析:

1. `Radio.setCallback("指令文本", 回调函数)`
建立映射关系:收到对应无线字符串,自动执行绑定函数;
2. `k10.begin()`:初始化屏幕、RGB 等全部板载硬件;
3. `initScreen + creatCanvas`:初始化屏幕方向、创建绘图画布;
4. `asr.setAsrSpeed(2)`:设置语音播报语速(1~5,数字越大越快);
5. `Radio.turnOn()`:打开射频收发模块;
6. `Radio.setGroup(13)` 设置射频通信分组
> 硬性要求:掌控板遥控器必须同样设置`setGroup(13)`,分组不一致完全无法通信;
7. 设置黑色屏幕底色,打印标题并刷新画布;
8. 设置 RGB 全局亮度;
9. 上电自动语音播报:行空板小车准备就绪。

五、loop () 主循环

  1. void loop() {
  2. }
复制代码

全部业务由射频异步回调驱动,不需要轮询网络,循环空置,CPU 占用极低。

六、射频接收回调函数(核心执行逻辑)

### 1. 收到指令 `qian` 前进

  1. void onRadioReceive_0() {
  2.         motorbit.motorStop(M1);
  3.         motorbit.motorRun(M2, CW, 200);
  4.         motorbit.motorRun(M3, CCW, 200);
  5.         k10.rgb->write(-1, 0x00FF00);
  6. }
复制代码

M1 停机,M2 正转、M3 反转;整车向前行驶;全部 RGB 绿色。

### 2. 收到指令 `hou` 后退

  1. void onRadioReceive_1() {
  2.         motorbit.motorStop(M1);
  3.         motorbit.motorRun(M2, CCW, 200);
  4.         motorbit.motorRun(M3, CW, 200);
  5.         k10.rgb->write(-1, 0xFF0000);
  6. }
复制代码

M1 停机,M2 反转、M3 正转;整车后退;全部 RGB 红色。

### 3. 收到指令 `deng` 开灯

  1. void onRadioReceive_2() {
  2.         k10.rgb->write(-1, 0xFFFFFF);
  3.         asr.speak("打开白色灯光");
  4. }
复制代码

电机不动作;RGB 全白;语音播报提示。

### 4. 收到指令 `zuo` 左横走(三轮全向轮特有运动)

  1. void onRadioReceive_3() {
  2.         motorbit.motorRun(M1, CW, 200);
  3.         motorbit.motorRun(M2, CW, 200);
  4.         motorbit.motorRun(M3, CW, 200);
  5.         k10.rgb->write(-1, 0x0000FF);
  6. }
复制代码

三路电机全部同向旋转,产生横向推力,小车向左平移;RGB 蓝色。

### 5. 收到指令 `ting` 停车

  1. void onRadioReceive_4() {
  2.         motorbit.motorStop(ALL);
  3.         k10.rgb->write(-1, 0x6600CC);
  4.         asr.speak("小车停止");
  5. }
复制代码

停止全部电机;RGB 紫蓝色;语音播报小车停止。

# 指令完整对照表

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图1

# 整套项目通信架构

- **发送端:掌控板(陀螺仪姿态遥控器)**
2.4G 射频,分组 13;倾斜板子持续发送`qian/hou/zuo/you`;B 按键发送`ting`停车。
- **接收端:本段代码(行空板 K10 小车)**
射频接收指令,驱动三轮全向轮底盘、灯光、语音。

# 四大重点特性与现存问题

## 1. 射频绑定机制优势

不需要在同一个接收函数内写大量`if(message == "")`判断;指令分发由库底层完成,代码结构清晰。

## 2. 适配底盘:三轮全向轮

运动逻辑**不能直接照搬四轮麦克纳姆轮程序**。
三轮全向轮横向移动依靠三台电机同方向旋转实现。

## 3. 明显缺陷【实操重点】

1. 遥控器持续倾斜 → 持续发送运动指令;遥控器放平**不会自动发送 ting**。
现象:松开遥控器倾斜姿态,小车继续行驶,必须手动按 B 键下发停车指令。
2. 遥控器存在`you`右横走指令,**本接收代码没有绑定 "you" 回调**;向右倾斜遥控器,小车无任何响应。

## 4. 通信特点

DFRobot\_ESP32\_Radio 属于私有 2.4G 射频:
无需路由器、无热点组网;延迟低;
无法接入互联网,传输距离有限。

# 运行前置条件

1. Mind + 扩展库必须全部添加:
unihiker\_k10、Microbit\_Motor、DFRobot\_ESP32\_Radio、asr 语音库
2. 开发板型号:行空板 K10(esp32s3bit);
3. 上电顺序建议:先启动小车接收端,再开启掌控板遥控器;
4. 电机拓展板接线:M1 M2 M3 对应三轮全向轮三个驱动电机。


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-7-24 17:36:23

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车

Mind+图形编程

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图1
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-7-24 17:37:37

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车

实验场景图与视频记录

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图2

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图1
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2026-7-24 18:04:56

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车

【花雕动手做】K10简版蓝牙掌控板陀螺仪三驱全向轮小车图1


【【驴友花雕】行空板 K10 系列实验之简版蓝牙掌控板陀螺仪三驱全向福来轮小车 #DIY动手做 #智能小车编程 #机器人小车 #人工智能技术 #科技改变生活】

https://www.bilibili.com/video/BV1Uiga6PEgU/?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