这段时间,我在做一台基于 ESP32 的手持式离散光谱仪。这个项目最开始的想法其实很简单,就是想做一台真正能拿在手里、开机就能测、不是必须连着电脑才能工作的光谱小设备。
DIY一套使用电池供电,能够和手机进行远程交互,测量物体可见光谱值的装置。
1、整体框架
先说这台设备的整体硬件架构。核心主控我选的是 ESP32-S3,光谱采集芯片用的是 AS7431,显示部分是一块 ST7789 小屏,供电上同时支持 USB 和锂电池,另外还做了 3.3V 和 1.8V 两套电压域,把主控系统和传感器系统尽量隔开。这样搭的目的很明确,就是让它既有嵌入式设备的完整性,也尽量保住传感器采样时该有的稳定性。
2、分模块介绍
主控部分我最后选 ESP32-S3,其实不是为了“参数更强”这么简单,而是因为这类设备对主控的要求不是单一的。它不仅要负责和光谱芯片通信,还要驱动屏幕、处理按键、管理状态、做数据预处理,后面如果要加蓝牙或者 Wi-Fi,同样也得靠它兜住。你如果只看读一个传感器数据,很多 MCU 都够用,但一旦你想把它做成一个能脱离电脑独立工作的手持设备,ESP32-S3 这种集成度高、生态成熟、外设也比较全的平台,优势就会很明显。
真正和“光谱仪”这三个字绑定最深的,当然还是 AS7431。它是这台设备最核心的传感器,负责把反射回来的光信号转换成可读取的离散光谱数据。这里我走的是反射式测量方案,不是透射式。这个差别很重要,因为反射式测量本身就更依赖照明一致性、测量距离、样品表面状态和环境遮光条件。换句话说,传感器本身只是其中一环,你不能只把芯片焊上去就指望数据天然漂亮。
整机的主逻辑电压是 3.3V,主要给 ESP32-S3、屏幕和大部分数字外围供电;由升降压芯片TLV62569DBVR组成,它可以并不是一颗LDO芯片,可以最大程度利用锂电池的电量。
而光谱传感器这一侧,我单独留了 1.8V 电压域,再通过电平转换和主控通信。这样做的核心目的,不是为了显得设计复杂,而是为了尽量给传感器留一个更安静的工作环境。
通过双向电平转换芯片TXS0102将1.8V的I2C转换为3.3V的I2C。
在锂电池充电管理这块,我用的是 TP4056。这个方案很经典,核心原因也很直接,它本身就是一颗成熟的单节锂电池 CC/CV 充电管理芯片,用在这种手持设备上非常合适。前端接入 USB 电源之后,TP4056 可以完成恒流恒压充电控制,把充电这件事做得比较稳,也能省掉很多分立设计的麻烦。对于原型设备来说,这种成熟方案的价值很大,因为它能让你把更多精力放在整机系统和测量链路本身,而不是反复折腾基础充电电路。
光把电池充进去还不够,手持设备还得知道自己“还剩多少电”。所以在电量监测这块,我又加了一颗 MAX17048,用来实时监测电池电量。它的作用不只是简单读一个电压值,而是把电池剩余电量状态更稳定地反馈给主控,方便在屏幕上显示电量信息,也方便后面做低电量提醒、电量图标、甚至自动关机这类功能。
USB 这一块我用的是 Type-C 接口,同时把下载和调试链路也一并放进来了。也就是说,这个口不只是负责给板子供电,还负责程序烧录和串口调试。对于原型机来说,这类细节其实特别影响体验。因为当你真正开始反复改固件、反复上电测试的时候,能不能一根线把供电、下载、调试全做完,差别真的很大。
为了让下载过程更顺手,板子上还做了 USB 转串口和自动下载电路,也就是常见的 DTR、RTS 控制 EN 和 IO0。这部分设计本身不算复杂,但非常实用。。
显示部分我用的是 ST7789 小屏。选它的原因主要还是成熟、稳定,而且足够适合这种小型手持设备。加上这块屏之后,测量结果、状态信息、菜单切换、都能直接在本机闭环完成。
3、整体电路设计
最后
最后这套手持光谱仪的价格在百元以内,下一期软件开发的部分。
当然这套装置第一次做出来能跑,但是如何校准、软件如何迭代更新、物联网参数设置这些都要慢慢优化。
并且在硬件设计上发现AS7431的LDR用不起来,还有ST7789的电源并没有使用PWM调光,导致屏幕背光没办法变低所以也比较耗电等等,这些问题要在长期过程中慢慢迭代。
361