立创开源DIY:基于STM32的多功能示波器音乐视频手表(ZHAO-Watch 2设)
立创开源DIY:基于STM32的多功能示波器音乐视频手表(ZHAO-Watch 2设)
大家好,最近在立创开源社区看到一个特别有意思的项目——ZHAO-Watch 2设。这可不是一块普通的手表,它基于STM32单片机,把示波器、MP3播放器、视频播放器这些“大家伙”的功能,硬是塞进了一块手表大小的设备里。今天,我就带大家一起来拆解这个项目,看看它是怎么实现的,如果你也想动手复刻一块,需要注意哪些坑。
这个项目是之前ZHAO-Watch的升级版,作者砍掉了语音识别,换上了更实用的3.5mm耳机接口,还重构了菜单框架,操作更流畅。虽然外壳设计暂时搁置了,但功能一点不含糊。咱们接下来就从硬件选型、功能实现到复刻注意事项,一步步把它讲明白。
1. 硬件资源与核心芯片选型
要在一块手表上实现这么多功能,硬件的选型和搭配是关键。这个项目的主控是STM32,具体型号需要查看源码,但我们可以根据功能来推断其需求。
1.1 核心功能与对应硬件
这块手表的功能相当丰富,每一项功能背后都对应着特定的硬件模块。我把它整理成了一个表格,方便大家理解:
| 功能模块 | 实现方式/核心芯片 | 关键参数/说明 |
|---|---|---|
| 主控与显示 | STM32微控制器 + 1.3寸OLED屏 | OLED通过SPI通信,驱动屏幕显示菜单、波形、视频等。 |
| 电压测量 | 内部ADC + 分压电路 | 测量范围约0V~30V,软件支持校准,精度取决于ADC和分压电阻。 |
| 简易示波器 | 内部ADC高速采样 | 采样率可达200kHz,用于捕捉和显示低频信号波形。 |
| 音乐播放 | YX6200音频解码芯片 + TF卡 | 支持MP3格式,最大支持32GB TF卡,当前版本电路有轻微底噪。 |
| 视频播放 | W25Q128 Flash芯片 + Python预处理 | 视频需经PC端Python脚本二值化后,通过串口存入Flash播放。 |
| 运动感知 | MPU6050六轴传感器 | 实现“翻腕唤醒”和“拿起唤醒”功能,但功耗较高。 |
| 手电筒 | 高亮LED | 作者特别提醒“不要眼睛看”,说明亮度非常可观。 |
| 供电 | 503035规格锂电池 | 容量约600mAh,配合低功耗设计实现长续航。 |
注意:音频芯片YX6200存在一点底噪,作者提到后续可能会改进电路或尝试其他芯片。如果你对音质要求高,复刻时可以关注这一点。
1.2 功耗管理是关键
对于可穿戴设备,续航是命根子。这个项目在功耗管理上做得挺细致,咱们来看看不同模式下的耗电情况:
- 深度待机:什么都不开,电流仅0.1mA左右。按600mAh电池算,能待机大约8.3个月。这得益于STM32优秀的低功耗模式。
- 翻腕唤醒待机:开启MPU6050的唤醒功能后,待机电流上升到3.3mA。此时续航约为7.3天。可见运动传感器的持续工作对功耗影响很大。
- 音乐播放:这是耗电大户,工作电流约65mA。满电情况下可以连续听歌8.5小时。
所以,在实际使用中,如果不需要运动唤醒,最好关闭它,能极大延长待机时间。
2. 核心功能实现原理浅析
了解了硬件,咱们再聊聊这些炫酷的功能是怎么通过软件实现的。这里不涉及复杂的代码,只讲清思路,帮你理解整个系统是如何运作的。
2.1 菜单与用户交互
作者提到重构了菜单函数,使其“更加丝滑流畅”,并感谢了B站大佬提供的OLED UI框架。这说明项目采用了一个较好的菜单管理系统。对于嵌入式设备,一个好的菜单框架至关重要,它负责管理时间显示、电压表、示波器、音乐播放器等各个功能界面的切换和渲染。通过旋转编码器或按键(根据硬件设计)可以流畅地在不同功能间导航。
2.2 示波器功能如何工作
虽然作者谦虚地称其为“玩具”,但实现一个200kHz采样率的简易示波器思路很清晰:
- 信号输入:外部信号经过分压和保护电路后,接入STM32的某个ADC引脚。
- 高速采样:STM32的ADC以最高200kHz的频率对输入电压进行采样,将模拟信号转换为数字值。
- 数据处理与显示:MCU将采集到的一串电压数据,经过适当缩放和计算,在OLED屏幕上以时间-电压的波形图形式画出来。这需要用到一些基本的图形绘制函数。
2.3 音乐与视频播放的“黑科技”
这是两个非常有趣的功能,实现方式很巧妙。
音乐播放:STM32本身处理MP3解码很吃力,所以外挂了专用的YX6200音频解码芯片。STM32只需要通过串口或I2C向YX6200发送控制命令(如播放、暂停、选曲),并读取TF卡中的MP3文件数据流送给YX6200,剩下的解码和模拟音频输出就由这颗芯片全权负责了。这是一种非常高效的分工协作。
视频播放:在1.3寸的小OLED上播视频,听起来不可思议,但实现原理其实很取巧:
- 预处理:在电脑上,用Python脚本将原始视频处理成黑白二值化的图像序列(因为OLED是单色),并压缩数据。
- 传输与存储:通过串口将处理好的图像数据发送给STM32,STM32再将其存储到外部的W25Q128 Flash芯片中。这颗Flash有128Mbit(16MB)容量,作者测算大约能存10.8分钟的25帧视频。
- 播放:播放时,STM32从Flash中读取图像数据,一帧一帧地刷新到OLED屏幕上,同时可以同步播放TF卡里的背景音乐。这本质上是在播放一串连续的静态图片。
3. 项目复刻指南与避坑要点
如果你心动了,想自己动手做一块,那么这部分就是为你准备的“实战手册”。复刻一个开源项目,除了焊接调试,更要注意那些容易踩坑的细节。
3.1 硬件准备与焊接
- 获取资料:首先,你需要去项目的开源页面(通常在立创EDA或Gitee/Github),下载附件里的压缩包。里面应该包含原理图、PCB文件、BOM清单和源代码。
- 采购元件:
- BOM清单上的大部分元件可以在立创商城找到。
- 对于立创商城没有的元件(比如某些特殊封装的传感器或接插件),作者也给出了方向——“去淘宝找”。这是DIY的常态。
- PCB打板:将PCB文件发给制板厂(如JLCPCB)打样。这里有一个重要提示:作者特别指出,压缩包里的PCB工程文件用立创EDA打开后,耳机座顶部的电容可能有错位。所以,打板前务必仔细检查,或者直接在立创EDA的网页版打开设计图进行核对。
- 焊接挑战:板子上有很多0402封装的电阻电容。这个尺寸非常小,比米粒还小,手工焊接难度很大,需要很好的眼力、手感和工具(如尖头烙铁、助焊膏、放大镜)。
提示:如果你觉得自己是“手残党”,作者也提供了解决方案:可以去B站私信他,支付一定费用(35元)寻求帮助,或者直接购买200元的成品。这为不同能力的爱好者提供了选择。
3.2 软件烧录与配置
- 开发环境:你需要搭建STM32的开发环境,比如Keil MDK-ARM或者STM32CubeIDE。
- 编译源码:打开项目中的工程文件,根据你实际使用的STM32型号(可能与原作者略有不同),可能需要微调一下芯片型号、晶振频率等基础配置,然后编译代码。
- 烧录程序:使用ST-Link、J-Link或者串口下载工具,将编译生成的
.hex或.bin文件烧录到STM32芯片中。 - 准备资源文件:
- 音乐:将MP3格式的音乐文件存入TF卡。
- 视频:按照作者提供的Python脚本,将自己想看的短视频处理成二值化数据,通过串口工具发送给手表并存入Flash。
3.3 外壳与装配
作者放弃了最初设计的外壳,因为觉得“太丑”且增加体积。但他提供了一个电池半包保护的STL文件,可以用来3D打印一个电池盖,让内部看起来更整洁。你可以直接打印,或者根据这个文件自己修改设计,再打印出来。
最后,将所有模块(主板、电池、屏幕)组装起来,你的多功能智能手表就诞生了。从这样一个开源项目中,我们不仅能学到STM32、各种外设驱动、低功耗设计、UI编程等硬核技术,更能体会到创客“想法-设计-实现-分享”的完整乐趣。希望这篇拆解能帮你更好地理解这个精彩的项目。
