雷竞技注册
项目

如何使用adafruit si1145执行紫外线监控

2016年8月03日通过马克休斯

环境监测传感器帮助我们更好地测量我们周围的世界。本文将帮助您理解为什么到达您的紫外光量随着时间的变化,以及如何使用Si1145在I²C上测量它。

本文将帮助您了解为什么有害紫外线能量的数量随时间而变化,并向您展示如何在您的位置测量它。

使用Adafruit的Si1145板

人类在我们眼中有光接收器,在非常窄的范围内检测光子:在〜400nm和700nm之间(〜750-430 rth)。当光子的频率(能量)低于我们已经进化的范围时,光子被称为红外线。当频率高于我们进化的范围时,光子有足够的能量来燃烧皮肤。这些光子称为紫外线。

可见光的光谱。图像设计佛罗里达州环境研究中心

Si 1145是一种低功率I²C接口传感器,能够检测可见光、红外和紫外光的光子。该芯片及其8个引脚位于2mm × 2mm的足迹内。这个尺寸对于手工焊接来说太小了,所以如果你想玩它,你需要一个带板上电压调节器的breakout板,比如Adafruit的Si1145。Adafruit还创建了一个arduino兼容的库,这使它非常容易使用传感器。

需要零件

部分 价格
SI1145 14美元
Arduino Uno R3. 17美元
I2C液晶 13美元
男/女性或男/男/男性跳线 9美元
无焊料的电路试验板 10美元

你将必须购买Adafruit的Si1145和I²C液晶。如果你是一个修补匠,你可能已经有了其他部件。

以下是数据表raybet开户液晶(PDF)和传感器(PDF)。

下载库

接下来,您需要在Arduino软件中安装相应的库:草图»包含库»管理库

  1. 安装液晶
  2. 安装Adafruit Si1145

我已经包含了.3下面的库中的文件。

连接信息

需要四根线来连接Arduino和Si1145。另外四根电线到相同的四个引脚需要连接到LCD。你可以考虑使用一个实验板给自己额外的平局点。在边注上,这里使用的信号名称对应于分组板上的标签。关于Si1145引脚的名称,请参考数据表。

遵循以下步骤来完成您的布线:

  1. GND在alduino到LCD和SI1145上的GND
  2. 5v在arduino上的$$ v_ {cc} $$上的lcd和si1145上的vin
  3. Arduino上的模拟引脚4(SDA)到LCD和SI1145上的SDA
  4. Arduino上的模拟引脚5(SCL)到LCD和SI1145上的SCL

arduino. SI 1145. 液晶
5 V. $ $ V_{在}$ $ $$ v_ {cc} $$
接地 接地 接地
A4 (SDA) SDA SDA
A5 (sci) ACL sci

代码

建立连接后,上传并执行以下代码:

/ * SI1145 UV传感器I2C显示器MJHughes for AllaboutCircuits.com将LCD和UV传感器连接到5V,GND连接LCD和UV SDA到Arduino模拟4将LCD和UV SCL连接到Arduino模拟5,包括线条,使用“”标题文件在相同的目录或使用<>如果您安装了库* / #include  //I²C库#include  //控制LCD #include  //读取UV传感器adafruit_si1145 uv = adafruit_si1145();Liquidcrystal_I2C LCD(0x27,20,4);//(LCD地址,20个字符宽,4个字符高)void setup()//初始化代码{lcd.init();//初始化lcd lcd.backlight();//在uv.begin()上转动背光;//初始化传感器} void循环()//主程序循环{float uvindex = uv.readuv();// uv index uvindex / = 100.0变量;//转换为整数索引,划分100 lecd.setcursor(8,0); lcd.print(" "); // Clear extra digits that can accumulate with high readings lcd.setCursor(17,0); lcd.print(" "); // Clear extra digits that can accumulate with high readings lcd.setCursor(19,1); lcd.print(" "); // Clear extra digits that can accumulate with high readings lcd.setCursor(2,0); lcd.print("Vis:"); lcd.print(uv.readVisible()); // Show visible light reading lcd.setCursor(11, 0); lcd.print("IR:"); lcd.print(uv.readIR()); // Show infrared light reading lcd.setCursor(0,1); lcd.print("UV Index: "); lcd.print(" "); lcd.print(round(UVindex)); // UV index lcd.print(" ("); lcd.print(UVindex); lcd.print(")"); // provides more detailed UV Index lcd.setCursor(0,2); lcd.print(" "); lcd.setCursor(0,3); lcd.print(" 1 2 3 4 5 6 7 8 9 +"); lcd.setCursor(UVindex*2,2); lcd.print("Θ"); // Should move to 2nd line for 11, 12, 13, etc... delay(1000); // Set an appropriate refresh rate for the application }

在您的液晶显示器上,您应该看到可见光和红外光的读数,以及计算的UV指数和读数的视觉索引1-9 +。

当读数超出9时,光标应向下移动到下一行,指示10到19的测量值。

图像照片为更好的展示屏幕。

这是我的液晶显示器的一个视频:

下一步

  1. 在中午的时候把传感器、Arduino和LCD带到室外,看看你的读数与天气预报的结果如何。
  2. 如果您有一个RGB显示屏,很高兴看到来自谁出现的图形UV图像而不是仅仅是数字(也许与用户应用防晒版的建议)。
  3. 皮肤类型影响一个人晒伤的时间长短。或许可以创建一个等式或查找表,为用户提供一个燃烧时间倒计时。


  4. 找到一个地点在哪里可以打破当前紫外线指数记录为43.3

更多有关紫外线指数变化的资料

天气预报通常为您的预测区域提供UV指数,通常在当地的太阳日中午。然而,到达地球表面的UV辐射量是动态的。如果您需要最新的信息,则必须在该位置测量它。

