跳到主要内容

紫外线测量传感器(AD电压)

一、传感器介绍

product

  • 提供可靠性和精确性测量紫外线指数(UVI)

  • 适合测量太阳光紫外线强度总量;  

  • 对照世界卫生组织紫外线指数分级标准  

  • 检测UV波长:200-370nm;

  • 响应快,时间小于0.5秒;

para


电路原理

sch

二、接线图

layout

三、材料清单

名称推荐购买链接(或者您可以自己制作)模块硬件资料下载
紫外线传感器模块模块购买链接下载地址
声明:这里推荐的购买链接仅供参考,您完全可以去其他商家或渠道购买,只要功能相似即可,如果需要更低的成本建议自己开发硬件模块或定制。

四、紫外线指数转换表

uv_level

五、完整代码

--定义函数:将传感器输出电压(单位:mv)转换成紫外线指数index
function GetUvIndex(v)
if v < 50.0 then
index = 0
elseif v < 227.0 then
index = 1;
elseif v < 318.0 then
index = 2;
elseif v < 408.0 then
index = 3;
elseif v < 503.0 then
index = 4;
elseif v < 606.0 then
index = 5;
elseif v < 696.0 then
index = 6;
elseif v < 795.0 then
index = 7;
elseif v < 881.0 then
index = 8;
elseif v < 976.0 then
index = 9;
elseif v < 1079.0 then
index = 10;
else
index = 11
end
return index
end
--配置Core的USB口以虚拟串口模式工作,这样print()输出的内容就可以在电脑串口终端上显示了
LIB_UsbConfig("CDC")
--配置AD电压采集功能,最大值采样值4096对应3.6V输入电压
--当通道采集满1个点时缓存满,每个点的采集时间间隔为300ms
LIB_ADConfig(1,300000)
--开始大循环
while(GC(1) == true)
do
--每隔300ms查询A0通道是否转换完成
--开发者也可以将传感器接至A1-A3中的任一通道,也可以多个通道接多个传感器,用法都和下面一样
LIB_DelayMs(300)
A0_full_flag, A0_buf = LIB_ADCheckBufFull("A0")
if A0_full_flag == 1 then
vol_mv = A0_buf[1]*3600/4096.0 --将AD原始值转换成电压(单位:mv)
uv_index = GetUvIndex(vol_mv)--将电压转换成紫外等级指数
--打印输出A0通道的AD采样值以及对应的电压值和紫外线强度
print(string.format("A0=%04d vol=%.0fmv index=%02d",A0_buf[1],vol_mv,uv_index))
end
end
如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。

五、代码运行测试结果(天气:初夏晴天,上午十点阳光)

步骤一:将传感器放入室内无阳光照射环境

pic0

result0

此时传感器输出的电压接近于0mv,紫外线指数等级也为0

步骤二:将传感器放入室内有阳光但隔着窗户的环境

pic1

result1

此时传感器输出的电压在150~160mv左右,紫外线指数等级为1

步骤三:将传感器放入室内有阳光的环境直接照射

pic2

result2

此时传感器输出的电压在470~480mv左右,紫外线指数等级为4

步骤四:将传感器放在户外阳光下直接照射

pic3

result3

此时传感器输出的电压在660~670mv左右,紫外线指数等级也为6

结论:

通过上面实验可以看出,传感器在"无阳光"-->"室内隔着玻璃"-->"室内不隔玻璃"-->"户外正对阳光下"这四个状态输出的电压值分别为:0mv,160mv, 480mv,670mv,对应着紫外线指数等级0,1,4,6。

可以看出紫外线强度越大,传感器输出的电压值越高,相应的紫外线指数等级也就越高。