基于COMS图像传感器的太阳自动跟踪控制器设计与实现
扫描二维码
随时随地手机看文章
因此需对光敏电阻的结构进行优化,而通过增加光敏电阻个数的方法则会造成装置结构复杂,成本提高。通过分析,采用图像传感器代替了光敏电阻检测太阳位置的变化,可以准确、快速地获得太阳位置信息,从而提高了跟踪精度。同时其结构简化,成本降低。
1 系统总体设计
该系统主要由平面镜跟踪装置、控制和驱动电路、方位限位电路、CMOS图像传感器(附巴德膜滤波片)等部分组成。系统总体设计框图如图1所示。跟踪装置实物图如图2所示,图像传感器固定在平面镜中心。图像传感器产品主要分为CCD,CMOS以及CIS传感器三种。目前CMOS型不仅价格低廉,而且已经实现数字化输出,软件可编程控制,大大降低系统设计的难度,提高系统设计的灵活性、抗干扰性和稳定性。
CMOS图像传感器满足系统设计要求。跟踪控制器采用罗技公司的QuickCam系列网络摄像头,具有功耗小、成本低、单一电源驱动、易于实现片上系统集成等特点。其开窗特征可以根据实际需要设置有效图像数据窗口的大小,从而避免了对无效数据的采集,减小存储空间。
由于太阳光十分强烈,因此在图像采集时,需要给摄像头加上巴德膜滤波片。实验表明加两层滤波片后,所得到的图像效果较佳。
系统工作过程为:启动时,上位机VC++调用视日运动规律中的sun函数,获取太阳的高度角与方位角,并转化为俯仰和水平步进电机的运行步数,通过RS 485总线与单片机通信,驱动跟踪装置运转,确保太阳光斑装入CMOS图像传感器视角内。
通过MCC实现VC++与Matlab联合编程,实时控制图像传感器采集太阳光斑图像。VC++程序设置为每隔5 min自动调用传感器拍一次照,传回的图像经Matlab处理,计算出太阳光斑质心坐标与图像中心坐标的偏差,转化为水平和俯仰电机需调整的步数,返回给VC++,再次送给单片机,驱动步进电机动作,进而细微调整平面镜跟踪装置,使太阳光斑始终在图像中心位置。
当厚云层挡住太阳时,或者由于其他原因太阳光斑无法出现在传感器视角内,则VC++调用时钟跟踪算法,继续跟踪,直到云层过去后,再重新使用图像传感器跟踪。
2 图像传感器实时跟踪太阳的设计
2.1跟踪控制器的首次定位
启动时,上位机中VC++程序首先调用视日运动规律中的sun函数(此后跟踪过程中无需再调用),返回此时的太阳高度角和方位角,换算成俯仰和方位步进电机所需的步数,数据送给单片机,驱动跟踪装置运转,确保太阳光斑装入图像传感器视角内。子程序得到所需要运行的步数,列出部分代码:
sun()函数中各个变量的含义:
而PC与单片机通信协议如下:
状态各位定义如下:
其中: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。
图像处理过程中运用了最大类间方差法Otsu,是根据最小二乘原理推导出来的,它基于直方图来选取阈值,其基本思路是将直方图在某一阈值处分割成两组,当被分成的两组的方差为最大时,得到阈值。方差是灰度分布均匀性一种量度,方差值越大说明构成图像的两部分差别越大,当部分目标错分为背景,或部分背景错分为目标都会导致两部分差别变小,所以使类间方差最大的分割意味着错分概率最小。Otsu算法具有简单、分割速度快等优点,对噪音和目标大小十分敏感,对于信噪比较高的图像具有很好的分割效果,被认为阈值自动选取的最优方法之一。
图4为拍摄到太阳光斑存在干扰时的图像,对比图4(a)和图4(b)可发现用Otsu法分割处理后,能有效消除图像中细微干扰。图4(c)由Otsu法处理后得到图4(d),光斑图像坐标(160,120),光斑个数为2,对应FYP和FWP为O。由此判断拍摄的图像存在明显干扰,程序将FYP和FWP置为O,确保系统的可靠性。
一般情况下使用图像传感器跟踪,但当阴天或出现厚云层时,太阳光斑无法出现在传感器视角内,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所示,上位机控制平台具有实现复位,太阳位置的跟踪、手动校准。其中“设置”按钮,可进行波特率、调整时间间隔等的设置。
3 实验数据分析
实验在苏州大学现代光学所内进行,数据观察时间为12月下旬至1月上旬。因数据量大,表1只列出2010年1月7日记录的部分数据。具体测试方法如下:
(1)参数设置。包括设置当前时间、波特率、通信端口、图像传感器运行时间间隔等。
(2)运行VC++程序。上位机中VC++程序首先调用sun函数,返回此时的太阳高度角和方位角,换算成俯仰和方位步进电机所需的步数。只记录下由Matlab生成txt文件中的需要校正的步数。
(3)系统自动校正完成后,Matlab再次写txt文件,保存校正后太阳光斑的图像坐标,以及光斑质心坐标与图像中心坐标的偏差。此时记录。
(4)每隔5 min重复(2),(3)步骤。
图6和图7给出了太阳高度角和方位角的误差曲线。由曲线看出,采用基于图像传感器的太阳自动跟踪控制器后绝对误差较小且保持相对稳定。通过对实测数据的分析表明:在该系统中,高度角跟踪绝对误差小于0.12°,方位角跟踪绝对误差小于0.08°,采用图像传感器对太阳进行跟踪后,得到了很高的精度,且可靠性提高。
4 结语
该跟踪控制器可以连续跟踪太阳的角度变化,更准确实现对太阳运动的跟踪。当出现阴天或多云情况下,系统调用时钟算法,使得装置连续跟踪。经过实验测试,各项指标均达到了设计要求。
控制器采用低速处理器实现了对太阳光斑的采集及定位,可应用于各种太阳能设备,提高太阳能的利用率。如果使用步进电动机的微步距控制技术,即用细分技术实现将步进电动机一个整步均分为若干个更细的微步,可以使整个控制系统更加精准,可用来实现对各种点光源的检测。