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
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!