单片机交流
直播中

杨云

7年用户 747经验值
私信 关注
[问答]

求一种基于STM32单片机的智能手环心率计步器体温显示方案

怎样去设计一种智能手环心率计步器体温显示的硬件电路
怎样去设计一种智能手环心率计步器体温显示的软件部分?

回帖(2)

陈磊

2021-7-16 15:33:20
硬件电路的设计
3.1系统的功能分析及体系结构设计
3.1.1系统功能分析
本设计由STM32F103C8T6单片机核心板电路+ADXL345传感器电路+心率传感器电路+温度传感器+lcd1602电路组成。
1、通过重力加速度传感器ADXL345检测人的状态,计算出走路步数、走路距离和平均速度。
2、通过心率传感器实时检测心率,通过温度传感器检测温度。
3、lcd1602实时显示步数、距离和平均速度、心率以及温度值。
3.1.2系统总体结构
本系统具体框图如下图所示:

原理图:

ADXL345倾角传感器模块电路设计
本设计选择倾角传感器ADXL345模块实时检测相关的状态信息。ADXL345是一款小而薄的超低功耗3轴加速度计,分辨率高(13位),测量范围达± 16g。数字输出数据为16位二进制补码格式,可通过SPI(3线或4线)或I2C数字接口访问。ADXL345非常适合移动设备应用。它可以在倾斜检测应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度。其高分辨率(3.9mg/LSB),能够测量不到1.0°的倾斜角度变化。该器件提供多种特殊检测功能。活动和非活动检测功能通过比较任意轴上的加速度与用户设置的阈值来检测有无运动发生。敲击检测功能可以检测任意方向的单振和双振动作。自由落体检测功能可以检测器件是否正在掉落。这些功能可以独立映射到两个中断输出引脚中的一个。正在申请专利的集成式存储器管理系统采用一个32级先进先出(FIFO)缓冲器,可用于存储数据,从而将主机处理器负荷降至最低,并降低整体系统功耗。低功耗模式支持基于运动的智能电源管理,从而以极低的功耗进行阈值感测和运动加速度测量。ADXL345模块接口图如下图所示。
ADXL345模块内部电路图如下图所示。U2即为稳压芯片,实现5V直流电转化为3.3V直流电,C1-C4为滤波电容。R2、R3为上拉电阻,让信号输入更加稳定。D1为电源指示灯,R1为限流电阻,来保护LED灯D1。

Pulsesensor脉搏心率传感器模块电路设计
脉搏心率传感器是用来测试心跳速率的传感器,实质是一款集成了放大电路和噪声消除电路的光学心率传感器。可以通过此传感器开发出和心率有关的互动作品。传感器可以戴在手指或者耳垂上。光电传感器将脉搏信号转换为电信号,此装置需要把手指放在传感器表盘上,光电传感器,此传感器是集成了放大电路和噪声消除电路的光学心率传感器,光电传感器一侧的发光二极管发光,当脉搏跳动时,指尖或者耳垂的动脉血管血容量发生周期性变化,透过指尖的光强度同时发生变化。另一侧的光电三极管将接收到的红外光信号转化为电信号。
一、接口说明
(1)+ 外接5V
(2)- 外接GND
(3)S 输出接口(0和1)
Pulsesensor脉搏心率传感器模块接口原理图如下图所示。

DS18B20温度传感器模块电路设计
DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。
主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
一、DS18B20技术参数
(1)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
(2)测温范围 -55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)1℃。
(3)支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
(4)工作电源: 3.0~5.5V/DC (可以数据线寄生电源)
(5)在使用中不需要任何外围元件
(6) 测量结果以9~12位数字量方式串行传送
DS18B20温度传感器可编程的分辨率为9~12位,温度转换为12位数字格式最大值为750毫秒,用户可定义的非易失性温度报警设置,应用范围包括恒温控制、工业系统、消费电子产品温度计、或任何热敏感系统。试验证明DS18B20温度传感器满足本设计要求。
系统软件设计

