制作蓝牙遥控小车
小车的搭建与遥控-75步
小车的接线参考
舵机接线
首先要确认舵机在开合/抬放的角度, 示例程序中的舵机为270°舵机。
- 机械臂P4:最高点为200度,最低点为100度。(可根据自身情况作调整)
- 爪子P1:张开为160,闭合为60度。(可根据自身情况作调整)
其他接线
左循迹传感器接线:P8
中循迹传感器接线:P3
右循迹传感器接线:P2
左马达接线:P5
右马达接线:P6
示意图
正确的连线应当可以使用如下程序进行手动控制:
程序上传完成后
内置屏幕的顶部会显示蓝牙从机,
中间会显示设备名称
底部会显示设备mac地址
遥控方式
目前提供2种遥控小车的方式,任选其一。
1.软件遥控(通过设备名称)
(1)基于安卓系统的手机或平板可以选择下载对应的软件:
(2)开启蓝牙,给予相关权限
(3)打开软件,点击右上角扫描设备
,
(4)在扫描结果中,根据设备名称
选择你的设备
(5)选择成功后会回到遥控界面进行遥控。
小部分手机使用遥控软件会出现报错、无法连接、搜不到设备等情况。请尝试更换手机。
上下左右控制小车的前进后退左右移动。
B键控制机械臂的上升
C键控制机械臂的下降
E键控制爪子的张开
F键控制爪子的闭合
A键控制左轮加速
D键控制右轮加速
2.自制蓝牙遥控手柄(通过mac地址)
可以使用同样通信频率的设备进行遥控
你需要2个摇杆传感器与适配的连接线 + 1块相同频 率的主控(例如 开源星火)+ DC接口的电池盒 + 电池 + 一卷电工胶带
将第一个摇杆(左遥感)的X轴、Y轴、B按钮 分别连接到主控的P32、P33、P34
将第二个遥杆(右遥感)的X轴、Y轴、B按钮 分别连接到主控的P35、P36、P39
接着打开代码编辑器,查看并修改下面的代码
其中:ble_c.connect(mac='4827e28b7af2')
中的mac地址需要根据你自己小车的地址进行修改。
修改完成后:
- 打开上传需要被遥控的小车,切换到手动程序。
- 上传代码后等待2-5秒,终端输出蓝牙地址,即可控制。
- 成功控制后打开遥控器的外置电源,拔下数据线,即可实现离线遥控
- 理论上后续再次打开遥控器电源即可自动连接(若无法自动连接再次上传程序即可)
左遥杆(控制移动):
上下左右对应前后左右移动
右遥杆(控制舵机):
左:爪子闭F
右:爪子张E
上:机械臂抬B
下:机械臂降C
左遥杆按下:左轮加速A
右遥杆按下:右轮加速D
下面代码中每次信号发送的间隔为100ms,不用调低。因为职业电竞选手的反应时间为150ms,所以你可以放心的控制。
import machine
import ble_central
import time
adc32 = machine.ADC(machine.Pin(32))
adc33 = machine.ADC(machine.Pin(33))
adc34 = machine.ADC(machine.Pin(34))
adc35 = machine.ADC(machine.Pin(35))
adc36 = machine.ADC(machine.Pin(36))
adc39 = machine.ADC(machine.Pin(39))
adc32.atten(machine.ADC.ATTN_11DB)
adc33.atten(machine.ADC.ATTN_11DB)
adc34.atten(machine.ADC.ATTN_11DB)
adc35.atten(machine.ADC.ATTN_11DB)
adc36.atten(machine.ADC.ATTN_11DB)
adc39.atten(machine.ADC.ATTN_11DB)
ble_c = ble_central.BLESimpleCentral()
ble_c.connect(mac='4827e28b7af2')
data = {'32': '静默', '33': '静默', '34': '静默', '35': '静默', '36': '静默', '39': '静默'}
lastData = {'32': None, '33': None, '34': None, '35': None, '36': None, '39': None}
while True:
adc_values = {'32': adc32.read_u16(), '33': adc33.read_u16(), '34': adc34.read_u16(), '35': adc35.read_u16(), '36': adc36.read_u16(), '39': adc39.read_u16()}
for pin, value in adc_values.items():
if 0 < value < 65000:
if data[pin] in ['上按下', '右按下', 'A按下', 'E按下', 'B按下', 'D按下']:
data[pin] = data[pin][0] + '释放'
elif data[pin] in ['下按下', '左按下', 'F按下', 'C按下']:
data[pin] = data[pin][0] + '释放'
elif value >= 65000:
if pin == '32':
data[pin] = '上按下'
elif pin == '33':
data[pin] = '左按下'
elif pin == '34':
data[pin] = 'A释放'
elif pin == '35':
data[pin] = 'B按下'
elif pin == '36':
data[pin] = 'F按下'
elif pin == '39':
data[pin] = 'D释放'
elif value <= 0:
if pin == '32':
data[pin] = '下按下'
elif pin == '33':
data[pin] = '右按下'
elif pin == '34':
data[pin] = 'A按下'
elif pin == '35':
data[pin] = 'C按下'
elif pin == '36':
data[pin] = 'E按下'
elif pin == '39':
data[pin] = 'D按下'
if data[pin] != lastData[pin]:
if data[pin] != '静默':
ble_c.send(f'{data[pin]}')
lastData[pin] = data[pin]
time.sleep_ms(100)