国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

單片機(jī)畢業(yè)設(shè)計 STM32智能手環(huán)計步器 - 嵌入式 物聯(lián)網(wǎng)

這篇具有很好參考價值的文章主要介紹了單片機(jī)畢業(yè)設(shè)計 STM32智能手環(huán)計步器 - 嵌入式 物聯(lián)網(wǎng)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


1 簡介

Hi,大家好,學(xué)長今天向大家介紹一個 單片機(jī)項目

基于單片機(jī)的智能手環(huán) -計步器

大家可用于 課程設(shè)計 或 畢業(yè)設(shè)計

1 項目背景意義

隨著智能化時代的來臨, 無線互聯(lián)與智能化處理軟件的大面積普及。 傳統(tǒng)的就醫(yī)形式已經(jīng)通過網(wǎng)絡(luò)互聯(lián)科技而變得高效, 但是, 縱然在這種趨勢下, 老年人就醫(yī)依然面臨很多困境, 種種的原因?qū)е潞芏嗬夏耆送话l(fā)疾病但是沒能得多及時的救治。 老年智能手環(huán)主要致力于深入到整個救治老年人環(huán)節(jié)中, 促進(jìn)幾個關(guān)鍵人群的及時反應(yīng)、 智能互聯(lián)、 信息互通。 如何高效、 精準(zhǔn)、 相對簡潔的去實現(xiàn)種種義務(wù)之間的平衡, 包括子女對老人的贍養(yǎng)義務(wù), 在大批量救治病患的過程中, 醫(yī)生如何平衡好對每一個病人的義務(wù)。

隨著科學(xué)技術(shù)的革新,智能化生活已經(jīng)開始實現(xiàn),更多的人們的目光聚焦在智能化產(chǎn)品上面,一方面是對自身健康的關(guān)注,另一方面是對便攜輕松的生活的向往,智能手環(huán)就作為其中的一種代表性產(chǎn)物。其主要應(yīng)用于運動顯示比如顯示行走及跑步的步數(shù),距離,速度。同時可以實時健康監(jiān)測比如心率,血氧,體溫等。是一款突出個性與人性的智能化產(chǎn)物。

2 系統(tǒng)方案的設(shè)計

本設(shè)計是由STM32F103C8T6最小系統(tǒng)電路,DS3231時鐘模塊,ADXL345計步模塊,MAX30100血氧心率模塊,DS18B20溫度模塊,MPU6050體位檢測模塊,1.44寸TFT彩色液晶屏顯示模塊組成的嵌入式智能手環(huán)系統(tǒng)。

  • (1)通過DS3231時鐘模塊實現(xiàn)日期顯示的功能

  • (2)使用傳感器ADXL345檢測人步數(shù)

  • (3)通過MAX30100傳感器實時檢測血氧心率;

  • (4)通過傳感器DS18B20進(jìn)行溫度測量。

  • (5)通過MPU6050體位檢測臥床病人是否跌倒或可以通過此功能蜂鳴器警報呼叫。

  • (6)通過1.44寸TFT彩色液晶屏實時顯示日期,步數(shù),距離,心率,血氧,跌倒?fàn)顟B(tài)以及溫度值。

3 系統(tǒng)總體結(jié)構(gòu)

只能手環(huán)計步程序設(shè)計,單片機(jī),stm32,畢業(yè)設(shè)計

4 系統(tǒng)硬件設(shè)計

4.1 主控模塊

STM32C8T6(最小核心板),當(dāng)然,用其他型號的32,如STM32ZET6也是可以的。

只能手環(huán)計步程序設(shè)計,單片機(jī),stm32,畢業(yè)設(shè)計

4.2 姿態(tài)解算模塊:MPU6050

只能手環(huán)計步程序設(shè)計,單片機(jī),stm32,畢業(yè)設(shè)計

4.3 DS3231實物圖

只能手環(huán)計步程序設(shè)計,單片機(jī),stm32,畢業(yè)設(shè)計

4.4 TFT顯示模塊

只能手環(huán)計步程序設(shè)計,單片機(jī),stm32,畢業(yè)設(shè)計

4.5 硬件連接效果

只能手環(huán)計步程序設(shè)計,單片機(jī),stm32,畢業(yè)設(shè)計

5 跌倒檢測算法原理