#include “led.h”#include “delay.h”#include “sys.h”#include “usart.h”#include 《stdio.h》#include “timer.h”#include “key.h”#include “exti.h”#include “adxl345.h”#include “lcd1602.h”#include “ds18b20.h” unsigned char ReadAdxl345; //定时读取adxl345数据unsigned char ErrorNum=0; //记录错误次数unsigned char CheckNum=0; //检测次数 char dis0[16];//液晶数组显示暂存char dis1[35];unsigned int xlTab[5];//心率数组unsigned char count=0; //心率滤波计数unsigned int xinLater=0;// 心率延时处理unsigned int xinLv =0; //心率值unsigned int BuShu=0;//步数unsigned int Normal_num=0; //正常次数unsigned int Error_num=0; //倾斜次数unsigned int disBuShu = 0; //显示步数float disJuLi = 0;//显示距离float temperature; //温度unsigned char readTemp = 0; //读取温度标志int main(void) { delay_init(); //延时函数初始化 uart_init(9600); //串口初始化为9600 TIM3_Int_Init(49,7199);//50ms EXTIX_Init(); // 初始化外部中断 LED_Init(); //初始化与LED连接的硬件接口 KEY_Init(); //初始化按键 Lcd_GPIO_init(); //初始化lcd引脚 Lcd_Init(); //初始化lcd屏幕 delay_ms(200); Init_ADXL345(); if(Single_Read_ADXL345(0X00)==0xe5) { delay_ms(5); } else { delay_ms(3); } while(1) { if(ReadAdxl345== 1) //定时读取adxl345数据 { ReadAdxl345= 0; ReadData_x(); //三轴检测函数 CheckNum++; if((temp_Y》450)||(temp_Y《-450)) //查看正常次数 { Normal_num++; //正常次数++ } else { Error_num++;//倾斜次数 } if((Error_num!=0)&&(Normal_num!=0))//检测到步数 { BuShu++; //步数脉冲量++ Error_num=0; //清除一个周期检测 Normal_num=0; } } if(disFlag==1) //显示标志 { disFlag = 0; readTemp++; //定时计数 if(readTemp 》= 8)//约800ms处理一次数据 温度 { readTemp =0;//重新计数 temperature=(float)DS18B20_Get_Temp()/10; //缩小10倍为实际值 } disBuShu = BuShu/2; //显示步数 disJuLi = disBuShu*0.45;//显示距离 sprintf(dis0,“X:%03d/min %4.1f C”,xinLv,temperature);//打印 Lcd_Puts(0,0,(unsigned char *)dis0); //显示 Lcd_1Put(14,0,0xdf);//显示符号 sprintf(dis1,“BS:%03d JL:%4.1fm ”,disBuShu,disJuLi);//打印 Lcd_Puts(0,1,(unsigned char *)dis1); //显示 } } } 。
举报

王瑞

2021-7-16 15:33:20
硬件电路的设计
3.1系统的功能分析及体系结构设计
3.1.1系统功能分析
本设计由STM32F103C8T6单片机核心板电路+ADXL345传感器电路+心率传感器电路+温度传感器+lcd1602电路组成。
1、通过重力加速度传感器ADXL345检测人的状态,计算出走路步数、走路距离和平均速度。
2、通过心率传感器实时检测心率,通过温度传感器检测温度。
3、lcd1602实时显示步数、距离和平均速度、心率以及温度值。
3.1.2系统总体结构
本系统具体框图如下图所示:

原理图:

ADXL345倾角传感器模块电路设计
本设计选择倾角传感器ADXL345模块实时检测相关的状态信息。ADXL345是一款小而薄的超低功耗3轴加速度计,分辨率高(13位),测量范围达± 16g。数字输出数据为16位二进制补码格式,可通过SPI(3线或4线)或I2C数字接口访问。ADXL345非常适合移动设备应用。它可以在倾斜检测应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度。其高分辨率(3.9mg/LSB),能够测量不到1.0°的倾斜角度变化。该器件提供多种特殊检测功能。活动和非活动检测功能通过比较任意轴上的加速度与用户设置的阈值来检测有无运动发生。敲击检测功能可以检测任意方向的单振和双振动作。自由落体检测功能可以检测器件是否正在掉落。这些功能可以独立映射到两个中断输出引脚中的一个。正在申请专利的集成式存储器管理系统采用一个32级先进先出(FIFO)缓冲器,可用于存储数据,从而将主机处理器负荷降至最低,并降低整体系统功耗。低功耗模式支持基于运动的智能电源管理,从而以极低的功耗进行阈值感测和运动加速度测量。ADXL345模块接口图如下图所示。
ADXL345模块内部电路图如下图所示。U2即为稳压芯片,实现5V直流电转化为3.3V直流电,C1-C4为滤波电容。R2、R3为上拉电阻,让信号输入更加稳定。D1为电源指示灯,R1为限流电阻,来保护LED灯D1。

