智慧路灯模块硬件和软件电路设计

描述

一、智慧路灯简介

 

 

我们平时看到的传统路灯基本是通过定时开启、定时关闭来控制路灯亮灭,在夏天白昼时间长,路灯过早开启,造成能源浪费;在冬天白昼时间短,往往经常是天已经黑了,路灯却未开启,给人们的出行带来了诸多不便;也有的路灯通过专人手动开启关闭,这种方式虽较定时方式灵活,但也存在需要人为操作的局限性。随着社会的发展进步,智慧路灯应运而生,智慧路灯通过自身携带的光线传感器,通过传感器采集的的光线数据判断天黑情况,可以根据预置的阈值来实现路灯开启关闭;同时智慧路灯的光线数据也可以同步上传云端,通过云端可以查询到智慧路灯的光线数据、路灯开启关闭状态,同时也可以设置智慧路灯开启关闭的阈值,实现云管理。

 

本文基于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.83light offluminance value is 4.17light on

(左右移动查看全部内容)

 

原文标题:基于 OpenHarmony 的智慧路灯实现

文章出处:【微信公众号:HarmonyOS官方合作社区】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分