[分享] Arduino光线传感器-UV Sensor V1.0-ML8511紫外线传感器 看全部

外观
26.jpg
概述
  • 该模块采用了通用的ML8511 UV传感器原件,可以用来检测室内或室外的紫外线密度。
  • 通过将光电流转化成电压的原理来检测UV强度,同时非常适合被被外部电路所采用。
  • 该模快还具备省电模式可达0.1uA,适合在智能可穿戴和手机等设备上使用。
应用
  • 紫外线等级监视器
  • 环境监测仪、气象站
  • DIY紫外线互动装置
技术规格
  • 工作电压:DC 5V
  • 工作温度:-20~70°C
  • 敏感区域:UV-A,UV-B
  • 敏感波长: 280-390nm
  • 模块尺寸:30 x 22mm
连接示意图
27.png
紫外线传感器连接示意图
ML8511 UV等级图表
28.jpg
ML8511 UV等级图表
  • 从图表上可以看到紫外线输出电压映射到等级是一条直线,从1.0V开始,最大是2.8V(15mW/cm2)。
  • Arduino虽然有一个内置的函数map() function,但是map()是不能工作在浮点型的。这里要感谢Arduino社区开源奉献者才有了下面的一个简单的mapfloat()函数,方便我们使用。
  1. //The Arduino Map function but for floats
  2. //From: http://forum.arduino.cc/index.php?topic=3922.0
  3. float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
  4. {
  5.   return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
  6. }

  • 下面是将传感器读到的电压值转换成mW/cm2等级:
  1. float uvIntensity = mapfloat(outputVoltage, 0.99, 2.8, 0.0, 15.0); //Convert the voltage to a UV intensity level
示例代码
  1.     /***************************************************
  2.     * UV Sensor v1.0-ML8511
  3.     * <....>
  4.     ***************************************************
  5.     * This example reads UV intensity from UV Sensor v1.0-ML8511.
  6.     *
  7.     * Created 2014-9-23
  8.     * By Phoebe <phoebe.wang@dfrobot.com>
  9.     * Modified 2014-9-23
  10.     * By Phoebe phoebe.wang@dfrobot.com>
  11.     *
  12.     * GNU Lesser General Public License.
  13.     * See <http://www.gnu.org/licenses/> for details.
  14.     * All above must be included in any redistribution
  15.     ****************************************************/

  16.     /***********Notice and Trouble shooting***************
  17.     * 1.Connect ML8511 UV Sensor to Arduino A0
  18.     <http://wiki.dfrobot.com.cn/index.php/%E6%96%87%E4%BB%B6:SEN0175_Diagram.png>
  19.     * 2.This code is tested on Arduino Uno, Leonardo, Mega boards.
  20.     ****************************************************/





  21. int ReadUVintensityPin = A0; //Output from the sensor

  22. void setup()
  23. {
  24.   pinMode(ReadUVintensityPin, INPUT);
  25.   Serial.begin(9600); //open serial port, set the baud rate to 9600 bps
  26.   Serial.println("Starting up...");
  27. }

  28. void loop()
  29. {
  30.   int uvLevel = averageAnalogRead(ReadUVintensityPin);

  31.   float outputVoltage = 5.0 * uvLevel/1024;
  32.   float uvIntensity = mapfloat(outputVoltage, 0.99, 2.9, 0.0, 15.0);

  33.   Serial.print("UVAnalogOutput: ");
  34.   Serial.print(uvLevel);

  35.   Serial.print(" OutputVoltage: ");
  36.   Serial.print(outputVoltage);

  37.   Serial.print(" UV Intensity: ");
  38.   Serial.print(uvIntensity);
  39.   Serial.print(" mW/cm^2");

  40.   Serial.println();
  41.   delay(100);
  42. }

  43. //Takes an average of readings on a given pin
  44. //Returns the average
  45. int averageAnalogRead(int pinToRead)
  46. {
  47.   byte numberOfReadings = 8;
  48.   unsigned int runningValue = 0;

  49.   for(int x = 0 ; x < numberOfReadings ; x++)
  50.     runningValue += analogRead(pinToRead);
  51.   runningValue /= numberOfReadings;

  52.   return(runningValue);  

  53. }

  54. //The Arduino Map function but for floats
  55. //From: http://forum.arduino.cc/index.php?topic=3922.0
  56. float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
  57. {
  58.   return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
  59. }

你可以用一个紫外LED灯或者在阳光下测试你的传感器,赶紧来测试看看你的周围的紫外线等级吧~



不错,还配了代码