|
如果您对传感器感兴趣,那么您可能对近距离检测传感器很熟悉。有各种可用于近距离检测的传感器;每种传感器都有自己的功能和局限性。
其中一种方法是使用红外收发器。这些传感器测量红外光束来回传播所需的时间,并计算传感器与目标表面之间的距离。
在本篇帖子中,我们将介绍TMD27713距离检测传感器。无论您是初学者还是经验丰富的人,本文都可以帮助您逐步了解TMD27713传感器。
所需的组件 ● TMD27713 IRLED + ALS + 接近传感器模块 ● Arduino UNO R3开发板 ● 公对母跳线
TMD27713传感器简介 TMD27713芯片是一种基于红外光束的近距离检测传感器。我们还可以使用其接收器来检测环境光强度。该芯片包括一个数字接近传感器、一个LED驱动器和一个红外LED,它们集成在一起,无需校准。
此外,该芯片可以消除背景光,使其能够在各种条件下工作,从非常明亮的环境到黑暗的房间。它还具有宽动态范围,适合检测短距离。此外,该芯片使用微光学透镜更有效地传输和接收红外能量。
TMD27713模块引脚排列 该模块共有5个引脚,如下图所示。
TMD27713传感器模块与Arduino开发板的硬件连接 现在,让我们看看如何使用TMD27713传感器和Arduino测量距离。将TMD27713模块连接到Arduino开发板,如下图所示。
示例代码 将以下代码复制到Arduino IDE软件中并将其上传到您的开发板。
- #include <Wire.h>
- // TMD2771 I2C address is 39(57)
- #define Addr 0x39
- void setup()
- {
- // Initialise I2C communication as MASTER
- Wire.begin();
- // Initialise Serial Communication, set baud rate = 9600
- Serial.begin(9600);
-
- Wire.beginTransmission(Addr); // Start I2C Transmission
- Wire.write(0x00 | 0xA0); // Select enable register
-
- Wire.write(0x0F); // Set power on, proximity and ALS enabled
- Wire.endTransmission();// Stop I2C Transmission
-
- Wire.beginTransmission(Addr); // Start I2C Transmission
- Wire.write(0x01 | 0xA0); // Select ALS time register
- Wire.write(0xDB); // Atime = 101 ms
- Wire.endTransmission(); // Stop I2C Transmission
-
- Wire.beginTransmission(Addr); // Start I2C Transmission
- Wire.write(0x02 | 0xA0); // Select proximity time register
- Wire.write(0xFF); // Ptime = 2.72 ms
- Wire.endTransmission();// Stop I2C Transmission
- Wire.beginTransmission(Addr); // Start I2C Transmission
- Wire.write(0x03 | 0xA0); // Select Wait time register
- Wire.write(0xFF); // Wtime = 2.72 ms
- Wire.endTransmission();// Stop I2C Transmission
-
-
- Wire.beginTransmission(Addr); // Start I2C Transmission
- Wire.write(0x0E | 0xA0); // Select pulse count register
- Wire.write(0x04); // Pulse count = 4
- Wire.endTransmission();// Stop I2C Transmission
-
-
- Wire.beginTransmission(Addr); // Start I2C Transmission
- Wire.write(0x0F | 0xA0); // Select control register
- // 120 mA LED strength, Proximtiy uses CH1 diode, 1x PGAIN, 1x AGAIN
- Wire.write(0x20);
- Wire.endTransmission();// Stop I2C Transmission
- delay(800);
- }
- void loop()
- {
- unsigned int data[6];
-
-
- Wire.beginTransmission(Addr); // Start I2C Transmission
- Wire.write(0x14 | 0xA0); // Select data register
- Wire.endTransmission();// Stop I2C Transmission
-
- // Request 6 bytes of data
- Wire.requestFrom(Addr, 6);
-
- // Read 6 bytes of data
- // c0Data lsb, c0Data msb, c1Data lsb, c1Data msb, proximity lsb, proximity msb
- if(Wire.available() == 6)
- {
- data[0] = Wire.read();
- data[1] = Wire.read();
- data[2] = Wire.read();
- data[3] = Wire.read();
- data[4] = Wire.read();
- data[5] = Wire.read();
- }
-
- // Convert the data
- int c0Data = (data[1] * 256) + data[0];
- int c1Data = (data[3] * 256) + data[2];
- double proximity = (data[5] * 256.0) + data[4];
- float CPL = (101.0) / 24.0;
- float luminance1 = (1 * c0Data - 2 * c1Data) / CPL;
- float luminance2 = (0.6 * c0Data - 1.00 * c1Data) / CPL;
- float luminance = 0.0;
-
- if((luminance1 > 0) && (luminance1 > luminance2))
- {
- luminance = luminance1;
- }
- else if((luminance2 > 0) && (luminance2 > luminance1))
- {
- luminance = luminance2;
- }
-
- // Output data to serial monitor
- Serial.print("Ambient Light luminance : ");
- Serial.print(luminance);
- Serial.println(" lux");
- Serial.print("Proximity of the device : ");
- Serial.println(proximity);
- delay(1000);
- }
复制代码
上传代码后,选择串口和开发板型号,然后打开串口监视器。确保波特率设置为9600。
如您所见,模块将亮度等级和距离发送到串口。将障碍物移近或远离模块,您可以观察到距离的变化。根据我们在代码中对TMD27713模块所做的调整,最小可检测距离为4厘米。
以上就是使用Arduino开发板连接TMD27713传感器模块的方法,如果有任何疑问,请随时在帖下面回复。 |