使用 Arduino 和超声波传感器进行距离测量
使用 Arduino 的超声波测距项目
超声波测距是最近在各种应用中的有用工具。它可用于各种应用,例如定位、定位、尺寸标注、选择、液位测量、控制和仿形。通过对输出值进行一些数学计算,我们还可以测量速度和其他各种物理尺寸。该设备在机器人领域也有应用。
因此,请牢记这些应用,超声波传感器是测量距离的绝佳工具,无需对小距离进行任何物理接触。他们使用 ECHO 的概念来测量距离。在这个项目中,我们将学习如何通过 HC-SR04 传感器模块与 Arduino 接口来测量距离,并在 16×2 LCD 上显示距离。
- 相关文章:使用 Arduino UNO 的可变电源 - 电路和代码
测距项目电路图
接口非常简单。你只需要按照电路图。所以首先,超声波传感器的 Trig 和 Echo 引脚连接到 Arduino UNO 的 A4 和 A5,VCC 和 GND 连接到 Arduino 的 5V 和 GND。
现在,我们将在与 Arduino 连接的 16×2 LCD 上显示距离。将 RS 和 EN 引脚分别连接到 Arduino 的数字引脚 12 和数字引脚 11。现在将 LCD 的 D4-D7 连接到 Arduino 的数字引脚 5-2。我们还接了一个10K的电位器来控制LCD的对比度,如电路图所示。
- 相关文章:Arduino 带有物体检测功能的自动门铃
需要的组件
- HC-SR04 超声波传感器模块
- Arduino UNO
- 16×2 液晶屏
- 电位器
- 跨接电缆和连接线
超声波传感器模块
这里使用的传感器模块是HC-SR04 ,这是一种非接触式超声波测量设备。这个小模块能够测量2cm - 400cm范围内的距离。它是一个非常精确的传感器,最大可以测量 3mm。
传感器由超声波发射器和超声波接收器组成。工作原理其实很简单。首先,IO 触发器发送 10μs 的高电平信号。然后传感器模块发送 8 个 40 kHz 周期的超声波,并检测是否接收到脉冲信号。而如果接收到信号,通过高电平,IO触发保持高电平的持续时间就是从发送到接收到信号的时间。
距离 =(高电平时间 x 空气声速 (340M/s))/2
- 相关文章:使用 Arduino 的自动夜灯
时序图
如上所述,该模块对声音的 ECHO 起作用。为了触发模块,发送一个脉冲约 10μs。在此过程之后,模块会发送 8 个 40 kHz 周期的超声波并检查其反射。因此,如果有任何障碍物,则信号会撞击它并返回到接收器。现在距离是通过上面讨论的简单公式计算的。我们将它除以 2,因为这个时间是到达障碍物并返回接收器的总时间,所以到达障碍物所用的时间是总时间的一半。该传感器的时序图如下:
技术规范
- 工作电压:5V
- 工作电流:15mA
- 工作频率:40Hz
- 测量角度:15°
- 范围:2 厘米至 400 厘米
超声波传感器HC-SR04的引脚输出
- VCC:模块电源(通常为 +5V)
- Trig:用于触发模块。
- Echo:是 o/p 引脚。它在信号从发射器到达障碍物然后返回接收器的时间保持高电平。
- GND:连接到主电路的地。
如上所述,该模块的工作原理是声音的ECHO。所以当我们将模块与任何单片机连接时,首先通过Trig引脚触发模块并发送一个10μs的高电平脉冲。然后,我们等待接收 ECHO。微控制器可以计算时间。然后通过上面讨论的公式计算距离。
- 相关文章:什么是 Crowbar 电路?设计和运营
Arduino UNO
Arduino 是一种开源微控制器,广泛用于许多小型和大型嵌入式项目。本项目中使用的 Arduino 是 Arduino-UNO。使用这个 Arduino 的原因是它更便宜且易于接口。该板提供 14 个数字 I/O 引脚和 6 个模拟引脚。微控制器是开源的,所以完全取决于用户他/她想如何使用它。您可以根据需要修改板子和软件。
- 相关文章:使用齐纳二极管的简单过压保护电路
16×2液晶模组
这些模块通常用于嵌入式项目的许多地方,因为它们更便宜且易于与微控制器接口。您可能已经在计算器、流量计等中看到过这种类型的显示。这里使用的 LCD 模块可以连续显示 16 个字符,它有两行。所以,基本上它有 16 列和 2 行。显示的每个字符由 5×8 像素(像素矩阵)组成。
如果您计算整个 LCD 上的总像素,则结果为 5x8x16x2=1280 像素。这是一个很大的数字。现在要在 LCD 上显示某些内容,我们还需要指定字符的位置。所以,这真的是一件很难的事情。因此,为了管理正常工作,使用了名为 HD44780 的 IC。该 IC 从微控制器获取数据和命令,然后进行一些处理,以便可以在 LCD 上打印所需的输出。该IC使LCD的接口非常容易。我们可能会在我们的许多项目中使用 LCD 来通过传感器或任何其他模块显示输出。让我们来看看液晶模组的一些技术规格。
- 相关文章:12V 至 5V 转换器电路
- 工作电压:4.7V 至 5.3V
- 电流消耗:1mA,不使用背光
- 2 行,每行 16 个字符。
- 每个字符由 5×8 像素矩阵组成。
- 显示器是字母数字,因此它也可以显示数字以及字母和特殊字符。
- 它有绿色/蓝色背光版本。
让我们看一下LCD的管脚配置。
16×2 LCD 引脚和说明
引脚编号 | 名称 | 说明 |
1 | VSS | 是地线,接电路的地线。 |
2 | VDD | LCD 电源(4.7V 至 5.3V),一般为 5V |
3 | VE | 此引脚用于控制 LCD 的对比度。为此,我们需要在该引脚上连接一个电位器。所以通过调节电位器的旋钮我们可以得到不同的显示对比度。 |
4 | RS | 注册选择。该引脚用于在命令和数据寄存器之间切换。此引脚连接到微控制器 |
5 | RW | 读/写。该引脚用于读取或写入 LCD。写入数据一般是接地的。 |
6 | ZH | 启用引脚。该管脚与微控制器相连,给定 1 或 0 以确认数据。 |
7 | 数据引脚 (0-7) | 这些引脚用于从微控制器向 LCD 发送 8 位数据。此 LCD 也可用于 4 位模式。为此,您只需连接 4 个数据引脚。 |
8 | 一个 | 阳极。此引脚是 LCD 背光的正极引脚。使用此引脚是完全可选的。如果您需要背光,请使用它。如果不使用技术规格中显示的背光源,电流消耗会变得非常少。 |
9 | K | 阴极。此引脚为 LCD 背光负极引脚。 |
让我们看看 LCD 与 Arduino 的基本接口。我们将通过编写一个简单的代码在 LCD 上打印一些文本。首先将 RS 和 EN 引脚连接到 Arduino 的数字引脚 12 和 11。现在将 LCD 的 D4-D7 引脚连接到 Arduino 的数字引脚 5-2。现在将 RW、VSS 和 K 接地,将 VDD 和 A 连接到 Arduino 的 5V。如电路图所示在VE上接一个电位器来控制LCD的对比度。
- 相关文章:使用 IC 4017 和 555 定时器的交通灯控制电子项目
现在进入编码部分。首先,我们需要为 LCD 包含库 LiquidCrystal.h。
#include
现在在接下来的两行中,我们为与 Arduino 连接的 LCD 的数据引脚定义了变量,然后将它们作为参数传递给 lcd 函数,以便我们可以从Arduino 到 LCD。
const int rs =12, en =11, d4 =5, d5 =4, d6 =3, d7 =2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
在Setup函数中,我们使用lcd.begin()函数初始化了LCD。我们已经通过了 16 和 2,因为我们使用的 LCD 有 16 列和 2 行,而且我们正在使用整个 LCD。如果你只需要 LCD 的一部分,那么你可以相应地传递参数。
接下来,我们在下一行打印“Hello, World!”。您可以打印任何您想要打印的自定义消息,但请记住一件事,超出显示屏尺寸的消息将在下一行打印。因此,请相应地处理您的消息。
lcd.begin(16, 2);
lcd.print(“Hello, World!”);
在循环函数中,我们使用函数 lcd.setCursor() 将光标设置在 (0,1) 位置。在此之后,我们将打印消息的打印时间。
lcd.setCursor(0, 1);
lcd.print(millis() / 1000);
编写代码后将其上传到 Arduino 板,您会看到消息打印在显示屏上。您可以通过旋转连接的电位器的旋钮来改变对比度。
- 相关文章:使用 IC 555 定时器和不使用定时器的拍子开关电路
为超声波传感器距离测量编程 Arduino
这个项目的编码部分真的很简单。首先包含 LCD 的头文件。
#include <LiquidCrystal.h>
在接下来的两行中,我们为 Arduino 的引脚 A4(引脚 18)和 A5(引脚 19)定义了宏,以便我们可以使用这些名称而不是使用引脚数字。
#define trig 18
#define echo 19
现在在接下来的几行中,我们定义了连接到 Arduino 的 LCD 的不同引脚的变量,然后将它们传递给 lcd 函数,以便我们可以初始化 LCD。
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
现在我们已经定义了距离变量‘d’和时间变量‘t’,并用0初始化它们。
float t=0,d=0;
现在进入设置功能。在第一行中,我们使用 lcd.begin() 初始化了 LCD,然后在接下来的两行中,我们将触发和回显引脚的引脚模式分别定义为输出和输入。
void setup()
{
lcd.begin(16,2);
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);
}
接下来来到循环函数。首先,我们通过函数 lcd.clear() 清除了 LCD,这样在每次循环迭代之后,之前的输出都不会影响当前的输出。现在在接下来的六行中,我们通过发送 10μs 的高电平脉冲来初始化我们的超声波传感器。我们知道,在此之后,传感器会自动发送 8 个 40kHz 周期的超声波并检查其反射。所以在下一行中,我们从传感器中获取了时间。然后我们计算距离。我们把它除以 10000 因为速度是以米/秒为单位的,所以我们要把它换算成厘米。
void loop()
{
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
t = pulseIn(echo, HIGH);
d = t * 0.0340 / 2;
d = t * 0.01330 / 2;
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.print(d);
lcd.print(" cm");
delay(1000);
}
- 相关文章:自动浴室灯开关电路图和操作
测距电路的工作
写完代码,上传到Arduino就大功告成了。现在将任何物体或您的手放在传感器前面。检查 LCD 上的距离。不断改变物体与传感器的距离,你会得到一个很好的准确距离。
当我们通过发送 10μs 的高电平脉冲来初始化传感器时,传感器会发送 8 个 40kHz 超声波周期,如果这些周期被任何障碍物反射,它们就会被反射回接收者。现在,传感器给出了超声波信号从发射器到障碍物以及从障碍物到接收器的传播时间。所以,我们利用这段时间来计算传感器和障碍物之间的距离。
工业技术