基于ESP32设计一个飞行记录器
扫描二维码
随时随地手机看文章
如果你曾经驾驶过遥控飞机,并且想要详细了解飞行过程中的具体情况——比如飞行高度、飞行方向、温度以及有图像记录——那么市面上大多数的 FPV 系统都无法满足你的需求。它们能实时传输视频,但不会存储任何数据。一旦你降落,所有数据就会丢失。
我想要解决这个问题。于是,我设计了一个紧凑的机载系统,能够记录所有信息:JPEG 图像帧、环境传感器数据以及完整的 6 轴姿态数据——在飞行过程中所有数据都会直接保存到 microSD 卡中,并按照飞行时段自动进行分类整理。
其结果是制造出了一款重量轻(约 50 克)的基于 ESP32 的板子,它能够作为遥控飞机的真正飞行记录仪发挥作用。
主要特点
该系统在每次飞行过程中都会记录以下数据,并自动将其保存到 SD 卡上的一个新文件夹中:
•以每秒 15 帧的频率拍摄的 JPEG 图像帧
•温度、压力、海拔高度以及湿度(BME280)
•俯仰、滚转和偏航方向(MPU6050)
•带有时间戳的 CSV 日志与图像帧同步了
在起飞前,一切都只需通过一次按钮操作即可完成——无需笔记本电脑,也无需进行串行连接。
硬件
该板子是基于 ESP32-CAM 模块构建的,该模块能够一次性完成所有操作:图像采集、I2C 传感器通信、SD 卡写入以及方向处理。对于其如此小巧且价格低廉的尺寸而言,这是一款非常强大的芯片。
为了进行定位,我使用了 MPU6050 六轴惯性测量单元。它能提供原始的加速度计和陀螺仪读数,通过互补滤波器将这些数据结合起来,从而在飞行过程中(即使存在持续的振动)也能得出稳定的俯仰、滚转和偏航值。该滤波器被调整为高度依赖陀螺仪(α = 0.96),同时利用加速度计缓慢校正长期偏差——这种平衡对于大多数遥控飞行的短暂持续时间来说效果很好。
对于环境数据,BME280 能测量温度、大气压力、海拔高度和湿度。它通过 I2C 总线与 MPU6050 一同在同一个总线上进行通信。
有一点值得注意:陀螺仪校准程序在启动时(在按下按钮之前)会采集 1000 个样本,以计算出精确的偏移量。让飞机在平坦的表面上静止不动的情况下运行该程序,与较短的校准窗口相比,在空中获得的方位数据会更加清晰。
定制印刷电路板
在将电路在面包板上调试成功后,我设计了一块专用的印刷电路板,以使整个系统在实际飞行中能够足够可靠。
遥控飞机会持续受到震动影响。跳线和面包板连接方式根本经不起这种长时间的震动——在我第一个原型机飞行过程中,就曾有一次连接松动,导致整个数据采集过程的数据全部损坏。最终,采用专业的印刷电路板才是唯一的有效解决办法。
这款定制的印刷电路板集成了 ESP32-CAM 连接、MPU6050 接口、BME280 连接、电源布线以及按钮输入等功能,所有这些都整合在一个紧凑的尺寸内,能够轻松地安装在机身内部。与面包板原型相比,组装完成的 PCB 更小、更轻、更抗振动,而且看起来就像一个成品一样。
如果你要制作的东西不是简单的原型产品,我强烈建议你去定制一块专业的印刷电路板。PCBWay(点击链接可获取即时报价)将是我在未来所有项目中选择的供应商。
PCBWay(在此处订购此 PCB)负责了生产工作,并且为该项目提供了这些电路板。老实说,他们完成任务的速度让我非常印象深刻——电路板很快就送到了,包装完好,直接从盒子里就可以进行组装。丝印清晰且精准,所有电路板上的阻焊层都保持一致,而且每个焊盘都恰好位于 ESP32-CAM 脚位所需的准确位置,该脚位有着相当严格的公差要求。
除了产品的质量之外,我最欣赏的是下单过程的简便性。上传布图文件、选择规格以及获取报价,整个过程仅需约五分钟。对于学生和业余爱好者这类不大量采购的项目而言,这种低门槛的流程尤为重要。
数据可视化工具
飞行结束后,取出 SD 卡,并在您的电脑上打开会话文件夹。每个会话都包含一个编号的 JPEG 图片文件夹以及一个名为 data.csv 的文件,该文件包含带有时间戳的遥测数据行,这些数据行与图片一一对应。
为了使飞行审查工作更加简便,我构建了一个小型的 Python 控制面板,它允许您加载会话文件夹,并在带有时序图的视频片段旁浏览内容。以下是示例数据行的示例:
注意:可视化工具的代码及使用说明可在以下提供的 GitHub 页面中获取。
结束语
这个项目最终融合了嵌入式系统、传感器融合、印刷电路板设计以及数据分析等多种元素。其中,互补滤波器的参数调整尤其需要反复试验——如果发现飞行时间越长偏航角度变化越大,那么可以尝试缩小陀螺仪的死区范围或者降低偏差适应率作为着手点。
本文编译自hackster.io





