概述
App Inventor 2提供LEGO MINDSTORMS EV3组件,可以直接通过蓝牙连接EV3,读取各种传感器。
已有文档:bluetooth_remote.md 介绍了蓝牙通信。本文聚焦EV3超声波传感器。
EV3组件
添加组件
组件面板 → LEGO MINDSTORMS → **Ev3 Ultrasonic Sensor`
支持的EV3组件
| 组件 | 说明 |
|---|---|
| Ev3Motors | 电机控制 |
| Ev3ColorSensor | 颜色传感器 |
| Ev3GyroSensor | 陀螺仪 |
| Ev3Sound | 声音 |
| Ev3TouchSensor | 触摸传感器 |
| Ev3UltrasonicSensor | 超声波传感器 |
| Ev3UI | EV3屏幕显示 |
蓝牙连接EV3
when 按钮_连接.Click() {
蓝牙客户端1.Secure = true
蓝牙客户端1.Connect(10)
}
when 蓝牙客户端1.Connect(设备名, 地址) {
if textContains(设备名, "EV3") {
标签_状态.Text = "✅ 已连接EV3"
EV3超声波传感器1.BluetoothClient = 蓝牙客户端1
EV3超声波传感器1.SensorPort = "4" // EV3端口4
计时器_读取.TimerEnabled = true
}
}
读取超声波距离
连续读取
计时器_读取.TimerInterval = 200 // 200ms读取一次
when 计时器_读取.Timer() {
var 距离 = EV3超声波传感器1.GetDistance()
if 距离 > 0 {
标签_距离.Text = join("距离:", formatDecimal(距离, 1), " cm")
// 距离预警
if 距离 < 20 {
标签_预警.Text = "⚠️ 太近!"
标签_预警.TextColor = 红色
} else if 距离 < 50 {
标签_预警.Text = "注意距离"
标签_预警.TextColor = 橙色
} else {
标签_预警.Text = "安全"
标签_预警.TextColor = 绿色
}
}
}
单次读取
when 按钮_测量.Click() {
var 距离 = EV3超声波传感器1.GetDistance()
标签_距离.Text = join(距离, " cm")
}
实战案例:避障小车
global 左电机端口 = "B"
global 右电机端口 = "C"
global 自动模式 = false
when 按钮_自动.Click() {
global 自动模式 = true
前进()
}
procedure 前进() {
Ev3Motors1.RotateInDuration(左电机端口, 50, 1000, false)
Ev3Motors1.RotateInDuration(右电机端口, 50, 1000, false)
}
when Clock1.Timer() {
if (自动模式) {
global 距离 = EV3超声波传感器1.GetDistance()
if ((距离 < 20) and (距离 > 0)) {
// 遇到障碍物,后退再转弯
Ev3Motors1.RotateInDuration(左电机端口, -50, 500, true)
Ev3Motors1.RotateInDuration(右电机端口, -50, 500, true)
// 右转
Ev3Motors1.RotateInDuration(左电机端口, 50, 300, true)
Ev3Motors1.RotateInDuration(右电机端口, -50, 300, true)
前进()
}
}
}
when 按钮_停止.Click() {
global 自动模式 = false
Ev3Motors1.Stop(左电机端口, true)
Ev3Motors1.Stop(右电机端口, true)
}
EV3端准备
- 确保EV3固件已更新到最新版本
- 打开EV3蓝牙(设置 → Bluetooth → 勾选Visible)
- 将超声波传感器连接到指定端口(如端口4)
- EV3上不需要运行任何程序
常见问题
Q1: 无法连接EV3?
- 确保EV3蓝牙已打开且可见
- 先在手机蓝牙设置中配对EV3
- EV3蓝牙名称通常是 “EV3” + 后缀
- 部分手机需要输入配对码 “1234”
Q2: 超声波读数为0或负数?
- 检查传感器端口是否正确(1-4)
- 确认传感器已牢固连接到EV3
- 超出测量范围时(>250cm或<3cm)读数不准确
Q3: 读取速度慢?
蓝牙通信有延迟。EV3传感器读取间隔建议 ≥ 100ms。降低Clock间隔可以提高频率但不建议低于100ms。
总结
| 项目 | 说明 |
|---|---|
| 连接方式 | 蓝牙(BluetoothClient) |
| 传感器组件 | Ev3UltrasonicSensor |
| 测量范围 | 3-250 cm |
| 精度 | ±1 cm |
| 读取间隔 | 建议 ≥ 100ms |
扫码添加客服咨询