基于C语言的路灯节能程序设计

2022-05-20 01:33任美臣
平顶山学院学报 2022年2期
关键词:C语言亮度路灯

任 刚,任美臣

(1.淮南师范学院 电子工程学院,安徽 淮南 232001;2.上海海洋大学 信息学院,上海 201306)

0 引言

路灯作为人们生活中必不可少的基础设施,直接反映一个地方的经济水平.我国目前城镇化不断发展,路灯的使用数量也在与日俱增.2006—2017年,我国路灯数量从1 283.8万增加到2 683.4万,年均增长率为6.75%,在电能消耗方面非常巨大[1-2].我国部分地区路灯管理方面还存在很多问题:

1)控制系统落后.由于技术方面的原因,有些地区路灯还是靠工作人员手动控制,而且存在“一亮全亮,一灭全灭”的现象.这种落后的路灯控制,精确度不高,既不能充分发挥路灯的照明功能,也造成了不必要的电能浪费.

2)智能化落后.采用原始的电子定时装置控制路灯开关,用户选择性不大,操作复杂,可靠性差,不能自动检测故障,不利于单个路灯控制,存在电能消耗问题.

3)光控系统主要是采用光敏电阻与光电三极管组成的电子线路,对路灯进行控制.这种控制不能调整路灯亮度,而且调整智能化不够.

总之,传统路灯在路灯工作状态反馈方面存在滞后,路灯管控中心无法实时获取能耗、亮度等信息.如果路灯出现短路或者断路等故障,维修人员也不能及时检修,所以非智能化的路灯照明系统无法满足人们对路灯照明的需求.

随着我国工业经济不断发展,城镇规模逐渐增大,人们对路灯照明系统的需求日益迫切,要求其功能更加多样化,传统电路控制的路灯系统耗电量大、维修效率低下、智能化差的问题逐渐突显出来.

基于51单片机的开发环境Keil μVision4软件,具有Windows开发界面,而且支持C语言编程.可以编写模块化程序,便于调试,可以处理单片机传感器的各种数据类型,例如光线强度、温度和压力等,将这些数据转换成电信号,然后进行数字化处理,从而直接对硬件进行操作,编辑效率高,可移植性强,便于使用者在不同工作环境中开发使用[3-4].

1 单片机与中文输入实现

因为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 单片机系统中文字符输出流程

2 路灯控制系统总体设计方案

由于路灯控制系统程序比较复杂,将程序按照模块化进行处理.整个系统包括主模块、重置模块、光强检测模块、时间调控模块、键盘显示模块和自动纠错模块.C语言编写程序模块较为紧凑,而且与单片机的硬件系统没有太大关系,可以在不同单片机快速移植.表2是单片机主要模块及功能.

表2 控制系统模块组成及作用

单片机首先加电复位,对系统采取初始化处理,同时打开传感器接口、显示屏和定时器,实现模拟数值和数字信号的AD转换.采用光线检测模块采集路灯所处环境的亮度,时间控制模块提供亮灯的夜间时间控制.

如果路灯电源系统处于关闭状态,则调用电源控制模块接通电源.如果电源已经接通,则判断当时环境亮度是否过暗,然后调整路灯亮度.接着根据系统时间模块,判断路灯的工作时间段是否满足夜间条件.如果不满足,判断是否有人工手动控制,如果有手动模式,则进入键盘扫描阶段,等候键盘指令进行外部路灯亮度的控制.图3是路灯节能软件设计的整体流程.

图3 路灯节能软件整体流程

2.1 定时模块程序设计

定时模块实现的功能是路灯开启和熄灭时间由用户做出选择,而且可以重复输入.程序利用了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;

}

2.2 光控模块程序设计

在光控模块中,路灯环境光线强度的采集和信号转化是十分重要的.光线检测模块使用的是光电池传感器,可以将光强度通过光伏效应转化为电流信号,输出的光电流信号大小与光强度成正比关系[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;

}

2.3 Wi-Fi模块程序设计

在物联网时代,可以通过网络对路灯遥控管理,节省人力和电力资源.要实现此功能,需在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模块工作流程

3 结论

本文的路灯节能程序在时间控制方面更加精确,而且可以循环使用,增加了中间手动控制模块.另外,借助于单片机的光电转换模块,可以根据环境亮度调整路灯的工作电流.最后,借助于Wi-Fi模块,实现路灯管理模块的联网功能.路灯的亮暗变换也可以根据实际需求,使用终端设备程序进行操控.

一般小型路灯额定功率在30 W左右,每天按照明10 h计算,一个月大约9 kWh.安装节能系统,精确控制亮灯时间,根据环境亮度自动调整路灯功率,可以节省电能2 kWh以上.而且,采用Wi-Fi 模块的设计可以节省大量人力资源,实时观测和控制路灯的工作状况.综合起来,节省电力可达20%.

由于传统路灯的时间控制、光线控制不足,提出了一种基于Keil μVision4环境的单片机控制路灯系统.系统的软件结构是C语言程序,程序设计可以由STC-ISP软件通过串口RS2332连接单片机,烧录到单片机中,进行调试运行.借助于单片机的微处理器和光线传感器,可以精确控制路灯开关时间,调整路灯亮度.另外,通过通讯模块实现路灯管理的智能化和网络化.

51单片机具有强大的拓展功能.后期,将在前期工作的基础上,通过增加热释电传感器搜索路灯附近活动物体信号,从而控制路灯开关.这样,在夜间无人活动时,路灯可以降低照明亮度或者熄灭,从而更大限度地提升路灯的节能效果.另外,也可以增加温度传感器或图像传感器等设备,实现路灯故障、异常开启及设备异常的检测和报警,从而由智能化向智慧化改进.

猜你喜欢
C语言亮度路灯
用于遥感影像亮度均衡的亮度补偿方法
一招让显示器好用百倍
“C语言程序设计”课程混合教学探索
基于C语言的计算机软件编程技术探究
本本亮度巧调节,工作护眼两不误
中职C语言单片机课堂教学中的趣味性探讨
为什么高速公路上不用路灯照明
亮度一样吗?
计算机原理中C语言的应用价值
傍晚,路灯为什么能自动亮起来?