ESP8266-Arduino编程实例-LTR390紫外光传感器驱动

LTR390紫外光传感器驱动

1、LTR390介绍

LTR390将光强度转换为能够直接 I2C 接口的数字输出信号。

它在宽动态范围内提供线性 ALS 响应,非常适合高环境亮度下的应用。

该传感器具有一个可编程中断,具有滞后响应事件,并且无需轮询传感器以获取读数,从而提高了系统效率。

这种 CMOS 设计和出厂设置的一次性微调功能可确保传感器间的差异最小化,从而便于最终客户进行制造。

在这里插入图片描述

LTR390具有如下特性:

  • I2C 接口支持标准模式@100kHz 或快速模式@400kHz 通信; 1.8V逻辑兼容
  • 环境光/紫外线 (UVS) 技术在一个超小型 2x2mm ChipLED 封装中
  • 具有睡眠模式功能的极低功耗
  • 工作电压范围:1.7V 至 3.6V
  • 工作温度范围:-40 至 +85 ºC
  • 内置温度补偿电路
  • 具有上限和下限阈值的 ALS 、UVS 可编程中断功能

UVS/ALS 特性如下:

  • 13 到 20 位有效分辨率
  • 1:18,000,000 的宽动态范围,具有线性响应
  • 接近人眼光谱响应
  • 自动抑制 50Hz/60Hz 灯光闪烁

2、硬件准备

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

硬件接线如下:

传感器引脚 ESP8266开发板引脚
Vin 5v
Gnd Gnd
SCL D1
SDA D2

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
49
50
51
52
53
54
55
56
57
#include "Adafruit\_LTR390.h"

Adafruit_LTR390 ltr = Adafruit\_LTR390();

void setup() {
Serial.begin(115200);
Serial.println("Adafruit LTR-390 test");

if ( ! ltr.begin() ) {
Serial.println("Couldn't find LTR sensor!");
while (1) delay(10);
}
Serial.println("Found LTR sensor!");

ltr.setMode(LTR390_MODE_UVS);
if (ltr.getMode() == LTR390_MODE_ALS) {
Serial.println("In ALS mode");
} else {
Serial.println("In UVS mode");
}

ltr.setGain(LTR390_GAIN_3);
Serial.print("Gain : ");
switch (ltr.getGain()) {
case LTR390_GAIN_1: Serial.println(1); break;
case LTR390_GAIN_3: Serial.println(3); break;
case LTR390_GAIN_6: Serial.println(6); break;
case LTR390_GAIN_9: Serial.println(9); break;
case LTR390_GAIN_18: Serial.println(18); break;
}

ltr.setResolution(LTR390_RESOLUTION_16BIT);
Serial.print("Resolution : ");
switch (ltr.getResolution()) {
case LTR390_RESOLUTION_13BIT: Serial.println(13); break;
case LTR390_RESOLUTION_16BIT: Serial.println(16); break;
case LTR390_RESOLUTION_17BIT: Serial.println(17); break;
case LTR390_RESOLUTION_18BIT: Serial.println(18); break;
case LTR390_RESOLUTION_19BIT: Serial.println(19); break;
case LTR390_RESOLUTION_20BIT: Serial.println(20); break;
}

ltr.setThresholds(100, 1000);
ltr.configInterrupt(true, LTR390_MODE_UVS);
}

void loop()
{
if (ltr.newDataAvailable())
{
Serial.print("UV data: ");
Serial.println(ltr.readUVS());
}

delay(100);
}

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