中文字幕第二一区_久久久久在线视频_精品国产自在现线看久久_亚洲精品一区二区三区电影网

產(chǎn)品分類

當(dāng)前位置: 首頁(yè) > 傳感測(cè)量產(chǎn)品 > 工業(yè)傳感器 > 加速度傳感器

類型分類:
科普知識(shí)
數(shù)據(jù)分類:
加速度傳感器

三軸加速度傳感器在跌倒檢測(cè)中的應(yīng)用

發(fā)布日期:2022-10-09 點(diǎn)擊率:129

前言

人們?cè)诘购髸?huì)面臨雙重危險(xiǎn)。顯而易見的是跌倒本身可能對(duì)人體產(chǎn)生傷害;另外,如果跌倒后不能得到及時(shí)的救助,可能會(huì)使結(jié)果更加惡化。例如,許多老年人由于其身體比較虛弱,自理能力和自我保護(hù)能力下降,常常會(huì)發(fā)生意外跌倒,如果得不到及時(shí)的救助,這種跌倒可能會(huì)導(dǎo)致非常嚴(yán)重的后果。有資料顯示,很多嚴(yán)重的后果并不是由于跌倒直接造成的,而是由于跌倒后,未得到及時(shí)的處理和救護(hù)。當(dāng)出現(xiàn)跌倒情況時(shí),如果能夠及時(shí)地通知到救助人員,將會(huì)大大地減輕由于跌倒而造成的危害。

不僅是對(duì)老人,在很多其他情況下,跌倒的報(bào)警也是非常有幫助的,尤其是從比較高的地方跌倒下來的時(shí)候。比如人們?cè)诘巧?,建筑,擦窗戶,刷油漆和修理屋頂?shù)臅r(shí)候。

這促使人們?cè)絹碓綗嶂杂趯?duì)跌倒檢測(cè)以及跌倒預(yù)報(bào)儀器的研制。近年來,隨著iMEMS?加速度傳感器技術(shù)的發(fā)展,使得設(shè)計(jì)基于三軸加速度傳感器的跌倒檢測(cè)器成為可能。這種跌倒檢測(cè)器的基本原理是通過測(cè)量佩戴該儀器的個(gè)體在運(yùn)動(dòng)過程中的三個(gè)正交方向的加速度變化來感知其身體姿態(tài)的變化,并通過算法分析判斷該個(gè)體是否發(fā)生跌倒情況。當(dāng)個(gè)體發(fā)生跌倒時(shí),儀器能夠配合GPS模塊以及無線發(fā)送模塊對(duì)這一情況進(jìn)行定位及報(bào)警,以便獲得相應(yīng)的救助。而跌倒檢測(cè)器的核心部分就是判斷跌倒情況是否發(fā)生的檢測(cè)原理及算法。

ADXL3451是ADI公司的一款3軸、數(shù)字輸出的加速度傳感器。本文將在研究跌倒檢測(cè)原理的基礎(chǔ)上,提出一種基于ADXL345的新型跌倒檢測(cè)解決方案。

iMEMS加速度傳感器ADXL345

iMEMS 半導(dǎo)體技術(shù)把微型機(jī)械結(jié)構(gòu)與電子電路集成在同一顆芯片上。iMEMS加速度傳感器就是利用這種技術(shù),實(shí)現(xiàn)對(duì)單軸、雙軸甚至三軸加速度進(jìn)行測(cè)量并產(chǎn)生模擬或數(shù)字輸出的傳感器。根據(jù)不同的應(yīng)用,加速度傳感器的測(cè)量范圍從幾g到幾十g不等。數(shù)字輸出的加速度傳感器還會(huì)集成多種中斷模式。這些特性可以為用戶提供更加方便靈活的解決方案。

ADXL345是ADI公司最近推出的基于iMEMS技術(shù)的3軸、數(shù)字輸出加速度傳感器。ADXL345具有+/-2g,+/-4g,+/-8g,+/-16g可變的測(cè)量范圍;最高13bit分辨率;固定的4mg/LSB靈敏度;3mm*5mm*1mm超小封裝;40-145uA超低功耗;標(biāo)準(zhǔn)的I2C或SPI數(shù)字接口;32級(jí)FIFO存儲(chǔ);以及內(nèi)部多種運(yùn)動(dòng)狀態(tài)檢測(cè)和靈活的中斷方式等特性。所有這些特性,使得ADXL345有助于大大簡(jiǎn)化跌倒檢測(cè)算法,使其成為一款非常適合用于跌倒檢測(cè)器應(yīng)用的加速度傳感器。

本文給出的跌倒檢測(cè)解決方案,完全基于ADXL345內(nèi)部的運(yùn)動(dòng)狀態(tài)檢測(cè)功能和中斷功能,甚至不需要對(duì)加速度的具體數(shù)值進(jìn)行實(shí)時(shí)讀取和復(fù)雜的計(jì)算操作,可以使算法的復(fù)雜度降至最低。

中斷系統(tǒng)

圖1給出了ADXL345的系統(tǒng)框圖及管腳定義。


圖1 ADXL345系統(tǒng)框圖及管腳定義

ADXL345具有兩個(gè)可編程的中斷管腳:Int1和Int2。以及Data_Ready、Single_Tap、Double_Tap、Activity、Inactivity、Free_Fall、Watermark、Overrun,共計(jì)8個(gè)中斷源。每個(gè)中斷源可以獨(dú)立地使能或禁用,還可以靈活地選擇是否映射到Int1或Int2中斷管腳。所有的功能都可以同時(shí)使用,只是某些功能可能需要共用中斷管腳。中斷功能通過INT_ENABLE寄存器的相應(yīng)位來選擇使能或禁用,通過INT_MAP寄存器的相應(yīng)位來選擇映射到Int1管腳或Int2管腳。中斷功能的具體定義如下:

