mixly实现esp32_ps2手柄遥控可调速八轮装甲小车

一 实现思路

摘要: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画图效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


二 展示

1 图片

在这里插入图片描述


2 视频


  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是一个基于ESP32的MicroPython代码,它可以使用PS2手柄作为遥控器控制小车: ``` from machine import Pin, PWM import time # 定义PS2手柄控制引脚 joystick_x = Pin(4) joystick_y = Pin(5) # 定义电机驱动引脚 motor_left = PWM(Pin(14), freq=1000, duty=0) motor_right = PWM(Pin(12), freq=1000, duty=0) while True: # 读取手柄的X轴和Y轴位置 x = joystick_x.value() y = joystick_y.value() # 根据手柄的位置控制电机转动 if y > 0.5: # 前进 motor_left.duty(y * 1023) motor_right.duty(y * 1023) elif y < -0.5: # 后退 motor_left.duty(-y * 1023) motor_right.duty(-y * 1023) elif x > 0.5: # 向右转 motor_left.duty(x * 1023) motor_right.duty(-x * 1023) elif x < -0.5: # 向左转 motor_left.duty(-x * 1023) motor_right.duty(x * 1023) else: # 停止 motor_left.duty(0) motor_right.duty(0) time.sleep_ms(20) ``` 请注意,此代码仅作为示例,可能需要根据实际电路进行调整。 ### 回答2: 下面是一个基于esp32ps2手柄小车代码的示例。这个代码使用了microPython编程语言,实现小车的前进、后退、左转和右转功能。 ```python # 导入所需的库 from machine import Pin, PWM from time import sleep # 定义引脚 left_motor = PWM(Pin(13, Pin.OUT), freq=1000) right_motor = PWM(Pin(12, Pin.OUT), freq=1000) ps2_data = Pin(14, Pin.IN, Pin.PULL_UP) ps2_command = Pin(27, Pin.IN, Pin.PULL_UP) ps2_attention = Pin(26, Pin.IN, Pin.PULL_UP) ps2_clock = Pin(25, Pin.OUT) # 定义小车的前进、后退、左转和右转函数 def move_forward(): left_motor.duty(500) right_motor.duty(500) def move_backward(): left_motor.duty(-500) right_motor.duty(-500) def turn_left(): left_motor.duty(-500) right_motor.duty(500) def turn_right(): left_motor.duty(500) right_motor.duty(-500) # 读取ps2手柄的按键状态并控制小车运动 while True: if ps2_data.value() == 0: command = '' for bit in range(8): ps2_clock.on() command += str(ps2_command.value()) ps2_clock.off() if command == '00000001': move_forward() elif command == '00000010': move_backward() elif command == '00000100': turn_left() elif command == '00001000': turn_right() sleep(0.01) ``` 上述代码首先导入必要的库,并定义了引脚的配置。然后,定义了小车的前进、后退、左转和右转函数。在主循环中,通过读取ps2手柄的按键状态,判断用户的操作,并调用相应的函数来控制小车的运动。 当按下手柄上的向前键时,小车会向前行驶;当按下向后键时,小车会倒退;当按下向左键时,小车会向左转动;当按下向右键时,小车会向右转动。 这个示例代码可以通过将其保存为.py文件,并在esp32上运行来控制小车的运动。需要注意的是,具体的引脚配置和控制逻辑可能会根据实际硬件和ps2手柄的不同而有所变化,因此需要根据实际情况进行适当的修改。 ### 回答3: 要使用MicroPython编写一个基于ESP32的可用PS2手柄遥控小车代码,你可以按照以下步骤完成。 步骤1:引入相关库和初始化 首先,引入“upygame”库和“amg_ps2”库,它们将帮助你读取PS2手柄的输入。接着,初始化其他所需变量和引脚。 步骤2:设置WiFi连接和启用网络 设置ESP32连接到Wi-Fi网络,以便你可以通过网络控制小车。然后启用网络连接。 步骤3:创建小车的控制函数 创建一个函数,用于控制小车的运动。这个函数将读取PS2手柄的输入,并根据输入值控制小车的马达(电机)运动。 步骤4:创建主循环 在主循环中,你需要不断读取PS2手柄的输入,并将其传递给小车的控制函数进行处理。得到控制信号后,即可控制小车进行相应的运动。 步骤5:编写完整代码 现在,将上述步骤中的代码整合到一起,并增加适当的注释。确保代码正确无误。 步骤6:上传代码到ESP32 使用适当的工具(如uPyCraft、Thonny等)将编写好的代码上传到ESP32。 这样,你就成功编写了一个基于ESP32的能够使用PS2手柄远程控制的小车代码。当运行代码并连接到Wi-Fi网络后,你可以使用PS2手柄的输入来控制小车的运动。记得在代码中适当处理异常情况,以确保代码的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值