找回密码
 注册

QQ登录

只需一步,快速开始

搜索

基于ADXL345+STM32的智能手环心率计步器体温显示程序+原理图

[复制链接]
路漫漫 发表于 2020-5-20 22:12:22 | 显示全部楼层 |阅读模式
本设计由STM32F103C8T6单片机核心板电路+ADXL345传感器电路+心率传感器电路+温度传感器+lcd1602电路组成。
1、通过重力加速度传感器ADXL345检测人的状态,计算出走路步数、走路距离和平均速度。
2、通过心率传感器实时检测心率,通过温度传感器检测温度。
3、lcd1602实时显示步数、距离和平均速度、心率以及温度值。
源码: stm32 adxl345完整codes.7z (200.08 KB, 售价: 3 E币)
基于STM32的智能运动手环原理图:
sch原理图.zip (98.08 KB, 售价: 3 E币)
3.png
1.png
2.png
部分源码片段:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include <stdio.h>
  6. #include "timer.h"
  7. #include "key.h"
  8. #include "exti.h"
  9. #include "adxl345.h"
  10. #include "lcd1602.h"
  11. #include "ds18b20.h"

  12. unsigned char ReadAdxl345;           //定时读取adxl345数据
  13. unsigned char ErrorNum=0;   //记录错误次数
  14. unsigned char CheckNum=0;   //检测次数
  15.          
  16. char dis0[16];//液晶数组显示暂存
  17. char dis1[35];

  18. unsigned int xlTab[5];//心率数组
  19. unsigned char count=0;        //心率滤波计数
  20. unsigned int xinLater=0;//        心率延时处理
  21. unsigned int xinLv =0;    //心率值

  22. unsigned int BuShu=0;//步数
  23. unsigned int Normal_num=0;                        //正常次数
  24. unsigned int Error_num=0;                        //倾斜次数

  25. unsigned int disBuShu = 0;  //显示步数
  26. float disJuLi = 0;//显示距离
  27. float temperature;  //温度
  28. unsigned char readTemp = 0;        //读取温度标志

  29. int main(void)
  30. {
  31.         delay_init();                     //延时函数初始化         
  32.         uart_init(9600);                 //串口初始化为9600
  33.   TIM3_Int_Init(49,7199);//50ms         
  34.         EXTIX_Init();                // 初始化外部中断
  35.         LED_Init();                                  //初始化与LED连接的硬件接口
  36.         KEY_Init();                        //初始化按键

  37.         Lcd_GPIO_init();  //初始化lcd引脚
  38.         Lcd_Init();                  //初始化lcd屏幕
  39.         delay_ms(200);
  40.          
  41.   Init_ADXL345();
  42.   if(Single_Read_ADXL345(0X00)==0xe5)        
  43.   {
  44.     delay_ms(5);
  45.   }
  46.   else
  47.   {
  48.     delay_ms(3);
  49.   }
  50.          
  51.         while(1)
  52.         {

  53.     if(ReadAdxl345== 1)   //定时读取adxl345数据
  54.     {
  55.       ReadAdxl345= 0;
  56.       ReadData_x();                                                  //三轴检测函数
  57.       CheckNum++;
  58.       if((temp_Y>450)||(temp_Y<-450)) //查看正常次数     
  59.       {
  60.         Normal_num++;  //正常次数++
  61.       }
  62.       else
  63.       {
  64.         Error_num++;//倾斜次数
  65.       }
  66.       if((Error_num!=0)&&(Normal_num!=0))//检测到步数
  67.       {
  68.                                 BuShu++;   //步数脉冲量++
  69.         Error_num=0;    //清除一个周期检测
  70.         Normal_num=0;
  71.       }
  72.     }
  73.                
  74.                 if(disFlag==1)           //显示标志
  75.                 {
  76.                         disFlag = 0;

  77.                         readTemp++;  //定时计数
  78.                         if(readTemp >= 8)//约800ms处理一次数据 温度
  79.                         {
  80.                                 readTemp =0;//重新计数
  81.                                 temperature=(float)DS18B20_Get_Temp()/10;        //缩小10倍为实际值                        
  82.                         }
  83.                                                 
  84.                         disBuShu = BuShu/2;  //显示步数
  85.                         disJuLi = disBuShu*0.45;//显示距离
  86.                         
  87.                         sprintf(dis0,"X:%03d/min %4.1f C",xinLv,temperature);//打印
  88.                         Lcd_Puts(0,0,(unsigned char *)dis0);        //显示
  89.                         Lcd_1Put(14,0,0xdf);//显示符号
  90.                         sprintf(dis1,"BS:%03d JL:%4.1fm  ",disBuShu,disJuLi);//打印
  91.                         Lcd_Puts(0,1,(unsigned char *)dis1);        //显示
  92.         
  93.                 }        
  94.         }                                                                                            
  95. }        
复制代码


您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-11-21 22:24

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表