當(dāng)人體正常行走時, 合成加速度在 1g 至 2.5g 左右, 如下圖所示。 當(dāng)人體不論從何方向跌落時, 垂直方向的位置和速度都將會改變, 所以加速度和俯仰角也會隨著而變化。 如圖 4.7 中設(shè)置采樣頻率為 350Hz 并且可以看出圖中跌倒過程中各個方向加速度變化情況。 當(dāng)手環(huán)佩戴者跌落時, 整個過程持大約持續(xù)約 2 秒, 其加速度曲線變化是先減小然后增加, 最后穩(wěn)定。 可以得出結(jié)論, 墜落是一個暫時的過程, 在這個過程中, 測試者經(jīng)歷失重、 撞擊和靜止三個狀態(tài)。 在下降過程中, 合成加速度的最大值約為 2.6 g, 并且有 7 個連續(xù)采樣點的合成加速度為 2.0 g 或更多。 當(dāng)人摔倒時, 通過對人體姿態(tài)角的采樣, 人體的俯仰角和側(cè)翻角都會發(fā)生變化, 在跌倒后有一個或更多姿態(tài)角的絕對值大于 45°。

只能手環(huán)計步程序設(shè)計,單片機(jī),stm32,畢業(yè)設(shè)計

5.1 跌倒檢測的判定流程

只能手環(huán)計步程序設(shè)計,單片機(jī),stm32,畢業(yè)設(shè)計
跌倒最開始的加速度會是最大的, 當(dāng)?shù)购笕说淖匀环磻?yīng)會讓加速度有所減小,所以跌倒有兩個閾值, 第一個閾值較大為觸發(fā)閾值, 第二個閥組為持續(xù)閾值, 然后在50 個周期內(nèi)計時, 是否有 80%時間為大于第二個跌倒閾值的, 有這兩個持續(xù)過程則判定為跌倒, 否則丟棄跌倒判定數(shù)據(jù), 跌倒流程圖如上圖。文章來源地址http://www.zghlxwxcb.cn/news/detail-794106.html

5.2 關(guān)鍵算法實現(xiàn)

