本设计的硬件构成:
STM32F103C8T6单片机电路+OLED显示屏电路+ADXL345计步检测传感器电路+DS18B20温度传感器电路+心率光电检测传感器+总电源供电电路;
功能介绍:
1、上电完成之后,通过重力角度检测,计算出整个行走的步数,通过步数的换算,得出行走的距离;
2、单片机驱动OLED显示屏,实时显示用户的心率、温度、运动的步数和距离,第一行显示心率、第二行显示体温,第三行显示步数,第四行显示距离;
3、DS18B20温度传感器可以检测温度的数据,将温度的数据显示在显示屏上面;
4、心率光电检测传感器实时监测心率脉搏心跳数据,显示在显示屏上面;
5、板载复位开关,重新清零,可以按下复位按键,重新开始计算步数和距离;
主要物料清单及型号:
显示屏:OLED12864;
单片机:STM32F103C8T6;
心率传感器:Pulsesensor心率传感器;
计步模块:ADXL345;
温度传感器:DS18B20;
部分程序源码:
int main(void)
{
u8 key=0;
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为9600
TIM3_Int_Init(49,7199);//50ms
EXTIX_Init(); // 初始化外部中断
OLED_Init();
OLED_ColorTurn(0);//0正常显示,1 反色显示
OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
delay_ms(200);
Init_ADXL345();
if(Single_Read_ADXL345(0X00)==0xe5)
{
delay_ms(5);
}
else
{
delay_ms(3);
}
OLED_ShowChinese(0,0,0,16);//心率
OLED_ShowChinese(16,0,1,16);
OLED_ShowString(32,0, ": ---d/min ",16);
OLED_ShowChinese(0,16,2,16);//心率
OLED_ShowChinese(16,16,3,16);
OLED_ShowString(32,16,": --.- C ",16);
OLED_ShowChinese(80,16,8,16);
OLED_ShowChinese(0,32,4,16);//心率
OLED_ShowChinese(16,32,5,16);
OLED_ShowString(32,32,": 00000 ",16);
OLED_ShowChinese(0,48,6,16);
OLED_ShowChinese(16,48,7,16);//心率
OLED_ShowString(32,48,": 000.00m ",16);
OLED_Refresh();
delay_ms(500);
while(1)
{
if(ReadAdxl345== 1) //定时读取adxl345数据
{
ReadAdxl345= 0;
ReadData_x(); //三轴检测函数
CheckNum++;
if((temp_Z>6000)) //查看正常次数
{
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 = (unsigned int)(disBuShu*0.45*100);//显示距离
if(UI==0 && set==0)
{
temp1=((u16)(temperature*10));
Display_State(temp1,xinLv,disBuShu,disJuLi);
}
}
if(appFlag==1)
{
appFlag=0;
APP_Update();
}
}
}