摘 要:設(shè)計一種基于COMS圖像傳感器的太陽自動跟蹤控制器,上位機通過MCC實現(xiàn)VC++與Matlab聯(lián)合編程,實時控制圖像傳感器獲取太陽光斑圖像。經(jīng)Matlab計算,得到太陽光斑質(zhì)心坐標(biāo)與圖像中心坐標(biāo)的偏差,轉(zhuǎn)化為水平和俯仰的步進電機需調(diào)整的步數(shù),進而實時調(diào)整平面鏡跟蹤裝置,使太陽光斑始終在圖像中心位置。實驗結(jié)果表明,該裝置實現(xiàn)了太陽自動跟蹤的目的,具有較高的跟蹤精度。
關(guān)鍵詞:太陽自動跟蹤; CMOS圖像傳感器; 步進電機; VC++
中圖分類號:TK513.4 文獻標(biāo)識碼: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++
太陽跟蹤的方法很多,主要可以分為兩種方式,即光電跟蹤和根據(jù)視日運動軌跡跟蹤。光電跟蹤裝置優(yōu)點是靈敏度高,結(jié)構(gòu)設(shè)計簡單,能通過反饋消除累計誤差,具有較大的優(yōu)勢。其關(guān)鍵部件是光電傳感器,常用的是光敏電阻[1]。由于光敏電阻安放位置的不連續(xù)和環(huán)境散射光的影響,系統(tǒng)不能連續(xù)跟蹤太陽,精度有限。因此需對光敏電阻的結(jié)構(gòu)進行優(yōu)化,而通過增加光敏電阻個數(shù)的方法則會造成裝置結(jié)構(gòu)復(fù)雜,成本提高。通過分析,采用圖像傳感器代替了光敏電阻檢測太陽位置的變化,可以準(zhǔn)確、快速地獲得太陽位置信息,從而提高了跟蹤精度。同時其結(jié)構(gòu)簡化,成本降低。
1 系統(tǒng)總體設(shè)計
該系統(tǒng)主要由平面鏡跟蹤裝置、控制和驅(qū)動電路、方位限位電路、CMOS圖像傳感器(附巴德膜濾波片)等部分組成。系統(tǒng)總體設(shè)計框圖如圖1所示。
跟蹤裝置實物圖如圖2所示,圖像傳感器固定在平面鏡中心。圖像傳感器產(chǎn)品主要分為CCD,CMOS以及CIS傳感器三種。目前CMOS型不僅價格低廉,而且已經(jīng)實現(xiàn)數(shù)字化輸出,軟件可編程控制,大大降低系統(tǒng)設(shè)計的難度,提高系統(tǒng)設(shè)計的靈活性、抗干擾性和穩(wěn)定性。
圖1 系統(tǒng)的總體框圖
圖2 太陽自動跟蹤裝置實物圖
CMOS圖像傳感器滿足系統(tǒng)設(shè)計要求。跟蹤控制器采用羅技公司的QuickCam系列網(wǎng)絡(luò)攝像頭,具有功耗小、成本低、單一電源驅(qū)動、易于實現(xiàn)片上系統(tǒng)集成等特點。其開窗特征可以根據(jù)實際需要設(shè)置有效圖像數(shù)據(jù)窗口的大小,從而避免了對無效數(shù)據(jù)的采集,減小存儲空間。
由于太陽光十分強烈,因此在圖像采集時,需要給攝像頭加上巴德膜濾波片。實驗表明加兩層濾波片后,所得到的圖像效果較佳。
系統(tǒng)工作過程為:啟動時,上位機VC++調(diào)用視日運動規(guī)律中的sun函數(shù),獲取太陽的高度角與方位角[2],并轉(zhuǎn)化為俯仰和水平步進電機的運行步數(shù),通過RS 485總線與單片機通信,驅(qū)動跟蹤裝置運轉(zhuǎn),確保太陽光斑裝入CMOS圖像傳感器視角內(nèi)。
通過MCC實現(xiàn)VC++與Matlab聯(lián)合編程,實時控制圖像傳感器采集太陽光斑圖像。VC++程序設(shè)置為每隔5 min自動調(diào)用傳感器拍一次照,傳回的圖像經(jīng)Matlab處理,計算出太陽光斑質(zhì)心坐標(biāo)與圖像中心坐標(biāo)的偏差,轉(zhuǎn)化為水平和俯仰電機需調(diào)整的步數(shù),返回給VC++, 再次送給單片機,驅(qū)動步進電機動作,進而細微調(diào)整平面鏡跟蹤裝置,使太陽光斑始終在圖像中心位置。
當(dāng)厚云層擋住太陽時,或者由于其他原因太陽光斑無法出現(xiàn)在傳感器視角內(nèi),則VC++調(diào)用時鐘跟蹤算法,繼續(xù)跟蹤,直到云層過去后,再重新使用圖像傳感器跟蹤。
2 圖像傳感器實時跟蹤太陽的設(shè)計
2.1 跟蹤控制器的首次定位
啟動時,上位機中VC++程序首先調(diào)用視日運動規(guī)律中的sun函數(shù)(此后跟蹤過程中無需再調(diào)用),返回此時的太陽高度角和方位角,換算成俯仰和方位步進電機所需的步數(shù),數(shù)據(jù)送給單片機,驅(qū)動跟蹤裝置運轉(zhuǎn),確保太陽光斑裝入圖像傳感器視角內(nèi)。子程序得到所需要運行的步數(shù),列出部分代碼:
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);
//返回此時太陽方位角和高度角,啟動時調(diào)用一次sun函數(shù),此后跟蹤過程不調(diào)用
….
fA_Step= SH /double(AR);// AR值是(1.8/100)°
%即經(jīng)過減速箱之后的方位電機步距角;
fH_Step= SA /double(HR); //HR的值為(1.8/52)°
%即經(jīng)過減速箱之后的俯仰電機步距角;
modf(fA_Step,fInteger); TRACE(″uA_Step :″);
uA_Step=GetInteger(fInteger);
//方位步進電機需要運行的步數(shù)保存在uA_Step
modf(fH_Step,fInteger); TRACE(″uH_Step :″);
uH_Step=GetInteger(fInteger); //俯仰步進電機需要運行的步數(shù)保存在uH_Step
…}
sun()函數(shù)中各個變量的含義:
**t.tm_year+1900,t.tm_mon+1,t.tm_mday, %格林威治日歷
**t.tm_hour+t.tm_min/60.+t.tm_sec/3600., %具體到時分秒
**Elong, Lat%當(dāng)?shù)氐慕?jīng)度和緯度
** SH,SA %返回此時太陽高度角和方位角
而PC與單片機通信協(xié)議如下:
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;//狀態(tài)
Command[3]=(unsigned char)(uA_Step0xff);//方位低8位
Command[4]=(unsigned char)((uA_Step0xff00)>>8);//高8位
Command[5]=(unsigned char)(uH_Step0xff); //俯仰低8位
Command[6]=(unsigned char)((uH_Step0xff00)>>8);//高8位
TRACE(″AH is %x AL is %x HH is %x HL is %x″,Command[2],Command[1],Command[4],Command[3]);}
%這里要求先傳送包頭,最后傳送包尾
狀態(tài)各位定義如下:
76543210
保留0:正常;
1:水平復(fù)位0:正常;
1:俯仰復(fù)位地址
其中:6,5必須同時為1時,系統(tǒng)復(fù)位。
2.2 圖像傳感器的自動跟蹤原理
VC++設(shè)置為每隔5 min自動調(diào)用傳感器拍一次照,傳回的圖像經(jīng)Matlab處理,計算出太陽質(zhì)心坐標(biāo)與圖像中心坐標(biāo)的偏差,并轉(zhuǎn)化為水平和俯仰電機需調(diào)整的步數(shù),再次送給單片機驅(qū)動步進電機,進而細微調(diào)整平面鏡跟蹤裝置,實現(xiàn)對太陽連續(xù)自動跟蹤。
FYP定義為俯仰步進電機應(yīng)運行步數(shù),F(xiàn)WP表示方位步進電機應(yīng)運行步數(shù)。方位步進電機每動作一步實際為(1.8/100)°,俯仰步進電機每動作一步實際為(1.8/52)°。當(dāng)系統(tǒng)實際運行時,光斑在圖像中心時設(shè)定坐標(biāo)為(160,120),向下移動出圖像FYP為50;向右移動出圖像FWP為160。若太陽光斑不在中心點時,如圖3所示,經(jīng)Matlab程序執(zhí)行結(jié)果為光斑圖像坐標(biāo)(115,117),光斑個數(shù)為1,對應(yīng)FYP為1,F(xiàn)WP為-46。
圖3 太陽光斑不在中心點的圖像
圖像處理過程中運用了最大類間方差法Otsu[3],是根據(jù)最小二乘原理推導(dǎo)出來的,它基于直方圖來選取閾值,其基本思路是將直方圖在某一閾值處分割成兩組,當(dāng)被分成的兩組的方差為最大時,得到閾值。方差是灰度分布均勻性一種量度,方差值越大說明構(gòu)成圖像的兩部分差別越大, 當(dāng)部分目標(biāo)錯分為背景,或部分背景錯分為目標(biāo)都會導(dǎo)致兩部分差別變小,所以使類間方差最大的分割意味著錯分概率最小。Otsu算法具有簡單、分割速度快等優(yōu)點,對噪音和目標(biāo)大小十分敏感,對于信噪比較高的圖像具有很好的分割效果,被認(rèn)為閾值自動選取的最優(yōu)方法之一。
圖4為拍攝到太陽光斑存在干擾時的圖像,對比圖4(a)和圖4(b)可發(fā)現(xiàn)用Otsu法分割處理后,能有效消除圖像中細微干擾。圖4(c)由Otsu法處理后得到圖4(d),光斑圖像坐標(biāo)(160,120),光斑個數(shù)為2,對應(yīng)FYP和FWP為0。由此判斷拍攝的圖像存在明顯干擾,程序?qū)YP和FWP置為0,確保系統(tǒng)的可靠性。
圖4 跟蹤過程中存在干擾時的太陽光斑圖像
一般情況下使用圖像傳感器跟蹤,但當(dāng)陰天或出現(xiàn)厚云層時,太陽光斑無法出現(xiàn)在傳感器視角內(nèi),VC++立即調(diào)用時鐘算法,根據(jù)太陽在天空中每分鐘運動的角度,計算出跟蹤控制器5 min應(yīng)轉(zhuǎn)動的角度,從而確定出步進電機的轉(zhuǎn)速,使得裝置根據(jù)太陽位置而相應(yīng)變動。
2.3 系統(tǒng)軟件設(shè)計
軟件的主要部分為PC機部分,PC機環(huán)境為Windows XP,使用軟件Microsoft Visual C++6.0和Matlab 7.0。啟動時VC++負責(zé)調(diào)用一次sun函數(shù),返回當(dāng)前時刻太陽的高度角和方位角,并轉(zhuǎn)化為FYP和FWP運行步數(shù)。通過調(diào)用Windows API函數(shù),實現(xiàn)上位機與單片機間數(shù)據(jù)的傳遞。通過MCC實現(xiàn)VC++與Matlab的聯(lián)合編程,控制攝像頭采集太陽光斑圖像,根據(jù)太陽光斑質(zhì)心坐標(biāo)與圖像中心坐標(biāo)的偏差轉(zhuǎn)化為FYP和FWP校正步數(shù)。
上位機可執(zhí)行程序控制界面如圖5所示,上位機控制平臺具有實現(xiàn)復(fù)位,太陽位置的跟蹤、手動校準(zhǔn)。其中“設(shè)置”按鈕,可進行波特率、調(diào)整時間間隔等的設(shè)置。
圖5 上位機主控界面
3 實驗數(shù)據(jù)分析
實驗在蘇州大學(xué)現(xiàn)代光學(xué)所內(nèi)進行,數(shù)據(jù)觀察時間為12月下旬至1月上旬。因數(shù)據(jù)量大,表1只列出2010年1月7日記錄的部分?jǐn)?shù)據(jù)。具體測試方法如下[4]:
(1) 參數(shù)設(shè)置。包括設(shè)置當(dāng)前時間、波特率、通信端口、圖像傳感器運行時間間隔等。
(2) 運行VC++程序。上位機中VC++程序首先調(diào)用sun函數(shù),返回此時的太陽高度角和方位角,換算成俯仰和方位步進電機所需的步數(shù)。只記錄下由Matlab生成txt文件中的需要校正的步數(shù)。
(3) 系統(tǒng)自動校正完成后,Matlab再次寫txt文件,保存校正后太陽光斑的圖像坐標(biāo),以及光斑質(zhì)心坐標(biāo)與圖像中心坐標(biāo)的偏差。此時記錄。
(4) 每隔5 min重復(fù)(2),(3)步驟。
圖6和圖7給出了太陽高度角和方位角的誤差曲線。由曲線看出,采用基于圖像傳感器的太陽自動跟蹤控制器后絕對誤差較小且保持相對穩(wěn)定。
圖6 俯仰(高度角)實際絕對誤差值曲線
表1 太陽自動跟蹤系統(tǒng)實測數(shù)據(jù)
時間FYP/步校正FWP/步校正太陽光斑圖像坐標(biāo)(校正以后)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 方位(方位角)跟蹤誤差曲線
通過對實測數(shù)據(jù)的分析表明:在該系統(tǒng)中,高度角跟蹤絕對誤差小于0.12°,方位角跟蹤絕對誤差小于0.08°,采用圖像傳感器對太陽進行跟蹤后,得到了很高的精度,且可靠性提高。
4 結(jié) 語
該跟蹤控制器可以連續(xù)跟蹤太陽的角度變化,更準(zhǔn)確實現(xiàn)對太陽運動的跟蹤。當(dāng)出現(xiàn)陰天或多云情況下,系統(tǒng)調(diào)用時鐘算法,使得裝置連續(xù)跟蹤。經(jīng)過實驗測試,各項指標(biāo)均達到了設(shè)計要求。
控制器采用低速處理器實現(xiàn)了對太陽光斑的采集及定位,可應(yīng)用于各種太陽能設(shè)備,提高太陽能的利用率。如果使用步進電動機的微步距控制技術(shù),即用細分技術(shù)實現(xiàn)將步進電動機一個整步均分為若干個更細的微步,可以使整個控制系統(tǒng)更加精準(zhǔn),可用來實現(xiàn)對各種點光源的檢測。
參考文獻
[1]苑瑋琦,劉麗微.基于視覺的太陽方位檢測裝置的研究[J].計算機測量與控制,2008,16(7):911-913.
[2]吳靜.太陽自動跟蹤系統(tǒng)的研究[D].重慶:重慶大學(xué),2008.
[3]付忠良.圖像閾值選取方法——Otsu方法的推廣[J].計算機應(yīng)用,2000,20(5):37-39.
[4]劉京誠,任松林,李敏,等.智能型雙軸太陽跟蹤控制系統(tǒng)的設(shè)計[J].傳感器與微系統(tǒng),2008,27(9):69-71.
[5]劉巍,王志超,沈垣,等.太陽自動跟蹤系統(tǒng)的研究與設(shè)計[J].水電能源科學(xué),2009(27):215-218.
[6]呂文華,賀曉雷,于賀軍,等.全自動太陽跟蹤器的研制和應(yīng)用[J].光學(xué)精密工程,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.