您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊]

您的位置:電子發(fā)燒友網(wǎng)>電子元器件>傳感器>

淺談傳感器開發(fā)流程

2018年09月24日 10:20 作者:工程師譚軍 用戶評論(0
關(guān)鍵字:傳感器(754977)
  傳感器
?
  傳感器(英文名稱:transducer/sensor)是一種檢測裝置,能感受到被測量的信息,并能將感受到的信息,按一定規(guī)律變換成為電信號或其他所需形式的信息輸出,以滿足信息的傳輸、處理、存儲、顯示、記錄和控制等要求。
?
  傳感器的特點(diǎn)包括:微型化、數(shù)字化、智能化、多功能化、系統(tǒng)化、網(wǎng)絡(luò)化。它是實(shí)現(xiàn)自動檢測和自動控制的首要環(huán)節(jié)。傳感器的存在和發(fā)展,讓物體有了觸覺、味覺和嗅覺等感官,讓物體慢慢變得活了起來。通常根據(jù)其基本感知功能分為熱敏元件、光敏元件、氣敏元件、力敏元件、磁敏元件、濕敏元件、聲敏元件、放射線敏感元件、色敏元件和味敏元件等十大類。
?
  主要作用
?
  人們?yōu)榱藦耐饨绔@取信息,必須借助于感覺器官。
?
  而單靠人們自身的感覺器官,在研究自然現(xiàn)象和規(guī)律以及生產(chǎn)活動中它們的功能就遠(yuǎn)遠(yuǎn)不夠了。為適應(yīng)這種情況,就需要傳感器。因此可以說,傳感器是人類五官的延長,又稱之為電五官。
?
  新技術(shù)革命的到來,世界開始進(jìn)入信息時(shí)代。在利用信息的過程中,首先要解決的就是要獲取準(zhǔn)確可靠的信息,而傳感器是獲取自然和生產(chǎn)領(lǐng)域中信息的主要途徑與手段。
?
  在現(xiàn)代工業(yè)生產(chǎn)尤其是自動化生產(chǎn)過程中,要用各種傳感器來監(jiān)視和控制生產(chǎn)過程中的各個(gè)參數(shù),使設(shè)備工作在正常狀態(tài)或最佳狀態(tài),并使產(chǎn)品達(dá)到最好的質(zhì)量。因此可以說,沒有眾多的優(yōu)良的傳感器,現(xiàn)代化生產(chǎn)也就失去了基礎(chǔ)。
?
  在基礎(chǔ)學(xué)科研究中,傳感器更具有突出的地位。現(xiàn)代科學(xué)技術(shù)的發(fā)展,進(jìn)入了許多新領(lǐng)域:例如在宏觀上要觀察上千光年的茫茫宇宙,微觀上要觀察小到fm的粒子世界,縱向上要觀察長達(dá)數(shù)十萬年的天體演化,短到 s的瞬間反應(yīng)。此外,還出現(xiàn)了對深化物質(zhì)認(rèn)識、開拓新能源、新材料等具有重要作用的各種極端技術(shù)研究,如超高溫、超低溫、超高壓、超高真空、超強(qiáng)磁場、超弱磁場等等。顯然,要獲取大量人類感官無法直接獲取的信息,沒有相適應(yīng)的傳感器是不可能的。許多基礎(chǔ)科學(xué)研究的障礙,首先就在于對象信息的獲取存在困難,而一些新機(jī)理和高靈敏度的檢測傳感器的出現(xiàn),往往會導(dǎo)致該領(lǐng)域內(nèi)的突破。一些傳感器的發(fā)展,往往是一些邊緣學(xué)科開發(fā)的先驅(qū)。
?
  傳感器早已滲透到諸如工業(yè)生產(chǎn)、宇宙開發(fā)、海洋探測、環(huán)境保護(hù)、資源調(diào)查、醫(yī)學(xué)診斷、生物工程、甚至文物保護(hù)等等極其之泛的領(lǐng)域??梢院敛豢鋸埖卣f,從茫茫的太空,到浩瀚的海洋,以至各種復(fù)雜的工程系統(tǒng),幾乎每一個(gè)現(xiàn)代化項(xiàng)目,都離不開各種各樣的傳感器。
