任 刚,任美臣
(1.淮南师范学院 电子工程学院,安徽 淮南 232001;2.上海海洋大学 信息学院,上海 201306)
路灯作为人们生活中必不可少的基础设施,直接反映一个地方的经济水平.我国目前城镇化不断发展,路灯的使用数量也在与日俱增.2006—2017年,我国路灯数量从1 283.8万增加到2 683.4万,年均增长率为6.75%,在电能消耗方面非常巨大[1-2].我国部分地区路灯管理方面还存在很多问题:
1)控制系统落后.由于技术方面的原因,有些地区路灯还是靠工作人员手动控制,而且存在“一亮全亮,一灭全灭”的现象.这种落后的路灯控制,精确度不高,既不能充分发挥路灯的照明功能,也造成了不必要的电能浪费.
2)智能化落后.采用原始的电子定时装置控制路灯开关,用户选择性不大,操作复杂,可靠性差,不能自动检测故障,不利于单个路灯控制,存在电能消耗问题.
3)光控系统主要是采用光敏电阻与光电三极管组成的电子线路,对路灯进行控制.这种控制不能调整路灯亮度,而且调整智能化不够.
总之,传统路灯在路灯工作状态反馈方面存在滞后,路灯管控中心无法实时获取能耗、亮度等信息.如果路灯出现短路或者断路等故障,维修人员也不能及时检修,所以非智能化的路灯照明系统无法满足人们对路灯照明的需求.
随着我国工业经济不断发展,城镇规模逐渐增大,人们对路灯照明系统的需求日益迫切,要求其功能更加多样化,传统电路控制的路灯系统耗电量大、维修效率低下、智能化差的问题逐渐突显出来.
基于51单片机的开发环境Keil μVision4软件,具有Windows开发界面,而且支持C语言编程.可以编写模块化程序,便于调试,可以处理单片机传感器的各种数据类型,例如光线强度、温度和压力等,将这些数据转换成电信号,然后进行数字化处理,从而直接对硬件进行操作,编辑效率高,可移植性强,便于使用者在不同工作环境中开发使用[3-4].
因为51单片机的指令系统、内部结构相对简单,所以可以借助C语言程序设计实现很多实用功能.为了利于节能路灯程序适合国内使用,在单片机系统中增加了中文字符输入和输出功能,字库号选择高度为16点阵,宽度为8点阵.单片机系统分成两部分:一是用户控制界面(UI)部分;二是硬件执行部分.具体组成见表1.
表1 单片机模块组成及作用
用于路灯控制的单片机的硬件框架见图1.
图1 单片机系统硬件框架
单片机软件控制模块主要包括键盘驱动、液晶显示屏驱动、通信模块驱动、中文界面设计等.为了在单片机上实现中文输入,选择了汉字的Unicode编码.用户输入拼音字符,系统显示同音字供选择,然后在字库中查询点阵信息并在LCD上显示.其C语言代码为:
Struct Character{
char unicode[2];//中文字符的Unicode编码
int PositionX;
int PositionY;//获取字符的(x,y)坐标位置
};
struct Character *pCharactor;//指向结构数组的指针
图2为单片机中文字符输出流程.
图2 单片机系统中文字符输出流程
由于路灯控制系统程序比较复杂,将程序按照模块化进行处理.整个系统包括主模块、重置模块、光强检测模块、时间调控模块、键盘显示模块和自动纠错模块.C语言编写程序模块较为紧凑,而且与单片机的硬件系统没有太大关系,可以在不同单片机快速移植.表2是单片机主要模块及功能.
表2 控制系统模块组成及作用
单片机首先加电复位,对系统采取初始化处理,同时打开传感器接口、显示屏和定时器,实现模拟数值和数字信号的AD转换.采用光线检测模块采集路灯所处环境的亮度,时间控制模块提供亮灯的夜间时间控制.
如果路灯电源系统处于关闭状态,则调用电源控制模块接通电源.如果电源已经接通,则判断当时环境亮度是否过暗,然后调整路灯亮度.接着根据系统时间模块,判断路灯的工作时间段是否满足夜间条件.如果不满足,判断是否有人工手动控制,如果有手动模式,则进入键盘扫描阶段,等候键盘指令进行外部路灯亮度的控制.图3是路灯节能软件设计的整体流程.
图3 路灯节能软件整体流程
定时模块实现的功能是路灯开启和熄灭时间由用户做出选择,而且可以重复输入.程序利用了C语言的scanf函数,时间采用int数据类型[5-6].主要代码如下:
#include
#include
int main( )
{
int hour,minute,second,times;//定义整型数据
hour=0,minute=0,second=0;//数据赋初值
printf(“请输入关闭路灯时间(小时): ” );//提示用户输入x小时
scanf(“%d”,&hour);//输入小时
printf(“请输入关闭路灯时间(分钟): ”);//提示用户输入x分钟
scanf(“%d”,&minute);//输入x分钟
printf(“请输入关闭路灯时间(秒): ”);//提示用户输入x秒
scanf(“%d”,&second);//输入x秒
times=hour*3600+minute*60+second;//时间转换成秒为单位
char strTime[20];
itoa(times,strTime,10);//整型变量转成字符串
char strCommands[30]=“shutdown -s -t”;//关闭路灯时间
strcat(strCommands,strTime);//将关闭路灯时间与系统设定时间关联
printf(“路灯将在%d小时%d分钟%d秒后关闭! ”,hour,minute,second);//显示关灯剩余时间
system(strCommands);
return 0;
}
为了便于用户操控和选择,可以将代码编写到一个函数的函数体里面,用户只需进行数字选择0,1,2,3就可以进入关闭路灯、取消关闭、设置程序和退出程序的响应操作.主要代码如下:
void PrintUI
{
int choose=0;
printf(“--------------------------- ”);
printf(“欢迎使用路灯节能定时系统! 0 表示关闭路灯 1 表示取消关闭 2 表示进入设置程序 3 表示退出设置程序 ”);
printf(“--------------------------- ”);
printf(“请输入您的选择”);
scanf(“%d”,&choose);
switch(choose)
{
case choose=0:
system(“shutdown -s -t 100”);
case choose=1:
system(“shutdown -a”);
case choose=2:
system(“start -a”);
case choose=3:
system(“pause -a”);
default:printf("error ");
break;
}
在光控模块中,路灯环境光线强度的采集和信号转化是十分重要的.光线检测模块使用的是光电池传感器,可以将光强度通过光伏效应转化为电流信号,输出的光电流信号大小与光强度成正比关系[7-8].因此,单片机采集的电流信号与光线的强弱一一对应.由R2332模块向单片机AD转换口输入低于5 V的电压,然后转换成0~255的十进制数值,用于表征环境光线的强弱,并送到显示屏显示.为了更准确地探测光强度,选择单片机的8个端口均为光电流,并由程序确定其最快速的通道.主要程序代码如下:
void ADconvert()//调用内存信息,将模拟电流信号转换成数值信号
{
uchar m,n;// m,n无符号,数值范围为0~255
ADC-CONTR=0xe0;//选择最快光电转换,并打开电源
-nop-();//延迟等待
for(n=0;j<8;j++)//八个通道信号循环扫描
{
tempAD=0;//赋初值
for(m=0;n<10;n++)//采集10次
{ ADC-CONTR=0xe8+j;//启动转换器
-nop-();//延迟等待
while(!ADC-CONTR&0x10);//判断光电转换是否完成
temph=ADC-RES;
temp1[m]=temph;//读取光电转换信息
tempAD=temp1[m]+tempAD;
delays(10);//进程等待10 ms
tempAD=tempAD/10;
ADRES=tempAD;//采集8路信号装入ADRES中
return 0;
}
}
}
为了便于理解上述程序设计,用图4表示单片机对光电流采集的AD转换过程.
图4 光电流采集转换流程
获取了光电流信号后,可以设置输出控制程序,通过单片机控制系统输出稳定的电流,使其根据环境亮度调整路灯的工作电流,从而达到节能的目的.在程序中,如果外部亮度大于160,将降低路灯工作电流60.反之,则增加工作电流60.主要程序代码如下:
void extern_adjust( )//外部调节程序
{
int ADRES,current;
if(ADRES<255&& ADRES>160)//如果亮度在160与255之间,环境亮度偏高
{
current= ADRES-60;//减小路灯工作电流
}
else if(ADRES>0&& ADRES<160)//如果亮度在0与160之间,环境偏暗
{
current= ADRES-60;//增加路灯工作电流
}
return 0;
}
在物联网时代,可以通过网络对路灯遥控管理,节省人力和电力资源.要实现此功能,需在51单片机中增加串口Wi-Fi模块,将路灯光线传感器数据进行网络传输,通过TCP/IP协议和IEEE 802.11协议,传到用户终端.终端设备可以借助其获取信息,对路灯进行远程控制和数据交互,从而实现智能化和信息化管理.
ESP8226串口无线模块采用UART接口,体积小、功耗低,适合多种网络协议,其端口连接见表3.
表3 Wi-Fi模块端口与单片机连接
无线路灯系统的主体结构包括51单片机系统、电源接口、Wi-Fi模块、光线传感器模块以及A/D采集转换模块.系统框图见图5.
图5 无线路灯系统框架
将路灯连接到互联网上,实现联网功能,利用手机或电脑终端对其控制.终端接收程序用C语言进行编写,图6为系统运行流程.
图6 Wi-Fi模块工作流程
本文的路灯节能程序在时间控制方面更加精确,而且可以循环使用,增加了中间手动控制模块.另外,借助于单片机的光电转换模块,可以根据环境亮度调整路灯的工作电流.最后,借助于Wi-Fi模块,实现路灯管理模块的联网功能.路灯的亮暗变换也可以根据实际需求,使用终端设备程序进行操控.
一般小型路灯额定功率在30 W左右,每天按照明10 h计算,一个月大约9 kWh.安装节能系统,精确控制亮灯时间,根据环境亮度自动调整路灯功率,可以节省电能2 kWh以上.而且,采用Wi-Fi 模块的设计可以节省大量人力资源,实时观测和控制路灯的工作状况.综合起来,节省电力可达20%.
由于传统路灯的时间控制、光线控制不足,提出了一种基于Keil μVision4环境的单片机控制路灯系统.系统的软件结构是C语言程序,程序设计可以由STC-ISP软件通过串口RS2332连接单片机,烧录到单片机中,进行调试运行.借助于单片机的微处理器和光线传感器,可以精确控制路灯开关时间,调整路灯亮度.另外,通过通讯模块实现路灯管理的智能化和网络化.
51单片机具有强大的拓展功能.后期,将在前期工作的基础上,通过增加热释电传感器搜索路灯附近活动物体信号,从而控制路灯开关.这样,在夜间无人活动时,路灯可以降低照明亮度或者熄灭,从而更大限度地提升路灯的节能效果.另外,也可以增加温度传感器或图像传感器等设备,实现路灯故障、异常开启及设备异常的检测和报警,从而由智能化向智慧化改进.