2016年7月10日美国紫外线预测地图Wolfram Alpha.

每日UV指数

美国2016年7月10日每小时紫外线预测图Wolfram Alpha.

每日UV指数

美国国家气象局(National Weather Service)测量了大气臭氧、云层覆盖率、阳光角度以及其他一些变量。不是用大量的数字和数据点轰炸公众,他们可能理解或不理解,而是汇总信息,计算紫外线指数,并向公众提供一个数字。

他们还提供工具,为您提供给定位置的UV指数预测。

环保署紫外线指数工具。这是互动!试一试。

此索引上的数字小于3表示适量的太阳曝光是可以的。任何大于3和世界卫生组织的数字都建议涂抹防晒霜,戴着帽子,太阳镜和裤子。

紫外线指数图示。图片由世界卫生组织

太阳能量的量使其成为地球表面,以给你晒伤,取决于两个主要因素 - 铸造阴影的角度和妨碍的大气分子。

了解为什么紫外线辐射量在一天中、一年中以及随着天气变化而变化需要更多的物理知识。如果你感兴趣,请继续读下去。

电磁辐射和大气吸收量子理论

当电子绕原子核运动时,从高能轨道跃迁到低能轨道,它们发出特定频率的光子-电磁能量。光子在空间中移动,直到被另一个原子吸收,导致电子从能量较低的轨道移动到能量较高的轨道,或者完全离开原子/分子。

如果移动光子的能量与原子/分子的跃迁能量不完全匹配,光子就不会被原子吸收。这些轨道跃迁是自然的分叉——它们只发生在非常特定的频率上(尽管每个频率可以通过相对运动多普勒位移高一点或低一点)。

电子吸收和发射的描述。图片由Stackexchange.

每个电子轨道具有与其相关的特定能量,并且发射或吸收的光子的频率(能量)必须完全等于轨道能量的差异。

原子氢BoHR模型的转变。图像设计的图像Wikimedia.

当原子获得电子时,轨道变得更加复杂,产生的光子的频率也变得更加多样化。复杂度带来了唯一性:元素周期表中的每一个元素都有一个我们可以用来识别它的唯一指纹(或条形码)。同样的科学让我们知道遥远的恒星和行星是由什么组成的。

原子可以吸收一个频率(能量)的光子,并发射不同频率的光子,这些光子对应于不同的轨道跃迁。原子可以吸收能量更高的光子,释放能量更低的光子,如下图所示,在玻璃中注入的氧化铀被用来将紫外线转化为明亮的绿色。

比较频谱线的颜色约为550 Zhz的铀氧化状态,以上玻璃的颜色。图片由Wolfram Alpha.

铀注入玻璃(凡士林玻璃)

在铀注入玻璃上闪亮的紫外线LED导致它发光霓虹灯。照片由Mark Hughes。

我们的气氛充满了原子和分子,其可以在一个频率(高能量)处吸收光子,然后在另一频率(低能量)处作为一系列光子重新发射能量。紫外光子通过的紫外线分子越多,它们将在较低频率上被吸收和重新形成的机会越好,从而将大部分有害的紫外线辐射改变为可见或红外辐射。

大气窗户

EM光谱的距离可以通过地球大气层的距离的图形。图片由美国宇航局

了解入射光的角度

光线发生率与季节和整个日光时光变化。它是由垂直于地球表面上的点到朝向太阳点的线的虚线测量的。当阴影最长时,阳光的强度在其最低点,因为来自太阳的光蔓延到覆盖大面积。当阴影最短时,阳光的强度最大,你的阳光风险最大。

随着入射角偏离正常的角度,强度降低。

基于Wolfram的Mathematica制作的动画这个图表

Insolation和UV指数

这两个思路 - 进入光的角度和大气吸收的量 - 确定到达地球表面的进入太阳辐射的量。我们相应地称这种纠正(以及拉丁文惰性)。

由于辐射的频率会影响其皮肤的危害,国家天气服务在一系列频率上产生加权平均值。它将加权平均值与给定位置的高度和天气相结合,以确定位置的UV索引。

有关如何计算UV索引的更多信息,请访问EPA网页或直接跳到他们的UV索引指南

要了解更多关于国际癌症研究机构的信息,该机构讨论了紫外线辐射如何导致癌症,阅读这篇文章(PDF)。

最后,如果你想使用Wolfram的Mathematica.(可免费提供Raspbian操作系统)来创建你自己的图形,我已经包含了我用来创建下面的动画代码:

uv_daily.zip.

为自己提供这个项目!得到bom。

5个评论
  • 年代
    srh76 2017年4月05日

    我刚刚和我儿子完成了这个项目。我在facebook上看到了这篇文章,我订购了这些部件,迫不及待地想解决它。然而,在编译代码时,出现了一个关于lcd.init()的错误;代码的一部分。在阅读了几个在线论坛后,我能够通过更改lcd.ini雷电竞newbeet()来纠正这个错误;lcd.begin ();

    喜欢。 回复
    • 马克休斯 2017年4月05日
      嗨@srh76,感谢你加入这个网站!我很高兴你能解决这个问题,也很高兴你喜欢这个项目。抱歉出现了代码编译错误——这是由于lcd.init()现在已被弃用的事实。您使用的LiquidCrystal_I2C.h库比我写这篇文章时使用的新。如果你愿意,给你的项目和你的儿子拍一张照片,然后把它发到我们的facebook或twitter上,我很想看看。马克
      喜欢。 回复
  • 年代
    斯蒂芬年轻 2019年6月07日

    哇!很棒的文章,大量的参考文献,谢谢!

    喜欢。 回复