?
  由此可見,傳感器技術(shù)在發(fā)展經(jīng)濟(jì)、推動社會進(jìn)步方面的重要作用,是十分明顯的。世界各國都十分重視這一領(lǐng)域的發(fā)展。相信不久的將來,傳感器技術(shù)將會出現(xiàn)一個(gè)飛躍,達(dá)到與其重要地位相稱的新水平。
?
  主要特點(diǎn)
?
  傳感器的特點(diǎn)包括:微型化、數(shù)字化、智能化、多功能化、系統(tǒng)化、網(wǎng)絡(luò)化,它不僅促進(jìn)了傳統(tǒng)產(chǎn)業(yè)的改造和更新?lián)Q代,而且還可能建立新型工業(yè),從而成為21世紀(jì)新的經(jīng)濟(jì)增長點(diǎn)。微型化是建立在微電子機(jī)械系統(tǒng)(MEMS)技術(shù)基礎(chǔ)上的,已成功應(yīng)用在硅器件上做成硅壓力傳感器
?
  傳感器的組成
?
  傳感器一般由敏感元件、轉(zhuǎn)換元件、變換電路和輔助電源四部分組成。
?
  敏感元件直接感受被測量,并輸出與被測量有確定關(guān)系的物理量信號;轉(zhuǎn)換元件將敏感元件輸出的物理量信號轉(zhuǎn)換為電信號;變換電路負(fù)責(zé)對轉(zhuǎn)換元件輸出的電信號進(jìn)行放大調(diào)制;轉(zhuǎn)換元件和變換電路一般還需要輔助電源供電。
?
  主要功能
?
  常將傳感器的功能與人類5大感覺器官相比擬:
?
  光敏傳感器——視覺
?
  聲敏傳感器——聽覺
?
  氣敏傳感器——嗅覺
?
  化學(xué)傳感器——味覺
?
  壓敏、溫敏、
?
  流體傳感器——觸覺
?
  敏感元件的分類:
?
  物理類,基于力、熱、光、電、磁和聲等物理效應(yīng)。
?
  化學(xué)類,基于化學(xué)反應(yīng)的原理。
?
  生物類,基于酶、抗體、和激素等分子識別功能。
