楊世權,張謙述,周 聰
(西華師范大學電子信息工程學院,四川 南充 637009)
隨著科學技術的不斷發(fā)展,智能家居、智能農(nóng)業(yè)和智能園林開始出現(xiàn),其中光照強度是一項重要的環(huán)境參數(shù)。在家居環(huán)境中,光照度影響著人們的舒適度。農(nóng)業(yè)種植中,適當?shù)墓庹樟繉瞎卟说纳L十分重要。園林中,適當光照度可以讓花草生長得更好。文獻[1]提出了單個BH1750光強檢測系統(tǒng)的設計,但沒有提到多個BH1750的應用和相應的實驗數(shù)據(jù)。文獻[2]給出了設計一種光照強度測試儀,但存在處理器較落后、處理速度慢和顯示器分辨率低等不足。文獻[3]提出將BH1750與串口相結合,將光強數(shù)據(jù)上傳到電腦上顯示,但沒給出相應的軟件實現(xiàn)程序。綜上,本文提出并實現(xiàn)了多路BH1750光強檢測系統(tǒng),實驗表明該系統(tǒng)具有精度高、可移植性強、輸出范圍廣和穩(wěn)定性好等優(yōu)點。
系統(tǒng)主要由STM32F4控制器、BH1750傳感器、TFTLCD顯示器組成。
系統(tǒng)由室外環(huán)境和控制室的控制器兩部分構成。采用STM32芯片作為控制芯片,首先室外場地光強通過BH1750進行采集,其內(nèi)部AD器件把采集的模擬量轉(zhuǎn)換為數(shù)字量,STM32F4處理器根據(jù)器件從地址的不同來讀取不同傳感器采集的光照數(shù)據(jù),最后把讀取并轉(zhuǎn)換后的數(shù)據(jù)送給LCD進行顯示。多路光強檢測系統(tǒng)總體框圖如圖1所示。
圖1 多路光強檢測系統(tǒng)總體框圖
系統(tǒng)總體設計原理圖如下圖2所示。
圖2 總體設計原理圖
在控制器選型方面,有兩種方案,傳統(tǒng)的51單片機和新興的STM32F4單片機。兩種控制器性能對比情況如下表1所示。
表1 控制器性能對比表
通過上表可以看出,STM32F4在許多方面優(yōu)于51單片機,因此本系統(tǒng)采用意法半導體公司(ST)推出的基于ARM Cortex-M4內(nèi)核處理器芯片STM32F407ZGT6作為系統(tǒng)的主控芯片[4]。
本系統(tǒng)光強傳感器選用BH1750,BH1750是一種用于兩線式串行總線接口的數(shù)字型光強傳感器。BH1750傳感器內(nèi)部有16位模數(shù)轉(zhuǎn)換器,傳感器的測量范圍為(1Lx-65535Lx)[5]。BH1750通過I2C協(xié)議與控制器STM32F4進行通信。本文用軟件來模擬I2C協(xié)議,使系統(tǒng)運行速率和穩(wěn)定性得到提高。模擬的I2C端口可接收數(shù)據(jù)和發(fā)送數(shù)據(jù)。發(fā)送時,將并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù);接收時,把串行數(shù)據(jù)轉(zhuǎn)換成并行。傳感器通過自身時鐘引腳和數(shù)據(jù)引腳連接到I2C總線上,I2C總線運行速度可達100KHz~400KHz[6]。BH1750FVI有三中測量模式,每種測量模式又分兩種方式,單次測量和連續(xù)測量。
本系統(tǒng)模擬兩路I2C總線,而每一路根據(jù)器件從地址不同(即ADDR接高電平或低電平),可搭載兩個BH1750,所以共有4個BH1750傳感器,STM32F4與BH1750連接電路圖如圖3所示。
在LCD選型方面,有兩種方案可供選擇,LCD1602和2.8寸TFTLCD。2.8寸TFTLCD是彩色主動顯示屏幕,分辨率為240*320;LCD1602是黑白TN顯示屏幕,分辨率僅為5*8。可見,TFTLCD要明顯優(yōu)于LCD1602,因此本系統(tǒng)采用TFTLCD作為顯示模塊。
圖3 STM32F4與BH1750連接電路圖
系統(tǒng)軟件設計流程為開啟BH1750,等待測量指令。接著發(fā)送測量命令,BH1750以連續(xù)高分辨率模式進行數(shù)據(jù)測量。時分復用,開啟第2個BH1750傳感器。發(fā)送測量命令,BH1750以連續(xù)高分辨率模式進行數(shù)據(jù)測量??刂破髯x取并轉(zhuǎn)換數(shù)據(jù),將轉(zhuǎn)換后的數(shù)據(jù)送給顯示器。依次類推,直到讀取最后一個傳感器后,返回進行下一輪測量。軟件設計流程如圖4所示。
圖4 軟件設計流程圖
I2C總線的SDA和SCL兩條信號線同時處于高電平時,規(guī)定為總線的空閑狀態(tài)。當SCL為高期間,SDA由高跳變到低,此時為啟動信號;當SCL為高期間,SDA由低到跳變高,此時為停止信號。發(fā)送器每發(fā)送一個字節(jié)時,在時鐘脈沖9期間釋放數(shù)據(jù)線,由接收器反饋一個應答信號。應答信號為低電平時,規(guī)定為有效應答位(ACK簡稱應答位),表示接收器成功接收了該字節(jié);應答信號為高電平時,規(guī)定為非應答位(NACK),一般表示接收器接收該字節(jié)沒有成功。為保證數(shù)據(jù)有效傳送,數(shù)據(jù)在SCL的上升沿到來之前就需準備好,并在下降沿到來之前必須穩(wěn)定[7]。I2C總線接口時序圖如圖5所示。
圖5 I2C總線接口時序圖
從屬地址有兩種類型,它是被ADDR端口決定。
ADDR=‘H’(ADDR≥0.7VCC)→“1011100”
ADDR=‘L’(ADDR≤0.3VCC)→“0100011”
從“寫指令”到“讀出測試結果”設計實例如下。
實例:連續(xù)高分辨率模式(ADDR=‘L’)
1)發(fā)送“連續(xù)高分辨率模式”指令:
2)等待完成第一次高分辨率模式測量。(允許最長時間180 ms);
3)讀取測量結果:
當數(shù)據(jù)高字節(jié)是“10000011”和低字節(jié)是“10010000”
(215+29+28+27+24)/1.2=28067[Lux]
連續(xù)測量模式的結果是不斷更新的。(高分辨率模式典型時間是120ms,低分辨率模式時間是16ms)
初始化程序:
extern float temp,temp1;//定義外部變量
extern float temp2,temp3;//定義外部變量
u16 i=0;
delay-init(168);//初始化延時函數(shù)
uart-init(115200); //初始化串口波特率為115200
LCD-Init();//LCD初始化
Init-BH1750(); //I2C初始化
Init-BH1751(); //I2C初始化
Init-BH17502(); //I2C初始化
Init-BH17503();//I2C初始化
delay-ms(180);//延時180ms
POINT-COLOR=RED;//設置顯示字體為紅色
LCD-ShowString(40,70,200,24,24,"Light:");//固定要顯示的位置
LCD-ShowString(40,100,200,24,24,"Light1:");//固定要顯示的位置
LCD-ShowString(40,100,200,24,24,"Light2:");//固定要顯示的位置
LCD-ShowString(40,100,200,24,24,"Light3:");//固定要顯示的位置
光照數(shù)據(jù)采集及顯示程序:
Start-BH1750();//開啟BH1750
Start-BH17501();//開啟BH17501
Start-BH17502();//開啟BH17502
Start-BH17503();//開啟BH17503
delay-ms(180);//延時180ms,給傳感器相應反應時間
Read-BH1750();//連續(xù)讀取數(shù)據(jù)存儲在buf中
Read-BH17501();//連續(xù)讀取數(shù)據(jù)存儲在buf中
Read-BH17502();//連續(xù)讀取數(shù)據(jù)存儲在buf中
Read-BH17503();//連續(xù)讀取數(shù)據(jù)存儲在buf中
Convert-BH1750();//將采集的數(shù)據(jù)轉(zhuǎn)換成相應光照度
Convert-BH17501();//將采集的數(shù)據(jù)轉(zhuǎn)換成相應光照度
Convert-BH17502();//將采集的數(shù)據(jù)轉(zhuǎn)換成相應光照度
Convert-BH17503();//將采集的數(shù)據(jù)轉(zhuǎn)換成相應光照度
LCD-ShowxNum(120,70,temp,6,12,0);//顯示轉(zhuǎn)換后的結果
LCD-ShowxNum(120,82,temp1,6,12,0);//顯示轉(zhuǎn)換后的結果
LCD-ShowxNum(120,94,temp2,6,12,0);//顯示轉(zhuǎn)換后的結果
LCD-ShowxNum(120,106,temp3,6,12,0);//顯示轉(zhuǎn)換后的結果
選取該系統(tǒng)一個BH1750傳感器與照度計所測光照度進行對比,分時測試了20 組數(shù)據(jù)如圖6所示,N表示測試次數(shù)。從圖中可以看出,檢測系統(tǒng)與照度計的測量值相差很小,幾乎完全重合,反應出BH1750檢測系統(tǒng)的準確性。隨后對其它BH1750傳感器進行測試,實驗結論相同。
圖6 系統(tǒng)和照度計測量值
保持各個場地光照度不變,四個傳感器進行多次光強檢測,檢測數(shù)據(jù)如表2所示。
表2 檢測數(shù)據(jù)
其系統(tǒng)平均相對誤差、平均絕對誤差和均方根誤差如表3所示。
表3 系統(tǒng)誤差分析
從表3可以看出,平均相對誤差小于0.6%,平均絕對誤差在1Lx以下,均方根誤差最大僅為1.08Lx,反映出該系統(tǒng)穩(wěn)定性好、精密度高、抗干擾性強。
通過對系統(tǒng)進行多次測試驗證,該系統(tǒng)能準確測量不同場地的光強變化,把不同場地光強信息反饋給顯示器,方便物主獲取信息,并對不同場地進行管理。該系統(tǒng)具有體積小、功耗低、成本低、移植性好等特點,在農(nóng)業(yè)種植和園林綠化等光照控制領域,具有廣泛的應用價值。