0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >消费电子 > 基于蓝牙的STM32单片机智能手环设计-OLED显示

基于蓝牙的STM32单片机智能手环设计-OLED显示

来源: 电路城
2021-11-10
类别:消费电子
eye 65
文章创建人 拍明

原标题:基于蓝牙的STM32单片机智能手环设计-OLED显示

基于蓝牙的STM32单片机智能手环设计——OLED显示

引言

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

image.png

硬件选型与核心元器件分析

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. 主程序设计

主程序流程如下:

  1. 系统初始化:配置时钟、GPIO、USART、I2C、ADC、定时器等外设;

  2. 传感器初始化:初始化ADXL345、PulseSensor、DS18B20等传感器;

  3. 显示初始化:初始化OLED显示屏,显示欢迎界面;

  4. 主循环

    • 读取传感器数据(加速度、心率、温度);

    • 处理数据(滤波、计算步数、判断异常值);

    • 更新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)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

拍明芯城微信图标

各大手机应用商城搜索“拍明芯城”

下载客户端,随时随地买卖元器件!

拍明芯城公众号
拍明芯城抖音
拍明芯城b站
拍明芯城头条
拍明芯城微博
拍明芯城视频号
拍明
广告
恒捷广告
广告
深亚广告
广告
原厂直供
广告