
分体式智能手环(久坐提醒版)
简介
这是一个多功能的分体式智能手环。由两个部分组成——核心板以及测量手环。它有非常多的功能值得你去探索。我相信你会喜欢上它:>
简介:这是一个多功能的分体式智能手环。由两个部分组成——核心板以及测量手环。它有非常多的功能值得你去探索。我相信你会喜欢上它:>开源协议
:GPL 3.0
(未经作者授权,禁止转载)描述
装置概述:
这个装置由两部分组成,分别是测量手环以及运算核心板。
装置集成了多种传感器,可以实时监测心率、血氧、温湿度、姿态,并提供久坐提醒功能。无论你是硬件爱好者、程序员还是DIY玩家,这个项目都适合你动手实践!
测量手环部分:
负责测量使用者的心率、血氧饱和度以及姿态加速度。下面是测量手环上搭载的传感器:
测试传感器 | 传感器型号 |
心率、血氧饱和度 | MAX30102 |
姿态加速度 | MPU-6050 |
运算核心板部分:
运算核心板搭载ESP32C3作为主控,收集并且分析传感器的数据,并且输出到OLED上。
同时核心板具有电池智能充放电功能。可以离开充电线进行使用。
下图是装置的具体功能以及实现过程
扬声器功能还在开发中ing...
硬件连接:
以下是各组件与ESP32的连接方式(基于I2C通信和GPIO引脚):
组件 |
ESP32引脚 |
说明 |
---|---|---|
MAX30102 SDA |
GPIO 3 |
I2C数据线,地址0x57 |
MAX30102 SCL |
GPIO 2 |
I2C时钟线 |
MPU6050 SDA |
GPIO 3 |
I2C数据线,地址0x69 |
MPU6050 SCL |
GPIO 2 | I2C时钟线 |
AHT20 SDA |
GPIO 3 |
I2C数据线,地址0x38 |
AHT20 SCL |
GPIO 2 | I2C时钟线 |
SSD1306 SDA |
GPIO 3 |
I2C数据线,地址0x3C |
SSD1306 SCL |
GPIO 2 | I2C时钟线 |
WS2812B DIN |
GPIO 4 | RGB数据输入引脚 |
上按钮 |
GPIO 7 | |
下按钮 |
GPIO 5 | |
OK按钮 |
GPIO 6 | |
VCC |
3.3V |
所有传感器和LED的电源 |
GND |
GND |
所有组件的公共地线 |
所有I2C设备(MAX30102、MPU6050、AHT20、SSD1306)共享同一I2C总线(SDA和SCL引脚),
功能说明:
智能健康手环提供以下五大核心功能,界面通过OLED屏幕显示,用户可通过三个按钮(上、下、OK)切换和操作。
1. 心率与血氧监测
功能:实时测量心率(单位:BPM,每分钟心跳次数)和血氧饱和度(SpO2,单位:%)。
操作:
将手指放在MAX30102传感器上,等待几秒。
在心率与血氧界面(默认界面),
显示两种模式:
波形图模式:左侧显示“HR: 80”和“SpO2: 98”,右侧显示一个60x20像素的动态心率波形图(基于红外信号)。
详细数据模式:显示“心率: 80 BPM”、“血氧: 98%”和“信号: 良好/不佳”。
按OK键切换波形图和详细数据模式。
提示:
手指需贴紧传感器,确保信号良好(屏幕显示“信号: 良好”)。
若显示“请放置手指”,检查手指位置或传感器连接。
2. 温湿度监测
功能:测量环境温度(摄氏度)和湿度(%),每2秒更新一次。
操作:
按上/下键切换到温湿度界面。
显示示例:“温度: 25.5°C”和“湿度: 60.0%”。
提示:
确保AHT20传感器暴露在空气中,避免被手环外壳完全封闭。
3. 久坐提醒
功能:检测长时间坐姿(通过MPU6050判断手环姿态),并在设定时间后提醒用户起身活动。
操作:
按上/下键切换到久坐状态界面,显示:
当前姿态(“坐姿”或“活动”)。
久坐时间(例如“久坐: 15分30秒”)。
提醒时间设置(默认30分钟)。
按OK键进入子菜单,用上/下键调整提醒时间(1-60分钟),再次按OK保存退出。
久坐超过设定时间后,屏幕闪烁显示“久坐提醒!请活动一下”,LED橙色闪烁。
按OK键关闭提醒并重置久坐计时。
提示:
手环需佩戴在手腕上,MPU6050才能准确检测姿态。
可根据需要调整SITTING_PITCH_THRESHOLD和SITTING_ROLL_THRESHOLD(代码中)以优化坐姿检测。
4. 姿态数据
功能:显示手环的俯仰角(前后倾斜角度)和横滚角(左右倾斜角度),单位为度(°)。
操作:
按上/下键切换到姿态数据界面。
显示示例:“俯仰: 10.5°”和“横滚: -5.2°”。
用途:
帮助开发者调试MPU6050,或用于需要精确姿态的应用(比如运动分析)。
5. 历史数据
功能:每小时保存一次心率、血氧、温度和湿度数据,最多存储24组(24小时)。
操作:
按上/下键切换到历史数据界面。
显示最近6小时的心率趋势图(简单点线图)。
底部显示最新数据,例如“心率: 80 血氧: 98%”。
提示:
数据存储在内存中,断电后丢失。未来可添加EEPROM或SD卡保存。
软件与代码说明:
软件代码基于Arduino平台,使用C++语言编写。以下是代码的结构、依赖库和关键功能实现。
库名称 |
作用 |
---|---|
Wire |
I2C通信,内置于Arduino |
MAX30105 |
控制MAX30102传感器 |
heartRate |
心率计算算法 |
spo2_algorithm |
血氧计算算法 |
U8g2 |
控制SSD1306 OLED显示屏UI |
Adafruit_MPU6050 |
控制MPU6050传感器 |
Adafruit_AHTX0 |
控制AHT20传感器 |
Adafruit_NeoPixel |
制WS2812B LED |
久坐提醒功能演示:
见附件视频
Q&A:
1.Q:为什么要用两个部分?一个部分不是更好吗?
A:因为两个部分的话可以有效控制戴在手上测量装置的体积。我设计的测量手环仅为1.7cm*2.5cm。用户不会因为体积以及重量感到不适,适合长期佩戴。当然,核心板设计的也不大,同时适合携带在身上,随时测量。因为核心板也可以由电池供电。同时这样还有一个好处就是核心板可以更换升级。更加方便。
2.Q:还有改进的点吗?
A:肯定有的,等有时间再优化功能(赶论文ing......)
设计图

BOM


评论