【2022得捷创新设计大赛】二自由度云台机器人控制平台修订版
[复制链接]
本帖最后由 HonestQiao 于 2022-11-2 16:20 编辑
下载附件
保存到相册
2022-11-2 13:15 上传
下载附件
保存到相册
2022-11-2 13:15 上传
2.2 硬件物料:
在本作品中,使用到硬件如下:
- 开发板: ESP32-E
- 扩展板: ESP32-E专用扩展板
- OLED显示屏:SSD1306 128x64显示屏,带支架
- 运动传感器:DFRobot MPU6050,已经安装到手柄内部
- 舵机控制:PCA9685 16路舵机控制器
- 舵机:3120 20KG舵机2个
- 云台支架:1套
- 电源:正点原子数控电源
2.3 硬件连接规划:
实物连接说明:
- 将扩展板平插到ESP32开发板上
- 将 PCA9685 连接到扩展板的I2C接口1
- 将OLED连接到扩展板的I2C接口2
- 将 MPU6050 连接到扩展板的I2C接口3
- 将舵机连接到PCA9685的14、15舵机接口
- 使用数控电源给PCA9685供电
2.4 软件逻辑设计:
下载附件
保存到相册
2022-11-2 13:16 上传
- 运动控制模块:使用DFRobot MPU6050,主控程序通过获取其数据,经过解码,生成纵轴和横轴控制数据,然后控制机器人运行。
- 动作执行模块:使用1个PCA9685舵机控制器和2个3120 20KG舵机,来进行机器人纵轴和横轴的动作控制。
- 显示模块:使用SSD1306 128x64的OLED显示屏,用于显示系统的当前状态,包括系统启动过程中的信息,启动后纵轴和横轴的状态,以及通过互联网对时的时钟。
在上述模块中:
- 舵机控制器PCA9685为I2C接口,供提供了16组舵机接口,编号为0-15,这里使用最后的两个接口,接入两个舵机分别用于机器人纵轴和横轴的控制
- 所使用的运动传感器DFRobot MPU6050,同样为I2C接口
- 所使用的SSD1306 128x64 OLED显示屏,也为I2C接口
- 专用扩展板上刚好提供了3组I2C接口,正好用于接入上述3个I2C设备的接入
另外:
- 为了确保舵机能够稳定运行,使用了一个正点原子数控电源专门为舵机控制器PCA9685提供5V电源输入。
- 为了方便使用MPU6050进行稳定的控制,使用了一个掏空内部的儿童牙刷来内置MPU6050,方便手持操作。
3.2 使用说明:
3.2.1 系统的使用步骤如下:
- 系统启动:
- 确保各部分连接正确后,上电启动,初始化各部件
- 启动过程中,显示屏将显示当前启动进度
- 启动完成后,屏幕将显示操作界面
- 启动后,默认情况下,处于机器人停止状态
- 按键操作:
- ESP32开发板左则的RST按键,用于系统重启
- ESP32开发板右则的Pin27按键,用于启停机器人舵机控制
- Pin27按键奇数次按键,启动机器人舵机控制,偶数次按键,停止机器人舵机控制
- 手柄操作:
- 系统启动过程中,应手持手柄保持垂直竖立状态,以便系统正确计算初始化状态;
- 应根据自己所使用的MPU6050芯片,确定正确的芯片放置方向
- 启动完成后,向前压手柄,或者向后压手柄,控制机器人横向舵机运动
- 启动完成后,以手柄竖向中心线为中心旋转,控制机器人纵向舵机运动
- 显示屏状态:
- 启动过程中,依次显示各部分初始化情况
- 启动后,界面显示各状态图标,包括当前控制状态,以及当前的时钟
- Pin27按键依次以后,将会显示纵轴和横轴舵机控制角度
3.2.2 具体操作:
按下ESP32开发板的RST按键后,手持手柄,保持竖立状态,等待系统初始化启动完成。
启动完成以后,按一下ESP32开发板右则的按键,使能手柄控制机器人,然后就可以进行操作控制了。
运行过程中,OLED显示屏显示如下:
在上图中,各区域信息如下:
- 状态栏:分别为电源接入图标、运行状态图标(启动时默认暂停)、互联网对时时钟、WiFi图标
- 内容区域:显示平台名称
当按下ESP32开发板右则按键后,进行控制操作时,OLED显示屏显示如下:
在上图中,各区域的信息如下:
- 状态栏:分别为电源接入图标、运行状态图标(当前为使用运行)、互联网对时时钟、WiFi图标
- 内容区域:显示纵轴和横轴舵机对应的角度值
四、作品源码
源码地址:https://download.eeworld.com.cn/detail/HonestQiao/625355
码云地址:
在代码中,有几个关键点,需要详细说明:
首先是显示的图标和字体:
在OLED显示屏操作界面中,使用到了4个图标,分别为电源、启/停、WiFi,使用了U8g2中的特殊字体来显示的。
其中,电源和WiFi图标,为u8g2_font_siji_t_6x10字体的0x0e200、0x0e21a,启动图标为 0x0e058,停止图标为0x0e059
在启动控制后,控制界面中,纵轴圆圈指向图标,为u8g2_font_unifont_t_86字体的0x02b6f,横轴上下箭头图标为0x02b65
其他显示使用的字体,均为u8g2_font_unifont_t_chinese2
然后,在获取到MPU6050数据解码后,对纵轴的数据,应用了卡尔曼滤波进行优化处理,得到更为准确的数据。
该卡尔曼滤波的Kalman_Filter函数,来自于网上公开的代码,向提供该函数的作者表示感谢。
最后,互联网时间同步部分,使用了第三方的Time时间库,用于与公开的ntp服务器进行对时。该部分的代码,可以提取出来,做成互联网时钟。
五、作品功能演示视频
视频介绍专辑地址:https://training.eeworld.com.cn/course/67867
介绍视频一共分为两个部分,分别为平台结构的介绍、详细使用的展示。
结构介绍视频地址:https://training.eeworld.com.cn/video/34839
使用展示视频地址:https://training.eeworld.com.cn/video/34840
六、项目总结
在该二自由度云台机器人控制平台设计制作开发的过程中,进行了多项研究尝试,最终选择了Arduino IDE进行开发。
在开发过程中,详细了解到了ESP32、MPU6050、PCA9685舵机控制器、DS 3120 20KG舵机、SSD 1306 OLED等的具体使用。Arduino平台强大的包容和扩展性,使得开发过程中可以方便的应用第三方开发库,大大加快了开发的速度。
非常感谢EEWrold和得捷提供这次机会,得以把以前一直想做但没有做的事情,给好好的完成。今后也希望有更多的机会,进行交流学习和研究。
帖子分享汇总:
Timezone:时区处理,
MPU6050_tockn:MPU6050驱动库,
Adafruit_PWMServoDriver:舵机驱动库,
Adafruit_SSD1306:OLED驱动库,
Adafruit-GFX:显示图形处理,
U8g2_for_Adafruit_GFX:支持Adafruit_GFX的U8g2库,用于Unicode字符串显示,
7.3 参考资料
在本作品设计开发的过程中,查阅学习了上百篇文档资料,对于提供这些资料的作者表示万分的感谢。
这些文档资料,包括但不限于如下链接:
|