1 系统功能介绍
本设计的题目是 基于 STM32 单片机智能手环脉搏心率计步器体温显示设计。随着人们对健康监测和运动管理的重视,智能手环类产品成为日常生活的重要组成部分。本设计以 STM32F103C8T6 单片机 为核心,通过集成 ADXL345 三轴加速度传感器、心率传感器、温度传感器以及 LCD1602 显示屏,实现了对人体运动步数、运动距离、平均速度、体温以及心率的实时监测和显示。
设计的主要功能如下:
- 运动检测功能:利用 ADXL345 三轴加速度传感器检测人体运动加速度变化,结合算法实现计步,并进一步推算出行走距离和平均速度。
- 心率监测功能:通过光电式心率传感器检测人体脉搏信号,计算心率值。
- 体温检测功能:采用数字温度传感器检测佩戴者体温,实时显示体温变化。
- 信息显示功能:通过 LCD1602 液晶模块实时显示步数、距离、速度、心率和温度。
- 综合健康监测:实现运动与健康数据的统一采集和显示,便于用户掌握自身身体状态。
该设计不仅能够满足日常生活中对运动和健康的检测需求,还具有较高的扩展性,可以作为可穿戴设备研发的实验平台。
2 系统电路设计
整个系统电路由 STM32F103C8T6 单片机核心电路、ADXL345 加速度传感器电路、心率传感器电路、温度传感器电路、LCD1602 液晶显示电路、电源电路 等部分组成。
2.1 STM32F103C8T6 单片机核心电路
-
STM32F103C8T6 是基于 ARM Cortex-M3 内核的高性能单片机,主频可达 72MHz,具有丰富的外设接口,适合用于实时性和多任务需求的应用场景。
-
在本系统中,STM32 的主要任务包括:
- 通过 I²C 总线采集 ADXL345 输出的三轴加速度数据。
- 通过 ADC 模块采集心率传感器输出的模拟信号,提取脉搏波形并计算心率。
- 通过 I²C 或单总线接口读取温度传感器数据。
- 进行计步、速度计算和心率检测算法处理。
- 驱动 LCD1602 模块显示实时结果。
2.2 ADXL345 三轴加速度传感器电路
- ADXL345 是一款小型、低功耗、三轴数字加速度传感器,量程可选 ±2g、±4g、±8g、±16g,分辨率高。
- 本设计通过 I²C 接口与 STM32 相连。
- 单片机读取 ADXL345 的三轴数据,并通过步伐检测算法提取有效步数,进而计算行走距离与平均速度。
- 步数检测算法基于加速度信号的周期性波动,利用阈值判定与时间窗口统计来识别步伐。
2.3 心率传感器电路
- 心率检测模块一般采用光电容积脉搏波传感技术(PPG),利用红外或绿光 LED 发光,光敏二极管接收反射光强变化。
- 信号经过放大与滤波电路后输出模拟电压,输入 STM32 的 ADC 通道。
- 单片机通过采样该模拟信号,检测脉搏波峰值并计算心率。
- 典型心率范围在 60 ~ 120 次/分钟,通过阈值法或快速傅里叶变换可提高检测精度。
2.4 温度传感器电路
- 设计中采用 数字温度传感器(如 DS18B20)或 模拟温度传感器(如 LM35)。
- DS18B20 通过单总线与 STM32 通信,能够直接输出数字温度值,精度可达 ±0.5℃。
- LM35 输出电压与温度成线性关系(10mV/℃),STM32 通过 ADC 通道采样计算温度。
- 体温检测可辅助健康监控,当体温异常时可提示用户。
2.5 LCD1602 显示电路
- LCD1602 是一款常见的字符型液晶显示模块,支持 16×2 字符显示。
- 通过 4 位或 8 位并行总线方式与 STM32 连接。
- 本系统将步数、行走距离、平均速度、心率与体温值通过 LCD1602 分组显示,用户能够清晰查看各项健康数据。
2.6 电源电路
- 系统电源采用 5V 电池供电,经过 LDO 稳压器转换为 3.3V,供给 STM32 与外设。
- 设计中增加退耦电容以保证电源稳定,降低噪声干扰。
3 程序设计
系统程序主要包括以下几个模块:主程序、ADXL345 数据采集与步数计算、心率传感器 ADC 数据采集与处理、温度传感器数据采集、LCD1602 显示驱动。
3.1 主程序框架
#include "stm32f10x.h"
#include "adxl345.h"
#include "lcd1602.h"
#include "temp.h"
#include "heartrate.h"
int main(void)
{
uint32_t step = 0;
float distance = 0, speed = 0;
uint16_t hr = 0;
float temperature = 0;
ADXL345_Init();
LCD1602_Init();
Temp_Init();
HR_Init();
while(1)
{
step = ADXL345_GetStep();
distance = step * 0.7; // 假设平均步长 0.7m
speed = distance / 60.0; // 平均速度,简单模拟
hr = HR_GetValue();
temperature = Temp_GetValue();
LCD1602_Clear();
LCD1602_ShowString(0,0,"Step:");
LCD1602_ShowNum(5,0,step,5);
LCD1602_ShowString(0,1,"HR:");
LCD1602_ShowNum(3,1,hr,3);
LCD1602_ShowString(8,0,"T:");
LCD1602_ShowFloat(10,0,temperature,1);
}
}
3.2 ADXL345 数据采集与步数计算
uint32_t stepCount = 0;
void ADXL345_GetXYZ(int16_t *x, int16_t *y, int16_t *z)
{
uint8_t buf[6];
I2C_Read(ADXL345_ADDR, 0x32, buf, 6);
*x = (buf[1]<<8)|buf[0];
*y = (buf[3]<<8)|buf[2];
*z = (buf[5]<<8)|buf[4];
}
uint32_t ADXL345_GetStep(void)
{
static int16_t lastZ = 0;
int16_t x,y,z;
ADXL345_GetXYZ(&x,&y,&z);
if((z - lastZ) > 2000) // 简单阈值法
{
stepCount++;
}
lastZ = z;
return stepCount;
}
3.3 心率检测程序
uint16_t HR_GetValue(void)
{
uint16_t adcValue = ADC_GetConversionValue(ADC1);
static uint16_t lastValue = 0;
static uint32_t count = 0, bpm = 0;
if(adcValue > 2000 && lastValue <= 2000)
{
bpm = (60000 / (count+1)); // 简化版,计算心率
count = 0;
}
else
{
count++;
}
lastValue = adcValue;
return bpm;
}
3.4 温度检测程序
float Temp_GetValue(void)
{
uint16_t adcValue = ADC_GetConversionValue(ADC1);
float voltage = adcValue * 3.3 / 4096;
float temperature = voltage * 100; // 假设 LM35
return temperature;
}
3.5 LCD1602 显示驱动
void LCD1602_ShowString(uint8_t x,uint8_t y,char *str)
{
uint8_t addr;
if(y == 0) addr = 0x80 + x;
else addr = 0xC0 + x;
LCD_WriteCmd(addr);
while(*str)
{
LCD_WriteData(*str++);
}
}
4 总结
本文设计并实现了一个 基于 STM32 单片机的智能手环系统。系统通过 ADXL345 加速度传感器 进行计步,计算步数、距离和平均速度;通过 心率传感器 实时采集脉搏信号并计算心率;利用 温度传感器 检测体温;最终通过 LCD1602 显示模块 实时显示所有数据。
该设计的特点在于:
- 多功能集成:同时实现计步、心率和体温检测,满足健康监测需求。
- 实时性强:传感器采集与数据处理均通过 STM32 完成,响应速度快。
- 扩展性好:可增加蓝牙或 WiFi 模块,将数据上传至手机或云平台,实现远程健康管理。
- 实用性高:具有应用于智能穿戴设备的潜力,可作为教学和科研实验平台。
本设计不仅展示了 STM32 在健康监测中的应用,还为后续开发更复杂的智能可穿戴系统提供了参考。