51计步器心率检测设计-ADXL3445-蓝牙-心率
本设计由STC89C52单片机最小系统+ADXL345加速度传感器电路+蓝牙模块电路+心率检测电路+电源电路组成。
1、通过ADXL345检测步数,通过心率传感器检测心率值,然后将步数和心率值通过蓝牙模块实时上传到手机APP。
2、通过检测单位时间内的步数A来确定是跑步还是步行。如果A超过一定值,手机APP上显示:Run!如果A低于一定值,手机APP上显示:Walk!
完整版 电路图和程序代码 下载地址
https://pan.baidu.com/s/1662zAFmlrEBFjGrvsz9kLw?pwd=8888
部分代码展示
unsigned char i_i=0,timecount=0,displayOK=0,rate=0,aa=0;//心率变换参数
unsigned int time[6]={0}; //心率6次采集
xdata unsigned char dis0[25];//定义显示区域临时存储数组
unsigned char update_flag =0; //更新标志
unsigned long xdata time_50ms=0;//定时计数
unsigned char i;
unsigned int buShu=0; //步数
unsigned int disbuShu=0; //步数
unsigned char ReadAdxl345; //定时读取adxl345
unsigned char sendNum = 0;//发送计数
unsigned char bushuRem = 0; //记录上次步数
void Init_Timer0(void); //函数声明
void init_int0(void);
void UART_Init(void);
void uartSendStr(unsigned char *s,unsigned char length);
void uartSendByte(unsigned char dat);
void BuShuCheck(void);
void TIM2Inital(void);
/****************主函数***************/
void main()
{
EX0=1; //允许外部中断0中断
EA=1; //开总中断
IT0 = 1; //外部中断0负跳变中断
Init_Timer0(); //初始化定时器
TIM2Inital();
UART_Init();
DelayMs(50);
Init_ADXL345();
if(Single_Read_ADXL345(0X00)==0xe5) //读出的数据为0XE5,表示正确
{
DelayMs(5);
}
while(1)
{
BuShuCheck(); //检测步数
if(displayOK==0)//如果显示关 检测心率是否真实
{
rate = 0;
}
if(update_flag==1) //更新显示
{
update_flag= 0;
sendNum++;//发送延时计数
if(sendNum>=10) //时间到
{
sendNum = 0;
disbuShu = buShu/2;//步数来回 相当于一步
bushuRem = disbuShu;//重新赋值
uartSendStr(dis0,25);//发送 数据
uartSendStr("\r\n",2);
}
}
}
}
void BuShuCheck(void)
{
static unsigned int ErrorNum=0;
static unsigned int NormalNum=0;
if(ReadAdxl345==1) //定时读取adxl345数据
{
ReadAdxl345=0;
ReadData_x();
if((temp_X<650)||(abs(temp_Y)>400)) //查看正常次数
{
ErrorNum++;
led = 0;
}
else
{NormalNum++;led=1;}
if((NormalNum!=0)&&(ErrorNum!=0)) // 从角度判断走了一步
{
ErrorNum=0;
NormalNum=0;
buShu++;
}
}
}
完整版 电路图和程序代码 下载地址