2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 基于STM32蓝牙无线手环脉搏心率计步器体温监测设计

基于STM32蓝牙无线手环脉搏心率计步器体温监测设计

时间:2019-07-01 18:30:57

相关推荐

基于STM32蓝牙无线手环脉搏心率计步器体温监测设计

一、电路设计

电路构成:STM32F103C8T6单片机电路+时钟晶振电路+复位电路(上电自复位,手动复位)+LCD1602液晶显示屏电路+ADXL345计步检测传感器电路+DS18B20温度传感器电路+心率光电检测传感器+蓝牙模块+总电源供电电路;

功能介绍:

1.上电完成之后,通过重力角度检测,计算出整个行走的步数,通过步数的换算,得出行走的距离;

2.STM32驱动LCD1602液晶显示屏,实时动态显示步数的数据以及显示行走的距离,第二行数据显示步数,和走路的距离,;

3.DS18B20温度传感器可以检测温度的数据,将温度的数据显示在液晶显示屏上面;

4.心率光电检测传感器实时监测心率脉搏心跳数据,显示在液晶显示屏上面;

5.板载复位开关,重新清零,可以按下复位按键,重新开始计算步数和距离;

6.蓝牙模块可与手机相连接,并将数据上传至APP,实现手机实时监控;

二、原理图

三、部分代码

#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); /* 显示*/}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。