iOS開發(fā)之──傳感器使用
在實際的應(yīng)用開發(fā)中,會用到傳感器,下面首先介紹一下iphone4的傳感器,然后對一些傳感器的開發(fā)的API作一簡單介紹
一、 iPhone 4的傳感器技術(shù)
進(jìn)入正題,iPhone 4到底用上了哪些傳感器呢?
1) 影像傳感器
簡單說就是相機(jī)鏡頭,由于只牽涉到微光學(xué)與微電子,沒有機(jī)械成份在里頭,即便加入馬達(dá)、機(jī)械驅(qū)動的鏡頭,這類的機(jī)械零件也過大,不到「微」的地步,所以此屬于光電半導(dǎo)體,屬于光學(xué)、光電傳感器。
2) 亮度傳感器
外界并不清楚iPhone 4用何種方式感應(yīng)環(huán)境光亮度,而最簡單的實現(xiàn)方式是用一個光敏電阻,或者,iPhone 4直接用影像傳感器充當(dāng)亮度偵測,也是可行。無論如此,此亦不帶機(jī)械成份,屬于光電類傳感器,甚至可能不是微型的,只是一般光學(xué)、光電傳感器。
3) 磁阻傳感器
簡單講就是感測地磁,這樣講還是太學(xué)名,感應(yīng)地磁就是指南針原理,將這種地磁感應(yīng)電子化、數(shù)字化,就稱為數(shù)字指南針(Digital Compass)。老實說,數(shù)字指南針技術(shù)比較偏玩具性,因為用來感測地磁的磁阻傳感器,很容易受環(huán)境影響(如高壓電塔旁、馬達(dá)旁),必須時時校正才有 用。
磁阻傳感器目前沒有被視為熱門的MEMS組件,有些MEMS組件會追加整合磁阻感測能力(如ADI的產(chǎn)品,且目標(biāo)應(yīng)用是魚雷用途),但一般而言磁阻傳感器尚無迫切微型化的跡象。
4) 近接傳感器
近接傳感器的實現(xiàn)技術(shù)非常多種,可以是紅外線(例如便利商店的自動門、男生公共廁所的自動沖水器)、可以是超音波、雷射等,太多太多。同樣的,Apple沒講,我們只能亂猜或盡可能網(wǎng)搜,不過,近接傳感器也沒有迫切微型化的需要,不在熱門MEMS組件之列。
5) 聲波傳感器
學(xué)名聲波傳感器,俗名麥克風(fēng)。是的,iPhone 4 為了強化聲音質(zhì)量,使用2組麥克風(fēng)與相關(guān)運算來達(dá)到降噪(降低噪音)的效果,這種技術(shù)稱為數(shù)組麥克風(fēng)(Array MIC),事實上早在Apple實行之前,2004年Wintel就已經(jīng)在PC上提出過,差別是Apple用于手機(jī),Wintel用于PC。
麥克風(fēng)需要微型化嗎?是的,需要,相當(dāng)需要,且使用一個以上的麥克風(fēng),麥克風(fēng)的體積縮小需求就更迫切,麥克風(fēng)也牽涉到機(jī)械(聲波會使微型機(jī)械振動),并將機(jī)械振動轉(zhuǎn)換成電子信號,因此微型化的麥克風(fēng),是個不折不扣的MEMS傳感器。
6) 加速度傳感器
俗稱加速規(guī)、G-Sensor,可以感應(yīng)物體的加速度性。事實上加速度傳感器的實現(xiàn)方式也是許多種,MEMS只是手法之一,用MEMS實現(xiàn)加速度傳感器確實是目前的趨勢。
加速度傳感器一般有「X、Y兩軸」與「X、Y、Z三軸」兩種,兩軸多用于車、船等平面移動為多,三軸多用于飛彈、飛機(jī)等飛行物。而不用多說,Wii遙控器也是用三軸,iPhone可以感應(yīng)實體翻轉(zhuǎn)而自動對應(yīng)翻轉(zhuǎn)畫面,也是靠這個傳感器。
7) 角加速度傳感器
更簡單講就是陀螺儀,陀螺儀實現(xiàn)技術(shù)有機(jī)械式與光學(xué)(紅外線、雷射)式,第六項的加速度傳感器比較能感測平移性,但對于物體有個軸心,進(jìn)行角度性的移動, 則其感應(yīng)效果不如陀螺儀好,所以許多應(yīng)用多半是混何使用加速度傳感器與陀螺儀,而今iPhone 4也從善如流。不過,iPhone 4確實是率先使用陀螺儀的手機(jī)。
二、常用使用方法
在我們應(yīng)用中應(yīng)用最多有加速度傳感器,角度加速度偉感器,這兩個主要應(yīng)用在需要重力感應(yīng)的應(yīng)用中,在公開的API中UIAccelerometer類實現(xiàn)相應(yīng)的功能;磁阻傳感器主要應(yīng)用于需要指示方向的應(yīng)用中,在公開的API中CLLocationManager類實現(xiàn)相應(yīng)的功能,上述幾個使用方法今天不作介紹;而影像傳感器和亮度傳感器的使用方法,是否有公開的API,限于本人的學(xué)術(shù)水平,還未查到使用方法;今天主要介紹近接傳感器的用法,代碼如下:
- [[UIDevice currentDevice] setProximityMonitoringEnabled:YES];
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(sensorStateChange:)
- name:@"UIDeviceProximityStateDidChangeNotification"
- object:nil];
- -(void)sensorStateChange:(NSNotificationCenter *)notification;
- {
- if ([[UIDevice currentDevice] proximityState] == YES) {
- NSLog(@"Device is close to user");
- //在此寫接近時,要做的操作邏輯代碼
- }else{
- NSLog(@"Device is not close to user");
- }
- }