雷竞技注册
项目

环境光监测仪:测量和解释环境光水平

2015年8月05日经过罗伯特·凯

第3部分“如何制作环境光监测器”系列。该项目通过在面包板上构建环境光传感器电路,数字化电路的输出信号,并解释数字化测量。

第3部分“如何制作环境光监测器”系列。

推荐水平

初级/中级

本系列中的前一篇文章

所需的硬件/软件

描述 数量 Digi-key p / n
电路试验板 1 377-2094-ND
Receptacle-to-plug跳线 3. 1471-1231-nd.
环境光探测器 1 425 - 2778
4.7kΩ电阻 1 4.7kqbk-nd.
通用OP-AMP 1 LT1638CN8#PBF-ND
0.1μF电容器 2 399-4266-nd.

项目概述

以前的文章讨论了如何在LCD上显示电流和电压测量以及如何执行可靠的模数转换。我们现在将通过在面包板上构建环境光传感器电路,数字化电路的输出信号,并解释数字化测量值来继续这一项目。

我们将使用的光敏组件是GA1A2S100线性输出环境光传感器,由夏普制造。该三个终端设备不是简单的光电二极管或光电晶体管。相反,它包含三个光电二极管和调节电路,如下:

最终结果是其对光水平和光谱分量的敏感性类似于人眼的设备。换句话说,来自该传感器的输出可以合理地准确指示环境如何呈现出来的光明或暗。

传感器产生与环境光线等级成比例的输出电流:

我们需要让这个电流通过负载电阻来产生一个电压,这个电压可以通过EFM8的ADC来测量,所以第一个设计任务是确定负载电阻的大小。传感器的数据表表明输出引脚处的电压不应超过VCC.V - 1;我们用的是VCC.= 3.3 V,因此我们需要选择一个电阻,当传感器暴露在期望的最高光水平下时,将产生约2.3 V。如输出电流与照度的关系图所示,该传感器的可用性高达10,000 lux。然而,1万勒克斯的照度相当于阴天在室外的照度,(有趣的是)比任何正常的室内照度都要亮得多。由于本项目旨在监测室内光线水平,我们将假定最大照度为1000勒克斯(照明良好的办公室可能为500勒克斯)。看看上面的图,我们看到1000勒克斯对应500 μA, 2.3 V / 500 μA等于4600 ω。因此,我们将选择一个标准4.7 k ω电阻,将传感器的输出电流转换为电压。

如我们在前一篇文章中观察到的那样,ADC的输入阻抗可以以导致错误测量的方式与电路相互作用。该项目不会遭受上一个项目中存在的两个问题因素:外部电路不包括大量的串联电阻,并且不需要更改多路复用器设置,因为我们仅使用一个模拟输入。因此,建立时间不是这个项目中的主要问题。尽管如此,我们仍然将包括OP-AMP来缓冲传感器的输出,因为这是一种简单的方法,可以确保我们具有能够快速充电ADC采样电容的低阻抗驱动程序。作为另一个好处,通过电路中的OP-AMP,我们可以容易地包含额外的增益或低通滤波器以抑制不需要的高频变化。但是,在这个项目中,我们不需要更多的增益,我们将通过固件过滤测量,因此Op-amp配置为单位增益缓冲区。此外,我们不需要担心OP-AMP做得更好而不是好,因为它的偏移电压和噪声不会产生显着效果。整体电路如下:

固件

所有端口I / O,外设和中断配置与我们在上一篇文章中使用的相同。唯一的更改是“AmbientLightMonitor_Main.c”中的代码:

