站内搜索
更多
智能手表OV-Watch
专业版

智能手表OV-Watch

简介

功能包括日历、计算器、秒表、NFC、蓝牙无线升级、与手机传信息、抬腕亮屏、心率检测、环境温湿度检测、指南针、海拔测量等功能。已经尽量满足现在智能手表的功能,后期大家可以继续添加修改很多东西~

简介:功能包括日历、计算器、秒表、NFC、蓝牙无线升级、与手机传信息、抬腕亮屏、心率检测、环境温湿度检测、指南针、海拔测量等功能。已经尽量满足现在智能手表的功能,后期大家可以继续添加修改很多东西~

开源协议

CC BY-NC-SA 4.0

(未经作者授权,禁止转载)
创建时间:2023-05-06 20:09:09更新时间:2026-05-06 11:31:03

描述

OV-Watch

ver2.4.4

简介

  这是一个基于STM32F411CUE6和FreeRTOS和LVGL的低成本的超多功能的STM32智能手表~

推荐

  如果觉得这个手表的硬件难做,又想学习相关的东西,可以试下这个新出的开发板,功能和例程demo更多!
FriPi炸鸡派STM32F411开发板: https://oshwhub.com/no_chicken/frypi

Image smart-watch Image Thermal-Gesture

系统组成

  系统框图如下所示,主控使用STM32F411CEU6,操作系统使用FreeRTOS,图形库使用的LVGL。传感器部分:手势识别使用6轴MPU6050;心率血氧使用的是EM7028,EM7028的资料很少,之前自己写的局部寻峰算法来计算心率但是效果不好,现在改成了使用官方的库;海拔测量用的气压计SPL06-001;电子指南针使用LSM303DLHC;V2.4版本,蓝牙芯片换成了KT6368A,有SPP功能,可以无线升级。

软件架构

  手表的软件架构如下所示,具体的细节详见仓库的代码。

  V2.4版本以后的手表的代码分为Bootloader和APP了,为的是方便用户戴在手上进行不用拆解的升级,BOOT区后面划分了一个Flag区,用于记录是否是完整的APP,这个位置是APP传输完成后才记录的,为的是保证程序完整性。

功能说明

大致功能表如下图所示:

  1. 电源部分:手表使用的是3.7V锂电池,通过TPS63020提供3V3电源,V2.2版本之后,充电口留了两个焊盘,用来接触磁吸充电口。特别注意,V2.0版本使用的无线充电,使用了芯片T3168,但是用无线充电的话,加上线圈和多的器件,体积就非常大了,同时还有散热问题。
  2. 蓝牙部分:V2.2用的是HC-04(邮票孔封装),后面的V2.3版本改成了用国产芯片KT6328A,V2.4换成了KT6368A。
  3. 辅助功能部分:计算器:当时做带浮点数的计算器做得很烦,字符串处理很麻烦。现在这个计算器是通过一个数字栈和一个符号栈实现的,具体看代码。
  4. NFC部分(现已删除):V2.0版本的IC卡复制器模块介绍详见:https://oshwhub.com/no_chicken/ICka-fu-zhi-qi.
    在V2.2版本中,为了精简减小体积,仅有UID卡,可以被外部读卡器读写。而在V2.0版本中,用的是RC522和一张UID卡组成的,可以自行复制外部IC卡,然后也可以被外部读卡器读写如下图所示:

版本更新的功能说明

V2.4.2增加的功能:

  1. 加入PageManager.c, 方便进行页面管理, 代码框架有较大改动.

  2. 加入HWDataAccess.c, 用于UI层访问BSP层, 当需要移植到仿真器时, 复制Func文件夹和GUI_App文件夹过去, 将HW_USE_HARDWARE定义为0即可.

  3. 同步更新了LVGL的Vscode仿真工程.

V2.4.1增加的功能:

  1. 睡眠时DeInit串口的IO口,设置为输入,修复休眠功耗很高的情况,现在休眠状态电流800多uA.

  2. BootLoader和APP都加入长按KEY1关机功能.

  3. APP中按键KEY的BSP改动,现在是按键按下松开才发生作用,避免了一些误触情况.

如何烧录

由于具体的步骤太多这里不放了, 详细见Firmware中的README文件: BootLoader和APP说明

如果你觉得带BootLoader可无线升级的V2.4.0版本比较麻烦, 可以自行下载ver2.3.2分支, 用以前的代码.

实物图

软件部分设计细节:

