Va-spec.jpg

该开源太阳光谱分析仪的目标是协作设计机械和电子控制,以实现波长和倾斜角相关太阳通量的直接/漫射数据采集。在这个项目中,我们建造并调试了两个系统(1 个在加拿大,1 个在玻利维亚)。该系统将每十度将光纤输入从 0 度调整到 90 度,并通过调整阴影带的进出来测量全局和漫射。这些测量每小时进行一次,并且具有足够的分辨率来跨越 UV-VIS 到 NIR 光谱。

为了实现这一目标,安大略省金斯顿的皇后区应用可持续发展小组与玻利维亚科恰班巴的玻利维亚私立大学[1]合作。除了不同的地点之外,这种伙伴关系还让我们深入了解如何实施国际合作以及提高生产力和效率的方法。

我们的系统将设计得尽可能相似,但各个光谱仪除外。这将使我们能够从两个地点获得可比较的数据,以便比较太阳辐射的地理差异以及对太阳能光伏输出的潜在影响。

本页介绍如何构建用于记录太阳光谱的自动光谱仪。它包括 CAD 文件、设计、软件等的链接。它列出了所有组件,并带有购买地点的链接,包括校准协议等。在 UPB 和加拿大复制两个示例所需的一切......以及一个链接到数据流。

出版物

O.奥尔马切亚;A. 亚伯拉罕斯;N.托拉维;F.罗梅罗;O.乌尔奎迪;JM皮尔斯; R.安德鲁斯;安装可变角度光谱仪系统,用于监测漫射和整体太阳辐射过程。SPIE 8785,第八届伊比利亚美洲光学会议和第十一届拉丁美洲光学、激光和应用会议,87850M(2013 年 11 月 18 日);DOI:http://dx.doi.org/10.1117/12.2025480

太阳光谱理论

光在地球大气中的衰减和传输在许多领域都很重要,包括:光伏技术、农业、天气预报和气候研究。由于地球大气层的不均匀性和不断变化的太阳几何形状,太阳能资源是可变的,并且可以在地球上不同的地理位置产生非常不同的影响。

太阳辐射由一系列光组成,大致可分为紫外光 (UV)、可见光 (Vis) 和近红外光 (NIR)。地球大气层边缘存在的光,即所谓的 0 空气质量 (AM0),被定义为地外日照 (Go),它是一个持续变化的量,但在工程上通常定义为 1366.1 W/ m 2应用程序。[1]当地外光谱穿过地球大气层时,它会被各种大气成分衰减,包括按照它们对晴朗(无云)天空的太阳透射率的相对影响的降序排列:气溶胶(即散射)、颗粒物(瑞利散射)、水蒸气、臭氧、二氧化碳和氧气。

这些大气成分造成的衰减水平取决于它们的相对浓度以及太阳辐射穿过的光路长度。如果太阳位于头顶正上方,则光路长度称为一个气团(AM1),随着太阳距地平线高度的降低,太阳的辐照度必须经过更大的距离才能到达地面,因此气团将增加。对于许多太阳能光伏应用,1.5 (AM1.5) 的空气质量和相关辐照度为 1000 W/m 2(1 个太阳)被认为是标准大气条件。可满足此条件的大气成分摘要以及标准 AM1.5 大气 (ASTM G-173) 的定义,可在此处找到全面的描述。有关太阳能资源测量理论的概述,请参阅光伏应用太阳能资源测量的相关页面。有关太阳几何的更深入概述,请参阅太阳能资源上的相关页面AM1.5 光谱的辐照度光谱分布如下所示。

ASTM G173 AM1.5 光谱

太阳光衰减

大气中太阳能资源的衰减会影响辐照的积分(宽带)值及其在光谱内的分布。一般来说,空气质量的增加往往会将光谱移向“红色”(红外线),正如早晨和晚上的红色天空所观察到的那样。云量的增加往往会使光谱向“蓝色”(紫外线)方向移动,在阴天晒伤时可能会注意到这种效应。从上图可以看出,辐照的衰减还取决于辐照源。直射和环日照射是指在大气中不发生散射的辐射,本质上是镜面反射,即具有方向性,被遮挡时会形成阴影。漫射辐射是来自天空穹顶的辐射,可以被认为是各向同性的(同样来自天空穹顶的所有部分),但是对于高级辐射建模,这种假设是无效的。它可以被认为是照亮阴影内部区域的照射,由散射光形成。因此,从晴天AM1.5G光谱可以看出,大气中的散射相对较少,导致少量的漫射照射,集中在光谱的紫外部分。

