本设计由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币)
部分源码片段:
- #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); //显示
-
- }
- }
- }
复制代码
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|