X-NUCLEO-53L4A3 飞行时间 (ToF) 传感器 [距离精度测试-不同传感器对比]
本帖最后由 御坂10032号 于 2024-11-18 19:59 编辑<p><strong><span style="font-size:24px;">简介</span></strong></p>
<p> </p>
<p>在本章节中我们将使用Tof传感器和常见的支持测距的传感器进行测距精度的对比。由于并非是完全精密的环境下,实验的结果仅供参考(但是也是可以通过测试来大概的评测出不同种类传感器的精度等)。</p>
<p> </p>
<p> </p>
<p><strong><span style="font-size:24px;">正文</span></strong></p>
<p> </p>
<p>本次设计的传感器一共有三个</p>
<p> </p>
<p>1- 超声波测距模块</p>
<p> </p>
<p>2- 安信可RD-03E雷达模块(精准测距固件)</p>
<p> </p>
<p>3-Tof传感器53L4A3 </p>
<p> </p>
<p> </p>
<p>上图中, 安信可的RD-03E使用的串口连接到串口工具。接线方式如下图所示</p>
<p> </p>
<p> </p>
<p> </p>
<p>ESP32-C6的Oled屏幕和超声波测距代码如下所示</p>
<p> </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 <Wire.h>
// 引入驱动OLED0.96所需的库
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // 设置OLED宽度,单位:像素
#define SCREEN_HEIGHT 64 // 设置OLED高度,单位:像素
// 自定义重置引脚,虽然教程未使用,但却是Adafruit_SSD1306库文件所必需的
#define OLED_RESET 4
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &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 => 0.0343 cm/μs
// 距离 = (时间 * 声速) / 2
float distance = (duration * 0.0343) / 2;
return distance;
}
</code></pre>
<p> </p>
<p> </p>
<p><strong><span style="font-size:22px;">测试步骤</span></strong></p>
<p> </p>
<p><strong>准备:</strong></p>
<p> </p>
<p>使用直尺在桌面上量出一个标准45CM的长度,然后使用刀片在桌子上刻上刻度。 </p>
<p> </p>
<p><strong>测试:</strong></p>
<p>分别使用 TOF传感器, 超声波传感器和雷达在刻度处对45CM处的挡板(纸片进行测距)并且得到数据</p>
<p> </p>
<p> </p>
<p><strong>1- 使用超声波传感器</strong></p>
<p> </p>
<p> <strong>结果 44.54</strong></p>
<p> </p>
<p> </p>
<p> </p>
<p>2 - 使用TOF传感器</p>
<p> </p>
<p> </p>
<p>这里分为两种情况, 1 - 物体的表面不是黑色(即不吸光) 2- 物体的表面为黑色 (吸光)</p>
<p> </p>
<p><strong>反射物体表面不为黑色的测试结果(非常准确)</strong></p>
<p> </p>
<p> </p>
<p> </p>
<p><strong>反射物体表面为黑色的测试结果(42.1 cm)</strong></p>
<p> </p>
<p> </p>
<p> </p>
<p><strong>雷达的测试结果(我觉得专业的事情还是要让专业的传感器干,雷达也是重在参与。 36CM上下偏移) </strong></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><strong><span style="font-size:24px;">总结</span></strong></p>
<p> </p>
<p>从这次测试结果上来看, TOF传感器的精度非常高, 在45CM的情况下,误差基本上可以忽略不记(测试中非常准确45CM)但是TOF传感器在反射物体为黑色的情况下,精度偏差的比较厉害。(421mm 对比 450MM)。 在实际的应用中,应该考虑到这种可能出现的误差情况。 比如说使用多个传感器来进行比对, 如果被测物体为黑色,则不使用TOF传感器。或者使用上图中的信号强度进行判断。 可以看到如果被测物体(发生光反射的物体)为非黑色的话,<b>信号强度S </b>达到了<strong>32,</strong>但是如果为黑色的话,信号强度仅仅有<strong>8.48</strong></p>
<p> </p>
页:
[1]