Xadow UV Sensor UV传感器

From Wiki
Jump to: navigation, search

产品简介

Xadow UV 传感器是用来检测太阳光中的紫外线强度,检测的波长范围为290 ~ 400 nm。UV传感器输出的是数字电压值,通过电压与UV 强度的关系曲线,就可以很方便的知道当前的紫外线强度。

规格参数

检测 UV-A and UV-B 波段 光谱响应范围: 290 ~ 400nm 峰值灵敏度波长: 330nm 灵敏度: ±0.1 UV Index 操作温度: -25 ~ 70 ℃ 应用示例

Xadow UV Sensor可以输出数字电压值。电压值与紫外线强度之间存在线性关系,所以通过一个公式就可以直接计算出当前的紫外线强度。下面我们演示如何使用Xadow UV Sensor 来获取当前的紫外线强度值,并最终显示在OLED屏幕上。

需要的模块: Xadow Main Board、Xadow OLED 12864、Xadow UV Sensor 硬件连接: 图片 下载代码: 在进行其他操作之前,请确保Arduino Library 中已有库文件OLED_Display12864。如果还没有这个文件,那么点击这里你就可以下载。 下载完成后记得将库文件添加到你的Arduino Library 中。关于具体的添加方法,可以参考wiki首页的Arduino库文件的安装 复制并粘贴下面的代码到Arduino IDE,并上传.

  1. include <Wire.h>
  2. include <SeeedOLED.h>
  3. include <Streaming.h>
  1. define ADDR_ADC121 0x5A
  1. define V_REF 3.00
  1. define REG_ADDR_RESULT 0x00
  2. define REG_ADDR_ALERT 0x01
  3. define REG_ADDR_CONFIG 0x02
  4. define REG_ADDR_LIMITL 0x03
  5. define REG_ADDR_LIMITH 0x04
  6. define REG_ADDR_HYST 0x05
  7. define REG_ADDR_CONVL 0x06
  8. define REG_ADDR_CONVH 0x07

unsigned int getData; float analogVal=0; float UVIndex = 0; void init_adc() {

 Wire.beginTransmission(ADDR_ADC121);        // transmit to device
 Wire.write(REG_ADDR_CONFIG);                // Configuration Register
 Wire.write(0x20);
 Wire.endTransmission();  

} void setup() {

 Wire.begin();
 Serial.begin(38400);
 SeeedOled.init();  //initialze SEEED OLED display
 SeeedOled.clearDisplay();  // clear the screen and set start position to top left corner
 
 init_adc();

}

void loop() {

   readVoltage();  
   //SeeedOled.clearDisplay(); 
   SeeedOled.setTextXY(1,0);
   SeeedOled.putString("Voltage: ");
   SeeedOled.setTextXY(1,8);
   SeeedOled.putFloat(analogVal);
   SeeedOled.setTextXY(1,12);
   SeeedOled.putString("mV");
   SeeedOled.setTextXY(2,0);
   SeeedOled.putString("UVIndex: ");
   SeeedOled.setTextXY(2,8);
   SeeedOled.putFloat(UVIndex);
   delay(50);

} void readVoltage() //unsigned int *data {

   Wire.beginTransmission(ADDR_ADC121);        // transmit to device
   Wire.write(REG_ADDR_RESULT);                // get reuslt
   Wire.endTransmission();
   Wire.requestFrom(ADDR_ADC121, 2);           // request 2byte from device
   delay(1);
   if(Wire.available()<=2)
   {
     getData = (Wire.read()&0x0f)<<8;
     getData |= Wire.read();
   }
   delay(50);
   analogVal = getData*V_REF/4096/2;
   Serial.print("analogVal:");
   Serial.print(analogVal); 
   Serial.println("mV"); 
   UVIndex = analogVal/9.71;
    Serial.print("UVIndex:");
   Serial.println(UVIndex); 
   

} 打开串口,可看到输出的电压值和紫外线强度值: 在OLED屏幕上可看到计算出的紫外线强度值: 参照下面的表,知道电压值后你也可以自己算出当前UV值的。


Voltage and UVI.jpg


在Xadow UV Sensor中,我们选用的是3M电阻,所以你就需要参考RL=3M这条线来计算UV值。电压与UV的线性关系我们已经计算出来了,即UV Index = Voltage/9.71 ,在上面的代码中我们辨识便是使用这个公式得到UV值的。

拓展阅读

UV I2C 地址 Xadow UV Sensor有一个7位的硬件地址,作为从机地址使用。I2C地址的设置是由管脚ADR0 和 ADR1来决定的。管脚 ADR0 和 ADR1 可以选择连接低电平或者高电平,也可以将他们悬空。管脚的不同连接状态将决定了这个模块的I2C 地址有所不同。

Slave Address[A6 - A0] ADR0 and ADR1 inputs state ADR1 ADR0 1010000(0x50) Floating Floating 1010001(0x51) Floating L 1010010(0x52) Floating H 1010100(0x54) L Floating 1010101(0x55) L L 1010110(0x56) L H 1011000(0x58) H Floating 1011001(0x59) H L 1011010(default 0x5A) H H 默认情况, ADR0 和 ADR1管脚是连接到高电平("H").

UV传感器的光电响应光谱曲线


Responsivity.jpg