?
  通常據(jù)其基本感知功能可分為熱敏元件、光敏元件、氣敏元件、力敏元件、磁敏元件、濕敏元件、聲敏元件、放射線敏感元件、色敏元件和味敏元件等十大類(還有人曾將敏感元件分46類)。

  了解安卓傳感器主要分為三種

  動作傳感器:加速傳感器,重力傳感器,陀螺儀傳感器,旋轉(zhuǎn)向量傳感器

  環(huán)境傳感器,光線傳感器,溫度傳感器(據(jù)說還有大氣壓傳感器)

  位置傳感器:方向傳感器,磁場傳感器

  其中這些傳感器又分為硬件傳感器和軟件傳感器!所謂硬件傳感器就是純粹基于手機(jī)硬件獲取的數(shù)據(jù)

  而軟件傳感器并不是真實(shí)存在,而是基于硬件傳感器基于一系列算法產(chǎn)生的偽傳感器,比如方向傳感器就是基于距離傳感器和磁場傳感器經(jīng)過這兩個(gè)傳感器一系列算法得出!

  在安卓開發(fā)中,已經(jīng)提供了傳感器的API就是

  1 SensorManager類,該類是用來注冊,監(jiān)聽,銷毀監(jiān)聽器的方法,以及獲取傳感器數(shù)量種類精度等方法

  2 Sensor類是提供了傳感器的信息比如傳感器的類型,版本,制造商等等比如常見的SensorType類型

  序號傳感器Sensor類中定義的TYPE常量

  1加速度傳感器TYPE_ACCELEROMETER

  2溫度傳感器TYPE_AMBIENT_TEMPERATURE

  3陀螺儀傳感器TYPE_GYROSCOPE

  4光線傳感器TYPE_LIGHT

  5磁場傳感器TYPE_MAGNETIC_FIELD

  6壓力傳感器TYPE_PRESSURE

  7臨近傳感器TYPE_PROXIMITY

  8濕度傳感器TYPE_RELATIVE_HUMIDITY

  9方向傳感器TYPE_ORIENTATION

  10重力傳感器TYPE_GRAVITY

  11線性加速傳感器TYPE_LINEAR_ACCELERATION

  12旋轉(zhuǎn)向量傳感器TYPE_ROTATION_VECTOR

  3 SensorEventListener接口,主要就是傳感器開發(fā)的監(jiān)聽回調(diào),傳感器的數(shù)值發(fā)生變化時(shí)就會調(diào)用這個(gè)方法

  4 SensorEvent類是回調(diào)監(jiān)聽的參數(shù),主要封裝了傳感器的監(jiān)聽數(shù)值(以數(shù)組形式存在)

  這個(gè)就是傳感器開發(fā)會用到的主要API,話說查了不少資料。..

  待會后面的一些內(nèi)容是我這次項(xiàng)目開發(fā)用不到的,但是為了考慮以后會遇上,我就一并記錄在這里了,這樣之后在進(jìn)行傳感器開發(fā),我不用再去查資料了,直接看我這篇帖子就囊括了大部分的資料

  然后是我們要確定傳感器的開發(fā)流程

  1創(chuàng)建傳感器管理類,

  mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

  2選擇項(xiàng)目開發(fā)中會遇到的傳感器(最好打印出列表看手機(jī)支持那些傳感器,主要用來看手機(jī)支持那些傳感器,實(shí)際開發(fā)不需要這行代碼)

  List《Sensor》 sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);//主要用來看看手機(jī)支持哪些傳感器,可以不寫

  3注冊你要監(jiān)聽的傳感器監(jiān)聽器,實(shí)現(xiàn)監(jiān)聽方法

  我的項(xiàng)目經(jīng)過我的測試實(shí)際用到的是方向傳感器

  //方向傳感器

  mSensorManager.registerListener(this,

  mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),

  SensorManager.SENSOR_DELAY_UI);

  這里要注意了,要為了用戶負(fù)責(zé),注冊了就要反注冊,否則傳感器可是耗電大戶,我們一般在onResume注冊監(jiān)聽,在onPause進(jìn)行解綁

  mSensorManager.unregisterListener(this);

  這里介紹下監(jiān)聽器的三個(gè)參數(shù)

  registerListener(參數(shù)一,參數(shù)二,參數(shù)三)

  參數(shù)一就是監(jiān)聽回調(diào)對象,實(shí)現(xiàn)這個(gè)接口,編譯器會自動復(fù)寫這兩個(gè)方法,我們下面再介紹這兩個(gè)方法

  參數(shù)二你需要監(jiān)聽的傳感器類型

  參數(shù)三 傳感器獲取數(shù)值的模式,你可以理解成傳感器監(jiān)聽周圍變化塊慢,這個(gè)參數(shù)是一個(gè)常量,一般有四種

  SENSOR_DELAY_FASTEST 最快,耗電大戶 ,監(jiān)聽的越快耗電量越大,這種模式一般不建議使用,因?yàn)楸O(jiān)聽周圍大量的數(shù)據(jù),算法如果不好將會影響游戲邏輯以及UI性能

  SENSOR_DELAY_GAME 一般用來開發(fā)游戲,用于實(shí)行性較高的游戲比如一些賽車游戲,游戲開發(fā)建議用這個(gè)模式

  SENSOR_DELAY_NORMAL 默認(rèn)的平率,對于一般的益智類游戲使用,比如根據(jù)重力來調(diào)整小球進(jìn)洞的小游戲,如果這個(gè)模式應(yīng)用在賽車游戲上,采樣率太低會導(dǎo)致跳幀

  SENSOR_DELAY_UI 根據(jù)傳感器更新UI,我們一般根據(jù)傳感器的值變化用來繪制我們相應(yīng)的UI,延遲一點(diǎn)反而好不用平凡的繪制UI造成性能浪費(fèi)

  4 開始考慮傳感器采集的數(shù)據(jù)以及算法邏輯了,以上三步全是模板代碼,第四步才是傳感器開發(fā)的核心!

  首先要知道不同的傳感器返回的采樣數(shù)據(jù)是不同的,如下

  4-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)品,市場上的加速度傳感器種類很多。

  手機(jī)中常用的加速度傳感器有BOSCH博世)的BMA系列,AMK的897X系列,ST的LIS3X系列等。

  這些傳感器一般提供±2G至±16G的加速度測量范圍,采用I2C或SPI接口和MCU相連,數(shù)據(jù)精度小于16bit。

  4-2 磁力傳感器

  磁力傳感器簡稱為M-sensor,返回x、y、z三軸的環(huán)境磁場數(shù)據(jù)。

  該數(shù)值的單位是微特斯拉(micro-Tesla),用uT表示。

  單位也可以是高斯(Gauss),1Tesla=10000Gauss。

  硬件上一般沒有獨(dú)立的磁力傳感器,磁力數(shù)據(jù)由電子羅盤傳感器提供(E-compass)。

  電子羅盤傳感器同時(shí)提供下文的方向傳感器數(shù)據(jù)。

  4-3 方向傳感器

  方向傳感器簡稱為O-sensor,返回三軸的角度數(shù)據(jù),方向數(shù)據(jù)的單位是角度。

  為了得到精確的角度數(shù)據(jù),E-compass需要獲取G-sensor的數(shù)據(jù),

  經(jīng)過計(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)動時(shí),角度為正值。

  roll:y軸和水平面的夾角,由于歷史原因,范圍為-90°至90°。

  當(dāng)x軸向z軸移動時(shí),角度為正值。

  電子羅盤在獲取正確的數(shù)據(jù)前需要進(jìn)行校準(zhǔn),通常可用8字校準(zhǔn)法。

  8字校準(zhǔn)法要求用戶使用需要校準(zhǔn)的設(shè)備在空中做8字晃動,

  原則上盡量多的讓設(shè)備法線方向指向空間的所有8個(gè)象限。

  手機(jī)中使用的電子羅盤芯片有AKM公司的897X系列,ST公司的LSM系列以及雅馬哈公司等等。

  由于需要讀取G-sensor數(shù)據(jù)并計(jì)算出M-sensor和O-sensor數(shù)據(jù),

  因此廠商一般會提供一個(gè)后臺daemon來完成工作,電子羅盤算法一般是公司私有產(chǎn)權(quán)。

  4-4 陀螺儀傳感器

  陀螺儀傳感器叫做Gyro-sensor,返回x、y、z三軸的角加速度數(shù)據(jù)。

  角加速度的單位是radians/second。

  根據(jù)Nexus S手機(jī)實(shí)測:

  水平逆時(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中使用該種傳感器。

  4-5 光線感應(yīng)傳感器

  光線感應(yīng)傳感器檢測實(shí)時(shí)的光線強(qiáng)度,光強(qiáng)單位是lux,其物理意義是照射到單位面積上的光通量。

  光線感應(yīng)傳感器主要用于Android系統(tǒng)的LCD自動亮度功能。

  可以根據(jù)采樣到的光強(qiáng)數(shù)值實(shí)時(shí)調(diào)整LCD的亮度。

  4-6 壓力傳感器

  壓力傳感器返回當(dāng)前的壓強(qiáng),單位是百帕斯卡hectopascal(hPa)。

  4-7 溫度傳感器

  溫度傳感器返回當(dāng)前的溫度。

  4-8 接近傳感器

  接近傳感器檢測物體與手機(jī)的距離,單位是厘米。

  一些接近傳感器只能返回遠(yuǎn)和近兩個(gè)狀態(tài),

  因此,接近傳感器將最大距離返回遠(yuǎn)狀態(tài),小于最大距離返回近狀態(tài)。

  接近傳感器可用于接聽電話時(shí)自動關(guān)閉LCD屏幕以節(jié)省電量。

  一些芯片集成了接近傳感器和光線傳感器兩者功能。

  下面三個(gè)傳感器是Android2新提出的傳感器類型,目前還不太清楚有哪些應(yīng)用程序使用。

  4-9 重力傳感器

  重力傳感器簡稱GV-sensor,輸出重力數(shù)據(jù)。

  在地球上,重力數(shù)值為9.8,單位是m/s^2。

  坐標(biāo)系統(tǒng)與加速度傳感器相同。

  當(dāng)設(shè)備復(fù)位時(shí),重力傳感器的輸出與加速度傳感器相同。

  4-10 線性加速度傳感器

  線性加速度傳感器簡稱LA-sensor。

  線性加速度傳感器是加速度傳感器減去重力影響獲取的數(shù)據(jù)。

  單位是m/s^2,坐標(biāo)系統(tǒng)與加速度傳感器相同。

  加速度傳感器、重力傳感器和線性加速度傳感器的計(jì)算公式如下:

  加速度 = 重力 + 線性加速度

  4-11 旋轉(zhuǎn)矢量傳感器

  旋轉(zhuǎ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ù)量級。

  RV的方向與軸旋轉(zhuǎn)的方向相同。

  RV的三個(gè)數(shù)值,與cos(theta/2)組成一個(gè)四元組。

  RV的數(shù)據(jù)沒有單位,使用的坐標(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ù)值沒有物理傳感器可以直接給出,

  需要G-sensor、O-sensor和Gyro-sensor經(jīng)過算法計(jì)算后得出。

  算法一般是傳感器公司的私有產(chǎn)權(quán)。

  看到了吧,不同的傳感器,返回的數(shù)值單位不僅不一樣,就連返回值的數(shù)量也不同,所以業(yè)務(wù)邏輯算法差距都是非常大的,既然說到了X,Y,Z的正負(fù)值,就不得不說手機(jī)的坐標(biāo)系了

  X Y Z分別對應(yīng)values[0]到[2](監(jiān)聽回調(diào)返回的數(shù)組)

  這里對傳感器舉下例子

  加速度感應(yīng)檢測——Accelerometer

  Accelerometer Sensor測量的是所有施加在設(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軸朝上平放在桌面上,并且從左到右推動手機(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)檢測——Gravity

  重力加速度,其單位是m/sec^2,其坐標(biāo)系與Accelerometer使用的一致。當(dāng)手機(jī)靜止時(shí),gravity的值和Accelerometer的值是一致的。

  線性加速度感應(yīng)檢測——Linear-Acceleration

  Accelerometer、Gravity和Linear-Acceleration三者的關(guān)系如下公式:

  accelerometer = gravity + linear-acceleration

  地磁場感應(yīng)檢測——Magnetic-field

  地磁場的單位是micro-Tesla(uT),檢測的是X、Y、Z軸上的絕對地磁場。

  陀螺儀感應(yīng)檢測——Gyroscope

  陀螺儀的單位是弧度/秒,測量的是物體分別圍繞X,Y,Z軸旋轉(zhuǎn)的角速度。它的坐標(biāo)系與加速度傳感器的坐標(biāo)系相同。逆時(shí)針方向旋轉(zhuǎn)的角度正的。也就是說,如果設(shè)備逆時(shí)針旋轉(zhuǎn),觀察者向X,Y,Z軸的正方向看去,就報(bào)告設(shè)備是正轉(zhuǎn)的。請注意,這是標(biāo)準(zhǔn)的正旋轉(zhuǎn)的數(shù)學(xué)定義。

  光線感應(yīng)檢測——Light

  values[0]:表示環(huán)境光照的水平,單位是SI lux。

  位置逼近感應(yīng)檢測——Proximity

  values[0]:逼近的距離,單位是厘米(cm)。有一些傳感器只能支持近和遠(yuǎn)兩種狀態(tài),這種情況下,傳感器必須報(bào)告它在遠(yuǎn)狀態(tài)下的maximum_range值和在近狀態(tài)下的小值。

  旋轉(zhuǎn)矢量感應(yīng)檢測——Rotation Vector

  旋轉(zhuǎn)向量是用來表示設(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)檢測——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)動時(shí)是正值

  values[2]: Roll(滾),圍繞Y軸旋轉(zhuǎn)(-90 to 90),當(dāng)X軸向Z軸運(yùn)動時(shí)是正值


非常好我支持^.^

(12) 92.3%

不好我反對

(1) 7.7%

( 發(fā)表人:金巧 )

      發(fā)表評論

      用戶評論
      評價(jià):好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?