清泛IT社区
标题:
我帮儿子用App Inventor 2给遥控车装了"蓝牙大脑",手机一划车就动
[打印本页]
作者:
App Inventor 2
时间:
昨天 19:59
标题:
我帮儿子用App Inventor 2给遥控车装了"蓝牙大脑",手机一划车就动
周五晚上,儿子抱着他那辆吃灰半年的遥控车跑来问我:"爸爸,能不能让手机控制它?我想躺在床上就能让它跑。"看着他期待的眼神,我决定用App Inventor 2的蓝牙组件试试。没想到两小时就搞定了,而且连接稳定性和操控体验远超预期。
需求分析
儿子想要的是:手机屏幕上显示方向键,手指滑动时遥控车前进、后退、左右转。听起来简单,但拆解一下核心难点:
1.
双向通信
:手机要发送指令给车,车上的单片机要能接收并解析
2.
实时响应
:方向盘操作不能有可见延迟
3.
连接稳定
:不能玩着玩着就断连
4.
低成本
:已有的遥控车不想大拆大改
蓝牙经典串口(SPP)方案最合适——硬件端用HC-05蓝牙模块(十几块钱),手机端用App Inventor 2的蓝牙客户端组件,串口透传,开箱即用。
技术方案
硬件端
- 遥控车原有电路不动,额外并联一个HC-05蓝牙模块
- HC-05的TX/RX接Arduino Nano的RX/TX(注意交叉)
- Arduino读取蓝牙数据后,通过MOS管驱动原有遥控车的电机控制信号
软件端(App Inventor 2)
核心组件清单:
-
BluetoothClient
— 蓝牙连接与数据收发
-
Canvas + Ball
— 模拟方向盘
-
Clock(定时器)
— 方向盘位置到指令的轮询转换
-
ListPicker
— 显示已配对蓝牙设备列表
关键实现
第一步:蓝牙连接
当 Screen1.初始化
执行 ListPicker1.元素列表 设为 BluetoothClient1.地址及名称
用户点击ListPicker选择设备后:
当 ListPicker1.选择完成
执行 BluetoothClient1.连接(ListPicker1.选中项)
连接成功后,Clock定时器每100ms读取方向盘位置并发送指令。
第二步:方向盘交互
在Canvas上画一个十字参考线,Ball组件作为操纵杆。当用户在Canvas上拖动时,限制Ball的移动范围并计算偏移方向:
当 Canvas1.触屏拖动(起始x, 起始y, 当前x, 当前y, 触控点id)
执行 如果 当前位置_半径 > 50
则 将Ball限制在圆内
否则 将Ball位置设为(当前x, 当前y)
第三步:指令编码
我自定义了一个简单的通信协议——4字节指令包:
字节 | 含义 | 值范围
0x01 | 前进速度 | 0到100
0x02 | 转向角度 | 左-50到右50
0x03 | 校验位 | 前两字节异或
0x04 | 帧尾 | 0xFF
发送代码:
当 Clock1.计时
执行 调用 BluetoothClient1.发送字节数组(合并列表(
列表(从Ball的Y偏移计算的速度值)
列表(从Ball的X偏移计算的转向值)
列表(校验值)
列表(255)
))
第四步:Arduino端解析
Arduino收到数据后:
if (Serial.available() >= 4) {
byte speed = Serial.read();
byte steer = Serial.read();
byte checksum = Serial.read();
byte footer = Serial.read();
if (footer == 0xFF && (speed ^ steer) == checksum) {
analogWrite(motorPin, speed);
servoWrite(steerPin, map(steer, -50, 50, 0, 180));
}
}
踩过的坑
坑1:蓝牙连接后发不出数据
检查了半小时发现——HC-05默认波特率是9600,而Arduino代码里写的是115200。改成9600后瞬间连通。
坑2:指令多了车会卡顿
一开始每10ms发一次指令,结果Arduino缓冲区溢出。把发射间隔调到100ms,同时接收端加了个简单的滑动平均滤波,操控丝滑了。
坑3:BluetoothClient没有"收到数据时"事件
App Inventor 2自带的蓝牙客户端组件没有接收到数据自动触发的事件,必须用Clock定时器轮询。这在双向通信场景下比较麻烦,好在我的场景主要是手机单向发送指令,问题不大。
最终效果
成果超出预期:
- 手机放在沙发上,20米内流畅控制(HC-05标称10米,实测无遮挡30米都可控)
- 方向盘实时映射,没有肉眼可见的延迟
- 儿子现在每天放学玩半小时,遥控车再也没吃灰
复盘感悟
这次实践让我深刻体会到App Inventor 2在IoT原型验证中的价值。从想法到可玩的原型,只用了两小时。蓝牙组件虽然功能上不如专业的SPP库强大,但对于80%的消费级蓝牙通信场景完全够用。
如果你想深入了解蓝牙组件的详细属性、方法列表,可以查阅
App Inventor 2 中文网蓝牙客户端文档
。需要进阶功能(比如BLE低功耗蓝牙),网站上也提供了完善的拓展方案。
给新手朋友的建议
:先跑通demo再改自己的项目!
蓝牙SPP Demo
下载后直接打开就能用,把通信机制跑通了,再往自己的App里移植会少走很多弯路。
欢迎光临 清泛IT社区 (https://bbs.tsingfun.com/)
Powered by Discuz! X3.3