一、智慧路燈簡介
我們平時看到的傳統路燈基本是通過定時開啟、定時關閉來控制路燈亮滅,在夏天白晝時間長,路燈過早開啟,造成能源浪費;在冬天白晝時間短,往往經常是天已經黑了,路燈卻未開啟,給人們的出行帶來了諸多不便;也有的路燈通過專人手動開啟關閉,這種方式雖較定時方式靈活,但也存在需要人為操作的局限性。隨著社會的發展進步,智慧路燈應運而生,智慧路燈通過自身攜帶的光線傳感器,通過傳感器采集的的光線數據判斷天黑情況,可以根據預置的閾值來實現路燈開啟關閉;同時智慧路燈的光線數據也可以同步上傳云端,通過云端可以查詢到智慧路燈的光線數據、路燈開啟關閉狀態,同時也可以設置智慧路燈開啟關閉的閾值,實現云管理。
本文基于OpenHarmony系統,使用小凌派RK2206開發板搭載智慧路燈模塊,模擬實現智慧路燈應用,智慧路燈模塊本身自帶光線傳感器,通過傳感器采集的光線數據判斷天黑情況,根據預設的閾值來實現路燈的開關;搭載OpenHarmony系統的小凌派RK2206開發板支持連接華為云服務器,后續文章將更新智慧路燈在華為云的應用實現。
二、硬件電路設計
智慧路燈模塊硬件電路如圖1所示,電路中包含了E53接口連接器、EEPROM存儲器、光線傳感器BH1750、大功率LED燈驅動電路。本文主要使用光線傳感器BH1750和LED燈驅動電路,其中光線傳感器為數字接口芯片,使用I2C總線控制;LED燈驅動電路通過PWD_LED口控制LED燈開啟、關閉,PWD_LED輸出高電平點亮LED燈,PWD_LED輸出低電平熄滅LED燈。模塊硬件電路簡單,這里就不對此進行多余的說明。
圖1 智慧路燈模塊硬件電路圖
小凌派RK2206開發板與智慧路燈模塊均帶有防呆設計,能夠很容易區分安裝方向,直接將模塊插入到小凌派RK2206開發板的E53母座接口上即可,安裝如圖2所示。
圖2 硬件連接圖
三、軟件設計
1、主程序設計
小凌派RK2206開發板上電后,OpenHarmony系統開始運行,LiteOS系統初始化后,創建一個線程用于實現智慧路燈主程序。進入主程序先初始化智慧路燈模塊,程序進入主循環,2秒獲取一次光線傳感器BH1750的光線強度值,當光線強度值小于20時,打開LED路燈;當光線強度值大于20時,關閉LED路燈。
void e53_isl_thread()
{
float lum = 0;
e53_isl_init();
while (1)
{
lum = e53_isl_read_data();
printf("luminance value is %.2f ", lum);
if (lum < 20)
{
isl_light_set_status(ON);
printf("light on ");
}
else
{
isl_light_set_status(OFF);
printf("light off ");
}
LOS_Msleep(2000);
}
(左右移動查看全部內容)
2、智慧路燈初始化程序設計
智慧路燈初始化程序主要分為硬件IO初始化和BH1750傳感器的初始化兩部分。
{
e53_isl_io_init();
init_bh1750();
}
(左右移動查看全部內容)
硬件IO初始化程序主要配置GPIO0_PA5為輸出模式,作為LED燈控制IO;初始化I2C0用于讀寫BH1750傳感器,配置I2C時鐘頻率400K。
{
LzGpioInit(GPIO0_PA5);
LzGpioSetDir(GPIO0_PA5, LZGPIO_DIR_OUT);
if (I2cIoInit(m_isl_i2c0m2) != LZ_HARDWARE_SUCCESS)
{
printf("init I2C I2C0 io failed ");
}
if (LzI2cInit(ISL_I2C0, 400000) != LZ_HARDWARE_SUCCESS)
{
printf("init I2C I2C0 failed ");
}
}
(左右移動查看全部內容)
BH1750傳感器初始化程序通過I2C0向BH1750傳感器寫入通電命令0x1,開始等待測量命令,如圖3為BH1750傳感器的命令集。
圖3 BH1750指令
{
uint8_t send_data[1] = {0x01};
uint32_t send_len = 1;
LzI2cWrite(ISL_I2C0, BH1750_ADDR, send_data, send_len);
}
(左右移動查看全部內容)
3、獲取傳感器數據程序設計
獲取傳感器數據程序通過I2C下發命令開始測量,延時一定時間后,開始讀取BH1750傳感器的寄存器值,讀取兩個字節數據,其中第一個字節數據為高8位,第二字節數據為低8位數據,亮度值為高8位和低8位數據合并為16字節數據除以1.2。
{
float lum = 0;
start_bh1750();
LOS_Msleep(180);
uint8_t recv_data[2] = {0};
uint32_t receive_len = 2;
LzI2cRead(ISL_I2C0, BH1750_ADDR, recv_data, receive_len);
lum = (float)(((recv_data[0]<<8) + recv_data[1])/1.2);
return lum;
}
(左右移動查看全部內容)
程序通過I2C0向BH1750傳感器寫入連續H分辨率模式命令0x10,開始測量命令,測量時間一般為120ms。
{
uint8_t send_data[1] = {0x10};
uint32_t send_len = 1;
LzI2cWrite(ISL_I2C0, BH1750_ADDR, send_data, send_len);
}
(左右移動查看全部內容)
四、測試結果
程序編譯燒寫到小凌派RK2206開發板后,按下開發板的RESET按鍵,通過串口軟件查看日志如下所示;通過遮擋智慧路燈模塊上的光線傳感器,從而來改變光線強度值,當光線強度值小于20時,LED燈打開;當光線強度值大于20時,LED燈關閉。
luminance value is 45.83
light off
luminance value is 4.17
light on
(左右移動查看全部內容)
原文標題:基于 OpenHarmony 的智慧路燈實現
文章出處:【微信公眾號:HarmonyOS官方合作社區】歡迎添加關注!文章轉載請注明出處。
-
電路設計
+關注
關注
6675文章
2453瀏覽量
204366 -
開發板
+關注
關注
25文章
5050瀏覽量
97484 -
智慧路燈
+關注
關注
2文章
746瀏覽量
17110 -
OpenHarmony
+關注
關注
25文章
3722瀏覽量
16321
原文標題:基于 OpenHarmony 的智慧路燈實現
文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發燒友開源社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論