今天給大家介紹一塊嵌入式畢設(shè)中也經(jīng)常用到的一款傳感器——BH1750光照傳感器,如下圖。(該傳感器的購(gòu)買(mǎi)鏈接和代碼我已放在資料里,想要資料的同學(xué),評(píng)論區(qū)留下郵箱即可)相比光敏傳感器,它可以直接輸出環(huán)境光照強(qiáng)度的數(shù)值(范圍是0~65535lx),非常適合懶人黨,各位的傳感器買(mǎi)到手后,趕緊跟著文章試試吧!
?首先,BH1750光照傳感器上有5根引腳,分別是連接3.3V的VCC、接地的GND、連接IIC時(shí)鐘線的SCL引腳,連接IIC數(shù)據(jù)線的SDA引腳和ADDR引腳。關(guān)于ADDR引腳,我們可以不用管它。拿到BH1750傳感器模塊后,按照資料提供的接線圖(下圖)用杜邦線將STM32、BH1750和USB轉(zhuǎn)TTL模塊連接起來(lái),再通過(guò)燒錄器將下面的例程代碼燒錄進(jìn)STM32即可看到效果(USB轉(zhuǎn)TTL要連接電腦)。
?接下來(lái)講解BH1750的STM32例程代碼程序。
?
?第11行 delay_init( ) 初始化延時(shí)函數(shù),執(zhí)行這條語(yǔ)句后,延時(shí)效果才會(huì)準(zhǔn)確。?
第13行 NVIC_PriorityGroupConfig( )是設(shè)置中斷優(yōu)先級(jí)分組。
第15行 USART_Config( )?初始化串口1函數(shù),該串口用來(lái)打印光照強(qiáng)度值。資料提供的程序用的串口1來(lái)打印,到時(shí)大家根據(jù)自身需要,在uart.h文件里面打開(kāi)對(duì)應(yīng)的串口注釋就可以使用對(duì)應(yīng)的串口了。
第17行 BH1750_Init( ) 初始化光照傳感器模塊。里面初始化了A6和PA7引腳來(lái)進(jìn)行IIC通訊,和發(fā)送上電指令給BH1750傳感器。
第19~20行 BH1750_Data_Send( )的作用是將括號(hào)里的數(shù)據(jù)通過(guò)IIC方式發(fā)送給BH1750傳感器模塊,BH1750傳感器接收到數(shù)據(jù)后就會(huì)去執(zhí)行相關(guān)操作。
比如第19行的BH1750_Data_Send(0x07)是讓BH1750傳感器內(nèi)部存儲(chǔ)光照數(shù)值的寄存器的值重置為默認(rèn)值。BH1750_Data_Send(0x10)是設(shè)置BH1750傳感器工作在高精度測(cè)量模式。
第22行 delay_ms(180) 延時(shí)180ms,等待模塊準(zhǔn)備完成并開(kāi)始測(cè)量。以上,我們就設(shè)置好了BH1750傳感器模塊的工作模式,到時(shí)候程序運(yùn)行完第17~20行這段代碼就會(huì)按照我們?cè)O(shè)置的模式開(kāi)始工作,剩下的就是在while(1)里調(diào)用第26行的 BH1750_Data_Read( ) 進(jìn)行讀取光照值數(shù)據(jù)即可。
第26行 是獲取真實(shí)的光照輕度值,BH1750_Data_Read( )函數(shù)會(huì)返回BH1750傳感器檢測(cè)到的光照值,然后除以1.2得到的就是真實(shí)的光照強(qiáng)度值了。
第27行 串口1打印真實(shí)的光照強(qiáng)度值—LIGHTstreng,其中" %8.2f "的作用是讓輸出的數(shù)據(jù)保留兩位小數(shù)。
實(shí)現(xiàn)效果如下:
串口助手顯示BH1750光照值
在上面我們已經(jīng)學(xué)會(huì)了使用BH1750模塊測(cè)量周?chē)h(huán)境的光照強(qiáng)度并進(jìn)行光強(qiáng)的數(shù)值打印。接下來(lái)我們結(jié)合第七章(STM32+OLED+DHT11)的代碼,實(shí)現(xiàn)OLED上顯示光照強(qiáng)度值。
首先打開(kāi)BH1750的工程文件和第七章的工程文件,因?yàn)锽H1750與STM32之間是通過(guò)I2C進(jìn)行通訊的,所以我們把I2C驅(qū)動(dòng)源碼文件移植到第七章的工程文件中,按下圖操作。
移植完I2C驅(qū)動(dòng)源碼文件后,我們就可以將包含STM32與BH1750通訊的函數(shù)代碼文件也移植過(guò)來(lái)。由于BH1750的代碼工程已將這部分內(nèi)容都整合在上面移植的BH1750文件內(nèi)了,所以文件方面的移植只要完成上圖的操作就可以了。
接下來(lái)打開(kāi)第七章的代碼,進(jìn)行下圖操作,將包含I2C驅(qū)動(dòng)源碼和STM32與BH1750通訊的函數(shù)代碼C文件添加進(jìn)工程中。
在彈出的窗口進(jìn)行下圖操作。
所需的C文件添加進(jìn)來(lái)后,再將移植過(guò)來(lái)的BH1750文件添加到編譯路徑。具體操作如下:
1.點(diǎn)擊圖中紅色框的“魔法棒”圖標(biāo)。
?2.點(diǎn)擊“魔法棒”后會(huì)彈出下圖中的窗口,先點(diǎn)擊窗口頂部的 C/C++?(圖中1號(hào)標(biāo)位置),然后點(diǎn)擊圖中2號(hào)標(biāo)位置。
?3.完成2的步驟后,會(huì)彈出下圖中的窗口,先點(diǎn)擊1號(hào)標(biāo)的位置,會(huì)彈出下面藍(lán)色區(qū)域的長(zhǎng)條框,長(zhǎng)條框里面就可以添加我們要新的編譯路徑。怎么添加呢?我們點(diǎn)擊長(zhǎng)條框右側(cè)的地方(2號(hào)標(biāo)位置),找到剛從BH1750工程文件移植過(guò)來(lái)的BH1750文件即可。
?4.如下圖所示就是將移植過(guò)來(lái)的BH1750文件添加到代碼編譯路徑的結(jié)果圖,然后點(diǎn)擊OK推出就可以啦。
做完上圖操作,我們就可以調(diào)用bh1750.c里面函數(shù)了。
1.首先在第七章代碼的main.c開(kāi)頭添加bh750.h頭文件(第1個(gè)箭頭指示);
2.聲明一個(gè)float類(lèi)型變量lightvalue和兩個(gè)uint32_t類(lèi)型的變量lightV_H和lightV_L(第2個(gè)箭頭指示,變量lightvalue存儲(chǔ)光照強(qiáng)度數(shù)值,變量lightV_H和lightV_L分別用來(lái)存儲(chǔ)光照強(qiáng)度數(shù)值的整數(shù)位和小數(shù)位);
3.然后再調(diào)用BH1750模塊初始化函數(shù)、重置BH1750內(nèi)部數(shù)據(jù)寄存器函數(shù)和設(shè)置其工作模式的函數(shù)讓BH1750開(kāi)始工作(第3個(gè)箭頭指示);
4.第4個(gè)紅框的代碼實(shí)現(xiàn)在OLED上顯示”光照:lx”的字樣;
5.第5個(gè)紅框的代碼就是將BH1750獲取到的光照值轉(zhuǎn)換成光照強(qiáng)度值賦值并將光照強(qiáng)度值的整數(shù)和小數(shù)位分別復(fù)制給變量lightV_H和lightV_L;?
6.然后再調(diào)用第6個(gè)框框的代碼將光照強(qiáng)度值得整數(shù)位和小數(shù)位進(jìn)行顯示,到此就大功告成啦。
?
按照下面的接線圖,用杜邦線將每個(gè)模塊接到STM32上,然后將上面移植完成的代碼燒錄進(jìn)STM32就可以看到效果了。
?實(shí)現(xiàn)效果如下:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-440317.html
STM32+OLED+BH1750顯示光照值強(qiáng)度文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-440317.html
到了這里,關(guān)于第12章 STM32+BH1750光照傳感器+OLED模塊顯示環(huán)境光照強(qiáng)度的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!