1.低功耗设计

  手表的模式分为3个。第一个是正常的运行模式,手表正常运行;第二个是睡眠模式,MCU进入STOP模式,MPU6050仍在记步数;第三个是关机模式,TPS63020直接关闭使能,此时无3V3供电,只有Vbat有供电。

  在最开始的时候,手表从睡眠到唤醒使用的是MPU6050的运动功能,打开中断,唤醒,但是这样尝试过,有个问题就是需要抖动幅度很大才能触发中断。所以最后还是用的RTC定时中断,然后定时检测当前手势状态,如果有抬腕动作则唤醒。

  MPU6050不能直接使用DMP库,初始化后功耗很高,需要进行一些改动,才能让功耗下来,具体看工程代码。

  如果蓝牙使用KT6328A,不建议关闭蓝牙使能,他的待机功耗很低。但后面2.4版本Back板改了,可以完全关闭蓝牙,所以直接使用KT6368A即可,不用的时候关掉蓝牙就行。

  最后接3V3测试,运行模式70-80mA,待机模式1mA左右,关机模式基本不耗电只有RTC在工作。当然后面没有测试电源接到Vbat端经过DCDC供电的情况,这个功耗就完全看DCDC的效率的。

2.心率血氧

  血氧部分暂时还没有写。心率计算本来使用的官方的库,但是计算太慢了,后面改为自己写的一个简易的峰值检测的算法。EM7028的PPG信号如下图所示

3.数据存储

  目前使用的外部的EEPROM进行数据存储,主要用于存储设置等,详细可以看Datasave.c文件。

4.页面切换逻辑

  为了实现页面切换,可以返回上次的界面,这里使用了一个栈来存储页面对应的,例如,使用user_Stack_Pop(&ScrRenewStack);弹出上一个界面,然后进入到新的界面再使用 user_Stack_Push(&ScrRenewStack,(long long int)&ui_HomePage);入栈一个界面的指针地址。注意不能直接在push操作使用类似ui_HomePage入栈,它是会动态变化的,这是个很大的坑。

//key1 pressed
if(keystr == 1)
{
    user_Stack_Pop(&ScrRenewStack);
    if(user_Stack_isEmpty(&ScrRenewStack))
    {
        ui_MenuPage_screen_init();
        lv_scr_load_anim(ui_MenuPage,LV_SCR_LOAD_ANIM_MOVE_RIGHT,0,0,true);
        user_Stack_Push(&ScrRenewStack,(long long int)&ui_HomePage);
        user_Stack_Push(&ScrRenewStack,(long long int)&ui_MenuPage);
    }
    else if(ScrRenewStack.Data[ScrRenewStack.Top_Point-1] == (long long int)&ui_HomePage)
    {
        ui_HomePage_screen_init();
        lv_scr_load_anim(ui_HomePage,LV_SCR_LOAD_ANIM_MOVE_RIGHT,0,0,true);
    }
}

5.计算器逻辑

  计算器的逻辑就是很经典的计算器问题,经典的就是开两个栈,一个存放符号,一个存数字,然后进行出栈计算等等操作,以1+2*6/3为例,具体的过程如下动图所示。但是会有一个问题就是小数点,这个动图展示的只是整数计算的逻辑,带小数点的详细见代码。

具体整数计算的过程是:

  1. 遍历表达式,当遇到操作数,将其压入操作数栈。
  2. 遇到运算符时,如果运算符栈为空,则直接将其压入运算符栈。
  3. 如果运算符栈不为空,那就与运算符栈顶元素进行比较:如果当前运算符优先级比栈顶运算符高,则继续将其压入运算符栈,如果当前运算符优先级比栈顶运算符低或者相等,则从操作数符栈顶取两个元素,从栈顶取出运算符进行运算,并将运算结果压入操作数栈。
  4. 继续将当前运算符与运算符栈顶元素比较。
  5. 继续按照以上步骤进行遍历,当遍历结束之后,则将当前两个栈内元素取出来进行运算即可得到最终结果。

6. LVGL在windows在vscode的仿真配置参考:

  已经更改好的可以跑的代码放在了lv_sim_vscode_win这个文件夹中,应该可以直接使用vscode打开,注意,需要大家自行改一下Cmake和make等相关设置的路径!!!!仿真文件也放在了附件里了。配置环境可以参考的链接:
https://blog.csdn.net/weixin_49337111/article/details/136536375

硬件设计说明

PCB分为两个板,一个Core板,一个Back板,Back板包括了传感器部分和蓝牙模块。V2.3版本的两个板子是贴合在一起的,详见实物图。

注意事项

焊的时候很烦,0402太小了,热风qiang吹的时候尽量用高温小风,免得把器件吹走了。

软件代码仓库

代码github传送门: https://github.com/No-Chicken/OV-Watch

如果没有梯子可以用我copy过去的gitee的仓库: https://gitee.com/kingham/OV-Watch

演示视频

V2.2版本视频地址: https://www.bilibili.com/video/BV1hh4y1J7TS

V2.3新增功能视频地址: https://www.bilibili.com/video/BV19g4y1N7YR/

交流QQ群

详见油炸鸡官网手册资料主页

如何装配外壳与OTA升级

详见附件视频

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
1
外壳零件.rar
983

附件

序号文件名称下载次数
1
配件采购清单.pdf
8528
2
过孔焊接演示.mp4
6510
3
LVGL仿真lv_sim_vscode_win.rar
6544
4
手表装配与OTA升级.mp4
2050
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航