1. Data_Ready 當(dāng)有新的數(shù)據(jù)產(chǎn)生時(shí),Data_Ready中斷置位;當(dāng)沒有新的數(shù)據(jù)時(shí),Data_Ready中斷清除。

2. Single_Tap 當(dāng)加速度值超過一定門限(THRESH_TAP)并且持續(xù)時(shí)間小于一定時(shí)間范圍(DUR)的時(shí)候,Single_Tap中斷置位。

3. Double_Tap 當(dāng)?shù)谝淮蜸ingle_Tap事件發(fā)生后,在一定時(shí)間(LATENT)之后,并在一定時(shí)間(WINDOW)之內(nèi),又發(fā)生第二次Single_Tap事件時(shí),Double _Tap中斷置位。

圖2給出了有效的Single_Tap中斷和Double _Tap中斷的示意圖。


圖2 Single_Tap和Double _Tap中斷示意

4. Activity 當(dāng)加速度值超過一定門限(THRESH_ACT)時(shí),Activity中斷置位。

5. Inactivity 當(dāng)加速度值低于一定門限(THRESH_INACT)并且持續(xù)超過一定時(shí)間(TIME_INACT)時(shí),Inactivity中斷置位。TIME_INACT可以設(shè)定的最長(zhǎng)時(shí)間為255s。

需要指出的是,對(duì)于Activity和Inactivity中斷,用戶可以針對(duì)X、Y、Z軸來分別進(jìn)行使能或禁用。比如,可以只使能X軸的Activity中斷,而禁用Y軸和Z軸的Activity中斷。

另外,對(duì)于Activity和Inactivity中斷,用戶還可以自由選擇DC coupled工作方式或者AC coupled工作方式。其區(qū)別在于,DC coupled工作方式下,每個(gè)采樣點(diǎn)的加速度值將直接與門限(THRESH_ACT或THRESH_INACT)進(jìn)行比較,來判斷是否發(fā)生中斷;而AC coupled工作方式下,新的采樣點(diǎn)將以之前的某個(gè)采樣點(diǎn)為參考,用兩個(gè)采樣點(diǎn)的差值與門限(THRESH_ACT或THRESH_INACT)進(jìn)行比較,來判斷是否發(fā)生中斷。AC coupled工作方式下的Activity檢測(cè),是選擇檢測(cè)開始時(shí)的那一個(gè)采樣點(diǎn)作為參考,以后每個(gè)采樣點(diǎn)的加速度值都與參考點(diǎn)進(jìn)行比較。如果它們的差值超過門限(THRESH_ACT),則Activity中斷置位。AC coupled工作方式下的Inctivity檢測(cè),同樣要選擇一個(gè)參考點(diǎn)。如果新采樣點(diǎn)與參考點(diǎn)的加速度差值超過門限(THRESH_INACT),參考點(diǎn)會(huì)被該采樣點(diǎn)更新。如果新采樣點(diǎn)與參考點(diǎn)的加速度差值小于門限(THRESH_INACT),并且持續(xù)超過一定時(shí)間(TIME_INACT),則Inctivity置位。

6. Free_Fall 當(dāng)加速度值低于一定門限(THRESH_FF)并且持續(xù)超過一定時(shí)間(TIME_FF)時(shí),F(xiàn)ree_Fall中斷置位。與Inactivity中斷的區(qū)別在于,F(xiàn)ree_Fall中斷主要用于對(duì)自由落體運(yùn)動(dòng)的檢測(cè)。因此, X、Y、Z軸總是同時(shí)被使能或禁用;其時(shí)間設(shè)定也比Inactivity中斷中要小很多,TIME_FF可以設(shè)定的最大值為1.28s;而且Free_Fall中斷只能是DC coupled工作方式。

7. Watermark 當(dāng)FIFO里所存的采樣點(diǎn)超過一定點(diǎn)數(shù)(SAMPLES)時(shí),Watermark中斷置位。當(dāng)FIFO里的采樣點(diǎn)被讀取,使得其中保存的采樣點(diǎn)數(shù)小于該數(shù)值(SAMPLES)時(shí),Watermark中斷自動(dòng)清除。

需要指出的是,ADXL345的FIFO最多可以存儲(chǔ)32個(gè)采樣點(diǎn)(X、Y、Z三軸數(shù)值),且具有Bypass模式、普通FIFO模式、Stream模式和Trigger模式,一共4種工作模式。FIFO功能也是ADXL345的一個(gè)重要且十分有用的功能。但是本文后面給出的解決方案中,并沒有使用到FIFO功能,所以,在此不做詳細(xì)介紹。

8. Overrun 當(dāng)有新采樣點(diǎn)更新了未被讀取得前次采樣點(diǎn)時(shí),Overrun中斷置位。 Overrun功能與FIFO的工作模式有關(guān),當(dāng)FIFO工作在Bypass模式下,如果有新采樣點(diǎn)更新了DATAX、DATAY和DATAZ寄存器里的數(shù)值,則Overrun中斷置位。當(dāng)FIFO工作在其他三種模式下,只有FIFO被存滿32點(diǎn)時(shí),Overrun中斷才會(huì)置位。FIFO里的采樣點(diǎn)被讀取后,Overrun中斷自動(dòng)清除。

跌倒過程中的加速度變化特征

對(duì)跌倒檢測(cè)原理的研究主要是找到人體在跌倒過程中的加速度變化特征。

圖3給出的是加速度在不同運(yùn)動(dòng)過程中的變化曲線,包括(a)步行上樓、(b)步行下樓、(c)坐下、(d)起立。假設(shè)跌倒檢測(cè)器被固定在被測(cè)的人體上。其中紅色的曲線是Y軸(垂直方向)的加速度曲線,其正常靜止?fàn)顟B(tài)下應(yīng)該為-1g;黑色和黃色的曲線分別是X軸(前后方向)和Z軸(左右方向)的加速度曲線,其正常靜止?fàn)顟B(tài)下應(yīng)該為0g;綠色的曲線是三軸加速度的矢量和,其正常靜止?fàn)顟B(tài)下應(yīng)該為+1g。


圖3 不同運(yùn)動(dòng)過程中的加速度變化曲線

由于老年人的運(yùn)動(dòng)相對(duì)比較慢,所以在普通的步行過程中,加速度變化不會(huì)很大。最明顯的加速度變化就是在坐下動(dòng)作中Y軸加速度(和加速度矢量和)上有一個(gè)超過3g的尖峰,這個(gè)尖峰是由于身體與椅子接觸而產(chǎn)生的。

而跌倒過程中的加速度變化則完全不同。圖4給出的是意外跌倒過程中的加速度變化曲線。通過圖4和圖3的比較,可以發(fā)現(xiàn)跌倒過程中的加速度變化有4個(gè)主要特征,這可以作為跌倒檢測(cè)的準(zhǔn)則。這4個(gè)特這在圖4中以紅色的方框標(biāo)注,下面將對(duì)其逐一進(jìn)行詳細(xì)介紹。


圖4 跌倒過程中的加速度變化曲線

1. 失重:在跌倒的開始都會(huì)發(fā)生一定的失重現(xiàn)象。在自由落體的下降過程,這個(gè)現(xiàn)象會(huì)更加明顯,加速度的矢量和會(huì)降低到接近0g,持續(xù)時(shí)間與自由落體的高度有關(guān)。對(duì)于一般的跌倒,失重現(xiàn)象雖然不會(huì)有像自由落體那么明顯,但也會(huì)發(fā)生合加速度小于1g的情況(通常情況下合加速度應(yīng)大于1g)。因此,這可以作為跌倒?fàn)顟B(tài)的第一個(gè)判斷依據(jù)??梢杂葾DXL345的Free_Fall中斷來檢測(cè)。

2. 撞擊:失重之后,人體發(fā)生跌倒的時(shí)候會(huì)與地面或其他物體發(fā)生撞擊,在加速度曲線中會(huì)產(chǎn)生一個(gè)很大的沖擊。這個(gè)沖擊可以通過ADXL345的Activity中斷來檢測(cè)。因此,F(xiàn)ree_Fall中斷之后,緊接著產(chǎn)生Activity中斷是跌倒?fàn)顟B(tài)的第二個(gè)判斷依據(jù)。

3. 靜止:通常,人體在跌倒后,也就是撞擊發(fā)生之后,不可能馬上起來,會(huì)有短暫的靜止?fàn)顟B(tài)(如果人因?yàn)榈苟鴮?dǎo)致昏迷,甚至可能是較長(zhǎng)時(shí)間的靜止)。表現(xiàn)在加速度曲線上就是會(huì)有一段時(shí)間的平穩(wěn)。這可以通過ADXL345的Inactivity中斷來檢測(cè)。因此,Activity中斷之后的Inactivity中斷是跌倒?fàn)顟B(tài)的第三個(gè)判斷依據(jù)。

4. 與初始狀態(tài)比較:跌倒之后,人體會(huì)發(fā)生翻轉(zhuǎn),因此人體的方向會(huì)與原先靜止站立的姿態(tài)(初始狀態(tài))不同。這使得跌倒之后的靜止?fàn)顟B(tài)下的三軸加速度數(shù)值與初始狀態(tài)下的三軸加速度不同(見圖4)。假設(shè)跌倒檢測(cè)器固定在被測(cè)人體上的某個(gè)部位,這樣初始狀態(tài)下的三軸加速度數(shù)值可以認(rèn)為是已知的(本例中,初始狀態(tài)為:X軸0g,Y軸-1g,Z軸0g)。讀取Inactivity中斷之后的三軸加速度數(shù)據(jù),并與初始狀態(tài)進(jìn)行比較。如圖4所示,重力加速度方向由Y軸上的-1g變?yōu)榱薢軸上的1g,這說明人體發(fā)生了側(cè)向跌倒。因此,跌倒檢測(cè)的第四個(gè)依據(jù)就是跌倒后的靜止?fàn)顟B(tài)下加速度值與初始狀態(tài)發(fā)生變化,且矢量變化超過一定的門限值(比如0.7g)。

這四個(gè)判斷依據(jù)綜合在一起,構(gòu)成了整個(gè)的跌倒檢測(cè)算法,可以對(duì)跌倒?fàn)顟B(tài)給出報(bào)警。當(dāng)然,還要注意各個(gè)中斷之間的時(shí)間間隔要在合理的范圍之內(nèi)。比如,除非是從很高的樓頂?shù)粝聛恚駝tFree_Fall中斷(失重)和Activity中斷(撞擊)之間的時(shí)間間隔不會(huì)很長(zhǎng)。同樣,通常情況下, Activity中斷(撞擊)和Inactivity中斷(靜止)之間的時(shí)間間隔也不會(huì)很長(zhǎng)。本文接下來會(huì)通過一個(gè)具體實(shí)例給出一組合理的取值。當(dāng)然,相關(guān)中斷的檢測(cè)門限以及時(shí)間參數(shù)也可以根據(jù)需要而靈活設(shè)置。