超越AM1.5

然而,此时应注意,AM1.5 光谱的假设对于大多数大气条件来说并不是有效的,并且随着大气成分和太阳几何形状的变化,光谱在一天和一年中可能会有很大变化。作为一个例子,如下所示的两天,均包含 400W/m 2的宽带辐射。一种是晴朗、高气团的晴天,另一种是低气团的阴天。

云清晰对比.jpg

由于光伏器件的性能以光谱响应性为特征,因此等效宽带辐照度的两个光谱之间的光谱分布变化会影响光伏器件的性能和建模。在不同地点对太阳光谱成分进行地面测量将有助于对太阳能资源进行更深入的分析,并将有助于选择和设计能够最有效地利用不同光谱成分的太阳辐射的光伏技术。

设计与施工

图 1:初始设计模型

最初的设计是在名为 SolidWorks 的 3D 建模程序中创建的。选择这个专业级程序是因为作者对它很熟悉,但是,可以使用任何众多开源程序(有关开源 CAD 软件包的详细列表,请参阅 [2]。这允许特定的公差尺寸在施工实际开始之前确定。

目标是尽可能使用常见的材料和尺寸,以适应大部分设计,以提高普通人能够找到正确用品的可行性。为此,我们选择使用简单的铝方管和简单的铝管。

该设计需要能够将光纤电缆作为光谱仪的输入,并且能够将阴影带移入和移出适当的位置以创建漫反射读数。整个系统将安装在建筑物的侧面或杆子上,因此必须是起脊和自支撑的。盒式结构以低成本提供了这种刚性。完整的图纸列表可以在这里找到。

阴影带和光谱仪光缆的运动由 2 个小型步进电机控制。它们用螺栓固定在框架上,并通过套环连接到阴影带和光纤杆。这些电机由电机驱动板和 Arduino 板供电。电机驱动板可以同时驱动两个步进器,并直接插入Arduino顶部,使其成为一个很好的解决方案。董事会

选择 Arduino 软件包主要是因为该项目的开源性质以及编码和实现的简单性和易用性。Arduino 封装非常强大,可用于许多应用,而且成本低廉是一个很大的优势。我们将在电子部分更多地讨论软件。

对于实际施工,我们将计划发送到学校商店,他们可以在那里购买材料并快速轻松地将系统组装在一起。这是由于我们的时间限制而完成的,但实际上该项目非常简单,任何有能力的人都可以在他们的车库里在一个周末内完成。

电子与控制

软件和电子方面的材料比实际机械制造方面的材料要多。为了使系统正常运行,必须同步运行电机控制、光谱仪测量、数据存储和太阳能计算。

图 1:Arduino 开发板

系统的第一个主要部分,也可能是最重要的部分是光谱仪。它必须能够测量太阳的直接和漫射辐射剖面,并具有足够的分辨率来检测太阳光谱的微小变化。一种特殊型号是全光谱 200-2500nm Avantes 光谱仪,能够测量光谱内的绝对辐照度。通过这种方式,我们能够测量 200 至 2500 nm 之间的总太阳辐射、一小部分紫外线范围以及部分红外光谱。该光谱仪需要连接到计算机才能存储收集到的所有数据。两者之间通过简单的 USB 连接即可自由传输数据。

更复杂的电子系统是电机控制系统。为了获得双重独立控制,需要使用多种工具。首先,双电机驱动器能够搭载Arduino并单独控制两个步进电机。该 Arduino 将对太阳位置进行所有重要计算,并将其发送到电机驱动板,以转换为每个电机的位置。下面是用于移动步进器和计算太阳位置的代码。[2]

步进驱动代码

请注意:此页面上的任何代码可能已过时。现在托管在 github 上: https://github.com/Queens-Applied-Sustainability/Open-Source-Solar-Spectrum

//马修·德沃诺//2011 年 5 月 24 日
//为了让步进器根据以下参数将阴影带移动到正确的天顶//代码的结果。步进器将以 10 度增量移动到 90 度。//包括初始化步进电机位置以进行位置校准的代码。
#include <Wire.h>#include“Chronodot.h”
AF_步进电机2(200, 2);长先前Millis = 0; // 将存储上次 LED 更新时间长间隔=58;// 闪烁的时间间隔(毫秒)int Montharray[13]={0,1,2,3,4,5,6,7,8,9,10,11,12};int hourarray[25]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24};//小时(1-24)
int Monthdoy[13] = {0,0,31,59,90,120,151,181,212,243,273,304,334};浮动纬度= 43;//每个位置的用户更改浮动经度 = 76.3;//每个位置的用户更改浮动子午线 = 75; //每个位置的用户更改浮动 phi; //初始化纬度(以弧度为单位)int 按钮状态 = 0;const int 按钮引脚 = 2;
// 初始化串行输出串行.开始(9600);Wire.begin();RTC.begin();电机1.setSpeed(10); // 10 转/分电机2.setSpeed(10); // 10 转/分引脚模式(13,输出);按钮状态 = digitalRead(buttonpin);pinMode(按钮引脚,输入);phi = (纬度*pi)/180; //纬度转弧度}
{现在的日期时间 = RTC.now();int 时间 = now. 分钟();
{//电机1初始化如果(按钮状态==低){// 移动电机motor1.step(1, 前进, 单次);}别的 {}
如果(按钮状态==低){// 移动电机motor2.step(1, 前进, 单次);}别的 {}
for(int i=0; i<10; i=i++){motor1.step(5, 前进, 双);延迟(5000);数字写入(13,高);// 打开光谱仪延迟(250);// 稍等一下数字写入(13,低);延迟(2000);}motor1.step(50, 向后, 双);
int day = now.day(); //从时钟int 月份 = now.month(); //从时钟
int doy = Monthdoy[月] + 日;
浮动比例=(284.0+doy)/365*360;浮点比率rad = 比率*pi/180.0;浮点数十进制 = 23.45*sin(ratiorad);浮点数 dec = decdeg*pi/180;
int Bdeg = (doy-1)*(360/365);浮点 B = Bdeg*pi/180; //E 除以 60 就可以得到不到一小时的结果浮点E = (229.2*(0.000075+0.001868*cos(B)-0.032077*sin(B)-0.014615*cos(2*B)-0.04089*sin(2*B)))/60;浮动太阳时 = 小时 + 4*(子午线经度)/60+E;
浮点欧米茄度=(solartime-12)*15;浮点欧米伽拉德 =欧米伽度*pi/180;
浮点天顶 =cos(phi)*cos(dec)*cos(omegarad)+sin(phi)*sin(dec);天顶 = (acos(天顶))*180/pi;
角度=结果;
延迟(5000);for(int i=0; i<10; i++){motor1.step(5, 前进, 双);延迟(5000);数字写入(13,高);// 打开光谱仪延迟(250);// 稍等一下数字写入(13,低);延迟(2000);}motor1.step(50, 向后, 双);motor2.step(角度,向后,双);}电机1.release();motor2.release();

光谱仪代码

为了使光谱仪在正确的时间进行测量,必须在其自身和实时时钟和主控制系统所在的 Arduino 之间建立连接。为了对其进行控制,光谱仪背面有一个 D-Sub 26 连接器,用于触发“保存光谱”、“保存黑暗”和“保存参考”。

在 Arduino 板上,当要测量频谱时,它会向 Dsub 连接器的引脚 6 发送一个短 TTL 高脉冲。这会触发光谱仪保存光谱并存储到计算机内存中。

光谱仪 TTL 高电平触发的简单示例

//2011 年 5 月 30 日//光谱仪触发,TTL高电平
// 将您的设置代码放在这里,运行一次:引脚模式(7,输出);串行.开始(9600);
Serial.println("信号高");数字写入(7,高);// 设置触发器为on延迟(1000);Serial.println("信号低");数字写入(7,低);延迟(3000);
延迟(3000);串行.println(“”);}
{

为了将实时时钟连接到 Arduino,需要使用 SDA 和 SCL 引脚。在大多数 Arduino 板上,SDA(数据线)位于模拟输入引脚 4 上,SCL(时钟线)位于模拟输入引脚 5 上。在 Arduino Mega 上,SDA 是数字引脚 20,SCL 是 21。电机扩展板具有这些由于它们是电机驱动电路中未使用的引脚,因此将引脚断开以供使用。

校准和验证

使用光谱仪和光源校准

这部分需要清理购买光谱仪时,它们都在光谱响应中进行了完全校准,因此当它们检测到 300 nm 光时,光实际上是 300 nm。然而,只有一台光谱仪进行了绝对辐照度校准。这意味着我们必须确定一种校准该光谱仪的方法,而无需购买价值数千美元的设备。由于我们有一个校准单位,我们自己想出了一种方法。

图 1:万用表连接到日射强度计,距离 251 毫米,卤素灯,连接到变压器的自耦变压器

可以使用我们校准的光谱仪对 ELH 卤素投影仪灯泡进行详细测量。这些灯泡具有良好的光谱范围,并且在 24 小时内输出保持一致(损耗 <1%)。我们将灯泡设置在距光谱仪传感器特定距离处,并使灯泡的温度和输出达到稳定状态。然后从灯泡中获取完整的光谱,我们现在创建了一个 Excel 文件,其中包含该特定卤素灯的光谱和强度数据。

为了确保科恰班巴的灯泡在这里和那里具有相同的亮度,我们将发送带有距离参数的 Excel 文件,并发送卤素灯泡。在玻利维亚,我们对发送的频谱进行数值积分,得到的结果为 790.20 W/m^2

我们使用 Kipp&Zonen 日射强度计[3]作为传感器,凭借其自身的灵敏度系数 (15.87 µV/W/m^2),我们意识到必须获得 12.55mV 作为输出,使用等价式:

790.20 [W/m^2]=(输出[μV])/(15.87 [μV/W/m^2])输出 = 12553,17 [μV]]

然后,我们用自耦变压器给卤素灯泡供电,连接到 220-120V 变压器,并且在 251mm 外,将日射强度计传感器连接到万用表,如图 1 所示。等待 20 分钟,使光线稳定。当达到所需的强度水平 (12.55mV) 时,自耦变压器的交流电压为 81.2 V,我们将日射强度计切换为光谱仪(连接到余弦接收器的光纤的末端),如图 2 所示。之后,我们将发送的光谱作为参考光谱,并按照SpectraSuite的步骤获得绝对辐照度模式。

图 2:光谱仪传感器获取卤素灯泡光谱

一旦获取数据并且图表匹配,校准就完成了。校准前和校准后的两条曲线如图 3a 和 3b 所示

光谱仪验证

为了验证光谱仪的结果,有必要对一些已知光源进行测量。最好的选择是观察实际的室外阳光,因为它最能模拟我们想要的结果。最初,我们得到的结果与预期不同,因为频谱图看起来不正常,并且

零件清单

部分数量描述
光谱仪多变的Avantes AvaSpec-2048 标准光纤光谱仪

Avantes AvaSpec-NIR256/512-2.5TEC [4] OceanOptics USB4000 UV-VIS [5]

步进电机2双极,200 步[6]
电机驱动板(MShield)1Adafruit 步进电机驱动板[7]
铝方管125英寸2.5"x1.5"
铝板0.125"35英寸1/8"铝板
1" 铝制圆形枪托/1" 聚合物圆形枪托1缩小尺寸
Arduino Uno1系统的“大脑”
DSUB 26 连接器126 针连接器公头[8]
螺栓和螺母161/4-28 X 3" 部分螺纹螺栓 + 螺母和垫圈[9]

操作协议

操作方法非常简单,只需要一台电脑和一个阳光充足的地方。

开始

首先要做的是将系统安装在可以使用计算机、电源以及互联网(如果可能)的区域。如果是北半球,则该位置必须朝南;如果是南半球,则该位置必须朝北。这是为了确保传感器能够全年观测到太阳。它应该安装在从地平线到头顶都能清晰看到天空的位置。墙壁或屋顶是理想的选择。

地点

一旦选择了位置,重要的是要确保设置的耐候性,并且没有雪或天气事件会干扰它。它将必须保持在这个位置至少一年不受干扰。这意味着检查步进电机以及光谱仪的外壳以及它所承受的湿度和温度。

定位

现在位置已设置,重要的是在航向和方向方面校准系统。首先确保系统朝南,更重要的是,将阴影带和光纤耦合器的初始位置设置为 0 度仰角。这是为了确保连续测量均处于已知水平。

步进电机

步进电机必须连接到电机屏蔽

下表指的是上面列出的从 Adafruit 商店购买的特定步进器。不同的步进器可能有不同的电线颜色代码和线圈。如果您按照以下说明进行操作,您可以找出您的特定引脚排列。

设备步进数彩色终端
光纤耦合器1黄、红-M1

绿色、棕色 - M2

影带2黄、红-M3

绿色、棕色 - M4

注释.jpg

这些不同颜色的电线代表步进器的不同线圈,因此必须以这种特定方式连接。为了确保电线正确连接,测量不同电线组合之间的电阻非常有用。其中两个组合将具有相同的电阻,另外两个组合的读数将为无穷大。这两对具有相同电阻,应分别连接到 M1 和 M2。最后,连接电线时,将散热器连接到电路板左侧和右侧的电机驱动器芯片上非常重要。这个网站提供了更好的解释。

端子M+和GND还必须连接至不超过12V 350mA的电源。5 V 800mA 足以控制 2 个步进器。如果使用单一电源,则必须将跳线连接到 PWR 引脚。

软件

用于操作光谱仪的软件是 avantes 光谱仪附带的 Avasoft 7.5.3 USB 软件。连接到光谱仪后,必须执行以下设置任务

  • 连接可见光和红外光谱仪,以可见光光谱仪为主
  • 合并可见光和红外通道以确保光谱仪之间的平滑过渡
  • 遮盖光源并记录暗光谱
  • 从数据中减去暗光谱
  • 设置积分时间以确保原始读数(以计数为单位)不会饱和(超过 66,000 计数)。目前,VIS 和 IR 通道的积分时间分别设置为 47ms 和 12ms。
  • 启用excel输出,输出延迟0秒
  • 配置历史通道功能以包括来自 VIS 和 IR 光谱仪的光谱
  • 运行历史频道

当历史通道在启用 Excel 输出的情况下运行时,Avasoft 将启动两个 Excel 实例,并在 arduino 控制器触发时开始用光谱仪中的数据填充它们。为了定期保存这些 Excel 文件,需要一个每天运行一次的外部脚本,以将当天的读数保存在 Excel 中。该脚本是使用AutoIt自动化编写的,并编译为可执行文件。该脚本将激活历史通道窗口,关闭它以停止写入文件,单独打开每个 Excel 工作表并使用从系统时间派生的文件名保存它,关闭 Excel 并重新启用历史通道功能以使系统做好准备收集第二天的数据。使用的脚本如下所示:

# 包含 <Date.au3># 包含 <WindowsConstants.au3>; 在 Vista 下,由于系统安全原因,Windows API“SetSystemTime”可能会被拒绝WinActivate("历史通道函数")睡觉(2000)发送(“!e”)睡眠(1000)$infFilePath="D:\Documents and Settings\rgauthier\Desktop\Spectrometer Dropbox\Dropbox\Dropbox Excel Data\Data\Infared"&@YEAR&"-"&@YDAY&"-"&@MON&"-"&@MDAY&" -"&@HOUR&"-"&@MIN&".xls"$visFilePath="D:\Documents and Settings\rgauthier\Desktop\Spectrometer Dropbox\Dropbox\Dropbox Excel Data\Data\Visible"&@YEAR&"-"&@YDAY&"-"&@MON&"-"&@MDAY&" -"&@HOUR&"-"&@MIN&".xls"Global Const $xlNormal = -4143 ;保存为.xls的参数全局常量 $iAccessMode = 1全局常数 $iConflictResolution = 2全局 $errcnt=0$sType = $xlNormal ;设置要保存的文件类型$oExcel = ObjGet("", "Excel.Application")$错误=0对于 $oExcel.Application.Workbooks 中的 $element如果 $element.FullName = "Sheet1" 那么;MsgBox(0,"",$element.FullName)$element.SaveAs($infFilePath, $sType, 默认, 默认, 默认, 默认, $iAccessMode, $iConflictResolution)$element.CloseElseIF $element.FullName = "Sheet2" 然后;MsgBox(0,"",$element.FullName)$element.SaveAs($visFilePath, $sType, 默认, 默认, 默认, 默认, $iAccessMode, $iConflictResolution)$element.Close别的$element.Activate$errcnt=$errcnt+1$errFilePath="D:\Documents and Settings\rgauthier\Desktop\Spectrometer Dropbox\Dropbox\Dropbox Excel Data\Data\Error"&@YEAR&"-"&@YDAY&"-"&@MON&"-"&@MDAY&" -"&@HOUR&"-"&@MIN&"-("&$errcnt&").xls"$element.SaveAs($errFilePath, $sType, 默认, 默认, 默认, 默认, $iAccessMode, $iConflictResolution)睡眠(500)$element.Close万一下一个$oExcel.Application.Quit睡眠(1000)WinActivate("AvaSoft")睡眠(1000)发送(“!啊”)

数据

该实验产生的数据由每日的 Excel 文件对组成,其命名约定为:

这些数据文件已合并为一个统一的数据库,以.csv和.h5文件格式分发。为了合并这些数据集,采取了以下处理步骤。

  1. 将可见光和红外数据文件导入为数据库

  2. 确定采集头的角度位置。第一个读数与水平面成 90 度,第二个读数与水平面成 80 度,依此类推至 0。

  3. 为每个数据库设置日期和位置的多重索引

  4. 将可见光和红外通道加入日期和位置标记,并附加到每天的主数据库中。

  5. 通过从当天的每个值中减去每天早上 1:00 和 90 度的值,对每天进行暗校正。

  6. 对使用错误时间戳收集的任何数据进行时移(2013年2月25日至2013年4月22日的数据滞后12小时)

  7. 计算每个小时时间戳和位置综合能量使用这些填充Sum mary_info数据库

  8. 对于每个小时的时间戳,从附近的OSOTF轮询日射强度、气象模块性能数据,并将其附加到摘要信息数据库

此处理的完整工作流程是使用 pandas 模块在 python 中实现的,代码可在项目 github 和此处获取:“ http://bit.ly/OSOTF_Parser

数据访问和操作

数据以一种格式提供,该格式可以使用 python pandas 模块提供简化的访问。应该启动 Ipython 控制台,并且可以使用以下命令将数据加载到活动内存中:

master=stre['规格']Summary_info=stre['摘要']str.close()

其中 storepath 是包含光谱数据的 .h5 文件的位置。这会将数据加载为具有两级多索引的 pandas 数据框:顶层是日期和小时,第二级是每小时的位置。创建两个数据帧,master 保存每个索引位置的光谱信息,Summary_info 包含集成的光谱能量以及从附近的 OSOTF 收集的值。

为了获取特定时间和角度的频谱,可以使用以下Python代码:

其中年、月、日、小时和位置必须由用户定义。

OpenSCAD Shadow Band 代码

ShadowBand.jpg
//带的高度h=20;// 带的半径r=50;//带的厚度t = 5;// 中心延伸宽度w=10;//中心延伸孔尺寸e=2;模块 Shadowband (){不同之处(){联盟(){旋转([0,90,0])圆柱体(h = 2*r, r1 = w, r2 = w, center = true, $fn=250);不同之处(){圆柱体(h = h,r1 = r,r2 = r,中心= true,$ fn = 250);圆柱体(h = h+2, r1 = rt, r2 = rt, center = true, $fn=250);翻译([-r,0,-h/2-1])立方体([2*r+2,r+1,h+2]);}}旋转([0,90,0])圆柱体(h = 2*r+2, r1 = e, r2 = e, center = true, $fn=250);旋转([0,90,0])圆柱体(h = 2*r-2*t, r1 = w+0.1, r2 = w+0.1, center = true, $fn=250);}}阴影带();

相关项目

也可以看看

参考

  1. ^ CA Gueymard,太阳能应用和太阳辐射模型的太阳总辐照度和光谱辐照度,太阳能。76(2004)423-453。
  2. ^ JA Duffie、WA Beckman,太阳能热过程工程,第 2 版,Wiley-Interscience,1991 年。
Cookies help us deliver our services. By using our services, you agree to our use of cookies.