ESP8266-Arduino编程实例-VCNL4040趋近传感器

VCNL4040趋近传感器

1、VNCL4040介绍

VCNL4040 将趋近传感器 (PS)、环境光传感器 (ALS) 和高功率 IRED 集成到一个小型封装中。它通过CMOS工艺将光电二极管、放大器和模数转换电路集成到一个芯片中。

在这里插入图片描述

VCNL4040 具有16 位高分辨率 ALS 提供出色的传感能力,有足够的选择来满足大多数应用,无论是暗透镜还是高透明度透镜设计。

可以为 ALS 和 PS 编程高和低中断阈值,从而允许组件使用最少量的微控制器资源。趋近传感器采用智能消除方案,有效消除串扰现象。为加快 PS 响应时间,智能持久性可防止趋近感应的误判,同时保持快速响应时间。

VCNL4040在主动力模式下,可以请求单次测量,从而提供另一种更好的设计灵活性,以更省电的方式满足不同类型的应用。

获得专利的 Filtron 技术可实现最趋近真实人眼响应的环境光谱灵敏度,并提供最佳的背景光消除能力(包括阳光),而无需利用微控制器的资源。

VCNL4040 提供出色的温度补偿能力,可在各种温度配置下保持输出稳定。 ALS 和 PS 功能可通过 I2C 接口协议的简单命令格式轻松设置。

VCNL4040的工作电压范围为 2.5 V 至 3.6 V。

2、硬件准备

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

硬件接线如下:

传感器引脚 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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <Adafruit\_VCNL4040.h>

Adafruit_VCNL4040 vcnl4040 = Adafruit_VCNL4040();

void setup() {
Serial.begin(115200);
// Wait until serial port is opened
while (!Serial) { delay(1); }

Serial.println("Adafruit VCNL4040 Config demo");

if (!vcnl4040.begin()) {
Serial.println("Couldn't find VCNL4040 chip");
while (1);
}
Serial.println("Found VCNL4040 chip");

//vcnl4040.setProximityLEDCurrent(VCNL4040_LED_CURRENT_200MA);
Serial.print("Proximity LED current set to: ");
switch(vcnl4040.getProximityLEDCurrent()) {
case VCNL4040_LED_CURRENT_50MA: Serial.println("50 mA"); break;
case VCNL4040_LED_CURRENT_75MA: Serial.println("75 mA"); break;
case VCNL4040_LED_CURRENT_100MA: Serial.println("100 mA"); break;
case VCNL4040_LED_CURRENT_120MA: Serial.println("120 mA"); break;
case VCNL4040_LED_CURRENT_140MA: Serial.println("140 mA"); break;
case VCNL4040_LED_CURRENT_160MA: Serial.println("160 mA"); break;
case VCNL4040_LED_CURRENT_180MA: Serial.println("180 mA"); break;
case VCNL4040_LED_CURRENT_200MA: Serial.println("200 mA"); break;
}

//vcnl4040.setProximityLEDDutyCycle(VCNL4040_LED_DUTY_1_40);
Serial.print("Proximity LED duty cycle set to: ");
switch(vcnl4040.getProximityLEDDutyCycle()) {
case VCNL4040_LED_DUTY_1_40: Serial.println("1/40"); break;
case VCNL4040_LED_DUTY_1_80: Serial.println("1/80"); break;
case VCNL4040_LED_DUTY_1_160: Serial.println("1/160"); break;
case VCNL4040_LED_DUTY_1_320: Serial.println("1/320"); break;
}

//vcnl4040.setAmbientIntegrationTime(VCNL4040_AMBIENT_INTEGRATION_TIME_80MS);
Serial.print("Ambient light integration time set to: ");
switch(vcnl4040.getAmbientIntegrationTime()) {
case VCNL4040_AMBIENT_INTEGRATION_TIME_80MS: Serial.println("80 ms"); break;
case VCNL4040_AMBIENT_INTEGRATION_TIME_160MS: Serial.println("160 ms"); break;
case VCNL4040_AMBIENT_INTEGRATION_TIME_320MS: Serial.println("320 ms"); break;
case VCNL4040_AMBIENT_INTEGRATION_TIME_640MS: Serial.println("640 ms"); break;
}


//vcnl4040.setProximityIntegrationTime(VCNL4040_PROXIMITY_INTEGRATION_TIME_8T);
Serial.print("Proximity integration time set to: ");
switch(vcnl4040.getProximityIntegrationTime()) {
case VCNL4040_PROXIMITY_INTEGRATION_TIME_1T: Serial.println("1T"); break;
case VCNL4040_PROXIMITY_INTEGRATION_TIME_1_5T: Serial.println("1.5T"); break;
case VCNL4040_PROXIMITY_INTEGRATION_TIME_2T: Serial.println("2T"); break;
case VCNL4040_PROXIMITY_INTEGRATION_TIME_2_5T: Serial.println("2.5T"); break;
case VCNL4040_PROXIMITY_INTEGRATION_TIME_3T: Serial.println("3T"); break;
case VCNL4040_PROXIMITY_INTEGRATION_TIME_3_5T: Serial.println("3.5T"); break;
case VCNL4040_PROXIMITY_INTEGRATION_TIME_4T: Serial.println("4T"); break;
case VCNL4040_PROXIMITY_INTEGRATION_TIME_8T: Serial.println("8T"); break;
}

//vcnl4040.setProximityHighResolution(false);
Serial.print("Proximity measurement high resolution? ");
Serial.println(vcnl4040.getProximityHighResolution() ? "True" : "False");

Serial.println("");

}

void loop() {

Serial.print("Proximity:"); Serial.println(vcnl4040.getProximity());
Serial.print("Ambient light:"); Serial.println(vcnl4040.getLux());
Serial.print("Raw white light:"); Serial.println(vcnl4040.getWhiteLight());
Serial.println("");

delay(500);
}

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