另外,如果跌倒造成了嚴(yán)重的后果,比如,導(dǎo)致了人的昏迷。那么人體會(huì)在更常的一段時(shí)間內(nèi)都保持靜止。這個(gè)狀態(tài)仍然可以通過Inactivity中斷來檢測(cè)。也就是說,如果發(fā)現(xiàn)在跌倒之后的很長(zhǎng)時(shí)間內(nèi)都保持Inactivity狀態(tài),可以再次給出一個(gè)嚴(yán)重報(bào)警。

典型電路連接

ADXL345和微控制器之間的電路連接非常簡(jiǎn)單。本文中的測(cè)試平臺(tái)由ADXL345和微控制器ADuC70262組成。圖5給出了ADXL345和ADuC70262之間的典型電路連接。ADXL345的CS管腳接高電平,表示ADXL345工作在I2C模式。SDA和SCL是I2C總線的數(shù)據(jù)線和時(shí)鐘線,分別連接到ADuC7026相應(yīng)的I2C總線管腳。ADuC7026的一個(gè)GPIO管腳連接到ADXL345的ALT管腳,用來選擇ADXL345的I2C地址。ADXL345的INT1管腳連接到ADuC7026的IRQ輸入用來產(chǎn)生中斷信號(hào)。

其他的單片機(jī)或者處理器都可以采用與圖5類似的電路與ADXL345進(jìn)行連接。ADXL345還可以工作在SPI模式以獲得更高的數(shù)據(jù)傳輸速率。關(guān)于SPI工作模式的具體描述,請(qǐng)參考ADXL345數(shù)據(jù)手冊(cè)。


圖5 ADXL345與微控制器之間的典型電路連接

利用ADXL345簡(jiǎn)化跌倒檢測(cè)算法

本節(jié)將給出以上解決方案的具體算法實(shí)現(xiàn)。表1中簡(jiǎn)要說明了每個(gè)寄存器的作用以及在本算法中的設(shè)置值。對(duì)于各個(gè)寄存中每一位的具體含義,請(qǐng)參考ADXL345的數(shù)據(jù)手冊(cè)。

表1 ADXL345寄存器功能說明

地址
寄存器名稱
類型
默認(rèn)值
說明
設(shè)置值
設(shè)置的功能
0DEVID只讀0xE5器件ID只讀-
1-1CReserved--保留,不要操作保留-
1DTHRESH_TAP讀/寫 0x00Tap的門限不使用-
1EOFSX讀/寫0x00X軸失調(diào)0x06補(bǔ)償X軸失調(diào),通過初始化校正獲得
1FOFSY讀/寫0x00Y軸失調(diào)0xF9補(bǔ)償Y軸失調(diào),通過初始化校正獲得
20OFSZ讀/寫0x00Z軸失調(diào)0xFC補(bǔ)償Z軸失調(diào),通過初始化校正獲得
21DUR讀/寫0x00Tap的持續(xù)時(shí)間不使用-
22LATENT讀/寫0x00Tap的延遲時(shí)間不使用-
23WINDOW讀/寫0x00Tap的時(shí)間窗不使用-
24THRESH_ACT讀/寫0x00Activity的門限0x20/0x08設(shè)置Activity的門限為2g或0.5g
25THRESH_INACT讀/寫0x00Inactivity的門限0x03設(shè)置Inactivity的門限為0.1875g
26TIME_INACT讀/寫0x00Inactivity的時(shí)間0x02/0x0A設(shè)置Inactivity的時(shí)間為2s或10s
27ACT_INACT_CTL讀/寫0x00Activity/Inactivity使能控制0x7F/0xFF使能X、Y、Z三軸的Activity和Inactivity功能,其中Inactivity為AC coupled模式,Activity為DC coupled 或 AC coupled模式
28THRESH_FF讀/寫0x00Free-Fall的門限0x0C設(shè)置Free-Fall的門限為0.75g
29TIME_FF讀/寫0x00Free-Fall的時(shí)間0x06設(shè)置Free-Fall的時(shí)間為30ms
2ATAP_AXES讀/寫0x00Tap/Double Tap使能控制不使用-
2BACT_TAP_STATUS只讀0x00Activity/Tap中斷軸指示只讀-
2CBW_RATE讀/寫0x0A采樣率和功耗模式控制0x0A設(shè)置采樣率為100Hz
2DPOWER_CTL讀/寫0x00工作模式控制0x00設(shè)置為正常工作模式
2EINT_ENABLE讀/寫0x00中斷使能控制0x1C使能Activity、Inactivity、Free-Fall中斷
2FINT_MAP讀/寫0x00中斷影射控制0x00所有中斷影射到Int1管腳
30INT_SOURCE只讀0x00中斷源指示只讀-
31DATA_FORMAT讀/寫0x00數(shù)據(jù)格式控制0x0B設(shè)置為+/-16g測(cè)量范圍,13bit右對(duì)齊模式,中斷為高電平觸發(fā),使用I2C數(shù)據(jù)接口
32DATAX0只讀0x00X軸數(shù)據(jù)只讀-
33DATAX1只讀0x00只讀-
34DATAY0只讀0x00Y軸數(shù)據(jù)只讀-
35DATAY1只讀0x00只讀-
36DATAZ0只讀0x00Z軸數(shù)據(jù)只讀-
37DATAZ1只讀0x00只讀-
38FIFO_CTL讀/寫0x00FIFO控制不使用-
39FIFO_STATUS只讀0x00FIFO狀態(tài)不使用-

需要指出的是,表1給出的設(shè)置值中,某些寄存器會(huì)給出兩個(gè)數(shù)值,這說明在算法中會(huì)切換使用這兩個(gè)數(shù)值,來達(dá)到不同的檢測(cè)目的。算法的流程圖如圖6所示。


圖6 算法流程圖

算法中,關(guān)于各種中斷的門限以及時(shí)間參數(shù)的設(shè)置如下所述。

1. 初始化后,系統(tǒng)等待Free_Fall中斷(失重),這里把THRESH_FF設(shè)為0.75g,把TIME_FF設(shè)為30ms。

2. Free_Fall中斷產(chǎn)生之后,系統(tǒng)開始等待Activity中斷(撞擊),這里把THRESH_ACT設(shè)為2g,Activity中斷為DC coupled工作模式。

3. Free_Fall中斷(失重)與Activity中斷(撞擊)之間的時(shí)間間隔設(shè)置為200ms。如果超過200ms,則認(rèn)為無效。200ms計(jì)時(shí)需要通過MCU中的定時(shí)器來實(shí)現(xiàn)。

4. Activity中斷產(chǎn)生之后,系統(tǒng)開始等待Inactivity中斷(撞擊后的靜止),這里把THRESH_INACT設(shè)為0.1875g,把TIME_INACT設(shè)為2s,Inactivity中斷為AC coupled工作模式。

5. 在Activity中斷產(chǎn)(撞擊)生之后的3.5s時(shí)間之內(nèi),應(yīng)該有Inactivity中斷(撞擊后的靜止)產(chǎn)生。如果超時(shí),則認(rèn)為無效。3.5s計(jì)時(shí)需要通過MCU中的定時(shí)器來實(shí)現(xiàn)。

6. 如果Inactivity中斷之后的加速度值與初始狀態(tài)(假設(shè)已知)下數(shù)值的矢量差超過0.7g,則說明檢測(cè)到一次有效的跌倒,系統(tǒng)會(huì)給出一個(gè)報(bào)警。

7. 當(dāng)檢測(cè)到跌倒?fàn)顟B(tài)之后,為了判斷是否在跌倒之后人體有長(zhǎng)時(shí)間的靜止不動(dòng)。需要繼續(xù)檢測(cè)Activity中斷和Inactivity中斷。這里把THRESH_ACT設(shè)為0.5g,Activity中斷為AC coupled工作模式。把THRESH_INACT設(shè)為0.1875g,把TIME_INACT設(shè)為10s,Inactivity中斷為AC coupled工作模式。也就是說,如果在10s之內(nèi),人體一直沒有任何動(dòng)作,則會(huì)產(chǎn)生Inactivity中斷,使系統(tǒng)給出一個(gè)嚴(yán)重報(bào)警。而在此期間一旦人體有所動(dòng)作,則會(huì)產(chǎn)生Activity中斷,從而結(jié)束整個(gè)判斷過程。

8. 本算法還可以檢測(cè)出人體從較高的地方跌落。如果Free_Fall中斷連續(xù)產(chǎn)生且之間的間隔小于100ms,可以認(rèn)為,人體處于連續(xù)的跌落狀態(tài)。如果Free_Fall中斷(失重)連續(xù)發(fā)生300ms,則說明人體是從超過0.45m的高度跌落,系統(tǒng)會(huì)給出一個(gè)跌落的報(bào)警。

本算法已在ADuC7026微控制器中以C語(yǔ)言實(shí)現(xiàn)(見附錄)。本文設(shè)計(jì)了一個(gè)實(shí)驗(yàn)方案對(duì)算法進(jìn)行驗(yàn)證。實(shí)驗(yàn)對(duì)向前跌倒,向后跌倒,向左、右兩側(cè)跌倒等不同跌倒姿勢(shì)以及跌倒后是否有長(zhǎng)時(shí)間靜止?fàn)顟B(tài)的情況分別進(jìn)行了10次測(cè)試,表2中給出的是相關(guān)測(cè)試結(jié)果。

表2 測(cè)試結(jié)果

跌倒姿勢(shì)跌倒后長(zhǎng)時(shí)間靜止12345678910
向前跌倒PPPPPPPPPP
P*P*P*P*P*P*P*P*P*P*
向后跌倒PPPPPPPPPP
P*P*P*P*P*P*P*P*P*P*
向左側(cè)跌倒PPPPPPPPPP
P*P*P*P*P*P*P*P*P*P*
向右側(cè)跌倒PPPPPPPPPP
P*P*P*P*P*P*P*P*P*P*
注:符號(hào)√表示檢測(cè)到跌倒,符號(hào)*表示檢測(cè)到跌倒后的長(zhǎng)時(shí)間靜止。

從這個(gè)實(shí)驗(yàn)中可以看出基于ADXL345的解決方案能夠有效地對(duì)跌倒?fàn)顟B(tài)進(jìn)行檢測(cè)。當(dāng)然,這里只是一個(gè)簡(jiǎn)單的實(shí)驗(yàn)方案,仍需要進(jìn)行更加全面、有效和長(zhǎng)期的實(shí)驗(yàn)來驗(yàn)證該解決方案的可靠性。

結(jié)論

