產(chǎn)品分類

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

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

      android重力傳感器:Android傳感器【轉(zhuǎn)】

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


      android重力傳感器:Android傳感器【轉(zhuǎn)】  第1張

      android重力傳感器:Android傳感器【轉(zhuǎn)】

      本文轉(zhuǎn)載自:
      傳感器的意義
      事實(shí)上,目前智能手機(jī)應(yīng)用軟件生態(tài)系統(tǒng)不斷擴(kuò)展。傳感器除了能增加體現(xiàn)感和用戶互動(dòng)這些理念性的東西外。游戲上傳感器的應(yīng)用也成為新的發(fā)展方向。就是體感裝置在游戲設(shè)備的崛起一樣,傳感器在手機(jī)和平板上的發(fā)展會(huì)越來(lái)越快。現(xiàn)在在游戲、健康照護(hù)、體能訓(xùn)練以及許多新應(yīng)用都要用到傳感器。
      由于智慧手機(jī)中加入了各種傳感器,使手機(jī)也變得越來(lái)越智慧化。加速度傳感器回應(yīng)使用者的互動(dòng)方式,使得傳統(tǒng)平淡無(wú)奇的輸入作業(yè),轉(zhuǎn)變成類似游戲的新奇體驗(yàn),進(jìn)而提高使用者使用智慧手機(jī)的意愿。過(guò)去智慧手機(jī)比較的重點(diǎn)在于是否擁有加速度傳感器,目前變成比較誰(shuí)的手機(jī)具備了三軸陀螺儀,未來(lái)則有更多的新的傳感器的加入。
       下面就列舉下大家比較關(guān)注也是常見(jiàn)的幾種傳感器(或者叫感應(yīng)器)
      重力感應(yīng)器
      手機(jī)重力感應(yīng)技術(shù):利用壓電效應(yīng)實(shí)現(xiàn),簡(jiǎn)單來(lái)說(shuō)是測(cè)量?jī)?nèi)部一片重物(重物和壓電片做成一體)重力正交兩個(gè)方向的分力大小,來(lái)判定水平方向。通過(guò)對(duì)力敏感的傳感器,感受手機(jī)在變換姿勢(shì)時(shí),重心的變化,使手機(jī)光標(biāo)變化位置從而實(shí)現(xiàn)選擇的功能。
      手機(jī)重力感應(yīng)指的是手機(jī)內(nèi)置重力搖桿芯片,支持搖晃切換所需的界面和功能,甩歌甩屏,翻轉(zhuǎn)靜音,甩動(dòng)切換視頻等,是一種非常具有使用樂(lè)趣的功能。
      重力感應(yīng)器說(shuō)的簡(jiǎn)單點(diǎn)就是,你本來(lái)把手機(jī)拿在手里是豎著的,你將它轉(zhuǎn)90度,橫過(guò)來(lái),它的頁(yè)面就跟隨你的重心自動(dòng)反應(yīng)過(guò)來(lái),也就是說(shuō)頁(yè)面也轉(zhuǎn)了90度,極具人性化。現(xiàn)在基本上智能手機(jī)都有內(nèi)置重力感應(yīng)器,甚至有些非智能手機(jī)也有內(nèi)置。其常見(jiàn)的應(yīng)用有玩平衡球了,還有橫屏瀏覽網(wǎng)頁(yè)、看小說(shuō)之類的了。
      根據(jù)壓電效應(yīng)的原理來(lái)工作的。所謂的壓電效應(yīng)就是 “對(duì)于不存在對(duì)稱中心的異極晶體加在晶體上的外力除了使晶體發(fā)生形變以外,還將改變晶體的極化狀態(tài),在晶體內(nèi)部建立電場(chǎng),這種由于機(jī)械力作用使介質(zhì)發(fā)生極化的現(xiàn)象稱為正壓電效應(yīng)”。
      它采用彈性敏感元件制成懸臂式位移器,與采用彈性敏感元件制成的儲(chǔ)能彈簧來(lái)驅(qū)動(dòng)電觸點(diǎn),完成從重力變化到電信號(hào)的轉(zhuǎn)換。重力傳感器在手機(jī)橫豎的時(shí)候屏幕會(huì)自動(dòng)轉(zhuǎn),在玩游戲可以代替上下左右,比如說(shuō)玩賽車游戲,可以不通過(guò)按鍵,將手機(jī)平放,左右搖擺就可以代替模擬機(jī)游戲的方向左右移動(dòng)了。
      重力傳感器就是利用了其內(nèi)部的由于加速度造成的晶體變形這個(gè)特性。由于這個(gè)變形會(huì)產(chǎn)生電壓,只要計(jì)算出產(chǎn)生電壓和所施加的加速度之間的關(guān)系,就可以將加速度轉(zhuǎn)化成電壓輸出。當(dāng)然,還有很多其它方法來(lái)制作加速度傳感器,比如電容效應(yīng),熱氣泡效應(yīng),光效應(yīng),但是其最基本的原理都是由于加速度產(chǎn)生某個(gè) 介質(zhì)產(chǎn)生變形,通過(guò)測(cè)量其變形量并用相關(guān)電路轉(zhuǎn)化成電壓輸出。手機(jī)重力感應(yīng)指的是手機(jī)內(nèi)置重力搖桿芯片,支持搖晃切換所需的界面和功能,甩歌甩屏,翻轉(zhuǎn)靜音,甩動(dòng)切換視頻等,是一種非常具有使用樂(lè)趣的功能。
      加速度傳感器
      加速度傳感器是一種能夠測(cè)量加速力的電子設(shè)備。加速力就是當(dāng)物體在加速過(guò)程中作用在物體上的力,就好比地球引力,也就是重力。加速力可以是個(gè)常量,比如g,也可以是變量。因此它的范圍比重力感應(yīng)器要大,但是一般在手機(jī)被提到的加速度感應(yīng)器時(shí),其實(shí)就是指重力感應(yīng)器,因此兩者可以看做是等價(jià)的。
      磁傳感器、加速度傳感器和陀螺儀通常稱為慣性傳感器,常用于各種設(shè)備或終端中實(shí)現(xiàn)姿態(tài)檢測(cè),運(yùn)動(dòng)檢測(cè)等。這些傳感器提供了各種APP、游戲、軟件成為有趣的現(xiàn)實(shí)。加速度傳感器利用重力加速度,可以用于檢測(cè)設(shè)備的傾斜角度,但是它會(huì)受到運(yùn)動(dòng)加速度的影響,使傾角測(cè)量不夠準(zhǔn)確,所以通常需利用陀螺儀和磁傳感器補(bǔ)償。 同時(shí)磁傳感器測(cè)量方位角時(shí),也是利用地磁場(chǎng),當(dāng)系統(tǒng)中電流變化或周圍有導(dǎo)磁材料時(shí),以及當(dāng)設(shè)備傾斜時(shí),測(cè)量出的方位角也不準(zhǔn)確,這時(shí)需要用加速度傳感器(傾角傳感器)和陀螺儀進(jìn)行補(bǔ)償。而陀螺儀,只有運(yùn)動(dòng)時(shí)才輸出角速率,靜態(tài)時(shí)輸出為0,它也很難單獨(dú)地確定設(shè)備的姿態(tài)。所以在實(shí)際應(yīng)用中,通常應(yīng)用三軸磁傳感器、三軸加速度傳感器和三軸陀螺儀一起確定設(shè)備的姿態(tài),以及實(shí)現(xiàn)運(yùn)動(dòng)檢測(cè)。
      方向感應(yīng)器
      手機(jī)方向傳感器是指,安裝在手機(jī)上用以檢測(cè)手機(jī)本身處于何種方向狀態(tài)的部件,而不是通常理解的指南針的功能。
      手機(jī)方向檢測(cè)功能可以檢測(cè)手機(jī)處于正豎、倒豎、左橫、右橫,仰、俯狀態(tài)。具有方向檢測(cè)功能的手機(jī)具有使用更方便、更具人性化的特點(diǎn)。例如,手機(jī)旋轉(zhuǎn)后,屏幕圖像可以自動(dòng)跟著旋轉(zhuǎn)并切換長(zhǎng)寬比例,文字或菜單也可以同時(shí)旋轉(zhuǎn),使你閱讀方便。
      這個(gè)兩者是不一樣的,方向感應(yīng)器或者叫應(yīng)用角速度傳感器比較合適,一般手機(jī)的上的方向感應(yīng)器是感應(yīng)水平面上的方位角、旋轉(zhuǎn)角和傾斜角的。這個(gè)如果你可能覺(jué)得有點(diǎn)理論的話,舉個(gè)例子吧。有方向感應(yīng)器的能很好的玩都市賽車游戲。而只有重力感應(yīng)器也能玩,但是恩,很令人糾結(jié)。
      三軸陀螺儀
        三軸陀螺儀:即同時(shí)測(cè)定6個(gè)方向的位置,移動(dòng)軌跡,加速。單軸的只能測(cè)量一個(gè)方向的量,也就是一個(gè)系統(tǒng)需要三個(gè)陀螺儀,而3軸的一個(gè)就能替代三個(gè)單軸的。3軸的體積小、重量輕、結(jié)構(gòu)簡(jiǎn)單、可靠性好,是激光陀螺的發(fā)展趨勢(shì)。對(duì)于激光陀螺則更多應(yīng)用于軍事方面,我們暫且不做討論。不過(guò)我們可以看出iPhone4應(yīng)用的三軸陀螺儀是較為先進(jìn)的。
      如果說(shuō),重力感應(yīng)器所能測(cè)的是直線的,方面感應(yīng)器所測(cè)的是平面得,那么三軸陀螺儀所測(cè)的方向和位置則是立體的。特別是玩一些像彩虹六號(hào),那種第一人稱射擊游戲,你會(huì)發(fā)現(xiàn)三軸陀螺儀的效果是很明顯的。
      陀螺儀就是內(nèi)部有一個(gè)陀螺,陀螺儀一旦開(kāi)始旋轉(zhuǎn),由于輪子的角動(dòng)量,陀螺儀有抗拒方向改變的特性,它的軸由于陀螺效應(yīng)始終與初始方向平行,這樣就可以通過(guò)與初始方向的偏差計(jì)算出實(shí)際方向。手機(jī)里陀螺儀實(shí)際上是一個(gè)結(jié)構(gòu)非常精密的芯片,內(nèi)部包含超微小的陀螺。陀螺儀測(cè)量是參考標(biāo)準(zhǔn)是內(nèi)部中間在與地面垂直的方向上進(jìn)行轉(zhuǎn)動(dòng)的陀螺。通過(guò)設(shè)備與陀螺的夾角得到結(jié)果。陀螺儀的強(qiáng)項(xiàng)在于測(cè)量設(shè)備自身的旋轉(zhuǎn)運(yùn)動(dòng)。對(duì)設(shè)備自身運(yùn)動(dòng)更擅長(zhǎng)。但不能確定設(shè)備的方位。
      陀螺儀有單軸陀螺儀和三軸陀螺儀,單軸的只能測(cè)量一個(gè)方向的量,也就是一個(gè)系統(tǒng)需要三個(gè)陀螺儀。而三軸陀螺儀可同時(shí)測(cè)定6個(gè)方向的位置,移動(dòng)軌 跡,加速。所以一個(gè)三軸陀螺儀就能替代三個(gè)單軸陀螺儀。三軸陀螺儀多用于航海、航天等導(dǎo)航、定位系統(tǒng),能夠精確地確定運(yùn)動(dòng)物體的方位。如今也多用于智能手機(jī)當(dāng)中,比如最早采用該技的蘋果iPhone 4。
      三軸陀螺儀最早由蘋果iPhone 4采用,后來(lái)逐漸被各類智能手機(jī)所應(yīng)用。三軸陀螺儀可以測(cè)出手機(jī)的運(yùn)動(dòng)方向,使手機(jī)做出正確回應(yīng)。通過(guò)移動(dòng)手機(jī)相應(yīng)的位置,就可以達(dá)到改變方向的目的,同時(shí)操作也更加簡(jiǎn)便。利用三軸陀螺儀進(jìn)行體感控制的游戲。 目前手機(jī)中采用的三軸陀螺儀用途主要體現(xiàn)在游戲的操控上,有了三軸陀螺儀,我們?cè)谕娆F(xiàn)代戰(zhàn)爭(zhēng)等第一人稱射擊游戲以及狂野飆車等競(jìng)技類游戲時(shí),可 以完全摒棄以前通過(guò)方向按鍵來(lái)控制游戲的操控方式,我們只需要通過(guò)移動(dòng)手機(jī)相應(yīng)的位置,既可以達(dá)到改變方向的目的,使游戲體驗(yàn)更加真實(shí)、操作更加靈活。

      距離傳感器
      距離傳感器是利用測(cè)時(shí)間來(lái)實(shí)現(xiàn)測(cè)距離的原理,以檢測(cè)物體的距離的一種傳感器。工作原理:通過(guò)發(fā)射特別短的光脈沖,并測(cè)量此光脈沖從發(fā)射到被物體反射回來(lái)的時(shí)間,通過(guò)測(cè)時(shí)間來(lái)計(jì)算與物體之間的距離。這個(gè)傳感器在手機(jī)上的作用是當(dāng)我們打電話時(shí),手機(jī)屏幕會(huì)自動(dòng)熄滅,當(dāng)你臉離開(kāi),屏幕燈會(huì)自動(dòng)開(kāi)啟,并且自動(dòng)解鎖。這個(gè)對(duì)于待機(jī)手機(jī)較短的智能手機(jī)來(lái)說(shuō)是相當(dāng)實(shí)用的。現(xiàn)在很多智能手機(jī)都裝備的這個(gè)傳感器。
      距離感應(yīng)器又叫位移傳感器,是利用各種元件檢測(cè)對(duì)象物的物理變化量,通過(guò)將該變化量換算為距離,來(lái)測(cè)量從傳感器到對(duì)象物的距離位移的機(jī)器。根據(jù) 使用元件不同,分為光學(xué)式位移傳感器、線性接近傳感器、超聲波位移傳感器等。距離感應(yīng)器一般都在手機(jī)聽(tīng)筒的兩側(cè)或者是在手機(jī)聽(tīng)筒凹槽中,這樣便于它的工作。當(dāng)用戶在接聽(tīng)或撥打電話時(shí),將手機(jī)靠近頭部,距離感應(yīng)器可以測(cè)出之間的距離到了一定程度后便通知屏幕背景燈熄滅,拿開(kāi)時(shí)再度點(diǎn)亮背景燈,這樣更方便用 戶操作也更為節(jié)省電量。

      光線傳感器(感應(yīng)器)
      光線傳感器,也就是感光器,也叫做亮度感應(yīng)器,英文名稱為L(zhǎng)ight-Sensor,很多平板電腦和手機(jī)都配備了該感應(yīng)器。一般位于手持設(shè)備屏幕上方,它能根據(jù)手持設(shè)備目前所處的光線亮度,自動(dòng)調(diào)節(jié)手持設(shè)備屏幕亮度,來(lái)給使用者帶來(lái)最佳視的覺(jué)效果。例如在黑暗的環(huán)境下,手持設(shè)備屏幕背光燈就會(huì)自動(dòng)變暗,否則很刺眼。它的功能是用來(lái)感應(yīng)光線強(qiáng)弱的,然后反饋到手持設(shè)備,自動(dòng)調(diào)節(jié)屏幕亮度,從而達(dá)到省電的目的。
      是能夠根據(jù)周圍光亮明暗程度來(lái)調(diào)節(jié)屏幕明暗的裝置。就是在光線強(qiáng)的地方手機(jī)會(huì)自動(dòng)關(guān)掉鍵盤燈,并且稍微加強(qiáng)屏幕亮度,達(dá)到節(jié)電并更好觀看屏幕的效果,。
      光線傳感器,一光線感應(yīng)器一是環(huán)境光及接近檢測(cè)傳感器,這個(gè)傳感器用于改善用戶體驗(yàn)并延長(zhǎng)電池壽命。據(jù)介紹,數(shù)字環(huán)境光傳感器能根據(jù)燈光變化(光線亮度)自動(dòng)調(diào)節(jié)顯示屏亮度,可減少30%的電源消耗。另外,接近檢測(cè)則通過(guò)非接觸式技術(shù)簡(jiǎn)化人機(jī)交流。
        二是RGB顏色傳感器,這個(gè)傳感器可以迎合更高精度“人眼”顏色傳感器的視覺(jué)體驗(yàn)需求。Jerry Koontz說(shuō),目前顏色光學(xué)傳感器,是由創(chuàng)新的硅設(shè)計(jì)和光電二級(jí)管配置,有專為模塊機(jī)械和光學(xué)設(shè)計(jì)進(jìn)行優(yōu)化的紅外阻塞過(guò)濾器,實(shí)現(xiàn)與人眼相似的光學(xué)反應(yīng)。精確的RGB光線和色溫測(cè)量實(shí)現(xiàn)顯示器校準(zhǔn)備和最佳的圖片質(zhì)量,RGB顏色傳感器支持環(huán)境光感測(cè),提高視覺(jué)體驗(yàn),并且節(jié)能。
        三是手勢(shì)識(shí)別傳感器。采用非接觸技術(shù)的高集成度手勢(shì)傳感器,是用光電二極管技術(shù) 實(shí)現(xiàn)高度可靠、精確的非接觸式用戶界面,精密的手勢(shì)引擎可以實(shí)現(xiàn)復(fù)雜的紅外線手勢(shì)感應(yīng),具有紅外手勢(shì)感知、環(huán)境光顏色感知、接近檢測(cè)的四合一模塊TMG3992/3可用于優(yōu)惠券兌換。Jerry Koontz說(shuō),手勢(shì)識(shí)別傳感器電路板面積小于10平方毫米,是為優(yōu)化系統(tǒng)提供的高集成度的解決方案,可配置的手勢(shì)命令使應(yīng)用更靈活,會(huì)推動(dòng)下一代用戶操作界面的發(fā)展。
      光電感應(yīng)器是由兩個(gè)組件即投光器及受光器所組成,利用投光器將光線由透鏡將之聚焦,經(jīng)傳輸而至受光器之透鏡,再至接收感應(yīng)器,感應(yīng)器將收到之光 線訊號(hào)轉(zhuǎn)變成電器信號(hào),此電信訊號(hào)更可進(jìn)一步作各種不同的開(kāi)關(guān)及控制動(dòng)作,其基本原理即對(duì)投光器受光器間之光線做遮蔽之動(dòng)作所獲得的信號(hào)加以運(yùn)用以完成各 種自動(dòng)化控制。

      電子羅盤,也叫方位感應(yīng)器(傳感器)
        電子羅盤,也叫數(shù)字指南針,是利用地磁場(chǎng)來(lái)定北極的一種方法。古代稱為羅經(jīng),現(xiàn)代利用先進(jìn)加工工藝生產(chǎn)的磁阻傳感器為羅盤的數(shù)字化提供了有力的幫助。現(xiàn)在一般有用磁阻傳感器和磁通門加工而成的電子羅盤。這個(gè)就是電子版指南針,配合GPS和地圖時(shí)非常好用,不會(huì)整的暈頭轉(zhuǎn)向。
      當(dāng)然除了這些較為常見(jiàn)的傳感器之外,電容屏也是一種傳感器,在女性手機(jī)上可以見(jiàn)到紫外線傳感器,在軍用手機(jī)上可以看到氣壓和溫度傳感器等等。
      電子羅盤也被廣泛應(yīng)用于智能手機(jī)中,用來(lái)導(dǎo)航指向,同時(shí)還可以將數(shù)字信號(hào)接送到自動(dòng)舵。現(xiàn)代實(shí)用的電子羅盤一般能耗低、體積小、重量輕、精度高、內(nèi)置溫度補(bǔ)償,能夠?qū)崿F(xiàn)精確導(dǎo)航。
      位移傳感器
      位移傳感器應(yīng)用于手機(jī)中,可以使用戶在接打電話時(shí),感應(yīng)到用戶頭與手機(jī)之間的距離。當(dāng)頭靠近手機(jī)聽(tīng)筒時(shí),手機(jī)屏幕背景燈就會(huì)熄滅,當(dāng)距離再次拉遠(yuǎn)時(shí),便會(huì)恢復(fù)正常背景燈。在智能手機(jī)電池續(xù)航能力備受吐槽的今天,距離感應(yīng)器的應(yīng)用可以為用戶節(jié)能更多電量,來(lái)提升手機(jī)續(xù)航能力。
      霍爾傳感器
      霍爾傳感器是一類可直接對(duì)磁場(chǎng)及其變化進(jìn)行檢測(cè)的傳感器,通常也間接用于鐵磁物質(zhì)位置檢測(cè),并起到開(kāi)關(guān)的作用。我們經(jīng)常看到一些帶皮套的智能手機(jī),當(dāng)用戶在合上前蓋時(shí),手機(jī)能夠自動(dòng)鎖屏進(jìn)入休眠狀態(tài)并只在有透明開(kāi)窗部分顯示常用信息方便用戶查看,以起到省電的作用。當(dāng)有來(lái)電信息或者打開(kāi)翻蓋時(shí),手機(jī)會(huì)自動(dòng)激活方便用戶使用。這是由于皮套子的前蓋子中帶有磁性物質(zhì),當(dāng)蓋子合上時(shí),磁性物質(zhì)與手機(jī)近距離接觸,改變了里面霍爾傳感器位置處的磁場(chǎng)大小,從而被傳感器檢測(cè)到并輸出電信號(hào)值,該信號(hào)最終由手機(jī)的檢測(cè)和控制系統(tǒng)接收到并發(fā)出鎖屏休眠指令。同理,打開(kāi)翻蓋時(shí)是一樣的道理。手機(jī)皮套子中鐵磁物質(zhì)除了提供磁場(chǎng)外,另一個(gè)作用是與手機(jī)里類似物(如話筒)產(chǎn)生磁吸力,方便皮套前蓋的開(kāi)合使用。
      android重力傳感器:Android傳感器【轉(zhuǎn)】  第2張

      android重力傳感器:Android手機(jī)系統(tǒng)中的重力傳感器+源碼

      Android 手機(jī)系統(tǒng)中的重力傳感器+源碼,作者信息:Himi,重力傳感器也稱為加速度傳感器,源代碼編譯環(huán)境需要SDK 1.5(api 3)支持。
        此傳感器不僅對(duì)玩家反轉(zhuǎn)手機(jī)的動(dòng)作可以檢測(cè)到,而且會(huì)根據(jù)反轉(zhuǎn)手機(jī)的程度,得到傳感器的值也會(huì)不同!
        
        部分源代碼釋義:
        通過(guò)服務(wù)得到傳感器管理對(duì)象
        sm=(SensorManager) MainActivity.ma.getSystemService(Service.SENSOR_SERVICE);
        sensor=sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//得到一個(gè)重力傳感器實(shí)例
        //TYPE_ACCELEROMETER 加速度傳感器(重力傳感器)類型。
        //TYPE_ALL 描述所有類型的傳感器。
        //TYPE_GYROSCOPE 陀螺儀傳感器類型
        //TYPE_LIGHT 光傳感器類型
        //TYPE_MAGNETIC_FIELD 恒定磁場(chǎng)傳感器類型。
        //TYPE_ORIENTATION 方向傳感器類型。
        //TYPE_PRESSURE 描述一個(gè)恒定的壓力傳感器類型
        //TYPE_PROXIMITY 常量描述型接近傳感器
        //TYPE_TEMPERATURE 溫度傳感器類型描述
        mySensorListener=new SensorEventListener() {
        @Override
        //傳感器獲取值發(fā)生改變時(shí)在響應(yīng)此函數(shù)
         public void onSensorChanged(SensorEvent event) {//備注1
         //傳感器獲取值發(fā)生改變,在此處理
         x=event.values[0]; //手機(jī)橫向翻滾
         //x>0 說(shuō)明當(dāng)前手機(jī)左翻 x0 說(shuō)明當(dāng)前手機(jī)下翻 y0 手機(jī)屏幕朝上 z<0 手機(jī)屏幕朝下    arc_x -=x;//備注2    arc_y +=y;   }

      android重力傳感器:Android重力加速度傳感器從驅(qū)動(dòng)到應(yīng)用層全程分析

      1) framework

      ? SensorManager作為系統(tǒng)守護(hù)進(jìn)程運(yùn)行,其子類SensorThreadRunnable的行為函數(shù)run()實(shí)現(xiàn)sensors_data_poll(values, status, timestamp),其目的是通過(guò)此函數(shù)得到從底層傳上來(lái)的有關(guān)G-sensor的數(shù)據(jù)values, status和timestamp,再通過(guò)此類的一個(gè)行為函數(shù)listener.onSensorChangedLocked(sensorObject, values, timestamp, accuracy);為上層應(yīng)用程序提供了得到G-sensor設(shè)備數(shù)據(jù)的接口函數(shù)。

      2) JNI

      為sensors_data_poll()提供接口sensors_data_poll(),并執(zhí)行回調(diào)函數(shù)sSensorDevice->poll(sSensorDevice, &data);其中,得到的data就是從底層傳上來(lái)的G-sensor數(shù)據(jù),然后通過(guò)下圖的方式將data中對(duì)應(yīng)的數(shù)據(jù)分別賦給values, status和timestamp。?

      android重力傳感器:Android重力感應(yīng)開(kāi)發(fā)

      一、手機(jī)中常用的傳感器
      在Android2.3 gingerbread系統(tǒng)中,google提供了11種傳感器供應(yīng)用層使用,具體如下:(Sensor類)
      #define SENSOR_TYPE_ACCELEROMETER 1 //加速度
      #define SENSOR_TYPE_MAGNETIC_FIELD 2 //磁力
      #define SENSOR_TYPE_ORIENTATION 3 //方向
      #define SENSOR_TYPE_GYROSCOPE 4 //陀螺儀
      #define SENSOR_TYPE_LIGHT 5 //光線感應(yīng)
      #define SENSOR_TYPE_PRESSURE 6 //壓力
      #define SENSOR_TYPE_TEMPERATURE 7 //溫度
      #define SENSOR_TYPE_PROXIMITY 8 //接近
      #define SENSOR_TYPE_GRAVITY 9 //重力
      #define SENSOR_TYPE_LINEAR_ACCELERATION 10//線性加速度
      #define SENSOR_TYPE_ROTATION_VECTOR 11//旋轉(zhuǎn)矢量
      1-1加速度傳感器
      加速度傳感器又叫G-sensor,返回x、y、z三軸的加速度數(shù)值。
      該數(shù)值包含地心引力的影響,單位是m/s^2。
      將手機(jī)平放在桌面上,x軸默認(rèn)為0,y軸默認(rèn)0,z軸默認(rèn)9.81。
      將手機(jī)朝下放在桌面上,z軸為-9.81。
      將手機(jī)向左傾斜,x軸為正值。
      將手機(jī)向右傾斜,x軸為負(fù)值。
      將手機(jī)向上傾斜,y軸為負(fù)值。
      將手機(jī)向下傾斜,y軸為正值。
      加速度傳感器可能是最為成熟的一種mems產(chǎn)品,市場(chǎng)上的加速度傳感器種類很多。
      手機(jī)中常用的加速度傳感器有BOSCH(博世)的BMA系列,AMK的897X系列,ST的LIS3X系列等。
      這些傳感器一般提供±2G至±16G的加速度測(cè)量范圍,采用I2C或SPI接口和MCU相連,數(shù)據(jù)精度小于16bit。
      1-2 磁力傳感器
      磁力傳感器簡(jiǎn)稱為M-sensor,返回x、y、z三軸的環(huán)境磁場(chǎng)數(shù)據(jù)。
      該數(shù)值的單位是微特斯拉(micro-Tesla),用uT表示。
      單位也可以是高斯(Gauss),1Tesla=Gauss。
      硬件上一般沒(méi)有獨(dú)立的磁力傳感器,磁力數(shù)據(jù)由電子羅盤傳感器提供(E-compass)。
      電子羅盤傳感器同時(shí)提供下文的方向傳感器數(shù)據(jù)。
      1-3 方向傳感器
      方向傳感器簡(jiǎn)稱為O-sensor,返回三軸的角度數(shù)據(jù),方向數(shù)據(jù)的單位是角度。
      為了得到精確的角度數(shù)據(jù),E-compass需要獲取G-sensor的數(shù)據(jù),
      經(jīng)過(guò)計(jì)算生產(chǎn)O-sensor數(shù)據(jù),否則只能獲取水平方向的角度。
      方向傳感器提供三個(gè)數(shù)據(jù),分別為azimuth、pitch和roll。
      azimuth:方位,返回水平時(shí)磁北極和Y軸的夾角,范圍為0°至360°。
      0°=北,90°=東,180°=南,270°=西。
      pitch:x軸和水平面的夾角,范圍為-180°至180°。
      當(dāng)z軸向y軸轉(zhuǎn)動(dòng)時(shí),角度為正值。
      roll:y軸和水平面的夾角,由于歷史原因,范圍為-90°至90°。
      當(dāng)x軸向z軸移動(dòng)時(shí),角度為正值。
      電子羅盤在獲取正確的數(shù)據(jù)前需要進(jìn)行校準(zhǔn),通常可用8字校準(zhǔn)法。
      8字校準(zhǔn)法要求用戶使用需要校準(zhǔn)的設(shè)備在空中做8字晃動(dòng),
      原則上盡量多的讓設(shè)備法線方向指向空間的所有8個(gè)象限。
      手機(jī)中使用的電子羅盤芯片有AKM公司的897X系列,ST公司的LSM系列以及雅馬哈公司等等。
      由于需要讀取G-sensor數(shù)據(jù)并計(jì)算出M-sensor和O-sensor數(shù)據(jù),
      因此廠商一般會(huì)提供一個(gè)后臺(tái)daemon來(lái)完成工作,電子羅盤算法一般是公司私有產(chǎn)權(quán)。
      1-4 陀螺儀傳感器
      陀螺儀傳感器叫做Gyro-sensor,返回x、y、z三軸的角加速度數(shù)據(jù)。
      角加速度的單位是radians/second。
      根據(jù)Nexus S手機(jī)實(shí)測(cè):
      水平逆時(shí)針旋轉(zhuǎn),Z軸為正。
      水平逆時(shí)針旋轉(zhuǎn),z軸為負(fù)。
      向左旋轉(zhuǎn),y軸為負(fù)。
      向右旋轉(zhuǎn),y軸為正。
      向上旋轉(zhuǎn),x軸為負(fù)。
      向下旋轉(zhuǎn),x軸為正。
      ST的L3G系列的陀螺儀傳感器比較流行,iphone4和google的nexus s中使用該種傳感器。
      1-5 光線感應(yīng)傳感器
      光線感應(yīng)傳感器檢測(cè)實(shí)時(shí)的光線強(qiáng)度,光強(qiáng)單位是lux,其物理意義是照射到單位面積上的光通量。
      光線感應(yīng)傳感器主要用于Android系統(tǒng)的LCD自動(dòng)亮度功能。
      可以根據(jù)采樣到的光強(qiáng)數(shù)值實(shí)時(shí)調(diào)整LCD的亮度。
      1-6 壓力傳感器
      壓力傳感器返回當(dāng)前的壓強(qiáng),單位是百帕斯卡hectopascal(hPa)。
      1-7 溫度傳感器
      溫度傳感器返回當(dāng)前的溫度。
      1-8 接近傳感器
      接近傳感器檢測(cè)物體與手機(jī)的距離,單位是厘米。
      一些接近傳感器只能返回遠(yuǎn)和近兩個(gè)狀態(tài),
      因此,接近傳感器將最大距離返回遠(yuǎn)狀態(tài),小于最大距離返回近狀態(tài)。
      接近傳感器可用于接聽(tīng)電話時(shí)自動(dòng)關(guān)閉LCD屏幕以節(jié)省電量。
      一些芯片集成了接近傳感器和光線傳感器兩者功能。
      下面三個(gè)傳感器是Android2新提出的傳感器類型,目前還不太清楚有哪些應(yīng)用程序使用。
      1-9 重力傳感器
      重力傳感器簡(jiǎn)稱GV-sensor,輸出重力數(shù)據(jù)。
      在地球上,重力數(shù)值為9.8,單位是m/s^2。
      坐標(biāo)系統(tǒng)與加速度傳感器相同。
      當(dāng)設(shè)備復(fù)位時(shí),重力傳感器的輸出與加速度傳感器相同。
      1-10 線性加速度傳感器
      線性加速度傳感器簡(jiǎn)稱LA-sensor。
      線性加速度傳感器是加速度傳感器減去重力影響獲取的數(shù)據(jù)。
      單位是m/s^2,坐標(biāo)系統(tǒng)與加速度傳感器相同。
      加速度傳感器、重力傳感器和線性加速度傳感器的計(jì)算公式如下:
      加速度=重力 + 線性加速度
      1-11 旋轉(zhuǎn)矢量傳感器
      旋轉(zhuǎn)矢量傳感器簡(jiǎn)稱RV-sensor。
      旋轉(zhuǎn)矢量代表設(shè)備的方向,是一個(gè)將坐標(biāo)軸和角度混合計(jì)算得到的數(shù)據(jù)。
      RV-sensor輸出三個(gè)數(shù)據(jù):
      x*sin(theta/2)
      y*sin(theta/2)
      z*sin(theta/2)
      sin(theta/2)是RV的數(shù)量級(jí)。
      RV的方向與軸旋轉(zhuǎn)的方向相同。
      RV的三個(gè)數(shù)值,與cos(theta/2)組成一個(gè)四元組。
      RV的數(shù)據(jù)沒(méi)有單位,使用的坐標(biāo)系與加速度相同。
      舉例:
      sensors_event_t.data[0]=x*sin(theta/2)
      sensors_event_t.data[1]=y*sin(theta/2)
      sensors_event_t.data[2]=z*sin(theta/2)
      sensors_event_t.data[3]=cos(theta/2)
      GV、LA和RV的數(shù)值沒(méi)有物理傳感器可以直接給出,
      需要G-sensor、O-sensor和Gyro-sensor經(jīng)過(guò)算法計(jì)算后得出。
      算法一般是傳感器公司的私有產(chǎn)權(quán)。

      二、Android感應(yīng)檢測(cè)管理---SensorManager

      1、取得SensorManager
      使用感應(yīng)檢測(cè)Sensor首要先獲取感應(yīng)設(shè)備的檢測(cè)信號(hào),你可以調(diào)用Context.getSysteService(SENSER_SERVICE)方法來(lái)取得感應(yīng)檢測(cè)的服務(wù)
      2、實(shí)現(xiàn)取得感應(yīng)檢測(cè)Sensor狀態(tài)的監(jiān)聽(tīng)功能
      實(shí)現(xiàn)以下兩個(gè)SensorEventListener方法來(lái)監(jiān)聽(tīng),并取得感應(yīng)檢測(cè)Sensor狀態(tài):
      //在感應(yīng)檢測(cè)到Sensor的精密度有變化時(shí)被調(diào)用到。
      public void onAccuracyChanged(Senso sensor,int accuracy);
      //在感應(yīng)檢測(cè)到Sensor的值有變化時(shí)會(huì)被調(diào)用到。
      public void onSensorChanged(SensorEvent event);

      3、實(shí)現(xiàn)取得感應(yīng)檢測(cè)Sensor目標(biāo)各類的值

      實(shí)現(xiàn)下列g(shù)etSensorList()方法來(lái)取得感應(yīng)檢測(cè)Sensor的值;
      List

      4、注冊(cè)SensorListener
      sm.regesterListener(SensorEventListener listener, Sensor sensor, int rate);

      第一個(gè)參數(shù):監(jiān)聽(tīng)Sensor事件,第二個(gè)參數(shù)是Sensor目標(biāo)種類的值,第三個(gè)參數(shù)是延遲時(shí)間的精度密度。延遲時(shí)間的精密度參數(shù)如下:

      參數(shù)
      延遲時(shí)間
      SensorManager.SENSOR_DELAY_FASTEST
      0ms
      SensorManager.SENSOR_DELAY_GAME
      20ms
      SensorManager.SENSOR_DELAY_UI
      60ms
      SensorManager.SENSOR_DELAY_NORMAL
      200ms

      因?yàn)楦袘?yīng)檢測(cè)Sensor的服務(wù)是否頻繁和快慢都與電池參量的消耗有關(guān),同時(shí)也會(huì)影響處理的效率,所以兼顧到消耗電池和處理效率的平衡,設(shè)置感應(yīng)檢測(cè)Sensor的延遲時(shí)間是一門重要的學(xué)問(wèn),需要根據(jù)應(yīng)用系統(tǒng)的需求來(lái)做適當(dāng)?shù)脑O(shè)置。
      感應(yīng)檢測(cè)Sensor的硬件檢測(cè)組件受不同的廠商提供。你可以采用Sensor的getVendor(),Sensor()的getName()和Sensor的getVeesrion()方法來(lái)取得 廠商的名稱、產(chǎn)品和版本。

      5、取消注冊(cè)
      sm.unregisterListener(SensorEventListener listener)

      6、感應(yīng)檢測(cè)

      加速度感應(yīng)檢測(cè)——Accelerometer
      Accelerometer Sensor測(cè)量的是所有施加在設(shè)備上的力所產(chǎn)生的加速度的負(fù)值(包括重力加速度)。加速度所使用的單位是m/sec^2,數(shù)值是加速度的負(fù)值。
      SensorEvent.values[0]:加速度在X軸的負(fù)值
      SensorEvent.values[1]:加速度在Y軸的負(fù)值
      SensorEvent.values[2]:加速度在Z軸的負(fù)值
      例如:
      當(dāng)手機(jī)Z軸朝上平放在桌面上,并且從左到右推動(dòng)手機(jī),此時(shí)X軸上的加速度是正數(shù)。
      當(dāng)手機(jī)Z軸朝上靜止放在桌面上,此時(shí)Z軸的加速度是+9.81m/sec^2。
      當(dāng)手機(jī)從空中自由落體,此時(shí)加速度是0
      當(dāng)手機(jī)向上以Am/sec^2的加速度向空中拋出,此時(shí)加速度是A+9.81m/sec^2
      重力加速度感應(yīng)檢測(cè)——Gravity
      重力加速度,其單位是m/sec^2,其坐標(biāo)系與Accelerometer使用的一致。當(dāng)手機(jī)靜止時(shí),gravity的值和Accelerometer的值是一致的。
      線性加速度感應(yīng)檢測(cè)——Linear-Acceleration
      Accelerometer、Gravity和Linear-Acceleration三者的關(guān)系如下公式:
      accelerometer=gravity + linear-acceleration
      地磁場(chǎng)感應(yīng)檢測(cè)——Magnetic-field
      地磁場(chǎng)的單位是micro-Tesla(uT),檢測(cè)的是X、Y、Z軸上的絕對(duì)地磁場(chǎng)。
      陀螺儀感應(yīng)檢測(cè)——Gyroscope
      陀螺儀的單位是弧度/秒,測(cè)量的是物體分別圍繞X,Y,Z軸旋轉(zhuǎn)的角速度。它的坐標(biāo)系與加速度傳感器的坐標(biāo)系相同。逆時(shí)針?lè)较蛐D(zhuǎn)的角度正的。也就是說(shuō),如果設(shè)備逆時(shí)針旋轉(zhuǎn),觀察者向X,Y,Z軸的正方向看去,就報(bào)告設(shè)備是正轉(zhuǎn)的。請(qǐng)注意,這是標(biāo)準(zhǔn)的正旋轉(zhuǎn)的數(shù)學(xué)定義。
      光線感應(yīng)檢測(cè)——Light
      values[0]:表示環(huán)境光照的水平,單位是SI lux。
      位置逼近感應(yīng)檢測(cè)——Proximity
      values[0]:逼近的距離,單位是厘米(cm)。有一些傳感器只能支持近和遠(yuǎn)兩種狀態(tài),這種情況下,傳感器必須報(bào)告它在遠(yuǎn)狀態(tài)下的maximum_range值和在近狀態(tài)下的小值。
      旋轉(zhuǎn)矢量感應(yīng)檢測(cè)——Rotation Vector
      旋轉(zhuǎn)向量是用來(lái)表示設(shè)備的方向,它是由角度和軸組成,就是設(shè)備圍繞x,y,z軸之一旋轉(zhuǎn)θ角度。旋轉(zhuǎn)向量的三個(gè)要素是,這樣旋轉(zhuǎn)向量的大小等于sin(θ/2),旋轉(zhuǎn)向量的方向等于旋轉(zhuǎn)軸的方向。
      values[0]: x*sin(θ/2)
      values[1]: y*sin(θ/2)
      values[2]: z*sin(θ/2)
      values[3]: cos(θ/2) (optional: only if value.length=4)
      方向感應(yīng)檢測(cè)——Orientation
      其單位是角度
      values[0]: Azimuth(方位),地磁北方向與y軸的角度,圍繞z軸旋轉(zhuǎn)(0到359)。0=North, 90=East, 180=South, 270=West
      values[1]: Pitch(俯仰),圍繞X軸旋轉(zhuǎn)(-180 to 180), 當(dāng)Z軸向Y軸運(yùn)動(dòng)時(shí)是正值
      values[2]: Roll(滾),圍繞Y軸旋轉(zhuǎn)(-90 to 90),當(dāng)X軸向Z軸運(yùn)動(dòng)時(shí)是正值

      三、舉例之-Gsensor
      1,圖示三軸方向
      android重力感應(yīng)系統(tǒng)的坐標(biāo)系以屏幕的左下方為原點(diǎn)(【注意】2d編程的時(shí)候,是以屏幕左上方為原點(diǎn)的),箭頭指向的方向?yàn)檎?10到10,以浮點(diǎn)數(shù)為等級(jí)單位,想象一下以下情形:
        手機(jī)屏幕向上(z軸朝天)水平放置的時(shí)侯,(x,y,z)的值分別為(0,0,10);
        手機(jī)屏幕向下(z軸朝地)水平放置的時(shí)侯,(x,y,z)的值分別為(0,0,-10);
        手機(jī)屏幕向左側(cè)放(x軸朝天)的時(shí)候,(x,y,z)的值分別為(10,0,0);
        手機(jī)豎直(y軸朝天)向上的時(shí)候,(x,y,z)的值分別為(0,10,0);
        其他的如此類推,規(guī)律就是:朝天的就是正數(shù),朝地的就是負(fù)數(shù)。利用x,y,z三個(gè)值求三角函數(shù),就可以精確檢測(cè)手機(jī)的運(yùn)動(dòng)狀態(tài)了。

      2,通過(guò)監(jiān)測(cè)Gsensor判斷手機(jī)處于靜止/移動(dòng)狀態(tài)

      [java] view plaincopy
      public class MainActivity extends Activity implements SensorEventListener {

      private static final String TAG = MainActivity.class.getSimpleName();
      private SensorManager mSensorManager;
      private Sensor mSensor;
      private TextView textviewX;
      private TextView textviewY;
      private TextView textviewZ;
      private TextView textviewF;

      private int mX, mY, mZ;
      private long lasttimestamp = 0;
      Calendar mCalendar;

      @Override
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      textviewX = (TextView) findViewById(R.id.textView1);
      textviewY = (TextView) findViewById(R.id.textView3);
      textviewZ = (TextView) findViewById(R.id.textView4);
      textviewF = (TextView) findViewById(R.id.textView2);

      mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
      mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);// TYPE_GRAVITY
      if (null == mSensorManager) {
      Log.d(TAG, "deveice not support SensorManager");
      }
      // 參數(shù)三,檢測(cè)的精準(zhǔn)度
      mSensorManager.registerListener(this, mSensor,
      SensorManager.SENSOR_DELAY_NORMAL);// SENSOR_DELAY_GAME

      }

      @Override
      public void onAccuracyChanged(Sensor sensor, int accuracy) {

      }

      @Override
      public void onSensorChanged(SensorEvent event) {
      if (event.sensor == null) {
      return;
      }

      if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
      int x = (int) event.values[0];
      int y = (int) event.values[1];
      int z = (int) event.values[2];
      mCalendar = Calendar.getInstance();
      long stamp = mCalendar.getTimeInMillis() / 1000l;//

      textviewX.setText(String.valueOf(x));
      textviewY.setText(String.valueOf(y));
      textviewZ.setText(String.valueOf(z));

      int second = mCalendar.get(Calendar.SECOND);// 53

      int px = Math.abs(mX - x);
      int py = Math.abs(mY - y);
      int pz = Math.abs(mZ - z);
      Log.d(TAG, "pX:" + px + "  pY:" + py + "  pZ:" + pz + "    stamp:"
      + stamp + "  second:" + second);
      int maxvalue = getMaxValue(px, py, pz);
      if (maxvalue > 2 && (stamp - lasttimestamp) > 30) {
      lasttimestamp = stamp;
      Log.d(TAG, " sensor isMoveorchanged....");
      textviewF.setText("檢測(cè)手機(jī)在移動(dòng)..");
      }

      mX = x;
      mY = y;
      mZ = z;

      }
      }

      public int getMaxValue(int px, int py, int pz) {
      int max = 0;
      if (px > py && px > pz) {
      max = px;
      } else if (py > px && py > pz) {
      max = py;
      } else if (pz > px && pz > py) {
      max = pz;
      }

      return max;
      }
      }

      原理就是通過(guò)每次得到的x,y,z三軸的值,和下一次的值作比較,它們每個(gè)差值中絕對(duì)值最大的如果超過(guò)某一個(gè)閥值(自己定義),并且這種狀態(tài)持續(xù)了x秒,我們就視為手機(jī)處于(顛簸)移動(dòng)狀態(tài),當(dāng)然這種判斷肯定是不科學(xué)的,有時(shí)候也會(huì)產(chǎn)生誤判,比較理想的場(chǎng)景就是:攜帶手機(jī)坐在公交上或是開(kāi)車。

      其它可供參考資料:

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

      上一篇: 電氣控制線路圖控制原

      主站蜘蛛池模板: 国产一区二区三区播放| 日韩好片一区二区在线看| 四虎成人精品一区二区免费网站 | 亚洲一区二区观看播放| 日韩AV在线不卡一区二区三区| 97精品国产福利一区二区三区| 日本片免费观看一区二区| 亚洲一区二区三区偷拍女厕| AV怡红院一区二区三区 | 亚洲美女一区二区三区| 色一情一乱一伦一区二区三区| 麻豆AV天堂一区二区香蕉| 伦精品一区二区三区视频| 3d动漫精品啪啪一区二区中文 | 无码av不卡一区二区三区| 国产福利精品一区二区| 亚洲国产国产综合一区首页| 国产精品视频第一区二区三区| 久久婷婷色综合一区二区| 日韩精品一区二区三区毛片| 亚洲欧美成人一区二区三区| 久久久国产精品无码一区二区三区| 精品一区二区三区自拍图片区| 国产一区三区二区中文在线| 成人精品一区二区激情| 久久久国产精品无码一区二区三区| 怡红院美国分院一区二区 | 日韩一区二区视频在线观看| 亚洲视频免费一区| 国产精品无码一区二区在线| 爱爱帝国亚洲一区二区三区| 国产一区二区三区在线免费观看| 国产一区二区三区在线免费观看| 国产A∨国片精品一区二区 | 亚洲中文字幕一区精品自拍| 日韩一区二区免费视频| 亚洲国产高清在线一区二区三区| 在线观看午夜亚洲一区| 日韩免费视频一区二区| 欲色aV无码一区二区人妻| 日韩美女在线观看一区|