基于COMS图像传感器的太阳自动跟踪控制器设计与实现
摘 要:设计一种基于COMS图像传感器的太阳自动跟踪控制器,上位机通过MCC实现VC++与Matlab联合编程,实时控制图像传感器获取太阳光斑图像。经Matlab计算,得到太阳光斑质心坐标与图像中心坐标的偏差,转化为水平和俯仰的步进电机需调整的步数,进而实时调整平面镜跟踪装置,使太阳光斑始终在图像中心位置。实验结果表明,该装置实现了太阳自动跟踪的目的,具有较高的跟踪精度。
关键词:太阳自动跟踪; CMOS图像传感器; 步进电机; VC++
中图分类号:TK513.4 文献标识码:A
文章编号:1004-373X(2010)11-0125-04
Design and Realization of Solar Auto-tracking Controller Based on CMOS Image Sensor
DU Wei-wei,ZOU Li-xin,YOU Jin-zheng,ZHOU Tong
(Department of Physics Science and Technology, Soochow University, Suzhou 215006, China)
Abstract: A solar automatic tracking controller based on CMOS image sensor is designed. Its host computer achieves a joint programming of VC++ and Matlab based on MCC, and obtains the sun spot image by real-timely controlling the image sensor. The deviation between sun′s mass center coordinates and image center coordinates is calculated by Matlab. The calculation is converted into the steps of the level and pitch stepper motor to be adjusted. Real-time adjustment of plane mirror tracking device is achieved, so that sun spot has always being the center of the image. The experimental results show that the device automatically tracks the sun,and has high tracking accuracy.
Keywords: solar automatic tracking; CMOS image sensor; stepper motor; VC++
太阳跟踪的方法很多,主要可以分为两种方式,即光电跟踪和根据视日运动轨迹跟踪。光电跟踪装置优点是灵敏度高,结构设计简单,能通过反馈消除累计误差,具有较大的优势。其关键部件是光电传感器,常用的是光敏电阻[1]。由于光敏电阻安放位置的不连续和环境散射光的影响,系统不能连续跟踪太阳,精度有限。因此需对光敏电阻的结构进行优化,而通过增加光敏电阻个数的方法则会造成装置结构复杂,成本提高。通过分析,采用图像传感器代替了光敏电阻检测太阳位置的变化,可以准确、快速地获得太阳位置信息,从而提高了跟踪精度。同时其结构简化,成本降低。
1 系统总体设计
该系统主要由平面镜跟踪装置、控制和驱动电路、方位限位电路、CMOS图像传感器(附巴德膜滤波片)等部分组成。系统总体设计框图如图1所示。
跟踪装置实物图如图2所示,图像传感器固定在平面镜中心。图像传感器产品主要分为CCD,CMOS以及CIS传感器三种。目前CMOS型不仅价格低廉,而且已经实现数字化输出,软件可编程控制,大大降低系统设计的难度,提高系统设计的灵活性、抗干扰性和稳定性。
图1 系统的总体框图
图2 太阳自动跟踪装置实物图
CMOS图像传感器满足系统设计要求。跟踪控制器采用罗技公司的QuickCam系列网络摄像头,具有功耗小、成本低、单一电源驱动、易于实现片上系统集成等特点。其开窗特征可以根据实际需要设置有效图像数据窗口的大小,从而避免了对无效数据的采集,减小存储空间。
由于太阳光十分强烈,因此在图像采集时,需要给摄像头加上巴德膜滤波片。实验表明加两层滤波片后,所得到的图像效果较佳。
系统工作过程为:启动时,上位机VC++调用视日运动规律中的sun函数,获取太阳的高度角与方位角[2],并转化为俯仰和水平步进电机的运行步数,通过RS 485总线与单片机通信,驱动跟踪装置运转,确保太阳光斑装入CMOS图像传感器视角内。
通过MCC实现VC++与Matlab联合编程,实时控制图像传感器采集太阳光斑图像。VC++程序设置为每隔5 min自动调用传感器拍一次照,传回的图像经Matlab处理,计算出太阳光斑质心坐标与图像中心坐标的偏差,转化为水平和俯仰电机需调整的步数,返回给VC++, 再次送给单片机,驱动步进电机动作,进而细微调整平面镜跟踪装置,使太阳光斑始终在图像中心位置。
当厚云层挡住太阳时,或者由于其他原因太阳光斑无法出现在传感器视角内,则VC++调用时钟跟踪算法,继续跟踪,直到云层过去后,再重新使用图像传感器跟踪。
2 图像传感器实时跟踪太阳的设计
2.1 跟踪控制器的首次定位
启动时,上位机中VC++程序首先调用视日运动规律中的sun函数(此后跟踪过程中无需再调用),返回此时的太阳高度角和方位角,换算成俯仰和方位步进电机所需的步数,数据送给单片机,驱动跟踪装置运转,确保太阳光斑装入图像传感器视角内。子程序得到所需要运行的步数,列出部分代码:
void CTimertestDlg::GetParam()
{
CTime time(CTime::GetCurrentTime());
tm t=*(time.GetGmtTm()); //得到格林威治时间
sun(t.tm_year+1900,t.tm_mon+1,t.tm_mday,t.tm_hour+t.tm_min/60.+t.tm_sec/3600.,Elong,Lat,&SH,&SA);
//返回此时太阳方位角和高度角,启动时调用一次sun函数,此后跟踪过程不调用
….
fA_Step= SH /double(AR);// AR值是(1.8/100)°
%即经过减速箱之后的方位电机步距角;
fH_Step= SA /double(HR); //HR的值为(1.8/52)°
%即经过减速箱之后的俯仰电机步距角;
modf(fA_Step,&fInteger); TRACE(″uA_Step :″);
uA_Step=GetInteger(&fInteger);
//方位步进电机需要运行的步数保存在uA_Step
modf(fH_Step,&fInteger); TRACE(″uH_Step :″);
uH_Step=GetInteger(&fInteger); //俯仰步进电机需要运行的步数保存在uH_Step
…}
sun()函数中各个变量的含义:
**t.tm_year+1900,t.tm_mon+1,t.tm_mday, %格林威治日历
**t.tm_hour+t.tm_min/60.+t.tm_sec/3600., %具体到时分秒
**Elong, Lat%当地的经度和纬度
** &SH,&SA %返回此时太阳高度角和方位角
而PC与单片机通信协议如下:
void CTimertestDlg::AssembleData(BOOL bReset)
{
Command[0]=(unsigned char)0xAA; //包头1,固定为0xAA
Command[1]=(unsigned char)0x55; //包头2,固定为0x55
Command[2]=(unsigned char)Addr&(unsigned char)0x1f;//状态
Command[3]=(unsigned char)(uA_Step&0xff);//方位低8位
Command[4]=(unsigned char)((uA_Step&0xff00)>>8);//高8位
Command[5]=(unsigned char)(uH_Step&0xff); //俯仰低8位
Command[6]=(unsigned char)((uH_Step&0xff00)>>8);//高8位
TRACE(″AH is %x AL is %x HH is %x HL is %x″,Command[2],Command[1],Command[4],Command[3]);}
%这里要求先传送包头,最后传送包尾
状态各位定义如下:
76543210
保留0:正常;
1:水平复位0:正常;
1:俯仰复位地址
其中:6,5必须同时为1时,系统复位。
2.2 图像传感器的自动跟踪原理
VC++设置为每隔5 min自动调用传感器拍一次照,传回的图像经Matlab处理,计算出太阳质心坐标与图像中心坐标的偏差,并转化为水平和俯仰电机需调整的步数,再次送给单片机驱动步进电机,进而细微调整平面镜跟踪装置,实现对太阳连续自动跟踪。
FYP定义为俯仰步进电机应运行步数,FWP表示方位步进电机应运行步数。方位步进电机每动作一步实际为(1.8/100)°,俯仰步进电机每动作一步实际为(1.8/52)°。当系统实际运行时,光斑在图像中心时设定坐标为(160,120),向下移动出图像FYP为50;向右移动出图像FWP为160。若太阳光斑不在中心点时,如图3所示,经Matlab程序执行结果为光斑图像坐标(115,117),光斑个数为1,对应FYP为1,FWP为-46。
图3 太阳光斑不在中心点的图像
图像处理过程中运用了最大类间方差法Otsu[3],是根据最小二乘原理推导出来的,它基于直方图来选取阈值,其基本思路是将直方图在某一阈值处分割成两组,当被分成的两组的方差为最大时,得到阈值。方差是灰度分布均匀性一种量度,方差值越大说明构成图像的两部分差别越大, 当部分目标错分为背景,或部分背景错分为目标都会导致两部分差别变小,所以使类间方差最大的分割意味着错分概率最小。Otsu算法具有简单、分割速度快等优点,对噪音和目标大小十分敏感,对于信噪比较高的图像具有很好的分割效果,被认为阈值自动选取的最优方法之一。
图4为拍摄到太阳光斑存在干扰时的图像,对比图4(a)和图4(b)可发现用Otsu法分割处理后,能有效消除图像中细微干扰。图4(c)由Otsu法处理后得到图4(d),光斑图像坐标(160,120),光斑个数为2,对应FYP和FWP为0。由此判断拍摄的图像存在明显干扰,程序将FYP和FWP置为0,确保系统的可靠性。
图4 跟踪过程中存在干扰时的太阳光斑图像
一般情况下使用图像传感器跟踪,但当阴天或出现厚云层时,太阳光斑无法出现在传感器视角内,VC++立即调用时钟算法,根据太阳在天空中每分钟运动的角度,计算出跟踪控制器5 min应转动的角度,从而确定出步进电机的转速,使得装置根据太阳位置而相应变动。
2.3 系统软件设计
软件的主要部分为PC机部分,PC机环境为Windows XP,使用软件Microsoft Visual C++6.0和Matlab 7.0。启动时VC++负责调用一次sun函数,返回当前时刻太阳的高度角和方位角,并转化为FYP和FWP运行步数。通过调用Windows API函数,实现上位机与单片机间数据的传递。通过MCC实现VC++与Matlab的联合编程,控制摄像头采集太阳光斑图像,根据太阳光斑质心坐标与图像中心坐标的偏差转化为FYP和FWP校正步数。
上位机可执行程序控制界面如图5所示,上位机控制平台具有实现复位,太阳位置的跟踪、手动校准。其中“设置”按钮,可进行波特率、调整时间间隔等的设置。
图5 上位机主控界面
3 实验数据分析
实验在苏州大学现代光学所内进行,数据观察时间为12月下旬至1月上旬。因数据量大,表1只列出2010年1月7日记录的部分数据。具体测试方法如下[4]:
(1) 参数设置。包括设置当前时间、波特率、通信端口、图像传感器运行时间间隔等。
(2) 运行VC++程序。上位机中VC++程序首先调用sun函数,返回此时的太阳高度角和方位角,换算成俯仰和方位步进电机所需的步数。只记录下由Matlab生成txt文件中的需要校正的步数。
(3) 系统自动校正完成后,Matlab再次写txt文件,保存校正后太阳光斑的图像坐标,以及光斑质心坐标与图像中心坐标的偏差。此时记录。
(4) 每隔5 min重复(2),(3)步骤。
图6和图7给出了太阳高度角和方位角的误差曲线。由曲线看出,采用基于图像传感器的太阳自动跟踪控制器后绝对误差较小且保持相对稳定。
图6 俯仰(高度角)实际绝对误差值曲线
表1 太阳自动跟踪系统实测数据
时间FYP/步校正FWP/步校正太阳光斑图像坐标(校正以后)FYD/步误差FWD/步误差
11:0017(161,118)-21
11:1518(164,122)-14
11:30014(162,118)-22
11:4505(162,119)02
12:0018(160,120)02
12:15-111(161,121)10
12:30-110(160,119)00
12:45-18(163,121)03
13:00-17(162,120)02
13:1506(162,121)-12
13:30-17(161,121)01
13:45-19(159,121)1-1
14:00-29(159,121)0-1
14:15-15(159,128)-3-2
14:30-15(162,121)02
图7 方位(方位角)跟踪误差曲线
通过对实测数据的分析表明:在该系统中,高度角跟踪绝对误差小于0.12°,方位角跟踪绝对误差小于0.08°,采用图像传感器对太阳进行跟踪后,得到了很高的精度,且可靠性提高。
4 结 语
该跟踪控制器可以连续跟踪太阳的角度变化,更准确实现对太阳运动的跟踪。当出现阴天或多云情况下,系统调用时钟算法,使得装置连续跟踪。经过实验测试,各项指标均达到了设计要求。
控制器采用低速处理器实现了对太阳光斑的采集及定位,可应用于各种太阳能设备,提高太阳能的利用率。如果使用步进电动机的微步距控制技术,即用细分技术实现将步进电动机一个整步均分为若干个更细的微步,可以使整个控制系统更加精准,可用来实现对各种点光源的检测。
参考文献
[1]苑玮琦,刘丽微.基于视觉的太阳方位检测装置的研究[J].计算机测量与控制,2008,16(7):911-913.
[2]吴静.太阳自动跟踪系统的研究[D].重庆:重庆大学,2008.
[3]付忠良.图像阈值选取方法——Otsu方法的推广[J].计算机应用,2000,20(5):37-39.
[4]刘京诚,任松林,李敏,等.智能型双轴太阳跟踪控制系统的设计[J].传感器与微系统,2008,27(9):69-71.
[5]刘巍,王志超,沈垣,等.太阳自动跟踪系统的研究与设计[J].水电能源科学,2009(27):215-218.
[6]吕文华,贺晓雷,于贺军,等.全自动太阳跟踪器的研制和应用[J].光学精密工程,2008,12(16):2544-2550.
[7]HOSSAIN Eklas,MUHIDA Riza,ALI Ahad. Efficiency improvement of solar cell using compound parabolic concentrator and sun tracking system[C]//IEEE Electrical Power & Energy Conference,2008.