# 基于ESP的遥控坦克 **Repository Path**: jacobjh/esp-tank ## Basic Information - **Project Name**: 基于ESP的遥控坦克 - **Description**: 本项目为模型坦克的遥控套件,MCU主控使用了ESP32S3模块,项目分为遥控端和接收端,连接协议选用的ESPNOW。 - **Primary Language**: Arduino - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 6 - **Created**: 2025-05-01 - **Last Updated**: 2025-05-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 项目简介 本项目为模型坦克的遥控套件,考虑到要有尽量高的性能以及无线功能,所以MCU主控使用了ESP32S3模块,项目分为遥控端和接收端,因为基本都是目视控制,所以连接协议选用的ESPNOW,能够获得更快的响应速度和较低的延迟。遥控板上支持两个双通道摇杆,分别控制坦克驱动电机、炮塔转动电机和炮管俯仰电机,同时接油一块OLED的显示屏,用于显示一些关键信息,比如连接状态、电池电压、摇杆数值等。接收板上除了有4个电机接口外还有电池接口、开关接口、两个5V输入接口用于连接有线充电和无线充电。 ## 项目功能 本项目是基于ESP32S3设计的遥控系统,分为遥控端和接收端,遥控端设置有两个双通道摇杆,分别用于控制接收端的4个电机驱动,支持比例控制,同时还配置了一块OLED显示屏,用于显示连接状态、电池电压、摇杆数值等相关信息,还板载了LED指示灯,分别用于显示供电状态和连接状态,并且遥控端和发射端都板载了充电电路以及电量检测电路,遥控端使用1S锂电池,接收端使用2S锂电池供电。 ## 项目参数 * 本项目主控MCU使用了ESP32S3模组,具备较高的性能以及无线连接能力; * 本项目使用了常用的13mm摇杆电位器,通用性较强; * 本项目使用了0.96寸的OLED显示屏,用于显示一些关键信息; * 本项目使用了CH340N串口芯片,并板载USB接口,可通过USB进行程序烧录; * 本项目遥控端使用了IP5306电源管理芯片,支持电池充电机同步升压转换; * 本项目接收端使用了IP2325双节锂电池充电芯片,具备较高的充电功率; * 本项目接收端使用了RZ7889电机驱动芯片,具备较高的驱动电压和电流; * 使用ADC引脚配合电阻分压电路来测量电池电压,可以直观的在显示屏上显示电池电压百分比; * 板载连接状态指示灯,当遥控端和接收端未连接时LED灯闪烁,当已连接时LED灯常亮。 ![遥控端.jpg](https://image.lceda.cn/oshwhub/pullImage/309fcacb9e2c43adbae3547b661906ef.jpg) ![接收端.jpg](https://image.lceda.cn/oshwhub/pullImage/9a633adf821f4364ac5dbd86278e457f.jpg) ## 设计原理 MCU主控: 设计满足ESP32S3最小系统需求,包括上电时序、下载、重启等; ![image.png](https://image.lceda.cn/oshwhub/pullImage/da9d18a5f75f4437afd8a31d6fee7dc1.png) 下载电路及接口: 使用CH340N串口芯片配合TYPE-C接口,即可通过USB对MCU烧录固件; ![image.png](https://image.lceda.cn/oshwhub/pullImage/a07e6ac580ba4392b85b353ed49bd44c.png) 电池充电及DCDC: 遥控端使用IP5306电源管理芯片,注意要使用型号结尾带_CK的芯片,为常开芯片,不会因为电流小进入待机状态,此芯片不仅可以对电池进行充电,并且可以升压5V输出,可以节省一个升压电路,同时支持边冲边放,使用AMS1117-3.3将5V电压降压为3.3V供MCU使用; ![image.png](https://image.lceda.cn/oshwhub/pullImage/d5e74e21152a43b1b43dcd2022342ac3.png) 接收端因为要提升电机驱动能力,所以使用了2S锂电池,在充电电路上就选用了支持2S从电的IP2325芯片,并且支持较高的充电功率; ![image.png](https://image.lceda.cn/oshwhub/pullImage/1b1d98bad2d14324b2e63da0c416b181.png) 摇杆: 遥控端摇杆使用了比较常见的13mm双通道摇杆,电位器阻值为常见的10K,同时引脚端都并联有滤波电容,软件上也设置了滤波电路,以实现更准确的摇杆数值; ![image.png](https://image.lceda.cn/oshwhub/pullImage/d037de2342dc4431ae77f68af0b75db0.png) 电池电压测量: 遥控端和接收端均采用了电阻分压的测量电路,但由于电池电压不一样,所以电路选用的阻值也不一样; ![image.png](https://image.lceda.cn/oshwhub/pullImage/904fa507a10b4e3a8123ebfa22c0ee34.png) ![image.png](https://image.lceda.cn/oshwhub/pullImage/43feffa0fe4f4a87b6df9d03e9140850.png) 显示屏: 遥控端使用了一块0.96寸OLED显示屏,分辨率为128X64,驱动芯片为SSD1315,使用IIC协议进行驱动,软件中使用U8G2进行图形显示,主要显示连接状态、电池电压、摇杆数值这些关键信息; ![image.png](https://image.lceda.cn/oshwhub/pullImage/8c690ee8a33f4662ba764145834bb543.png) 指示灯: 板载有两个LED指示灯,一个为系统电源指示灯,3.3V电源OK时指示灯常亮,另外一个为连接状态指示灯,遥控端和发射端未连接时指示灯闪烁,已连接时指示灯常亮; ![image.png](https://image.lceda.cn/oshwhub/pullImage/f08d21d61f364140a6b8cc7f28ee6117.png) 电机驱动: 接收端使用了4颗独立的直流电机驱动芯片,RZ7889具备较高的驱动电压和电流,使用电池电压直接驱动,使用一颗100UF的电容进行电压补偿; ![image.png](https://image.lceda.cn/oshwhub/pullImage/b419a97b18f0409d867a16b553a33283.png) ## 软件代码 软件设计主要分为以下几个部分: 初始化: 主控在上电后会对各引脚进行初始化,在遥控端会对显示屏及U8G2进行初始化并显示logo,同时会对摇杆进行自动校准; ![image.png](https://image.lceda.cn/oshwhub/pullImage/c3bef0208c7948b0a440551702705104.png) ESPNOW自动配对: 在MCU初始化完成后,遥控端会发送ESPNOW广播报文,接收端在收到广播报文后将报文的MAC地址作为主机地址,将自己的MAC地址发送给主机,遥控端在接收到回复后将MAC加入到从机中,即可完成遥控端和接收端的配对工作; ![image.png](https://image.lceda.cn/oshwhub/pullImage/8d733a48f9a64763b4ce225cebefcc78.png)遥控端 ![image.png](https://image.lceda.cn/oshwhub/pullImage/20cf53e1a8bf47c6867eafd8777d49ce.png)接收端 数据发送和回传: 配对完成后,遥控器会持续读取摇杆数值,进行滤波、映射之后封装成控制数据包发送给接收端,接收端在接收到控制数据包后会根据摇杆数值进行对应的处理,之后会读取电压数值并进行百分百计算之后回传给遥控端; ![image.png](https://image.lceda.cn/oshwhub/pullImage/1dc6bcf1850b46918d68bc1999fd6d31.png)遥控端 ![image.png](https://image.lceda.cn/oshwhub/pullImage/ad10f94c1a3044faab83d1c21fad7795.png)接收端 中断和重连: 遥控端根据收到回传数据的时间判断连接是否中断,如果一定时间未收到回传数据,则认为连接已中断,重新进入配对流程,删除从机MAC,持续发送ESPNOW广播报文,同样接收端会根据接收到控制数据包的时间判断连接是否中断,如果一定时间为收到控制数据包,这认为连接已中断,从新进入配对流程,删除主机MAC,监听ESPNOW广播报文,在遥控端和接收端同时进入配对流程时会自动完成配对,已实现自动重连; ![image.png](https://image.lceda.cn/oshwhub/pullImage/67b6bd1802454f80827bb5e9092e3bec.png) ![image.png](https://image.lceda.cn/oshwhub/pullImage/08f361ae04e34be991df6c160187efac.png) 显示屏控制: 实时显示连接状态、电压百分比、摇杆数值等关键数据; ![image.png](https://image.lceda.cn/oshwhub/pullImage/86a884a68b6c46e5a3ce3e32605e5a4b.png) 由于软件代码较长,不在此具体展示,具体代码详见Gitee开源项目: https://gitee.com/yanshimi/esp-tank ## 3D模型设计 3D模型部分设计参考了T34坦克的外形,受限于3D打印平台大小将主体分为前后两部分,这样也更容易打印成型,打印完成后使用胶水固定即可,功能方便包括可前进、后退、左转、右转、炮台旋转、炮管俯仰。 ![IMG_20250417_233053.jpg](https://image.lceda.cn/oshwhub/pullImage/e9f7b2665d5f46488cf2b30ae7d20925.jpg) 运动部分包含了5对负重轮,驱动轮和导向轮,负重轮均为独立弹簧悬挂结构,弹簧位于坦克内部。 ![IMG_20250225_005641_1.jpg](https://image.lceda.cn/oshwhub/pullImage/bf3b6715ec3f4a0784fe3958cdfcc13f.jpg) 动力部分使用了两个TT电机,分别驱动两侧的履带,可以实现差速转向,原地掉头。 ![IMG_20250225_005652.jpg](https://image.lceda.cn/oshwhub/pullImage/e990753cbc744f2881e7ddad00b30dff.jpg) 炮塔部分使用了电滑环,这样炮塔就可以无限旋转了,旋转动力部分使用了N20电机,炮管可以进行-5°到15°角度的俯仰操作,动力部分同样使用了N20电机。 ![微信截图_20250422142924.png](https://image.lceda.cn/oshwhub/pullImage/18453dbddc5e4cc9bb8921b6018cd20c.png) 以下为内部电器布局,尾部有电源开关,可以控制电源通断,头部外接可TYPE-C接口,可以对内部锂电池进行充电,2S的14500锂电池放在了坦克前部,可以平衡前后重心,同时还可以安装无线充电模块。 ![IMG_20250416_002215.jpg](https://image.lceda.cn/oshwhub/pullImage/6cbc7f51a0284eac9721cd3ea994c599.jpg) 3D模型已发布到makerworld,请自行下载,别忘了点赞送助力! 坦克:https://makerworld.com.cn/zh/models/1146209 遥控器:https://makerworld.com.cn/zh/models/1146203 ## 注意事项 * MCU使用ESP32-S3-WROOM-1U,外置射频天线,flash大小最低4M即可运行程序; * 摇杆选择13mm大小10K阻值的,不要选错了; * 遥控端充电芯片使用IP5306_CK型号的,默认型号长时间小电流会自动休眠; * 显示屏要选择新款0.96寸的,注意引脚顺序和老款不一样; * 电池电压测量受电阻阻值影响,需要手动测量后进行校准。 * 3D模型在打印时注意摆放方向,必要是需要添加支撑,齿轮等受力部件需要增加墙层数和填充。 ## 组装流程 由于组装步骤较为复杂,请参考使用文档或参考组装视频: https://www.bilibili.com/video/BV1fR5izHE4T/