adcfactor =(float)adc_vref_millivolts / adc_2power10;SFRPAGE = ADC0_PAGE;ADC0MX = ADCMUXIN_P1_1;numberofmeasurement = 0;Rawadcresult = 0;虽然(1){adc0cn0_adbusy = start_conv;//等到转换完成时(ADC_CONV_COMPLETE == FALSE);adc_conv_complete = false;//检索10位ADC值并将其添加到RawadCreSult SFRPage = ADC0_Page中的累积和;Rawadcresult = Grawadcresult + ADC0; NumberofMeasurements++; /*if we have enough measurements to compute an average, shift right to divide the sum by the number of measurements*/ if(NumberofMeasurements == TWO_POWER_5) { RawADCResult = RawADCResult >> 5; NumberofMeasurements = 0; //convert the averaged conversion result to a current measurement and display //the actual value of the resistor in the test circuit is 4.6 kOhms ADCMeasurement = (RawADCResult*ADCFactor)/4.6; ConvertMeasurementandDisplay(CURRENT, ADCMeasurement); } //delay for 1/32 second so that we get one averaged measurement per second SFRPAGE = TIMER3_PAGE; TMR3 = 0; while(TMR3 < (10000/TWO_POWER_5)); }

AmbientLightMonitor_Part3.zip.

ADC多路复用器设置为循环外部的P1.1,因为我们只有一个ADC输入信号。通过将逻辑1(由预处理器定义Start_Conv)写入adbusy位来启动转换。然后我们等待ADC_CONV_COMPLETE标志,该标志设置在ADC中断服务例程中。

在该项目中,ADC值不会立即解释为测量并显示。相反,我们实现了一个简单的平均过滤器。如果修改此代码以显示每个转换结果,则可能会注意到相当多的低幅度变化。这是由电路噪声和10位ADC的相对较低的分辨率引起的,但似乎也似乎易于稳定的测量值,可能是通过窗户反射的阳光微妙变化引起的。无论如何,我们的环境光线显示器旨在评估室内环境照度的长期趋势,因此我们将通过显示32个连续样本的平均值来改进我们的测量。这就是我们使用该声明的原因“Rawadcresult = Rawadcresult + ADC0”;这RawADCResult变量从0开始,并累积转换结果,直到累积的测量值等于32,由预处理程序定义TWO_POWER_5表示。用于平均滤波器的测量值应该是2的整数次方,因为这允许我们使用有效的按位右移操作来执行除法。同时,我们需要保证ADC的累积结果不会超过最大值RawADCResult,它作为一个无符号16位变量将溢出超过65,535。10位ADC的结果理论上可以高达1023,所以64个测量值接近但可以接受(64 × 1023 = 65,472), 128个就太多了(128 × 1023 = 130,944)。

显示(即平均)测量之间的延迟总是一秒,无论我们选择多少个样本进行平均。这可以通过“while(TMR3 < (10000/TWO_POWER_5))”语句实现:10,000个Timer3时钟对应于一秒,因此将10,000除以平均采样数意味着单个ADC转换之间的延迟将以确保每秒一次平均测量的速度生成采样。请记住,从实际角度来看,这个更新速度仍然相当快——如果我们使用这些测量来控制一个灯调光器,我们不会希望每次有人在光学传感器上投下临时阴影时就调暗灯光。但现在我们只是想观察测量结果,通过每秒一次的更新,我们可以更好地评估和考虑传感器的响应性。

顺便说一下,您可能会想知道为什么在计算平均值时,我们决心使用有效的位移操作(而不是除法),如果我们如此随便使用(10000 / 2_power_5)来计算每一个延迟。答案是编译器的优化器将识别(10000 / two_power_5)作为常量表达式,并生成使用相应恒定商的装配代码。加载到EFM8中的程序实际上不会在此处执行分区。

ADC结果代表电压,但是我们想知道Ga1a2s100产生的电流。为此,我们必须通过上面讨论的负载电阻来划分电压。使我们的测量更加准确的一种简单方法是使用电阻的实际值而不是标称值。在测试电路中,4.7kΩ电阻实际上是4.6kΩ,因此这是Code-i.e中使用的值,“AdCmeAsurement =(Rawadcresult * Adcfactor)/4.6”;我们使用4.6而不是4600,因为ConvertMeasurementandDisplay()函数在解释电压时有效地融入1000伏特,但潮流安培。

分析

当您用拇指覆盖传感器时,可以很容易地确认电路的基本功能,然后在近距离亮起灯泡时升温。更深入的评估需要使用上面的输出电流与照度绘图等于测量的输出电流。幸运的是,这次电路在一个有六个窗户的一个愉快的Thudertormy日测试,其中六个窗户承认大量间接阳光。没有使用人造照明,因此在8月初的阳光下混合的暗云的缓慢,不规则的游行产生了优异的室内光线水平。

有时,测量适度增加时,光水平似乎适度下降(或相反),可能是由于光谱组成的变化与设备的“光谱灵敏度补偿”电路不利的相互作用。毫无疑问,成功实施将需要仔细安装,因为传感器的位置或方向的变化,例如。例如,靠近地板,离地板远,指向窗户,指向天花板,这些都对输出有很大的影响。在一间没有窗户、灯光统一的办公室里,这种表现可能更容易预测。尽管如此,GA1A2S100的响应还是很好,它的输出电流的变化方式似乎与房间里的“亮”或“暗”的感觉一致,或者在其他时候,与人们根据一天中的时间所期望的亮度水平一致。如果主要目标是通过根据太阳提供的照度调整室内照明来节约能源,后者的关系就更为重要。目前的辐射水平通常在50到160µA之间,相当于100到300勒克斯。考虑到一个照明良好的住宅房间可能在200到700勒克斯之间,这个范围与预期一致。

视频

下一篇文章串联:环境光监测器:零交叉检测

自己尝试一下这个项目吧!得到bom。