风筝
发表于: 前天 17:04 | 显示全部楼层

如果您对传感器感兴趣,那么您可能对近距离检测传感器很熟悉。有各种可用于近距离检测的传感器;每种传感器都有自己的功能和局限性。


其中一种方法是使用红外收发器。这些传感器测量红外光束来回传播所需的时间,并计算传感器与目标表面之间的距离。


在本篇帖子中,我们将介绍TMD27713距离检测传感器。无论您是初学者还是经验丰富的人,本文都可以帮助您逐步了解TMD27713传感器。


所需的组件

●    TMD27713 IRLED + ALS + 接近传感器模块

●    Arduino UNO R3开发板

●    公对母跳线


TMD27713传感器简介

TMD27713芯片是一种基于红外光束的近距离检测传感器。我们还可以使用其接收器来检测环境光强度。该芯片包括一个数字接近传感器、一个LED驱动器和一个红外LED,它们集成在一起,无需校准。

TMD27713-Intro.jpg


此外,该芯片可以消除背景光,使其能够在各种条件下工作,从非常明亮的环境到黑暗的房间。它还具有宽动态范围,适合检测短距离。此外,该芯片使用微光学透镜更有效地传输和接收红外能量。


TMD27713模块引脚排列

该模块共有5个引脚,如下图所示。

TMD27713-Pin-definition.jpg


TMD27713传感器模块与Arduino开发板的硬件连接

现在,让我们看看如何使用TMD27713传感器和Arduino测量距离。将TMD27713模块连接到Arduino开发板,如下图所示。

TMD27713-wiring.jpg


示例代码

将以下代码复制到Arduino IDE软件中并将其上传到您的开发板。


  1. #include <Wire.h>

  2. // TMD2771 I2C address is 39(57)
  3. #define Addr 0x39

  4. void setup()
  5. {
  6.   // Initialise I2C communication as MASTER
  7.   Wire.begin();
  8.   // Initialise Serial Communication, set baud rate = 9600
  9.   Serial.begin(9600);
  10.   
  11.   Wire.beginTransmission(Addr); // Start I2C Transmission
  12.   Wire.write(0x00 | 0xA0); // Select enable register
  13.   
  14.   Wire.write(0x0F); // Set power on, proximity and ALS enabled
  15.   Wire.endTransmission();// Stop I2C Transmission

  16.   
  17.   Wire.beginTransmission(Addr); // Start I2C Transmission
  18.   Wire.write(0x01 | 0xA0); // Select ALS time register
  19.   Wire.write(0xDB); // Atime = 101 ms
  20.   Wire.endTransmission();  // Stop I2C Transmission

  21.   
  22.   Wire.beginTransmission(Addr); // Start I2C Transmission  
  23.   Wire.write(0x02 | 0xA0); // Select proximity time register  
  24.   Wire.write(0xFF); // Ptime = 2.72 ms  
  25.   Wire.endTransmission();// Stop I2C Transmission

  26.   Wire.beginTransmission(Addr); // Start I2C Transmission
  27.   Wire.write(0x03 | 0xA0); // Select Wait time register
  28.   Wire.write(0xFF); // Wtime = 2.72 ms
  29.   Wire.endTransmission();// Stop I2C Transmission
  30.   
  31.   
  32.   Wire.beginTransmission(Addr); // Start I2C Transmission
  33.   Wire.write(0x0E | 0xA0); // Select pulse count register
  34.   Wire.write(0x04); // Pulse count = 4
  35.   Wire.endTransmission();// Stop I2C Transmission
  36.   
  37.   
  38.   Wire.beginTransmission(Addr); // Start I2C Transmission  
  39.   Wire.write(0x0F | 0xA0); // Select control register
  40.   // 120 mA LED strength, Proximtiy uses CH1 diode, 1x PGAIN, 1x AGAIN
  41.   Wire.write(0x20);  
  42.   Wire.endTransmission();// Stop I2C Transmission
  43.   delay(800);  
  44. }

  45. void loop()
  46. {
  47.   unsigned int data[6];
  48.   
  49.   
  50.   Wire.beginTransmission(Addr); // Start I2C Transmission  
  51.   Wire.write(0x14 | 0xA0); // Select data register  
  52.   Wire.endTransmission();// Stop I2C Transmission
  53.   
  54.   // Request 6 bytes of data
  55.   Wire.requestFrom(Addr, 6);
  56.   
  57.   // Read 6 bytes of data
  58.   // c0Data lsb, c0Data msb, c1Data lsb, c1Data msb, proximity lsb, proximity msb
  59.   if(Wire.available() == 6)
  60.   {
  61.     data[0] = Wire.read();
  62.     data[1] = Wire.read();
  63.     data[2] = Wire.read();
  64.     data[3] = Wire.read();
  65.     data[4] = Wire.read();
  66.     data[5] = Wire.read();
  67.   }
  68.   
  69.   // Convert the data
  70.   int c0Data = (data[1] * 256) + data[0];
  71.   int c1Data = (data[3] * 256) + data[2];
  72.   double proximity = (data[5] * 256.0) + data[4];
  73.   float CPL = (101.0) / 24.0;
  74.   float luminance1 = (1 * c0Data - 2 * c1Data) / CPL;
  75.   float luminance2 = (0.6 * c0Data - 1.00 * c1Data) / CPL;
  76.   float luminance = 0.0;
  77.   
  78.   if((luminance1 > 0) && (luminance1 > luminance2))
  79.   {
  80.     luminance = luminance1;
  81.   }
  82.   else if((luminance2 > 0) && (luminance2 > luminance1))
  83.   {
  84.     luminance = luminance2;
  85.   }
  86.   
  87.   // Output data to serial monitor
  88.   Serial.print("Ambient Light luminance : ");
  89.   Serial.print(luminance);
  90.   Serial.println(" lux");
  91.   Serial.print("Proximity of the device : ");
  92.   Serial.println(proximity);
  93.   delay(1000);
  94. }
复制代码

上传代码后,选择串口和开发板型号,然后打开串口监视器。确保波特率设置为9600。

TMD27713-Select-serial-port.jpg


如您所见,模块将亮度等级和距离发送到串口。将障碍物移近或远离模块,您可以观察到距离的变化。根据我们在代码中对TMD27713模块所做的调整,最小可检测距离为4厘米。

TMD27713-Serial-Output.jpg

以上就是使用Arduino开发板连接TMD27713传感器模块的方法,如果有任何疑问,请随时在帖下面回复。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-21 00:08 , Processed in 0.062154 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表