if(adxl345_flag == 1)
	{	
		adxl345_flag = 0;
		Multiple_Byte_Read(0x32);//采樣
		sampling_cnt++;//采樣次數(shù)
		sampling_cnt0++;
/*-------------------平均濾波算法-----------------*/
	
	for(i=0;i<3;i++)//0->x 1->y 2->z
	{

		reg_buf3[i] =  reg_buf2[i];

		reg_buf2[i] =  reg_buf1[i];

		reg_buf1[i] =  reg_buf0[i];
		reg_buf0[i] =  (buf[2*i+1] << 8) + buf[2*i];//數(shù)據(jù)合成
		
		filter_out[i] = (reg_buf0[i] + reg_buf1[i] + reg_buf2[i] +reg_buf3[i])/4;
		
		if(filter_max[i] < filter_out[i]) filter_max[i] = filter_out[i];
		if(filter_min[i] > filter_out[i]) filter_min[i] = filter_out[i];
	}
/*-------------------動態(tài)閾值和動態(tài)精度算法------------------*/
	if(sampling_cnt == 50)
	{
		sampling_cnt = 0;
		/*printf("cnt:%ldms\r\n",cnt);//50次測量所用的時間
		cnt=0;*/
		//printf("interval:%ld\r\n",interval);
		for(i=0;i<3;i++)
		{
			Vpp[i] = filter_max[i] - filter_min[i];//計算雙峰值
			Dynamic_threshold[i] = (filter_max[i] + filter_min[i])/2;//計算動態(tài)閾值
			
			filter_max[i] = 0;//重新初始各軸的最大、最小值
			filter_min[i] = 4095;
			Error_flag[i] = 0;
			
			//>100		
			if(Vpp[i] >= 250)		Dynamic_precision[i] = Vpp[i]/50;//跑步
				else if( (Vpp[i] >= 100) && (Vpp[i]<250) )	Dynamic_precision[i] = 3;//走路
				else {Dynamic_precision[i] = 2;Error_flag[i] = 1;}
	
		}
	
	}
/*------------------線性移位 消除高頻噪聲--------------------*/	
	for(i=0;i<3;i++)
	{
	
		sample_old[i] = sample_new[i];
		if(filter_out[i] >= sample_new[i])
		{		
			if((filter_out[i] - sample_new[i]) > Dynamic_precision[i])
				sample_new[i] = filter_out[i];			
		}
		else if(filter_out[i] < sample_new[i])
		{		
			if((sample_new[i] - filter_out[i]) > Dynamic_precision[i])
				sample_new[i] = filter_out[i];			
		}
	}
/*--------------------最大峰值檢測,判斷活躍軸,步伐判斷----------------*/
//sample_new < Dynamic_threshold 表示已邁過動態(tài)閾值下方
//sample_new - sample_old < 0 表示加速度的變化小于0,斜率為負(fù)數(shù)
	if( (Vpp[0] >= Vpp[1]) && (Vpp[0] >= Vpp[2]) ) //x軸活躍
	{
	
		if( (sample_old[0] > Dynamic_threshold[0]) && (sample_new[0] < Dynamic_threshold[0]) && (Error_flag[0] == 0) )
		{
		
			if( (interval > 10 ) && ( interval < 100 ) )
			{
				Step_Out+=1;
				regulation3 = regulation2;
				regulation2 = regulation1;
				regulation1 = regulation0;
				regulation0 = 1;
				if( regulation3 && regulation2 && regulation1 && regulation0 )
					printf("Step:%d\r\n",Step_Out);
			}
			else 
			{
			
				regulation3 = 0;
				regulation2 = 0;
				regulation1 = 0;
				regulation0 = 0;
			
			}
			interval = 0;
		}
	}
	else if( (Vpp[1] >= Vpp[0]) && (Vpp[1] >= Vpp[2]) ) //y軸活躍
	{
	
		if( (sample_old[1] > Dynamic_threshold[1]) && (sample_new[1] < Dynamic_threshold[1]) && (Error_flag[1] == 0) )
		{
			/*----------時間窗口--------*/
			if( (interval > 10 ) && ( interval < 100 ) )
			{
				Step_Out+=1;
				/*-----------計數(shù)規(guī)則--------------*/
				regulation3 = regulation2;
				regulation2 = regulation1;
				regulation1 = regulation0;
				regulation0 = 1;
				if( regulation3 && regulation2 && regulation1 && regulation0 )
					printf("Step:%d\r\n",Step_Out);
			}
			else 
			{
			
				regulation3 = 0;
				regulation2 = 0;
				regulation1 = 0;
				regulation0 = 0;
			
			}
			interval = 0;
		
		}
	}		
	else if( (Vpp[2] >= Vpp[0]) && (Vpp[2] >= Vpp[1]) ) //z軸活躍
	{
	
		if( (sample_old[2] > Dynamic_threshold[2]) && (sample_new[2] < Dynamic_threshold[2]) && (Error_flag[2] == 0) )
		{
		
			if( (interval > 10 ) && ( interval < 100 ) )
			{
				Step_Out+=1;
				regulation3 = regulation2;
				regulation2 = regulation1;
				regulation1 = regulation0;
				regulation0 = 1;
				if( regulation3 && regulation2 && regulation1 && regulation0 )
					printf("Step:%d\r\n",Step_Out);
			}
			else 
			{
			
				regulation3 = 0;
				regulation2 = 0;
				regulation1 = 0;
				regulation0 = 0;
			
			}
			interval = 0;
		}
	}
	
	//printf("Step:%d\r\n",Step_Out);

	/*------速度 距離 卡路里-----*/
	if(sampling_cnt0 == 100)
	{
		i_cnt++;
		sampling_cnt0 = 0;
		m_nPedometerValue = Step_Out;
		Dynamic_step = m_nPedometerValue - m_nLastPedometer;//2s的步數(shù)變化
		/*---每步距離----*/
		if( Dynamic_step == 1 ) //身高取 170cm = 1.70m
			StepLen = 1.70/5;
		else if(  Dynamic_step == 2  )
			StepLen = 1.70/4;
		else if(  Dynamic_step == 3 )
			StepLen = 1.70/3;
		else if( Dynamic_step == 4  )
			StepLen = 1.70/2;
		else if( Dynamic_step == 5 )
			StepLen = 1.70/1.2;
		else if( ( Dynamic_step >= 6 ) && ( Dynamic_step < 8 ) )
			StepLen = 1.70;
		else if( Dynamic_step >= 8 )	StepLen = 1.70*1.2;
		
		Speed = StepLen/2;
		calories = Speed * weight/400;
		printf("Dynamic_step:%d\t",Dynamic_step);
		
		m_nLastPedometer = m_nPedometerValue;
		printf("StepLen:%.3f\t",StepLen);
		printf("Speed:%.3f\t",Speed);
		printf("calories:%.3f\r\n",calories);
	}
}

6 最后

到了這里,關(guān)于單片機(jī)畢業(yè)設(shè)計 STM32智能手環(huán)計步器 - 嵌入式 物聯(lián)網(wǎng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包