实验02:差速小车遥控
这个实验做完你会得到什么
手机上五个方向键 + 一根调速滑动条,EV3 小车前进、后退、左转、右转、原地转圈, 松手就停。
| 项目 | 说明 |
|---|---|
| 难度 | ★★☆☆☆ |
| 用时 | 约 40 分钟 |
| 前置 | 实验01:连上机器人,连接界面直接复用 |
一、器材与组装
| 器材 | 数量 | 说明 |
|---|---|---|
| EV3 主机 | 1 | |
| EV3 大型马达 | 2 | 接 B、C 端口,装在车体两侧 |
| 轮子 + 万向轮 | — | 两个驱动轮 + 一个支撑点 |
这种结构叫差速驱动平台:两侧轮速不同就会转弯。
| 想要的动作 | 两侧轮子 |
|---|---|
| 前进 | 同速同向 |
| 后退 | 同速反向 |
| 右转 | 左轮快、右轮慢 |
| 左转 | 右轮快、左轮慢 |
| 原地打转 | 两轮反向同速 |
两个马达的安装方向通常是相对的(面对面装在车两侧),所以同一个功率值会让它们 朝相反方向转。EV3马达组件的
ReverseDirection属性可以翻转, 但更简单的办法是先试一下:点前进,车往后跑就把功率取负。
二、界面组件
在实验01 的连接界面基础上加:
| 组件 | 命名 | 关键属性 |
|---|---|---|
| 表格布局 | 表格布局1 |
3 行 3 列,放方向键 |
| 按钮 | 按钮_前 / 按钮_后 / 按钮_左 / 按钮_右 / 按钮_停 |
放在表格的上/下/左/右/中 |
| 按钮 | 按钮_原地转 |
文本「原地转圈」 |
| 滑动条 | 滑动条_功率 |
最小值 20、最大值 100、初始 50 |
| 标签 | 标签_功率 |
文本「功率:50」 |
| EV3马达 | EV3马达1 |
BluetoothClient = 蓝牙客户端1、MotorPorts = BC |
三、分步搭代码块
第 1 步:前进后退
用 RotateSyncIndefinitely(功率, 转向比) —— 两个马达同步转动,比分别控制两个组件稳。
global 功率 = 50
when 滑动条_功率.PositionChanged(thumbPosition) {
global 功率 = round(thumbPosition)
标签_功率.Text = join("功率:", 功率)
}
when 按钮_前.TouchDown() {
EV3马达1.RotateSyncIndefinitely(功率, 0)
}
when 按钮_后.TouchDown() {
EV3马达1.RotateSyncIndefinitely(-功率, 0)
}
when 按钮_前.TouchUp() {
EV3马达1.Stop(true)
}
when 按钮_后.TouchUp() {
EV3马达1.Stop(true)
}
中途验证:按住「前」车往前跑,松开停;按住「后」倒车。跑反了就把功率的正负号对调。
转向比
0= 直行。这个参数范围是 -100 ~ 100: 0 两轮同速,正数往一边偏,±100 就是原地打转。用
TouchDown/TouchUp而不是Click:按住才动、松手就停,这才是遥控的手感。
第 2 步:转弯
global 功率 = 50
when 按钮_右.TouchDown() {
EV3马达1.RotateSyncIndefinitely(功率, 50)
}
when 按钮_左.TouchDown() {
EV3马达1.RotateSyncIndefinitely(功率, -50)
}
when 按钮_右.TouchUp() {
EV3马达1.Stop(true)
}
when 按钮_左.TouchUp() {
EV3马达1.Stop(true)
}
中途验证:按住「右」车向右画弧线前进。转向比调到 50 是比较自然的转弯半径; 数字越大转得越急。
第 3 步:原地打转与急停
global 功率 = 50
when 按钮_原地转.TouchDown() {
EV3马达1.RotateSyncIndefinitely(功率, 100)
}
when 按钮_原地转.TouchUp() {
EV3马达1.Stop(true)
}
when 按钮_停.Click() {
EV3马达1.Stop(true)
}
中途验证:按住「原地转圈」,车在原地打转不前进。
留一个显式的「停」按钮很有必要:手指从按钮上滑开时
TouchUp可能不触发, 车就会一直跑。这是遥控类应用最常见的事故。
第 4 步:走固定距离(进阶)
遥控之外,也可以让车走精确的距离:
when 按钮_走一米.Click() {
EV3马达1.RotateSyncInDistance(50, 100, 0, true)
}
中途验证:点一下,车往前走约 1 米后自动停。
RotateSyncInDistance(功率, 距离, 转向比, 是否刹车),距离单位是厘米 (组件文档原文 “for a distance in cm”)—— 所以走 1 米填100,别填 1000。距离准不准取决于
WheelDiameter属性(轮子直径)—— 默认值对应标准 EV3 轮,换轮子必须改,否则误差很大。
四、排错表
| 现象 | 原因与处理 |
|---|---|
| 车往反方向跑 | 功率取负,或用 ReverseDirection 属性翻转 |
| 只有一个轮转 | MotorPorts 填的是 B 不是 BC;或某个马达线没插好 |
| 车原地打转(本该直行) | 两个马达装反了。转向比填 0 时如果还转圈,说明一侧需要 ReverseDirection |
| 松手车不停 | 手指滑出按钮导致 TouchUp 没触发。用「停」按钮兜底 |
| 转弯太急/太缓 | 调转向比,50 是常用值,30 更缓、80 更急 |
| 走的距离不准 | 距离单位是厘米不是毫米;WheelDiameter 和实际轮子不符;地面打滑 |
| 低功率时不动只嗡嗡响 | 功率低于 20 通常带不动车。滑动条最小值设 20 |
五、下一步
相关文档
- 乐高机器人组件参考
- LEGO EV3 机器人按键控制(完整示例工程,含 .aia 下载)
扫码添加客服咨询