基于蓝牙的STM32单片机智能手环设计-OLED显示
65
拍明
原标题:基于蓝牙的STM32单片机智能手环设计-OLED显示
基于蓝牙的STM32单片机智能手环设计——OLED显示
引言
随着物联网技术的快速发展,智能穿戴设备已成为人们健康管理与运动追踪的重要工具。智能手环作为其中最具代表性的产品,集成了心率监测、步数统计、体温测量、蓝牙通信等功能,并通过OLED显示屏实现数据可视化。本文基于STM32F103C8T6单片机,设计了一款具备蓝牙通信功能的智能手环,详细阐述其硬件选型、电路设计、软件实现及功能优化,为嵌入式系统开发提供参考。

硬件选型与核心元器件分析
1. 主控制器:STM32F103C8T6单片机
作用:作为手环的核心处理单元,负责数据采集、处理、存储及通信控制。
选型依据:
性能优势:基于ARM Cortex-M3内核,主频72MHz,具备32位精简指令集,可高效处理多传感器数据。
外设丰富:集成USART、I2C、SPI、ADC等接口,支持与蓝牙模块、OLED显示屏、加速度传感器等外设无缝连接。
低功耗特性:支持多种低功耗模式(如睡眠模式、停机模式),延长手环续航时间。
开发便捷性:STM32CubeMX工具可快速配置外设参数,搭配Keil MDK开发环境,缩短开发周期。
功能实现:
通过I2C接口读取ADXL345加速度传感器数据,实现步数统计;
利用ADC接口采集PulseSensor心率信号,完成心率监测;
通过USART接口与BT06蓝牙模块通信,实现数据无线传输;
控制OLED显示屏实时更新心率、步数、体温等信息。
2. 加速度传感器:ADXL345三轴加速度计
作用:检测手环运动状态,通过加速度变化计算步数、运动距离及卡路里消耗。
选型依据:
高精度测量:量程±2g/±4g/±8g/±16g可选,分辨率达13位,可精准捕捉微小加速度变化。
低功耗设计:工作电流仅30μA(测量模式),适合电池供电设备。
I2C/SPI双接口:兼容多种主控芯片,简化电路设计。
抗干扰能力强:内置数字滤波器,有效抑制噪声干扰,提升数据稳定性。
功能实现:
采集X、Y、Z三轴加速度数据,通过动态阈值算法识别步行周期(如Y轴波形峰值对应迈腿动作);
结合RTC时钟模块,计算运动时间及消耗卡路里;
支持步数自动清零(每日00:00)或手动清零(按键触发)。
3. 心率传感器:PulseSensor光电反射式模块
作用:实时监测用户心率,为健康管理提供数据支持。
选型依据:
非侵入式检测:通过光电反射原理测量指尖或耳垂毛细血管血流变化,无需额外压力传感器。
高灵敏度:内置红外LED(880nm)与光敏二极管,可捕捉微弱心率信号。
模拟信号输出:输出0-3.3V模拟电压,直接连接STM32的ADC接口,简化电路设计。
开源算法支持:提供Arduino/STM32示例代码,便于快速集成。
功能实现:
采集模拟心率信号,通过STM32内部ADC转换为数字信号;
应用滤波算法(如移动平均滤波)消除噪声,提取有效心率值;
支持异常心率报警(如心率超过120bpm或低于50bpm时触发蜂鸣器)。
4. 温度传感器:DS18B20数字温度计
作用:测量用户体温或环境温度,辅助健康监测。
选型依据:
高精度测量:分辨率0.0625℃,量程-55℃至+125℃,满足体温监测需求。
单总线接口:仅需一根数据线与STM32通信,节省I/O资源。
抗干扰能力强:内置温度传感器与信号处理电路,无需外部校准。
低功耗设计:工作电流1.5mA(测量模式),待机电流仅1μA。
功能实现:
定期采集温度数据,通过单总线协议传输至STM32;
支持温度异常报警(如体温超过37.5℃时触发蜂鸣器);
结合OLED显示屏,实时显示当前温度值及单位(℃/℉)。
5. 蓝牙模块:BT06低功耗蓝牙4.0模块
作用:实现手环与手机APP的无线通信,支持数据同步与远程控制。
选型依据:
兼容性强:支持蓝牙4.0协议,兼容Android/iOS设备;
低功耗设计:工作电流15mA(发射模式),待机电流200μA,延长手环续航;
传输距离远:空旷环境下可达10米,满足日常使用需求;
开发便捷性:提供AT指令集,可通过串口直接配置参数(如设备名称、波特率)。
功能实现:
将STM32采集的心率、步数、温度等数据打包,通过蓝牙发送至手机APP;
接收手机APP指令(如设置报警阈值、调整时间),反馈至STM32执行;
支持多设备连接(如同时连接手机与平板电脑)。
6. 显示模块:0.96英寸OLED显示屏(I2C接口)
作用:实时显示心率、步数、温度、时间等信息,提升用户体验。
选型依据:
高对比度:自发光特性,无需背光,显示黑色时完全关闭像素点,实现无限对比度;
响应速度快:响应时间<0.01ms,无拖影现象,适合动态数据更新;
视角宽广:可视角度达170°,从任意角度观看均清晰可见;
低功耗设计:工作电流仅8mA(全亮显示),待机电流<1μA;
编程简单:支持I2C接口,通过STM32的I2C外设直接驱动,无需额外驱动芯片。
功能实现:
分页显示不同信息(如第一页显示心率/步数,第二页显示温度/时间);
支持中文显示(通过字库芯片或自定义字模);
动态刷新数据(如每500ms更新一次心率值)。
7. 电源管理模块:3.7V锂电池+TP4056充电芯片
作用:为手环提供稳定电源,支持USB充电功能。
选型依据:
高能量密度:锂电池容量可选500mAh至1000mAh,满足手环续航需求;
充电管理芯片:TP4056支持恒流/恒压充电,充电电流可调(最大1A),防止过充/过放;
低功耗设计:充电芯片待机电流<2μA,减少电量损耗;
保护功能:集成过温保护、短路保护、反接保护,提升安全性。
功能实现:
通过USB接口为锂电池充电,充电状态通过LED指示灯显示(红灯充电中,绿灯充满);
锂电池电压经LDO稳压芯片(如AMS1117-3.3)转换为3.3V,为STM32及外设供电;
实时监测电池电压,低电量时触发蜂鸣器报警。
硬件电路设计
1. 主控制器最小系统电路
STM32F103C8T6最小系统包括晶振电路(8MHz高速晶振+32.768kHz低速晶振)、复位电路(按键复位+上电复位)、电源电路(3.3V稳压)及调试接口(SWD/JTAG)。晶振电路为单片机提供时钟信号,复位电路确保系统稳定启动,电源电路为各模块供电,调试接口用于程序下载与调试。
2. 传感器接口电路
ADXL345加速度传感器:通过I2C接口与STM32连接,SCL引脚接STM32的PB6,SDA引脚接PB7,上拉电阻(4.7kΩ)确保信号稳定性。
PulseSensor心率传感器:模拟信号输出端接STM32的PA0(ADC通道0),通过RC滤波电路(10kΩ电阻+0.1μF电容)消除高频噪声。
DS18B20温度传感器:数据线接STM32的PB0,通过4.7kΩ上拉电阻确保信号电平稳定。
3. 蓝牙模块接口电路
BT06蓝牙模块的TXD引脚接STM32的PA9(USART1_TX),RXD引脚接PA10(USART1_RX),VCC接3.3V电源,GND接地。通过AT指令配置蓝牙模块参数(如设备名称“SmartBracelet”、波特率9600)。
4. OLED显示屏接口电路
OLED显示屏的SCL引脚接STM32的PB6(I2C_SCL),SDA引脚接PB7(I2C_SDA),RES引脚接PB8(复位信号),DC引脚接PB9(数据/命令选择),VCC接3.3V,GND接地。通过I2C协议发送显示数据,如初始化命令、清屏命令及字符显示命令。
5. 按键电路
设计4个按键(K1-K4),分别接STM32的PC0-PC3。K1用于切换显示页面(心率/步数↔温度/时间),K2用于手动清零步数,K3用于进入时间设置模式,K4用于调整时间参数(年/月/日/时/分)。按键采用外部中断触发方式,减少CPU占用。
软件设计与实现
1. 开发环境搭建
硬件工具:STM32F103C8T6最小系统板、ST-Link调试器、示波器、万用表。
软件工具:Keil MDK(编译环境)、STM32CubeMX(外设配置)、Proteus(电路仿真)、串口调试助手(数据监控)。
2. 主程序设计
主程序流程如下:
系统初始化:配置时钟、GPIO、USART、I2C、ADC、定时器等外设;
传感器初始化:初始化ADXL345、PulseSensor、DS18B20等传感器;
显示初始化:初始化OLED显示屏,显示欢迎界面;
主循环:
读取传感器数据(加速度、心率、温度);
处理数据(滤波、计算步数、判断异常值);
更新OLED显示内容;
检查蓝牙通信请求(如手机APP发送指令);
检测按键事件(如切换页面、清零步数);
定时保存数据至Flash(防止掉电丢失)。
3. 关键功能实现
(1)步数统计算法
通过ADXL345采集Y轴加速度数据,应用动态阈值算法识别步行周期:
void step_counter(void) {
static uint16_t last_value = 0;
uint16_t current_value = ADXL345_Read_Y(); // 读取Y轴加速度值
if (current_value > last_value + THRESHOLD) { // 上升沿触发
steps++; // 步数加1
last_value = current_value; // 更新阈值
}
}
(2)心率监测算法
通过PulseSensor采集模拟信号,应用移动平均滤波消除噪声:
uint16_t get_heart_rate(void) {
static uint16_t buffer[10] = {0}; // 滑动窗口
static uint8_t index = 0;
uint16_t sum = 0, average = 0;
uint16_t raw_value = ADC_Read(PA0); // 读取ADC值
buffer[index++] = raw_value; // 更新窗口
if (index >= 10) index = 0; // 循环覆盖
for (uint8_t i = 0; i < 10; i++) sum += buffer[i]; // 计算总和
average = sum / 10; // 计算平均值
return average; // 返回滤波后心率值
}
(3)蓝牙通信协议
定义数据帧格式(如[Header][Data][Checksum]),Header为固定标识(如0xAA),Data为传感器数据(心率、步数、温度),Checksum为校验和。STM32通过USART发送数据至蓝牙模块:
void bluetooth_send(uint8_t *data, uint8_t length) {
for (uint8_t i = 0; i < length; i++) {
USART_SendData(USART1, data[i]); // 发送数据
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // 等待发送完成
}
}
(4)OLED显示驱动
通过I2C协议发送显示命令及数据,如显示汉字需自定义字模:
void OLED_Show_Chinese(uint8_t x, uint8_t y, uint8_t *font) {
uint8_t i, j;
for (i = 0; i < 16; i++) { // 汉字高度16像素
for (j = 0; j < 8; j++) { // 汉字宽度8像素(每字节8位)
if (font[i * 2] & (0x80 >> j)) OLED_Draw_Pixel(x + j, y + i, 1); // 点亮像素
if (font[i * 2 + 1] & (0x80 >> j)) OLED_Draw_Pixel(x + j + 8, y + i, 1);
}
}
}
系统测试与优化
1. 硬件调试
电源测试:使用万用表测量锂电池电压(3.7V)、稳压芯片输出(3.3V)及各模块供电电压,确保无短路或过压现象。
传感器测试:通过示波器观察ADXL345的Y轴波形,验证步数统计算法;通过串口调试助手查看PulseSensor的原始数据,调整滤波参数。
蓝牙测试:使用手机APP(如“蓝牙助手”)连接手环,发送指令(如
AT+NAME?)查询设备名称,验证通信功能。
2. 软件优化
低功耗优化:在主循环中插入
__WFI()指令(等待中断),使STM32进入睡眠模式,仅在定时器中断或外部中断触发时唤醒。算法优化:将步数统计算法中的固定阈值改为动态阈值(如根据历史步数调整THRESHOLD),提升计步准确性。
显示优化:减少OLED刷新频率(如从500ms延长至1s),降低功耗;采用双缓冲技术,避免显示闪烁。
3. 功能扩展
GPS定位:集成NEO-6M GPS模块,通过UART接口获取经纬度数据,实现运动轨迹记录。
语音提醒:添加SYN6288语音合成芯片,当心率/体温异常时播放语音报警。
云平台接入:通过ESP8266 WiFi模块将数据上传至云端(如阿里云),实现远程健康管理。
结论
本文基于STM32F103C8T6单片机设计了一款蓝牙智能手环,通过合理选型ADXL345加速度传感器、PulseSensor心率模块、DS18B20温度传感器及OLED显示屏,实现了步数统计、心率监测、体温测量及蓝牙通信等功能。硬件电路设计注重低功耗与抗干扰性,软件算法优化提升了数据准确性。测试结果表明,该手环功能稳定、操作简便,可作为健康监测与运动追踪的理想工具。未来可进一步集成GPS定位、语音提醒等功能,提升用户体验。
责任编辑:David
【免责声明】
1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。
2、本文的引用仅供读者交流学习使用,不涉及商业目的。
3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。
4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。
拍明芯城拥有对此声明的最终解释权。

产品分类

2012- 2022 拍明芯城ICZOOM.com 版权所有 客服热线:400-693-8369 (9:00-18:00)