HaaS EDU场景式应用学习 - 光照信息屏
實驗整體介紹
背景
光照傳感器用于檢測光照強度,其工作原理是將檢測光照強度值并將其轉化為電壓值,目前在智能家居,智慧城市,智慧農業,智慧工廠等物聯網領域被大量使用。
本實驗的主要結果是通過I2C總線控制光強度傳感器AP3216C對環境光強度及物體接近情況進行測量并獲取環境光強度及是否有物體靠近,然后通過OLED顯示屏將讀取到的光強度、接近程度、紅外信息顯示在HaaS EDU K1的屏幕上。
HaaS EDU K1搭載了豐富實用的傳感器,開發者可以使用這些傳感器針對實際場景需求開發自己的應用。
涉及的知識點
- AP3216C光照與接近傳感器原理
- OLED繪圖
開發環境準備
硬件
開發用電腦一臺 HAAS EDU K1 開發板一塊 USB2TypeC 數據線一根軟件
AliOS Things開發環境搭建
開發環境的搭建請參考 @ref HaaS_EDU_K1_Quick_Start (搭建開發環境章節),其中詳細的介紹了AliOS Things 3.3的IDE集成開發環境的搭建流程。HaaS EDU K1 DEMO 代碼下載
HaaS EDU K1 DEMO 的代碼下載請參考 @ref HaaS_EDU_K1_Quick_Start (創建工程章節),其中, 選擇解決方案: 基于教育開發板的示例 選擇開發板: haaseduk1 board configure代碼編譯、燒錄
參考 @ref HaaS_EDU_K1_Quick_Start (3.1 編譯工程章節),點擊 ? 即可完成編譯固件。 參考 @ref HaaS_EDU_K1_Quick_Start (3.2 燒錄鏡像章節),點擊 "??" 即可完成燒錄固件。上手把玩
實驗運行結果如下:
實際應用場景(產品)介紹
目前光強度傳感器及接近傳感器在以下日常生活、工業生產等環境中都有非常廣泛的應用。
- 家庭智能燈系統
- 檢測到光強度低于一定亮度之后,觸發信號控制客廳自動開燈
- 檢測到光強度低于一定亮度之后,有人體靠近則自動打開夜燈/燈帶
- 智能路燈
- 智慧路燈安裝光強度傳感器后可以自動的感知環境強度,從而做到智能開關,保證交通安全的同時節省了系統能源
- 智能手機/平板/電視等
- 智能手機、平板、電視等消費類電子需要感知環境光溫度并根據環境光溫度自動調節屏幕亮度,給使用者最佳的視覺體驗的同時也降低了系統的功耗
- 智能手機上都存在的距離傳感器還可以在通話過程中檢測到聽筒靠近頭部的時候自動熄滅屏幕,防止誤觸碰
- 智能手機還會用距離傳感器與其它感應器實現反轉手機靜音及解鎖/鎖屏等操作
這些是我們日常生活中最常見的幾個應用場景。
光強度傳感器是一種光電傳感器,光電傳感器擁有更廣泛的應用范圍,比如煙霧報警系統、工廠煙塵檢測系統、條形碼掃描儀、產品計數器、轉速檢測系統等等。
硬件介紹
電路原理圖
AP3216芯片位于屏幕上方,是通過OLED擴展接口和HaaS EDU K1主板連接,最終連接到HaaS1000的I2C1通道。
AP3216C傳感器
AP3216C外觀
AP3216C芯片特性
- 7-bit地址模式,地址:0x1E
- 支持I2C接口Fast Mode (400kbps)
- 支持多種連續測量/單次測量及光強度、接近指標單獨測試及組合測試
- 內置溫度補償電路
- 工作溫度范圍:-30°C到+80°C
- 光強度傳感器
16-bit有效線性輸出
4種動態可選范圍 - 接近傳感器
10-bit有效線性輸出
AP3216C內部框圖
AP3216C主要包含如下幾部分。
AP3216C工作模式
根據AP3216C的datasheet說明,在正常工作時,它共有3種工作模式:
在這種模式下,AP3216C只對光強度進行量測
在這種模式下,AP3216C只對接近程度進行量測
在這種模式下,AP3216C會同時對光強度及接近程度進行量測
三種模式均支持單次量測也支持循環量測,其量測穩定時間如下:
AP3216C中斷模式
AP3216C提供中斷檢測功能,MCU可以設定ALS及PS中斷觸發門限及持續時間閾值。在環境亮度及接近程度到達門限值后持續時間超出持續時間閾值之后,會向INT管腳發送中斷通知MCU進行處理。
本案例中未使用中斷模式。
AP3216C工作流程
AP3216C的典型工作流程如下:
對AP3226C進行復位之后,設定工作模式(連續/單次測量,ALS/PS/IR組合設定),之后等待硬件測量穩定時間,再發起讀取測量值的過程。
其中,復位及模式設定是對AP3216C的System Configuration寄存器進行操作,datasheet中對System Configuration寄存器定義及描述如下:
-
復位操作
參考datasheet的描述,是通過I2C 向地址為0x00的寄存器寫入0x4 (對應二進制的100)。 -
模式設定
ALS only連續測量模式:是通過I2C 向地址為0x00的寄存器寫入0x4 (對應二進制的100)。
PS/IR only連續測量模式:是通過I2C 向地址為0x00的寄存器寫入0x1 (對應二進制的001)。
ALS+PS/IR連續測量模式:是通過I2C 向地址為0x00的寄存器寫入0x2 (對應二進制的010)。
ALS only單次測量模式:是通過I2C 向地址為0x00的寄存器寫入0x5 (對應二進制的101)。
PS/IR only單次測量模式:是通過I2C 向地址為0x00的寄存器寫入0x6 (對應二進制的110)。
ALS+PS/IR單次測量模式:是通過I2C 向地址為0x00的寄存器寫入0x7 (對應二進制的111)。 -
讀取測量結果
ALS、PS、IR值可以通過如下寄存器的值來獲取。寄存器地址及所讀取數值詳細解析方法請參考下表:
ALS光強度解析
通過讀取ALS數據寄存器(0x0C和0x0D)得到16bit的ADC count數據之后,需要根據ALS Configuration寄存器的ALS Gain欄位將ADC count數據根據芯片手冊的說明轉換成以lux為單位的亮度值。如下圖所示:
PS/IR數據解析
PS Data寄存器詳細定義如下:
- PS 有效位數為10bit。
- OBJ bit在有物體靠近的時候被設置成1,否則設置為0。
- IR_OF bit被設置成1代表PS值無效(高強度紅外光的情況下會出現)
IR數據有效位數同樣為10bit,也有一個IR_OF來標識IR/PS數據是否有效。
AP3216C判斷物體靠近和遠離的動作是通過兩組PS 高低閾值寄存器和PS Data寄存器進行比對,PS Data高于PS High Threshold之后,則判定為物體遠離;PS Data低于PS Low Threshold之后,則視為物體靠近。
- PS Low Threshold計算方法:Value(Reg_0x2B) * 4 + Value(Reg_0x2A)
- PS High Threshold計算方法:Value(Reg_0x2D) * 4 + Value(Reg_0x2C)
PS中斷模式說明
在開啟了AP3216C的中斷模式,為了避免靠近物體抖動帶來頻繁觸發中斷的情況,在PS Data高于PS High Threashold或低于PS Low Threshold之后,需要等待一個PS persist時間,如果PS persist時間之內,PS Data狀態沒有發生變化,則觸發中斷。
PS Persist的時間可以通過配置PS Configuration寄存器的bit 0:1。
I2C總線技術
HaaS EDU K1上AP3216C和HaaS1000通過I2C1接口進行通信。
I2C總線是飛利浦公司在80年代為了讓CPU可以連接低速周邊設備而設計的。外接傳感器是I2C總線最典型的應用場景。目前I2C Spec已經發展到了6.0版本。可以通過https://www.nxp.com.cn/docs/en/user-guide/UM10204.pdf 進行下載
I2C采用多主從結構,I2C主設備基于地址對I2C從設備進行尋址,采用8-bit數據傳輸模式,支持7-bit/10-bit地址模式。I2C總線對I2C傳輸開始/結束/數據傳輸/ACK機制/時鐘同步/沖突仲裁等進行了詳細的定義。這里就不再贅述。
軟件介紹
HaaS EDU K1的edk_demo 應用程序中包含多個應用案例,所有的案例軟件設計都遵循HaaS EDK應用架構的設計思想。其設計思想可以參考“HaaS EDK主系統框架”中的“添加新應用”小節的說明。
簡單來說,所有的子應用頁面都需要實現MENU_TYP結構體。
光照信息屏應用代碼位于:solutions/eduk1_demo/k1_apps/lightmeter/lightmeter.c中。
在HaaS EDU K1上電之后,按K1或K2鍵左右切換應用的時候,如果切換到光照信息屏頁面再到退出該頁面的過程中,lightmeter下面的API會依此被呼叫:
軟件流程
軟件流程圖如下所示。
在進入光照信息屏頁面后,啟動名為lightmeter_task的task,周期性的讀取ALS/PS/IR數據并判斷物體靠近標志之后將相關數據按照一定的規則打印到OLED屏幕上。
代碼實現
光照信息屏頁面
代碼位置:solutions/eduk1_demo/k1_apps/lightmeter/lightmeter.c
詳細代碼及注釋如下:
AP3216C驅動
代碼位置:components/peripherals/sensor/drv/drv_als_ps_ir_liteon_ap3216c.c
以ap3216C初始化和讀取ALS數值為例,詳細代碼及注釋如下:
這里的hal_i2c_mem_read的實現和AP3216C datasheet上面讀取寄存器的描述相匹配。
- MCU I2C 主設備先將寄存器地址通過I2C寫操作發給AP3216C從設備
- MCUI2C 主設備發起讀操作從AP3216C從設備讀取寄存器的值
AP3216C寄存器讀取的整個I2C傳輸過程中,詳細數據傳輸過程如下圖所示:
讀取AP3216C的PS和IR寄存器的過程和讀取ALS的過程中I2C的傳輸過程完全一致,這里就不再贅述。
開發者支持
HaaS官方:https://haas.iot.aliyun.com/
HaaS技術社區:https://blog.csdn.net/HaaSTech
開發者釘釘群和公眾號見下圖,開發者釘釘群每天都有技術支持同學值班。
總結
以上是生活随笔為你收集整理的HaaS EDU场景式应用学习 - 光照信息屏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OSPF配置命令及外部选路
- 下一篇: HDFVIEW3.1.2下载