ADXL345是ADI公司的一款功能強(qiáng)大的加速度傳感器產(chǎn)品。本文利用ADXL345內(nèi)部的多種運(yùn)動(dòng)狀態(tài)檢測(cè)功能和靈活的中斷功能,提出一種新的跌倒檢測(cè)解決方案。經(jīng)驗(yàn)證,該解決方案具有算法復(fù)雜度低,檢測(cè)準(zhǔn)確度高的優(yōu)點(diǎn)。

附錄
本算法的基于ADXL345和ADuC7026的測(cè)試平臺(tái)實(shí)現(xiàn)。通過Keil UV3編譯,工程中共有4個(gè)頭文件和一個(gè)c文件。下面詳細(xì)給出了c文件中源代碼。

// Include header files

#include "FallDetection.h"

void IRQ_Handler() __irq // IRQ interrupt

{

unsigned char i;

if((IRQSTA & GP_TIMER_BIT)==GP_TIMER_BIT) //TIMER1 Interrupt, interval 20ms

{

T1CLRI = 0; // Clear Timer1 interrupt

if(DetectionStatus==0xF2) // Strike after weightlessness is detected, waiting for stable

{

TimerWaitForStable++;

if(TimerWaitForStable>=STABLE_WINDOW) // Time out, restart

{

IRQCLR = GP_TIMER_BIT; // Disable ADuC7026's Timer1 interrupt

DetectionStatus=0xF0;

putchar(DetectionStatus);

ADXL345Registers[XL345_THRESH_ACT]=STRIKE_THRESHOLD;

ADXL345Registers[XL345_THRESH_INACT]=NOMOVEMENT_THRESHOLD;

ADXL345Registers[XL345_TIME_INACT]=STABLE_TIME;

ADXL345Registers[XL345_ACT_INACT_CTL]=XL345_INACT_Z_ENABLE | XL345_INACT_Y_ENABLE

| XL345_INACT_X_ENABLE | XL345_INACT_AC

| XL345_ACT_Z_ENABLE | XL345_ACT_Y_ENABLE

| XL345_ACT_X_ENABLE | XL345_ACT_DC;

xl345Write(4, XL345_THRESH_ACT, &ADXL345Registers[XL345_THRESH_ACT]);

}

}

else if(DetectionStatus==0xF1) // Weightlessness is detected, waiting for strike

{

TimerWaitForStrike++;

if(TimerWaitForStrike>=STRIKE_WINDOW) // Time out, restart

{

IRQCLR = GP_TIMER_BIT; // Disable ADuC7026's Timer1 interrupt

DetectionStatus=0xF0;

putchar(DetectionStatus);

ADXL345Registers[XL345_THRESH_ACT]=STRIKE_THRESHOLD;

ADXL345Registers[XL345_THRESH_INACT]=NOMOVEMENT_THRESHOLD;

ADXL345Registers[XL345_TIME_INACT]=STABLE_TIME;

ADXL345Registers[XL345_ACT_INACT_CTL]=XL345_INACT_Z_ENABLE | XL345_INACT_Y_ENABLE

| XL345_INACT_X_ENABLE | XL345_INACT_AC

| XL345_ACT_Z_ENABLE | XL345_ACT_Y_ENABLE

| XL345_ACT_X_ENABLE | XL345_ACT_DC;

xl345Write(4, XL345_THRESH_ACT, &ADXL345Registers[XL345_THRESH_ACT]);

}

}

}

if((IRQSTA&SPM4_IO_BIT)==SPM4_IO_BIT) // External interrupt form ADXL345 INT0

{

IRQCLR = SPM4_IO_BIT; // Disable ADuC7026's external interrupt

xl345Read(1, XL345_INT_SOURCE, &ADXL345Registers[XL345_INT_SOURCE]);

if((ADXL345Registers[XL345_INT_SOURCE]&XL345_ACTIVITY)==XL345_ACTIVITY) // Activity interrupt asserted

{

if(DetectionStatus==0xF1) // Waiting for strike, and now strike is detected

{

DetectionStatus=0xF2; // Go to Status "F2"

putchar(DetectionStatus);

ADXL345Registers[XL345_THRESH_ACT]=STABLE_THRESHOLD;

ADXL345Registers[XL345_THRESH_INACT]=NOMOVEMENT_THRESHOLD;

ADXL345Registers[XL345_TIME_INACT =STABLE_TIME;

ADXL345Registers[XL345_ACT_INACT_CTL]=XL345_INACT_Z_ENABLE | XL345_INACT_Y_ENABLE

| XL345_INACT_X_ENABLE | XL345_INACT_AC

| XL345_ACT_Z_ENABLE | XL345_ACT_Y_ENABLE

| XL345_ACT_X_ENABLE | XL345_ACT_AC;

xl345Write(4, XL345_THRESH_ACT, &ADXL345Registers[XL345_THRESH_ACT]);

IRQEN|=GP_TIMER_BIT; // Enable ADuC7026's Timer1 interrupt

TimerWaitForStable=0;

}

else if(DetectionStatus==0xF4) // Waiting for long time motionless, but a movement is detected

{

DetectionStatus=0xF0; // Go to Status "F0", restart

putchar(DetectionStatus);

ADXL345Registers[XL345_THRESH_ACT]=STRIKE_THRESHOLD;

ADXL345Registers[XL345_THRESH_INACT]=NOMOVEMENT_THRESHOLD;

ADXL345Registers[XL345_TIME_INACT]=STABLE_TIME;

ADXL345Registers[XL345_ACT_INACT_CTL]=XL345_INACT_Z_ENABLE | XL345_INACT_Y_ENABLE

| XL345_INACT_X_ENABLE | XL345_INACT_AC

| XL345_ACT_Z_ENABLE | XL345_ACT_Y_ENABLE

| XL345_ACT_X_ENABLE | XL345_ACT_DC;

xl345Write(4, XL345_THRESH_ACT, &ADXL345Registers[XL345_THRESH_ACT]);

}

}

else if((ADXL345Registers[XL345_INT_SOURCE]&XL345_INACTIVITY)==XL345_INACTIVITY) // Inactivity interrupt asserted

{

if(DetectionStatus==0xF2) // Waiting for stable, and now stable is detected

{

DetectionStatus=0xF3; // Go to Status "F3"

IRQCLR = GP_TIMER_BIT;

putchar(DetectionStatus);

xl345Read(6, XL345_DATAX0, &ADXL345Registers[XL345_DATAX0]);

DeltaVectorSum=0;

for(i=0;i<3; i++)

{

Acceleration[i]=ADXL345Registers[XL345_DATAX1+i*2]&0x1F;

Acceleration[i]=(Acceleration[i]<<8)|ADXL345Registers[XL345_DATAX0+i*2];

if(Acceleration[i]<0x1000)

{

Acceleration[i]=Acceleration[i]+0x1000;

}

else //if(Acceleration[i]>=4096)

{

Acceleration[i]=Acceleration[i]-0x1000;

}

if(Acceleration[i]>InitialStatus[i])

{

DeltaAcceleration[i]=Acceleration[i]-InitialStatus[i];

}

else

{

DeltaAcceleration[i]=InitialStatus[i]-Acceleration[i];

}

DeltaVectorSum=DeltaVectorSum+DeltaAcceleration[i]*DeltaAcceleration[i];

}

if(DeltaVectorSum>DELTA_VECTOR_SUM_THRESHOLD // The stable status is different from the initial status

{

DetectionStatus=0xF4; // Valid fall detection

putchar(DetectionStatus);

ADXL345Registers[XL345_THRESH_ACT]=STABLE_THRESHOLD;

ADXL345Registers[XL345_THRESH_INACT]=NOMOVEMENT_THRESHOLD;

ADXL345Registers[XL345_TIME_INACT]=NOMOVEMENT_TIME;

ADXL345Registers[XL345_ACT_INACT_CTL]=XL345_INACT_Z_ENABLE | XL345_INACT_Y_ENABLE

| XL345_INACT_X_ENABLE | XL345_INACT_AC

| XL345_ACT_Z_ENABLE | XL345_ACT_Y_ENABLE

| XL345_ACT_X_ENABLE | XL345_ACT_AC;

xl345Write(4, XL345_THRESH_ACT, &ADXL345Registers[XL345_THRESH_ACT]);

}

else // Delta vector sum is not exceed the threshold

{

DetectionStatus=0xF0; // Go to Status "F0", restart

putchar(DetectionStatus);

ADXL345Registers[XL345_THRESH_ACT]=STRIKE_THRESHOLD;

ADXL345Registers[XL345_THRESH_INACT]=NOMOVEMENT_THRESHOLD;

ADXL345Registers[XL345_TIME_INACT]=STABLE_TIME;

ADXL345Registers[XL345_ACT_INACT_CTL]=XL345_INACT_Z_ENABLE | XL345_INACT_Y_ENABLE

| XL345_INACT_X_ENABLE | XL345_INACT_AC

| XL345_ACT_Z_ENABLE | XL345_ACT_Y_ENABLE

| XL345_ACT_X_ENABLE | XL345_ACT_DC;

xl345Write(4, XL345_THRESH_ACT, &ADXL345Registers[XL345_THRESH_ACT]);

}

}

else if(DetectionStatus==0xF4) // Wait for long time motionless and now it is detected

{

DetectionStatus=0xF5; // Valid critical fall detection

putchar(DetectionStatus);

ADXL345Registers[XL345_THRESH_ACT]=STRIKE_THRESHOLD;

ADXL345Registers[XL345_THRESH_INACT]=NOMOVEMENT_THRESHOLD;

ADXL345Registers[XL345_TIME_INACT]=STABLE_TIME;

下一篇: PLC、DCS、FCS三大控

上一篇: 索爾維全系列Solef?PV

推薦產(chǎn)品

更多
中文字幕第二一区_久久久久在线视频_精品国产自在现线看久久_亚洲精品一区二区三区电影网

      9000px;">

          久久日韩粉嫩一区二区三区| 亚洲男人天堂av网| 91麻豆精品在线观看| 国产成人精品影视| 国产精品久久久久三级| 一区二区高清在线| 久久99精品久久久久久国产越南 | 成人动漫视频在线| 在线不卡的av| 国产亚洲一区二区三区四区| 一色桃子久久精品亚洲| 美女视频黄频大全不卡视频在线播放 | 日韩av一二三| 波多野结衣精品在线| 国产精品美女久久久久aⅴ| 一区二区三区不卡在线观看 | 国产成人精品免费看| 日韩一本二本av| 日本欧美在线观看| 欧美亚洲综合一区| 亚洲国产视频直播| 国产一区二区在线视频| 欧美人牲a欧美精品| 亚洲影院免费观看| 欧美亚洲综合一区| 亚洲午夜免费电影| 欧美色图一区二区三区| 亚洲综合在线免费观看| 91久久国产综合久久| 亚洲色图视频网| 99国产精品国产精品毛片| 中文字幕不卡的av| 成人sese在线| 欧美日韩亚洲国产综合| 一区二区三区国产精华| 欧美午夜精品久久久久久孕妇| 最新国产の精品合集bt伙计| www..com久久爱| 亚洲综合在线视频| 日韩午夜在线观看| 蜜臀精品久久久久久蜜臀 | 亚洲一区免费观看| 美女www一区二区| 精品国产髙清在线看国产毛片| 毛片av一区二区三区| 亚洲一区二区三区自拍| 成人免费看的视频| 国产一区二区电影| 国产乱码精品一区二区三区av| 亚洲成av人片一区二区三区| 亚洲品质自拍视频网站| 亚洲天堂福利av| 国产精品女主播av| 亚洲国产精品传媒在线观看| 91精品国产一区二区人妖| 欧美午夜精品一区| 欧美一区二区三区电影| 91麻豆精品国产91久久久久久久久 | 国产一区二区精品在线观看| 美国毛片一区二区三区| 精彩视频一区二区| 国产91色综合久久免费分享| 国产成人免费视频| 99国产精品视频免费观看| 91国产成人在线| 国产精品影视天天线| 日韩成人免费看| 亚洲一区二区三区免费视频| 日韩一区欧美二区| 麻豆成人久久精品二区三区红| 一区二区三区免费网站| 亚洲精品视频在线| 亚洲国产成人tv| 狠狠色丁香婷婷综合| 精品一区二区三区在线播放视频| 久久99精品国产麻豆婷婷洗澡| 亚洲午夜日本在线观看| 日韩成人一区二区| 国产乱妇无码大片在线观看| 成人av午夜影院| 精品视频1区2区3区| 日韩欧美国产综合在线一区二区三区| 日韩精品一区在线观看| 国产精品私房写真福利视频| 亚洲人成网站在线| 日本va欧美va欧美va精品| 国产在线精品一区在线观看麻豆| 成人黄色综合网站| 在线播放中文字幕一区| 国产女人18水真多18精品一级做| 亚洲人精品一区| 开心九九激情九九欧美日韩精美视频电影 | 亚洲欧美日韩久久| 蜜桃视频在线观看一区| 成人h动漫精品一区二区 | 91精品久久久久久久99蜜桃| 国产午夜精品一区二区三区四区| 亚洲精品视频一区| 国产精品一二三区| 欧美日韩aaa| 最新国产精品久久精品| 精品一区二区精品| 欧美日韩国产一级片| 亚洲美女淫视频| 国产成人精品www牛牛影视| 3d成人动漫网站| 亚洲精品视频一区| 99精品视频中文字幕| 久久精品亚洲麻豆av一区二区| 视频一区视频二区中文| 91国产免费观看| 国产人伦精品一区二区| 亚洲精品国产无套在线观| 久久se精品一区精品二区| 69久久夜色精品国产69蝌蚪网| 成人免费在线播放视频| 激情偷乱视频一区二区三区| 在线国产电影不卡| 亚洲免费高清视频在线| 91在线一区二区三区| 国产精品网友自拍| 久久国产夜色精品鲁鲁99| 欧美伊人久久大香线蕉综合69| 国产精品成人午夜| 成人免费毛片片v| 久久美女艺术照精彩视频福利播放| 亚洲v中文字幕| 91麻豆免费观看| 夜夜精品视频一区二区 | 亚洲伦理在线精品| 91福利视频网站| 亚洲一区在线免费观看| 精品视频123区在线观看| 天堂成人免费av电影一区| 欧美疯狂性受xxxxx喷水图片| 午夜国产精品影院在线观看| 欧美男男青年gay1069videost | 婷婷成人激情在线网| 在线不卡免费欧美| 狠狠色丁香久久婷婷综| 国产日韩精品一区二区浪潮av| 成人午夜短视频| 一区二区三区在线影院| 欧美精品自拍偷拍| 激情综合色播五月| 中文字幕欧美三区| 在线精品视频免费观看| 麻豆成人免费电影| 亚洲人成小说网站色在线| 欧美日韩在线播| 国产原创一区二区| 亚洲欧美福利一区二区| 精品视频资源站| 国产麻豆精品久久一二三| 中文字幕在线一区二区三区| 欧美午夜精品一区二区三区| 精品中文字幕一区二区小辣椒 | 国产精品黄色在线观看| 色欧美日韩亚洲| 久久99最新地址| 亚洲色图制服诱惑| 久久亚洲影视婷婷| 91九色02白丝porn| 国产成人精品三级麻豆| 亚洲成av人片一区二区| 国产日韩欧美电影| 日韩视频免费直播| 欧美视频中文字幕| 高清成人在线观看| 免费久久99精品国产| 亚洲精品免费视频| 久久精品视频在线看| 欧美日韩dvd在线观看| 成人av中文字幕| 九色|91porny| 亚洲大片在线观看| 日韩一区在线看| 久久久噜噜噜久久人人看| 欧美人牲a欧美精品| 91久久人澡人人添人人爽欧美| 国产aⅴ综合色| 蜜桃视频一区二区三区| 亚洲欧美一区二区久久| 久久精品一区二区| 欧美va亚洲va国产综合| 欧美色综合网站| 色噜噜狠狠色综合中国| 国产成人在线色| 久草在线在线精品观看| 人人超碰91尤物精品国产| 亚洲国产成人va在线观看天堂| 最新日韩在线视频| 中文字幕中文乱码欧美一区二区| 久久久久久久久久看片| 亚洲精品在线免费播放| 日韩一区二区三区视频在线| 欧美精品在线一区二区三区| 欧美三级电影网站| 51精品秘密在线观看| 欧美日韩免费观看一区三区|