御坂10032号 发表于 2024-11-18 19:38

X-NUCLEO-53L4A3 飞行时间 (ToF) 传感器 [距离精度测试-不同传感器对比]

本帖最后由 御坂10032号 于 2024-11-18 19:59 编辑

<p><strong><span style="font-size:24px;">简介</span></strong></p>

<p>&nbsp;</p>

<p>在本章节中我们将使用Tof传感器和常见的支持测距的传感器进行测距精度的对比。由于并非是完全精密的环境下,实验的结果仅供参考(但是也是可以通过测试来大概的评测出不同种类传感器的精度等)。</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p><strong><span style="font-size:24px;">正文</span></strong></p>

<p>&nbsp;</p>

<p>本次设计的传感器一共有三个</p>

<p>&nbsp;</p>

<p>1- 超声波测距模块</p>

<p> &nbsp;</p>

<p>2- 安信可RD-03E雷达模块(精准测距固件)</p>

<p> &nbsp;</p>

<p>3-Tof传感器53L4A3&nbsp;</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>上图中, 安信可的RD-03E使用的串口连接到串口工具。接线方式如下图所示</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>ESP32-C6的Oled屏幕和超声波测距代码如下所示</p>

<p>&nbsp;</p>

<pre>
<code class="language-cpp">/**********************************************************************
程序名称/Program name   : words_display_with_ultrasonic
团队/Team               : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author               : Dapenson
日期/Date(YYYYMMDD)   : 2020/07/01
程序目的/Purpose          :
使用OLED0.96 IIC 12864显示文字,并实时显示超声波传感器测量的距离
-----------------------------------------------------------------------
修订历史/Revision History
日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description
-----------------------------------------------------------------------
其它说明:
***********************************************************************/

// 引入IIC通讯所需的Wire库文件
#include &lt;Wire.h&gt;

// 引入驱动OLED0.96所需的库
#include &lt;Adafruit_GFX.h&gt;
#include &lt;Adafruit_SSD1306.h&gt;

#define SCREEN_WIDTH 128 // 设置OLED宽度,单位:像素
#define SCREEN_HEIGHT 64 // 设置OLED高度,单位:像素

// 自定义重置引脚,虽然教程未使用,但却是Adafruit_SSD1306库文件所必需的
#define OLED_RESET 4
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &amp;Wire, OLED_RESET);

// 定义 I2C 引脚
#define OLED_SDA 7
#define OLED_SCL 6

// 定义超声波传感器的引脚
#define TRIGGER_PIN 5
#define ECHO_PIN 4

void setup()
{
// 初始化串口,用于调试
Serial.begin(115200);
Serial.println("Starting OLED Test");

// 使用 GPIO 6 和 GPIO 7 初始化 I2C
Wire.begin(OLED_SDA, OLED_SCL);

// 初始化OLED并设置其IIC地址为 0x3C
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C))
{
    Serial.println("SSD1306 allocation failed");
    for (;;)
      ; // 停止程序
}

// 清屏并设置默认显示内容
display.clearDisplay();
display.display();

// 设置超声波传感器的引脚模式
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);

// 确保触发引脚初始为低
digitalWrite(TRIGGER_PIN, LOW);
}

void loop()
{
float distance = readUltrasonicDistance();
words_display(distance);
display.display();
}

void words_display(float distance)
{
// 清除屏幕
display.clearDisplay();

// 设置字体颜色,白色可见
display.setTextColor(WHITE);

// 设置字体大小
display.setTextSize(1);

// 设置光标位置
display.setCursor(0, 0);
display.print("TaichiMaker");

display.setCursor(0, 20);
display.print("time: ");
// 打印自开发板重置以来的秒数:
display.print(millis() / 1000);
display.print(" s");

display.setCursor(0, 40);
display.print("Distance: ");
display.print(distance);
display.print(" cm");
}

// 读取超声波传感器的距离
float readUltrasonicDistance()
{
// 发送超声波信号
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);

// 读取回波时间
long duration = pulseIn(ECHO_PIN, HIGH);

// 将时间转换为距离(单位:厘米)
// 声速 343 m/s =&gt; 0.0343 cm/μs
// 距离 = (时间 * 声速) / 2
float distance = (duration * 0.0343) / 2;

return distance;
}
</code></pre>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p><strong><span style="font-size:22px;">测试步骤</span></strong></p>

<p>&nbsp;</p>

<p><strong>准备:</strong></p>

<p>&nbsp;</p>

<p>使用直尺在桌面上量出一个标准45CM的长度,然后使用刀片在桌子上刻上刻度。&nbsp;</p>

<p>&nbsp;</p>

<p><strong>测试:</strong></p>

<p>分别使用 TOF传感器, 超声波传感器和雷达在刻度处对45CM处的挡板(纸片进行测距)并且得到数据</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p><strong>1- 使用超声波传感器</strong></p>

<p> &nbsp;</p>

<p>&nbsp; <strong>结果 44.54</strong></p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>2 - 使用TOF传感器</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>这里分为两种情况, 1 - 物体的表面不是黑色(即不吸光)&nbsp; 2- 物体的表面为黑色 (吸光)</p>

<p>&nbsp;</p>

<p><strong>反射物体表面不为黑色的测试结果(非常准确)</strong></p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p><strong>反射物体表面为黑色的测试结果(42.1 cm)</strong></p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p> &nbsp;</p>

<p><strong>雷达的测试结果(我觉得专业的事情还是要让专业的传感器干,雷达也是重在参与。 36CM上下偏移)&nbsp;</strong></p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p><strong><span style="font-size:24px;">总结</span></strong></p>

<p>&nbsp;</p>

<p>从这次测试结果上来看, TOF传感器的精度非常高, 在45CM的情况下,误差基本上可以忽略不记(测试中非常准确45CM)但是TOF传感器在反射物体为黑色的情况下,精度偏差的比较厉害。(421mm 对比 450MM)。 在实际的应用中,应该考虑到这种可能出现的误差情况。 比如说使用多个传感器来进行比对, 如果被测物体为黑色,则不使用TOF传感器。或者使用上图中的信号强度进行判断。 可以看到如果被测物体(发生光反射的物体)为非黑色的话,<b>信号强度S </b>达到了<strong>32,</strong>但是如果为黑色的话,信号强度仅仅有<strong>8.48</strong></p>

<p>&nbsp;</p>
页: [1]
查看完整版本: X-NUCLEO-53L4A3 飞行时间 (ToF) 传感器 [距离精度测试-不同传感器对比]