一 实现思路
摘要:esp32,ps2手柄,mixly,遥控小车,可调速,平滑起步与停止
1 项目简介
1 项目效果
通过ps2手柄控制小车的移动:
左侧上下左右
控制小车移动
;
右侧三角圆X方
控制大炮
上下与左右运动;
左侧2肩键
控制调整左侧4轮子转速
;
右侧2肩键
控制调整右侧4轮子转速
;
中间start键
回复初始速度
;
左侧遥杆
仅控制小车前进后退
;
右侧摇杆
仅控制小车左转右转
;
2 实现方式
通信使用esp32开发板(其余开发板皆可)用于和ps2手柄通讯,使用mixly编写程序来实现:通过按下手柄按键
,达成让小车做出响应
的效果。硬件元器件设计:舵机,直流减速电机+配套轮子,驱动板,ps2无线手柄_代接收器等等。最后使用3donecut设计外壳,实现拼装。
2 项目构成
1 软件环境
上传程序: mixly(选esp32开发板,自带有PS2X_lib库)
外壳设计:3donecut
2 所需硬件
开发板:esp32
元器件:sg90舵机,直流减速电机,驱动板,ps2手柄+接收器,降压模块(12v转5v),DC母座带班(电池接口转换),led灯板(亮度表示速度快慢)
其它:轮子,木板,12V可充电电池
硬件接线:减速电机通过驱动板与主控板连接,ps2接收器,舵机等直连开发板。
3 原理总结
首先:重点需实现 手柄通讯,移动, 调速功能
其次:手柄通讯通过mixly自带的库能简单实现按下手柄某一个键完成某一功能的效果;通过按下方向键时才给直流电机供电,实现小车所有的移动功能;调速功能通过调节模拟引脚输出值来调节转速。
强调:代码的执行顺序问题,诸如:前后左右键若视为同一刻只按下一个键
时,就可以把不同的移动的代码放在一个多分支if语句中;遥杆将前后与左右分开执行
,故用多个单分支语句执行,在loop函数中,在实现效果上可以近似视为并行
;最后是舵机的角度写入,若在if语句中直接写入舵机角度,可能出现仅能操作舵机,移动失灵的效果。故最好将舵机角度设为一个变量,在loop函数中重复写入舵机角度,这样能消除影响。这是个人的方法,重点是深入理解代码执行顺序,才能有效解决问题。
手柄——>ps2接收器——>esp32开发板——>硬件模块响应
3 代码实现
1 功能分类
功能 | 原理 |
---|---|
1 前后左右 | 将上下右移动设为4个函数,按下对应键执行相应函数,否则停止移动。代码放在一个多分支语句中 |
2 摇杆 | 同样设置4个对应移动函数,记为left_qian,left_hou等。代码放在多个单分支if语句 |
3 舵机 | 通过设置变量pos1,pos2,间接写入舵机角度,使用三目运算符设置角度极限 |
4 加速减速 | 通过设置变量lspeed,rspeed代表左侧4轮与右侧4轮速度,通过变量间接调整舵机转速 |
灯光 | led灯通过模拟引脚值写入lspeed与rspeed,速度越快越亮 |
慢起步,慢停止 | flag表示起步和停止状态,设置start和end函数,起步时速度从0循环到lspeed和rspeed写入,停止时则相反。消除猛起步,猛刹车的影响 |
2 具体代码
4 外壳部分
** 画图实现**
3done画图效果: