发布时间:2018/8/15 8:49:46 来源:本站
当前随着我国城市化建设进程的加速以及城市基建设施建设的加快,城市对照明产品的市场需求逐渐扩大。在能源紧张的大背景下,传统照明设备耗能巨大,且存在巨大的能源浪费,还影响城市生态环境,这明显不符合我国能源利用的发展方向,同时也极大的限制了照明设备的利用效率。而太阳能路灯的出现,有效的弥补了上述不足。
如果将我国2000万盏路灯全部改用太阳能路灯,则可以减少2580万吨二氧化碳的排放,相当于103亿美元二氧化碳减排成本。因此,投资太阳能路灯行业可以产生较大的社会效益与经济效益。
太阳能路灯发展的主要障碍在于成本,相对于普通路灯,太阳能路灯具有太阳能板,蓄电池,控制板三大部件,其中太阳能板占据了大量成本。为了降低成本,部分厂商采用面积更小的太阳能板,降低充电功率,但这也导致路灯的照明时间降低,实用价值下降。
本文介绍的系统通过让太阳能板智能转向,产生最大化的充电效率。使太阳能路灯可以使用面积更小的太阳能板来实现更高的充电效率,降低太阳能路灯的成本,从而缓解太阳能路灯高成本的困难,促进太阳能路灯的普及使用。
通过自行设计的360°光线传感器阵列获取各个方位上的光照强度模拟信号,单片机读取到信号后进行模数转换,并使用传感器校正算法进行运算和校正。判断出光照强度最大的方向,然后通过驱动电路控制随动系统使太阳能电池板转向,对正光照强度最强的方位。同时,充电控制系统也在监测太阳能电池板产生的电压,当太阳能电池板产生的电压满足充电需求时,打开充电电路为电池组进行充电。
图1 系统总体架构图
3.1光照强度追踪
要让太阳能电池板能够面对光线最强的那一个方向,系统必须在所处的环境中寻找到最强光源方向。使用单片机读取传感器阵列上的32个光敏传感器数值,并且使用校正算法进行校正后,找到光线最强的方向,确定太阳能电池板需要面向的方向。
3.2充电及充电控制
太阳能电池只有在有光照的环境下才能产生电力,把这些能量收集起来,在需要的时候来使用它,也就是夜间的路灯照明。太阳能电池板在阴天以及其他非阳光直射环境下,也是能够产生一定的电流和电压的,有时能满足充电条条件,有时则不能。如果满足条件而没有充电,会导致充电效率低下,浪费太阳能资源。反之如果不满足条件时打开了充电电路,反而会造成电流倒流,太阳能电池板变为用电设备,导致太阳能电池板发热或者烧毁。
所以必须让系统监控太阳能电池板产生的电压值和光敏传感器的读数,只有条件满足时才可以打开电路充电。
3.3人机交互
简单的交互系统利于故障时的判断和检修,在一个简单的液晶显示屏上显示出光照强度读数、太阳能电池板电压、系统运行状态等系统信息,可以让安装和维护人员快速的进行安装实施和故障排除。
3.4太阳能电池板方向控制
当确定了光线最强的方向后,单片机还需要控制随动系统,让太阳能电池板转动,面向光线最强的方向,产生最大的电压和电流,以达到最佳充电效率。
4.1光线感应系统设计
在室外环境,太阳能电池板所能利用的光线的所有方向大概是一个半球形,所以组建一个半球形传感器阵列就可以监测到整个环境中的有效光线的光照强度情况。
将一个半球形物体以经纬线的划分为多个区域,每个区域对应一个光线的入射区域,在每个区域中心打孔安装光敏传感器,监测对应区域的光线强度我们就能够知道哪片区域是光线强度最大的,如果需要更高的精度,则进行更加精细的划分,安装更多传感器即可,对于智能路灯来说,32个传感器已经完全满足其精度需求。如图2所示:
图2 光线感应系统设计示意图
光敏电阻是几乎没有指向性的,也就是说它对来自于它正面180度范围内的光线都比较敏感,当光源距离相同但是角度不同的情况下光敏电阻的阻值变化不明显。
为每个光敏电阻加装一定长度的遮光管,使光敏传感器有更好的指向性。如图3所示:
图3 光敏电阻安装示意图
4.2太阳能电池板随动系统设计
太阳能电池板需要灵活准确的对准光线最强的位置,除了需要水平方向的转动,还要能够调整和控制垂直方向的仰角,使用多个舵机组成可在纵向180°横向360°范围内随意控制太阳能电池板方向的云台。如图4所示:
图4 太阳能电池板随动系统设计图
4.3充电系统设计
太阳能电池板产生的电压和电流并不一定时刻满足充电所需的条件,必须通过单片机进行判断,当满足条件时,才进行充电。为了能够使充电效率更好,并使充电能够持续和稳定的进行,使用一个稳压模块,让太阳能电池板的可接受电压在一个更为宽广的范围,阴天光照强度小的时候进行升压,光线较为强烈的时候则相应降低电压。
5.1模拟传感器误差校正算法
光敏传感器的返回值是一个DC 0-5v的模拟信号,接入相同的+5v电压,在三个不同逐渐降低强度的光源照射下,得到如下的测量值,如表1所示:
表1 不同光照强度光敏传感器测量数据
从表中可以看出,部分传感器存在较大的误差,需要进行传感器校正,才能获得准确的光线强度信息,其具体算法如下:
获得数据为:
{a1,a2……a14,15},{b1,b2……b14,b15},{c1,c2……c14,c15},
取平均值为
∑ai/15,其中i=1,2,...,15
∑bi/15,其中i=1,2,...,15
∑ci/15,其中i=1,2,...,15
平均值的差值绝对值
|ai -∑ai/15 |,其中i=1,2,...,15
|bi -∑bi/15|,其中i=1,2,...,15
|ci -∑ci/15|,其中i=1,2,...,15
最后得到每个传感器在三组数据中与均值的误差值之和
Δi= (|ai -∑ai/15|)+( |bi -∑bi/15|) +(|ci -∑ci/15|)
结果如表2中的数据:
表2 光敏传感器测量误差值之和
误差值较大的传感器分别为1,2,3,4,5,14号,需要对这6个传感器进行数据校正。
排除误差较大的传感器之后,用剩下较为准确的传感器的均值作为校正的参考值
∑ai/9,其中i=6,7,8,9,10,11,12,13,15
∑bi/9,其中i=6,7,8,9,10,11,12,13,15
∑ci/9,其中i=6,7,8,9,10,11,12,13,15
每个需要校正的传感器对应每组数据都会得到一个误差值
aj-∑ai/9,其中i=6,7,8,9,10,11,12,13,15;j=1,2,3,4,5,14
bj-∑bi/9,其中i=6,7,8,9,10,11,12,13,15;j=1,2,3,4,5,14
cj-∑ci/9,其中i=6,7,8,9,10,11,12,13,15;j=1,2,3,4,5,14
三个误差值的平均值为:
Δj= (aj-∑ai/9)+( bj-∑bi/9) +( cj-∑ci/9) 其中i=6,7,8,9,10,11,12,13,15;j=1,2,3,4,5,14
通过计算,得到表3中的数据
表3 光敏传感器采样修正值
A/D芯片采样出来后的数据是采样值,获得的传感器的修正值是以电压值为基础的情况下计算出来的,需要把修正值转换为采样值后才能进行校正。5v/1024=0.00488,每1单位的采样值对应0.00488v电压,计算出采样修正值,如表4:
表4 光敏传感器电压修正值
正数误差是测量值较实际过大,负数则是测量值较实际过小,修正时正数减去,负数加上。
5.2光线检测及云台控制
读取相应传感器电压后使用校正算法进行校正,就知道哪个传感器接受到的光照强度最大,代码如下:
void target()//定义寻找最强光源函数
{a22=analogRead(0);//读取光敏传感器数值
a23=analogRead(1);
a24=analogRead(2);
a25=analogRead(3);
a22=a22-68;//传感器校正
a23=a23-55;
a24=a24-111;
a25=a25+84;
a26=a26+74;
a35=a35-49;
highest=max(a22,a23);//查找哪个传感器数值最大
highest=max(highest,a24);
highest=max(highest,a25);
highest=max(highest,a26);
highest=max(highest,a27);
}
知道光线强度最大的传感器是哪个后,就知道了太阳能电池板需要面对的方位,这时单片机只需要通过串口向控制系统发送指令就可以使太阳能电池板指向相应位置,核心代码示例如下:
if (highest==a22)// 当22号传感器为最大值传感器时
{Serial.println("#2P1397#18P1513#30P1563T2000");//发送对应的9个舵机的位置信息
num=22; }//最大值传感器是22
if (highest==a23) //当23号传感器为最大值传感器时
{Serial.println("#0P522#1P799#2P1121#16P518#17P677#18P1741#28P525#29P905#30P1741T2000");//发送对应的9个舵机的位置信息
num=23; }//最大值传感器是23
5.3电压监测及充电控制
void control()//定义函数
{if (highest>400)//当太阳能电池板产生的电压大于4V时打开开关
{ digitalWrite(sw1,LOW);//充电开关打开
if (flag==0);//标志变量
{flag=1;}
else
{ digitalWrite(sw1,HIGH) };//充电开关关闭
if (highest<30)//如果最大光线值小于30
{digitalWrite(sw2,LOW) };//打开led开关
else
{ digitalWrite(sw2,HIGH) };}//关闭led开关
5.4主函数
功能分为三个函数:
found()--寻找光线最强的方向并改变太阳能电池板方向
lcd()—人机交互界面显示数据刷新
switch()—充放电控制系统读取环境参数并且自动进行调整
在主函数中设置10秒延迟,每10秒钟进行一次光线变化的采样,并且根据采样结果调整太阳能电池板位置,更新人机交互界面的显示信息,在条件满足的情况下打开充电电路,或者打开路灯照明,主函数如下:
void loop(){//主函数
found();
lcd();
switch();
delay(10000); }//延迟2秒
系统调试结束后,对不同类型的光源位置进行测试,并记录数据最大传感器返回的电压,得到表6.1的数据:
表5 不同环境与光照条件下系统测试数据
结果显示,智能太阳能路灯系统工作正常,完成了设计时的基本要求。
通过在制作出系统模型后的多次测试中,传感器阵列设计合理,模拟传感器相互校正准确,整个系统的运转良好。本文所设计的传感器阵列及校正算法都能够精确的支持智能路灯系统的运行,不管在哪种天气环境中,系统都能运转正常。
![]() |
||
|
||