ESP8266-Arduino编程实例-ML8511紫外线(UV)传感器驱动

ML8511紫外线(UV)传感器驱动

1、ML8511介绍

ML8511 是一款紫外线传感器,适用于室内或室外获取紫外线强度。 ML8511 配备了一个内部放大器,可根据紫外线强度将光电流转换为电压。 这种独特的功能提供了与 ADC 等外部电路的简单接口。 在掉电模式下,典型的待机电流为 0.1

μ

\mu

μA,因此可以延长电池寿命。

ML8511测量太阳光中的紫外线量,用于通过紫外线显示晒黑的设备、皮肤紫外线护理的指导等

传感器最有效地检测 280-390nm 光。 这被归类为 UVB(燃烧射线)光谱和大部分 UVA(晒黑射线)光谱的一部分。 它输出与测得的紫外线强度 (mW/cm2) 线性相关的模拟电压。 如果微控制器可以进行模数信号转换,那么就可以检测紫外线的水平!

在这里插入图片描述

ML8511具有如下特性:

  • 对 UV-A 和 UV-B 敏感的光电二极管
  • 嵌入式运算放大器
  • 模拟电压输出
  • 低电源电流(300A typ.)和低待机电流(0.1A typ.)
  • 小而薄的表面贴装封装(4.0mm x 3.7mm x 0.73mm,12 引脚陶瓷 QFN)

2、硬件准备

  • ESP8266 NodeMCU开发板一块
  • ML8551传感器模块一个
  • 面板板一个
  • 杜邦线若干
  • 数据线一条

硬件接线如下:

在这里插入图片描述

3、软件准备

  • Arduino IDE或VSCode + PlatformIO

在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:

ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:

4、代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// 传感器引脚
int UVsensorIn = A0;

void setup()
{
// 设置引脚模式为输入模式
pinMode(UVsensorIn, INPUT);
// 初始化串口
Serial.begin(9600);
}

void loop()
{
// 读取传感器数据
int uvLevel = averageAnalogRead(UVsensorIn);

// 转换成紫外线强度
float outputVoltage = 3.3 \* uvLevel/1024;
float uvIntensity = mapfloat(outputVoltage, 0.99, 2.9, 0.0, 15.0);

Serial.print(" UV Intensity: ");
Serial.print(uvIntensity);
Serial.print(" mW/cm^2");
Serial.println();
delay(200);
}

// 传感器数据采样
int averageAnalogRead(int pinToRead)
{
byte numberOfReadings = 8;
unsigned int runningValue = 0;

for(int x = 0 ; x < numberOfReadings ; x++)
runningValue += analogRead(pinToRead);
runningValue /= numberOfReadings;

return(runningValue);

}


// 转换为浮点数据
float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) \* (out_max - out_min) / (in_max - in_min) + out_min;
}

文章来源: https://iotsmart.blog.csdn.net/article/details/126309818