iOS傳感器篇:CoreMotion初探
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,武義企業(yè)網(wǎng)站建設,武義品牌網(wǎng)站建設,網(wǎng)站定制,武義網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,武義網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
Core Motion
加速計程序,螺旋儀,步數(shù)計,環(huán)境相關的事件
iOS傳感器篇:CoreMotion使用
目錄索引
Core Motion報告了來自iOS設備的硬件和環(huán)境相關的數(shù)據(jù),包括 加速度計 、 陀螺儀 、 計步器 、 磁力計 和 氣壓計 。你可以使用這個框架來訪問硬件生成的數(shù)據(jù),這樣你就可以在你的應用中使用它。例如,游戲可以使用加速計和陀螺儀數(shù)據(jù)來控制屏幕上的游戲行為。
這個框架的許多服務允許您訪問硬件記錄的原始值和這些值的處理版本。處理過的值不包括可能會對如何使用該數(shù)據(jù)產(chǎn)生負面影響的數(shù)據(jù)偏移。例如,一個處理過的加速度計值只反映了用戶造成的加速度,而不是由重力引起的加速度。
重要提示
在10.0 以后,為了保護用戶隱私,必須在info.plist文件增加描述,錯誤的描述導入或未填寫將會引起App崩潰。參考 NSMotionUsageDescription
需要在info.plist?新增NSMotionUsageDescription(Privacy - Motion Usage Description) 鍵值對,并進行說明。
這個鍵值對支持7.0+的版本。
CMMotionManager
啟動和管理動作服務的對象。
您使用CMMotionManager對象來訪問加速計數(shù)據(jù)、旋轉速率數(shù)據(jù)、磁力計數(shù)據(jù)和其他設備運動數(shù)據(jù)。這些類型的數(shù)據(jù)來源于一個設備的加速度計和(在一些模型上)它的磁計和陀螺儀。在創(chuàng)建了CMMotionManager的實例之后,應用程序可以使用它來接收四種類型的運動:
原始的加速度計數(shù)據(jù)
原始的陀螺儀數(shù)據(jù)
原始的磁力計數(shù)據(jù)
設備運動數(shù)據(jù)(包括加速計、旋轉速率和屬性測量值)。
由核心運動的傳感器融合算法提供的處理設備運動數(shù)據(jù)提供了設備的姿態(tài)、旋轉速率、校準的磁場、重力方向以及用戶在設備上的加速度。
重要提示
應用程序應該只創(chuàng)建CMMotionManager類的一個實例。這個類的多實例可以影響從加速計和陀螺儀接收數(shù)據(jù)的速率。
在接收運動數(shù)據(jù)時,應用程序可以采用兩種方法中的一種
指定的更新間隔
定期對運動數(shù)據(jù)進行采樣
用這兩種方法,應用程序應該調用適當?shù)耐V狗椒?/p>
stopAccelerometerUpdates?停止加速計更新
stopGyroUpdates?停止陀螺儀更新
stopMagnetometerUpdates停止磁強計更新
stopDeviceMotionUpdates?停止設備運動更新
完成處理加速度計,轉速、磁強計,或者設備運動數(shù)據(jù)。
處理設備更新和指定間隔
為了在特定的時間間隔接收移動數(shù)據(jù),應用程序調用一個“start”方法,該方法使用一個操作隊列(NSOperationQueue實例)和一個特定類型的block處理程序來處理這些更新。移動數(shù)據(jù)被傳遞到block處理程序中。更新的頻率是由interval屬性的值決定的。
1. 加速計 Accelerometer
1. 設置accelerometerUpdateInterval屬性來指定更新間隔。
2. 調用startAccelerometerUpdatesToQueue:withHandler:方法
3. 加速計數(shù)據(jù)通過 block 中CMAccelerometerHandler?類型的CMAccelerometerData類獲取。
2. 陀螺儀 Gyroscope
設置gyroUpdateInterval屬性來指定更新間隔。
2. 調用startGyroUpdatesToQueue:withHandler:方法
陀螺儀數(shù)據(jù)通過 block 中CMGyroHandler?類型的CMGyroData類獲取。
3. 磁強計 Magnetometer
1. 設置magnetometerUpdateInterval屬性來指定更新間隔。
2. 調用startMagnetometerUpdatesToQueue:withHandler:方法
3. 加速計數(shù)據(jù)通過 block 中CMMagnetometerHandler?類型的CMMagnetometerData類獲取。
4. 設備動作 Device motion
1. 設置deviceMotionUpdateInterval屬性來指定更新間隔。
2. 調用startDeviceMotionUpdatesUsingReferenceFrame:或startDeviceMotionUpdatesUsingReferenceFrame:toQueue:withHandler:或?startDeviceMotionUpdatesToQueue:withHandler:方法
3. 加速計數(shù)據(jù)通過 block 中CMDeviceMotionHandler?類型的CMDeviceMotion類獲取。
周期性獲取數(shù)據(jù)
為了通過周期性采樣來處理運動數(shù)據(jù),該應用程序調用一個“star”方法,不帶參數(shù),并周期性地訪問給定類型的運動數(shù)據(jù)所持有的運動數(shù)據(jù)。這種方法是游戲等應用程序的推薦方法。在一個block塊中處理加速計數(shù)據(jù)會帶來額外的開銷,大多數(shù)游戲應用只對最新的運動數(shù)據(jù)感興趣,當它們渲染一個幀時。
1. 加速計 Accelerometer
調用startAccelerometerUpdates開始更新和定期訪問CMAccelerometerData類的accelerometerData屬性
2. 陀螺儀 Gyroscope
調用startGyroUpdates開始更新和定期訪問CMGyroData類的gyroData屬性
3. 磁強計 Magnetometer
調用startMagnetometerUpdates開始更新和定期訪問CMMagnetometerData類的magnetometerData屬性
4. 設備動作 Device motion
調用startDeviceMotionUpdatesUsingReferenceFrame:?或?startDeviceMotionUpdates開始更新和定期訪問CMDeviceMotion類的?deviceMotion屬性。startDeviceMotionUpdatesUsingReferenceFrame:方法(iOS 5.0中的新特性)允許您指定一個參考幀用于估計的屬性。
硬件的可用性和狀態(tài)
如果硬件特性(例如陀螺儀)在設備上是不可用的,那么調用與該特性相關的啟動方法就沒有效果。通過檢查適當?shù)膶傩?,您可以了解硬件特性是否可?例如,對于陀螺儀數(shù)據(jù),您可以檢查gyroAvailable或gyroActive屬性的值。
確定服務的可用性 【Determining the Availability of Services】
1. deviceMotionAvailable 屬性
一個布爾值來表明設備的“設備姿態(tài)”服務是否可用
2. accelerometerAvailable 屬性
一個布爾值來表明設備的“加速計”服務是否可用
gyroAvailable 屬性
一個布爾值來表明設備的“陀螺儀”服務是否可用
magnetometerAvailable 屬性
一個布爾值來表明設備的“磁強計”服務是否可用
確定哪些服務是活躍的 【Determining Which Services Are Active】
deviceMotionActive 屬性
一個布爾值來表明應用程序是否接收來自“設備姿態(tài)”服務的更新。
accelerometerActive 屬性
一個布爾值指示是否正在進行“加速計”更新。
gyroActive 屬性
一個布爾值用來表明“陀螺儀”更新是否正在進行
magnetometerActive 屬性
一個布爾值用來表明“磁強計”更新是否正在進行
管理設備姿態(tài)更新 【Managing Device Motion Updates】
1. showsDeviceMovementDisplay
控制設備移動顯示是否顯示。
deviceMotionUpdateInterval
以秒為間隔,為block塊處理程序提供設備移動更新
3. - startDeviceMotionUpdatesUsingReferenceFrame:toQueue:withHandler:
在操作隊列上啟動設備移動更新,并使用指定的引用幀和block塊處理程序
- startDeviceMotionUpdatesToQueue:withHandler:
在操作隊列上啟動設備移動更新,并使用指定的block塊處理程序。
- startDeviceMotionUpdatesUsingReferenceFrame:
使用一個引用框架啟動設備移動更新,但是沒有block塊處理程序。
- startDeviceMotionUpdates
在沒有block塊處理程序的情況下啟動設備移動更新。
- stopDeviceMotionUpdates
停止設備運動更新。
deviceMotion
最新的設備移動數(shù)據(jù)樣本。
管理加速計更新 【Managing Accelerometer Updates】
1. accelerometerUpdateInterval
以秒為間隔,為block塊處理程序提供加速計更新。
- startAccelerometerUpdatesToQueue:withHandler:
啟動加速計在一個操作隊列上的更新和一個指定的處理程序。
- startAccelerometerUpdates
在沒有處理程序的情況下啟動加速計更新。
- stopAccelerometerUpdates
停止加速表更新。
accelerometerData
最新的加速度計數(shù)據(jù)樣本。
管理陀螺儀更新【Managing Gyroscope Updates】
1. gyroUpdateInterval
以秒為間隔,為block塊處理程序提供陀螺儀更新。
- startGyroUpdatesToQueue:withHandler:
啟動陀螺儀在一個操作隊列上的更新和一個指定的處理程序。
- startGyroUpdates
在沒有處理程序的情況下啟動陀螺儀更新。
- stopGyroUpdates
停止陀螺儀更新
gyroData
最新的陀螺儀數(shù)據(jù)樣本。
管理磁強計更新【Managing Magnetometer Updates】
1. magnetometerUpdateInterval
以秒為間隔,為block塊處理程序提供磁強計更新。
- startMagnetometerUpdatesToQueue:withHandler:
啟動磁強計在一個操作隊列上的更新和一個指定的處理程序。
- startMagnetometerUpdates
在沒有處理程序的情況下啟動磁強計更新。
- stopMagnetometerUpdates
停止磁強計更新
magnetometerData
最新的磁強計數(shù)據(jù)樣本。
常量
1. CMAccelerometerHandler
處理回調加速計block數(shù)據(jù)
CMGyroHandler
處理回調陀螺儀block數(shù)據(jù)
CMMagnetometerHandler
處理回調磁強計block數(shù)據(jù)
CMDeviceMotionHandler
處理回調設備姿態(tài)block數(shù)據(jù)
CMErrorDomain
Core Motion 的錯誤域名
CMError
定義一個管理ColorSync 結果碼的類型
CMLogItem
所有設備關聯(lián)數(shù)據(jù)類的基類
1. timestamp
日志記錄項有效的時間。
Device Motion 【設備姿態(tài)】
CMDeviceMotion
封裝測量設備的姿態(tài)、旋轉速率和加速度。
得到處理的設備運動數(shù)據(jù)
1. attitude
設備屬性,包括角度傾斜值等等
2. rotationRate
設備的旋轉速率。
3. gravity
重力加速度矢量在設備的參考系.
4. userAcceleration
用戶給設備的加速度。
5. magneticField
在設備上返回磁場矢量。
6. heading
相對于當前的參考幀,起始角度(以度數(shù)測量)。
7. CMCalibratedMagneticField
校準的磁場數(shù)據(jù),并估計校準的準確性。
8. CMMagneticFieldCalibrationAccuracy
指示磁場估計的校準精度
CMAttitude
該設備的朝向,相對于已知的參考幀,在某個時間點上的方位。
Core Motion輸出一個方向余弦矩陣(DCM)——基本上是一個從上一個“old”方向到設備新方向的旋轉。
1. roll
設備轉動的弧度
2. pitch
設備傾斜的弧度
3. yaw
設備偏航的弧度
4. rotationMatrix
返回一個代表設備姿勢的旋轉矩陣
5. quaternion
返回一個代表設備姿勢的四元數(shù)
6. - multiplyByInverseOfAttitude:
以一種特定的姿勢產(chǎn)生的改變
常量
1. CMRotationMatrix
代表旋轉矩陣的結構體類型
2. CMQuaternion
四元組的類型表示一種姿勢的測量。
3. CMAttitudeReferenceFrame
用于表示引用的所有姿勢示例的引用框架的枚舉常量
Accelerometers 【加速計】
為設備的所有三個軸提供加速度計數(shù)據(jù)。
獲得原始加速計事件
CMAccelerometerData
來自該設備的三軸加速計的數(shù)據(jù)樣本。
if([CMSensorRecorderisAccelerometerRecordingAvailable]) {CMSensorRecorder* recorder = [[CMSensorRecorderalloc] init];? [recorder recordAccelerometerForDuration:(20*60)];// Record for 20 minutes}
1.acceleration
加速度有加速計計算得出
常量
1.CMAcceleration
一種包含3軸加速度值的結構類型
CMRecordedAccelerometerData
一個由設備記錄的加速度計數(shù)據(jù)。
1. startDate
當傳感器樣品被記錄時,已經(jīng)經(jīng)過的時間
2. identifier
加速計數(shù)據(jù)唯一的標識符
CMSensorRecorder
從設備中收集和檢索加速度計數(shù)據(jù)。
1. + isAccelerometerRecordingAvailable
返回一個布爾值來表明當前設備加速計是否支持記錄。
2. - recordAccelerometerForDuration:
開始指定時間并周期性記錄加速計數(shù)據(jù)
3. - accelerometerDataFromDate:toDate:
檢索在指定日期之間收集的加速計數(shù)據(jù)
4. - accelerometerDataSince:
為同一批處理中的條目檢索加速計數(shù)據(jù)。
5. + authorizationStatus
授權狀態(tài)
CMSensorDataList
系統(tǒng)記錄的加速計數(shù)據(jù)列表
-(void)processSamplesFromDate:(NSDate*)start toDate:(NSDate)end {CMSensorRecorder* recorder = [[CMSensorRecorderalloc] init];CMSensorDataList* list = [recorder accelerometerDataFrom:start to:end];for(CMRecordedAccelerometerData* datainlist) {// Process the data.NSLog(@"Sample: (%f, %f, %f)", data.acceleration.x,? ? ? ? ? ? ? data.acceleration.y, data.acceleration.z);? }}
Gyroscopes
原始的陀螺儀數(shù)據(jù)。
獲得原始陀螺儀數(shù)據(jù)事件
CMGyroData
一種測量設備轉速的方法。
1. rotationRate
由設備陀螺儀測量的旋轉速率。
常量
1.CMRotationRate
由設備陀螺儀測量的旋轉速率的結構體類型
Pedometer
提供來自內置的處理器來獲取計步數(shù)據(jù)
CMPedometer
一個取得系統(tǒng)生成實時行走數(shù)據(jù)
1. + isStepCountingAvailable
返回一個布爾值,指示在當前設備上是否可以使用計步計數(shù)。
2. + isDistanceAvailable
返回一個布爾值,指示在當前設備上是否可以使用距離估算。
3. + isFloorCountingAvailable
返回一個布爾值,指示當前設備上是否可以使用樓層計數(shù)。
4. + isPaceAvailable
返回一個布爾值,該值指示當前設備上是否可速度信息。
5. + isCadenceAvailable
返回一個布爾值,指示當前設備上是否有可用的步調信息
6. + isPedometerEventTrackingAvailable
返回一個布爾值,指示是否計步器事件是當前設備上可用。
7. - startPedometerUpdatesFromDate:withHandler:
將最近與行人相關的數(shù)據(jù)發(fā)送到你的應用
8. - stopPedometerUpdates
停止向你的應用發(fā)送最近的步行數(shù)據(jù)更新。
9. -startPedometerEventUpdatesWithHandler:
開始向你的應用程序發(fā)送計步器事件。
10. -stopPedometerEventUpdates
停止向你的應用程序提交計步器事件
11. -queryPedometerDataFromDate:toDate:withHandler:
查詢在指定時間段的數(shù)據(jù)
12. CMPedometerHandler
處理計步器關聯(lián)數(shù)據(jù)的block
13. CMPedometerEventHandler
處理計步器事件的block
14. + authorizationStatus
授權狀態(tài)
CMPedometerData
關于用戶步行的距離的信息。
1. startDate
計步器開始時間
2. endDate
計步器結束時間
3. numberOfSteps
用戶所采取的步數(shù)
4. distance
用戶移動的估計的距離(米)
5. averageActivePace
用戶的平均速度,以秒為單位。
6. currentPace
用戶的當前速度,以秒為單位。
7. currentCadence
用戶當前的步調頻率,以秒為單位
8. floorsAscended
步行的樓層大概有幾層樓 升序。
9. floorsDescended
步行的樓層大概有幾層樓 降序。
CMPedometerEvent
用戶的步行活動發(fā)生了變化。
1. date
記錄計步器事件的日期。
2. type
發(fā)生的變化類型。
常量
1. CMPedometerEventType
顯示用戶的步行活動發(fā)生的變化的常量。
Magnetometer
提供定向數(shù)據(jù)和原始磁量數(shù)據(jù)。
CMMagnetometerData
測量地球磁場相對于設備的尺寸。
1. magneticField
返回磁力儀測量的磁場。
2. CMMagneticField
包含3軸磁力儀的結構
Altitude
提供基于氣壓傳感器信息的高度數(shù)據(jù)。
CMAltimeter
一個初始化與高海拔相關的變化的對象。
1. + isRelativeAltitudeAvailable
返回一個布爾值,指示當前設備是否支持生成相對高度變化的數(shù)據(jù)。
2. - startRelativeAltitudeUpdatesToQueue:withHandler:
開始向指定的處理程序塊發(fā)送高度數(shù)據(jù)。
3. - stopRelativeAltitudeUpdates
停止對高度計對象的高度數(shù)據(jù)傳輸
4. + authorizationStatus
授權狀態(tài)
常量
1. CMAltitudeHandler
接收高度計數(shù)據(jù)的block
CMAltitudeData
記錄海拔高度變化的數(shù)據(jù)。
1.relativeAltitude
自上次報告事件以來,海拔(米)的變化。
2. pressure
有記錄的壓力值(千帕 hpa)
Historical Data
提供記錄的運動事件來幫助你分析運動模式。
CMMotionActivityManager
用來管理設備存儲的運動數(shù)據(jù)的對象。
1. + isActivityAvailable
返回一個布爾值,指示當前設備上是否可用移動數(shù)據(jù)。
2. - startActivityUpdatesToQueue:withHandler:
啟動當前移動數(shù)據(jù)更新到你的應用程序。
3. - stopActivityUpdates
停止向你的應用發(fā)送動態(tài)更新
4. - queryActivityStartingFromDate:toDate:toQueue:withHandler:
收集并返回指定時間段的歷史運動數(shù)據(jù)
5. + authorizationStatus
授權狀態(tài)
常量
1. CMMotionActivityHandler
一個能報告與設備相關的當前運動的block
2. CMMotionActivityQueryHandler
它報告在指定的查詢間隔之間發(fā)生的動作更新的block
CMMotionActivity
單個動作更新事件的數(shù)據(jù)。
1. stationary
一個布爾指示設備是否是靜止的。
2. walking
一個布爾指示設備是否在行走。
3. running
一個布爾指示設備是否在一個正在奔跑。
4. automotive
一個布爾指示設備是否在汽車中。
5. cycling
一個布爾指示設備是否在騎自行車
6. unknown
一個布爾指示設備不知道的類型
7. startDate
動作發(fā)生的開始時間
confidence
對運動類型的評估的信任
常量
1. CMMotionActivityConfidence
運動數(shù)據(jù)是準確常量
關于傳感器(Sensor),Apple官方好像并沒有專門列出來介紹過,我只能從前輩的文章尋找,很多文章中都給iOS傳感器進行過很詳細的分類介紹,但有的傳感器只是有過介紹,沒有介紹使用方法或API,當然也有可能是我沒搜索到,比如濕度傳感器很多文章都提到,但詳細使用方式就未曾看到過,還有這邊的濕度傳感器是指iPhone內部的?還是指iPhone所在外部環(huán)境的?
iPhone的傳感器是經(jīng)過長時間不停的變化和改進的,因為傳感器一聽名字就知道這種變化和改進十之八九是要與硬件有關系的。知乎中有一遍文章介紹的很詳細, iPhone這十年在傳感器上的演進- 知乎專欄 。
我姑且按照我查看的資料對iOS傳感器進行一個不精確分類。
知乎知友 Hi-iD 的 答案 介紹過這兩個傳感器的關系,本人簡單總結如下:
距離傳感器的使用的使用相對簡單:
現(xiàn)在對iPhone頂部中心一個孔進行遮擋,就能感受的距離傳感器。
Core Motion 是關于accelerometers(加速計), gyroscopes(陀螺儀), pedometers(步數(shù)計), magnetometers( 磁力計), and barometers(氣壓計)等5個傳感器使用的框架, 暫時就按照字面意思翻譯成核心運動框架。官方文檔的介紹:
之后的文章就學習 Core Motion 的使用。????
ios使用的聲波傳感器應用如下:
1) 影像傳感器
簡單說就是相機鏡頭,由于只牽涉到微光學與微電子,沒有機械成份在里頭,即便加入馬達、機械驅動的鏡頭,這類的機械零件也過大,不到「微」的地步,所以此屬于光電半導體,屬于光學、光電傳感器。
2) 亮度傳感器
外界并不清楚iPhone 4用何種方式感應環(huán)境光亮度,而最簡單的實現(xiàn)方式是用一個光敏電阻,或者,iPhone 4直接用影像傳感器充當亮度偵測,也是可行。無論如此,此亦不帶機械成份,屬于光電類傳感器,甚至可能不是微型的,只是一般光學、光電傳感器。
3) 磁阻傳感器
簡單講就是感測地磁,這樣講還是太學名,感應地磁就是指南針原理,將這種地磁感應電子化、數(shù)字化,就稱為數(shù)字指南針(Digital Compass)。老實說,數(shù)字指南針技術比較偏玩具性,因為用來感測地磁的磁阻傳感器,很容易受環(huán)境影響(如高壓電塔旁、馬達旁),必須時時校正才有用。
磁阻傳感器目前沒有被視為熱門的MEMS組件,有些MEMS組件會追加整合磁阻感測能力(如ADI的產(chǎn)品,且目標應用是魚雷用途),但一般而言磁阻傳感器尚無迫切微型化的跡象。
4) 近接傳感器
近接傳感器的實現(xiàn)技術非常多種,可以是紅外線(例如便利商店的自動門、男生公共廁所的自動沖水器)、可以是超音波、雷射等,太多太多。同樣的,Apple沒講,我們只能亂猜或盡可能網(wǎng)搜,不過,近接傳感器也沒有迫切微型化的需要,不在熱門MEMS組件之列。
5) 聲波傳感器
學名聲波傳感器,俗名麥克風。是的,iPhone 4 為了強化聲音質量,使用2組麥克風與相關運算來達到降噪(降低噪音)的效果,這種技術稱為數(shù)組麥克風(Array MIC),事實上早在Apple實行之前,2004年Wintel就已經(jīng)在PC上提出過,差別是Apple用于手機,Wintel用于PC。
麥克風需要微型化嗎?是的,需要,相當需要,且使用一個以上的麥克風,麥克風的體積縮小需求就更迫切,麥克風也牽涉到機械(聲波會使微型機械振動),并將機械振動轉換成電子信號,因此微型化的麥克風,是個不折不扣的MEMS傳感器。
6) 加速度傳感器
俗稱加速規(guī)、G-Sensor,可以感應物體的加速度性。事實上加速度傳感器的實現(xiàn)方式也是許多種,MEMS只是手法之一,用MEMS實現(xiàn)加速度傳感器確實是目前的趨勢。
加速度傳感器一般有「X、Y兩軸」與「X、Y、Z三軸」兩種,兩軸多用于車、船等平面移動為多,三軸多用于飛彈、飛機等飛行物。而不用多說,Wii遙控器也是用三軸,iPhone可以感應實體翻轉而自動對應翻轉畫面,也是靠這個傳感器。
7) 角加速度傳感器
更簡單講就是陀螺儀,陀螺儀實現(xiàn)技術有機械式與光學(紅外線、雷射)式,第六項的加速度傳感器比較能感測平移性,但對于物體有個軸心,進行角度性的移動,則其感應效果不如陀螺儀好,所以許多應用多半是混何使用加速度傳感器與陀螺儀,而今iPhone 4也從善如流。
1.傳感器的定義:傳感器是一種感應、檢測裝置
2.傳感器的作用:用于檢測、感應設備的周邊信息;不用類型的傳感器,檢測到的信息也不一樣
3.iPhone內置傳感器有:
(1)運動傳感器/加速傳感器/加速計(Motion/Accelerometer Sensor)
加速計用于檢測設備在x、y、z軸上的加速度(那個方向有力的作用);加速計可用檢測設備的搖晃(搖一搖、計步器)
(2) 環(huán)境傳感器(Ambient Light Sensor)
檢測周圍環(huán)境光線的強弱,來控制當前屏幕的亮度,讓我們在使用Mac、iPhone、iPad時,眼睛更為舒適
(3)距離傳感器(Proximity Sensor)
檢測是否有其他物體靠近設備屏幕,當距離太近時,會自動關閉屏幕,可以節(jié)省電量,防止耳朵或者面部不小心觸碰屏幕引發(fā)不必要的意外操作
(4)磁力傳感器(Magnetometer Sensor)
可以感應地球磁場,獲取方向信息,使位置服務更為精確,可以用于電子羅盤、或者導航應用,iPad的smart cover 盒蓋睡眠操作就是基于磁力計傳感器實現(xiàn)的
(5)內部溫度傳感器(Internal Temperature Sensor)
用于檢測內部組件的溫度,當溫度過高時,會有溫度過高提示,可以防止溫度超高引起iPhone設備的安全性與穩(wěn)定性
(6)濕度傳感器(Moisture Sensor)
濕度傳感器跟其他基于微電子的傳感器不同,濕度傳感器是一個簡單地物理傳感器,濕度傳感器及時一張遇水變紅的試紙;apple維修店的員工就是根據(jù)是否試紙變紅來判斷當前設備是進水
(7)陀螺儀(Gyroscoper)
陀螺儀可以用于檢測設備的持握方式;陀螺儀的原理是檢測設備在x、y、z軸的角速度
4.傳感器總結
有三種獲取磁力計數(shù)據(jù)的方法,如上圖所示
來自磁力計的原始讀數(shù)
磁場磁場 計讀數(shù)針對器件偏差(板載磁場)進行了校正,沒有器件偏差。
CMCalibratedMagneticField包括兩個字段:field(XYZ軸上的磁場強度)和accuracy(磁場長度的精度)。
針對器件偏置校正磁性計讀數(shù)并過濾以消除局部外部磁場(通過器件移動檢測 - 如果器件隨器件移動,忽略它;否則測量)
CLHeading是“ 偏離設備跟蹤的磁場線”,而magnetometerData.magneticField是設備觀察到的總磁場,等于地球的地磁場加上設備本身及其周圍的偏置“ 。
因此,CLHeading會提供經(jīng)過濾的值,其中“參照系”是現(xiàn)有的地球磁場。而磁力計數(shù)據(jù)提供未經(jīng)過濾的值,參考幀是設備。
如果你想知道哪里是磁性或真正北方的位置,推薦使用 CLHeading ,可以做指南針的一類應用。如果想要創(chuàng)建一個響應緊鄰設備磁場的應用,或者想要執(zhí)行某種特定的傳感器融合,可以嘗試創(chuàng)建一個AHRS,然后使用 CMMagneticField 即第二種方式。