Pulsesensor脉搏心率传感器模块电路设计
脉搏心率传感器是用来测试心跳速率的传感器,实质是一款集成了放大电路和噪声消除电路的光学心率传感器。可以通过此传感器开发出和心率有关的互动作品。传感器可以戴在手指或者耳垂上。光电传感器将脉搏信号转换为电信号,此装置需要把手指放在传感器表盘上,光电传感器,此传感器是集成了放大电路和噪声消除电路的光学心率传感器,光电传感器一侧的发光二极管发光,当脉搏跳动时,指尖或者耳垂的动脉血管血容量发生周期性变化,透过指尖的光强度同时发生变化。另一侧的光电三极管将接收到的红外光信号转化为电信号。
一、接口说明
(1)+ 外接5V
(2)- 外接GND
(3)S 输出接口(0和1)
Pulsesensor脉搏心率传感器模块接口原理图如下图所示。

DS18B20温度传感器模块电路设计
DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。
主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
一、DS18B20技术参数
(1)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
(2)测温范围 -55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)1℃。
(3)支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
(4)工作电源: 3.0~5.5V/DC (可以数据线寄生电源)
(5)在使用中不需要任何外围元件
(6) 测量结果以9~12位数字量方式串行传送
DS18B20温度传感器可编程的分辨率为9~12位,温度转换为12位数字格式最大值为750毫秒,用户可定义的非易失性温度报警设置,应用范围包括恒温控制、工业系统、消费电子产品温度计、或任何热敏感系统。试验证明DS18B20温度传感器满足本设计要求。
系统软件设计

#include “led.h”#include “delay.h”#include “sys.h”#include “usart.h”#include 《stdio.h》#include “timer.h”#include “key.h”#include “exti.h”#include “adxl345.h”#include “lcd1602.h”#include “ds18b20.h” unsigned char ReadAdxl345; //定时读取adxl345数据unsigned char ErrorNum=0; //记录错误次数unsigned char CheckNum=0; //检测次数 char dis0[16];//液晶数组显示暂存char dis1[35];unsigned int xlTab[5];//心率数组unsigned char count=0; //心率滤波计数unsigned int xinLater=0;// 心率延时处理unsigned int xinLv =0; //心率值unsigned int BuShu=0;//步数unsigned int Normal_num=0; //正常次数unsigned int Error_num=0; //倾斜次数unsigned int disBuShu = 0; //显示步数float disJuLi = 0;//显示距离float temperature; //温度unsigned char readTemp = 0; //读取温度标志int main(void) { delay_init(); //延时函数初始化 uart_init(9600); //串口初始化为9600 TIM3_Int_Init(49,7199);//50ms EXTIX_Init(); // 初始化外部中断 LED_Init(); //初始化与LED连接的硬件接口 KEY_Init(); //初始化按键 Lcd_GPIO_init(); //初始化lcd引脚 Lcd_Init(); //初始化lcd屏幕 delay_ms(200); Init_ADXL345(); if(Single_Read_ADXL345(0X00)==0xe5) { delay_ms(5); } else { delay_ms(3); } while(1) { if(ReadAdxl345== 1) //定时读取adxl345数据 { ReadAdxl345= 0; ReadData_x(); //三轴检测函数 CheckNum++; if((temp_Y》450)||(temp_Y《-450)) //查看正常次数 { Normal_num++; //正常次数++ } else { Error_num++;//倾斜次数 } if((Error_num!=0)&&(Normal_num!=0))//检测到步数 { BuShu++; //步数脉冲量++ Error_num=0; //清除一个周期检测 Normal_num=0; } } if(disFlag==1) //显示标志 { disFlag = 0; readTemp++; //定时计数 if(readTemp 》= 8)//约800ms处理一次数据 温度 { readTemp =0;//重新计数 temperature=(float)DS18B20_Get_Temp()/10; //缩小10倍为实际值 } disBuShu = BuShu/2; //显示步数 disJuLi = disBuShu*0.45;//显示距离 sprintf(dis0,“X:%03d/min %4.1f C”,xinLv,temperature);//打印 Lcd_Puts(0,0,(unsigned char *)dis0); //显示 Lcd_1Put(14,0,0xdf);//显示符号 sprintf(dis1,“BS:%03d JL:%4.1fm ”,disBuShu,disJuLi);//打印 Lcd_Puts(0,1,(unsigned char *)dis1); //显示 } } } 。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分