构建一款高度先进的双传感器电压/电流测量仪
故事与目的
传统的USB测试仪和直连式电压/电流表通常属于“哑巴”设备。它们仅在基础屏幕上显示数字,却缺乏智能性、连接性和上下文理解能力。作为硬件开发者,我们经常需要测试电池续航能力、评估充电效率、运行自动化生命周期测试,并监控远程功耗情况。
我决定打造Quantum VA Meter,将所有这些问题整合到一款旗舰级设备中。
本项目旨在开发一款专业级遥测仪器,它不仅能显示数据,还能进行数据分析。我希望这款设备能够预测电池使用寿命、安全地切换外部负载、实时绘制功耗曲线(如同微型示波器),并将所有数据广播至本地Web服务器——这一切都运行在一个以赛博朋克美学为灵感、精美动画化且专为该设备定制的操作系统之上。
核心功能
这不仅仅是一款仪表,而是一套基于ESP32运行的完整电源管理系统操作系统。双分辨率感应:通过I2C接口使用两个INA226精密传感器,可自动在高电流负载与低电流精密测量之间切换。
“Quantum”定制操作系统:采用完全自定义、无闪烁的图形引擎,利用离屏精灵实现流畅显示。主导航为令人惊艳的9款应用“溢流”轮播界面,配备基于物理的抛物线跳跃动画和动态柔和色调主题(浅色/深色模式)。
实时双通道示波器:一款实时绘图应用,可同时显示电压与功率,并支持可调节的时间轴(每点时间从100毫秒到5秒),并具备暂停/录制切换功能。
智能电池与续航引擎:输入电池容量(mAh),系统将根据实时电流消耗动态计算“充满所需时间”或“剩余续航时间”。具备强劲的节能功能,当电池电量低于5%时,系统会自动触发60秒紧急关机,防止深度放电。
效率分析仪:提供专用模式,可记录充电(Wh/mAh)与放电数据随时间变化,自动计算移动电源或电路的精确效率百分比。安全继电器自动化:内置可编程继电器定时器,用于生命周期测试(例如开启5分钟,关闭10分钟),并配备自定义的4位数PIN码界面,防止未经授权的切换。
本地Web门户与OTA更新:通过WiFi(经由 captive portal)连接,并提供一个美观的网页仪表盘,可实时查看手机端的遥测数据和图表。支持通过浏览器进行空中固件(OTA)更新!
硬件架构(工作原理)
硬件核心基于M5Stack生态系统(ESP32),因其强大的双核处理器和出色的集成显示屏而被选中。
•大脑模块:M5Stack核心模块负责处理主要任务,同时运行用户界面、计算、Web服务器以及I2C轮询。
•遥测数据:两个INA226 I2C电源监测模块分别测量总线电压和分流电压。软件持续读取这些数值,应用自定义的校准系数,从而计算出实时瓦数。
•电源管理:M5Unit定时器电源模块监控内部电池状态(USB输入、电池电压/电流、Grove输出),使系统能够自动追踪自身健康状况。
•用户输入:旋转编码器连接到ESP32的硬件中断。转动旋钮可切换Coverflow菜单或调整数值(如图表时间轴或屏幕亮度),而按下编码器则实现点击/选择操作。
•动作控制:继电器模块连接至GPIO引脚,使VA Meter可作为可编程的智能开关,用于控制外部负载。
软件架构(魔法)
该软件使用Arduino框架以C++编写,大量依赖M5Unified和M5GFX库。
1. 图形引擎
为了在不出现画面撕裂的情况下实现接近60fps的性能,整个用户界面都会被绘制到一个离屏的M5Canvas(即RAM中的Sprite)上。只有当一帧完全绘制完成后,才会将其推送到物理TFT屏幕(canvas.pushSprite(0, 0))。
2. 基于物理的菜单
Coverflow 菜单使用了一个数学平滑变量(smoothMenuScroll)。当你旋转编码器时,卡片不会直接“弹出”;而是通过正弦波数学公式(sin(absDiff * PI) * 25.0)实现物理上的“跳跃”,向上移动25像素,然后放大并淡入其对应的48x48动画图标
。3. 状态机
核心循环基于非阻塞的状态机(当前状态)运行
4. 异步Web服务器
ESP32运行一个异步HTTP服务器。当你访问其IP地址时,它会返回经过压缩且样式精美的HTML/CSS/JS内容。随后,网页会通过JavaScript的fetch()方法每500毫秒轮询一次/data JSON端点,实时更新浏览器中的图表和遥测卡片,而无需重新加载页面。
如何构建
先决条件
•Arduino IDE 或 PlatformIO。
•ESP32 板件支持包(版本 2.x 或 3.x)。
•所需库:M5Unified、INA226_WE、WiFiManager。
本文编译自hackster.io





