超声波传感器是Arduino项目中最常用的传感器之一。它是许多需要导航输入的项目中必须配备传感器的项目之一。例如,Arduino RC汽车或其他机器人可能需要一个超声波传感器来测量它离墙壁或其他障碍物的距离。在本Arduino超声波传感器教程中,我们将介绍如何将HC-SR04超声波传感器与Arduino一起使用的基础知识。然后,我们将通过连接一个LCD显示器来创建一个数字标尺,从而将其放大!

超声波传感器的工作原理

超声波传感器的工作原理与您可能熟悉的许多其他设备一样。用于显示未出生婴儿的超声波设备也使用了同样的技术。但这个概念早在技术出现之前就已经存在了。像蝙蝠这样的动物进化出了这种能力!传感器的工作原理是从发射锥发射40000 Hz的超声波。这种声音超出了人类的听觉范围,所以你什么也听不到。当声音与物体接触时,它会向传感器反弹,并被接收器捕获。

既然我们知道声速,就很容易计算出传感器与行进中的物体之间的距离。声速是每小时767英里(或每秒343米)。我们需要计算两次传播时间,因为声音从传感器传到物体,然后再返回。计算很简单(厘米):距离=持续时间(微秒X(0.034/2))。这就是我们所说的“飞行时间计算”。

本项目零件清单

我们为该项目编制了一份简单的零件清单,以帮助您开始:

关于HC-SR04超声波模块

当我们继续学习Arduino超声波传感器教程时,让我们简要讨论一下我们将在本教程中使用的HC-SR04模块。模块有4个引脚,VCC, Trigger, Echo和Ground。

将HC-SR04超声波模块连接到Arduino

HC-SR04模块与Arduino的接线如下:对于三角和回声,任何数字I/O引脚都可以。我们选了9和10。如果您使用不同的引脚,只需在编程部分反映。

  • HC-SR04Vcc, Arduino+ 5 v
  • HC-SR04接地, Arduino接地
  • HC-SR04三角, Arduino销10
  • HC-SR04回声, Arduino09年销

产生超声波和设置一样简单销10高的. 我们这样做10微秒(微秒)。在此10µs期间,发射器将循环8次脉冲。在…上销9我们将读取回波针,它将给出声波传播到物体并返回所需的时间。

现在,我们需要转到软件端,将这个简单的程序输入ArduinoIDE。

首先,我们需要定义触发器和回显引脚。我们把它们放在第9和第10针上。尽管如前所述,您可以将它们放置在任何数字I/O引脚上。

常数int-echoPin=9;常数int-triggerPin=10;

接下来,我们创建Long类型变量,命名为“timetofly”,以存储来自传感器的旅行时间,并在我们完成飞行时间计算后为距离创建一个整数变量。

长timetofly;int距离;

在设置函数中,我们使用前面定义的常量连接引脚,将触发引脚设置为输出,将回波引脚设置为输入。我们还启动串行控制台,以便将输出发送到串行监视器。

void setup() {pinMode(triggerPin, OUTPUT);//将触发器设置为输出pinMode(echoPin, INPUT);//将echo设置为Input Serial.begin(9600);//启动串行通信}

在我们的回路中,我们将触发器按10µs,以40Khz的频率发出一阵声音。

数字写入(triggerPin,高);延迟微秒(10);数字写入(triggerPin,低);

然后我们读取Echo引脚,执行飞行计算并将输出打印到屏幕上

, amp;音箱;,timetofly = pulseIn (echoPin、高);,amp;音箱;肝移植;/ pre&音箱;音箱;gt;距离= timetofly * 0.034 / 2;系列。打印(“距离:”);以(距离);

将程序上传到Arduino后,打开串行显示器,你就可以看到屏幕上以厘米为单位的输出。你会惊讶于这是多么的准确。

完整的源代码

如果你把所有这些放在一起,我们结束了这个完整的arduino超声波传感器教程源代码。

//Arduino超声波传感器教程//©2019 The Geek Pub.可自由分发,具有属manbext登录页性//定义传感器引脚常量int echoPin=9;常量int triggerPin=10;//定义变量long timetofly;int distance;void setup(){pinMode(triggerPin,OUTPUT);//将触发器设置为输出引脚模式(echoPin,INPUT);//将echo设置为Input Serial.begin(9600);//启动串行通信}void loop(){//清除triggerPin数字写入(triggerPin,低);delayMicroseconds(2);//将triggerPin设置为高状态10微秒数字写入(triggerPin,高);delayMicroseconds(10);数字写入(triggerPin,低);//读取echoPin,以微秒为单位返回行程时间timetofly=pulseIn(echoPin,高);//计算距离(飞行时间计算)距离=timetofly*0.034/2;//在串行监视器上以厘米串行方式打印距离。打印(“距离:”;串行。打印LN(距离);}

添加LCD字符显示器

现在是时候让这个项目变得更酷了。因此,这部分Arduino超声波传感器教程完全可选,但我们认为你会喜欢它。添加显示以某种方式为所发生的事情添加了一些现实主义。它给了别人一些东西,展示了一个项目的实际应用。在我的代码中,我们基本上是舍入到最近的厘米或英寸(因为我们使用的是整型变量),但你可以扩展它,通过使用long,然后舍入到你喜欢的任何增量,以获得超级精确。

你需要做的第一件事就是给显示器接线。如果你需要帮助,我们有一个Arduino LCD字符显示教程.该教程中使用的引脚与本教程中使用的引脚完全相同。

给显示器布线

按照这个简单的接线图来连接显示器。如果您使用面包板适配器供电,请确保与Arduino共享一个接口,否则可能只会在显示器上显示垃圾字符。

源代码

将LCD字符显示添加到我们的项目中的源代码非常简单。我们只添加了几行代码来配置显示并将其打印到其中。此外,我们删除了串行控制台代码,尽管如果您希望将其保留在草图中,这是完全可选的。

//包括LCD的库代码并对其进行初始化#包括<;液晶.h>;液晶液晶显示器(12,11,5,4,3,2);//定义引脚数const int trigPin=9;常数int echoPin=10;//定义变量的长持续时间;int-distanceCM;int距离;void setup(){pinMode(trigPin,OUTPUT);//将trigPin设置为输出pinMode(echoPin,INPUT);//将echoPin设置为输入lcd.begin(16,2);//设置lcd的列数和行数:lcd.setCursor(0,0);//将光标设置为home lcd.print(“极客发布!”;//写入我们的名称}void loop(){//清除trigPin digitalWrite(trigPin,低);delayMicroseconds(2);//将trigPin设置为高状态10微秒数字写入(trigPin,高);delayMicroseconds(10);digitalWrite(trigPin,低);//读取echoPin,以微秒为单位返回声波传播时间=脉冲信号(echoPin,高);//计算距离CM=duratmanbext登录页ion*0.034/2;distanceIN=duration*0.0133/2;//在串行监视器lcd.setCursor(0,1)上打印距离;lcd.print(CM:);lcd.print(distanceCM);lcd.print(“”);lcd.setCursor(9,1);lcd.print(IN:);lcd.print(distanceIN);lcd.print(“”);delay(300);}

编译此草图并将其上传到Arduino后,您应该会看到以下内容。将物体移近或远离HC-SR04超声波传感器,您将看到厘米和英寸的增量和减量(四舍五入到最接近的完整单位)。

HC-SR04超声波传感器精度

一个注释用于舍入或HC-SR04超声波传感器教程。有几个因素会影响传感器的精度。让我们快速浏览一下。

温湿度

声音在空气中传播的速度受相对温度和湿度的影响。声音在100%湿度下的传播速度比在0%湿度下的传播速度快约0.35%。如果你在寻找真正精确的测量方法,你会希望结合一个DHT11将温度/湿度传感器安装到项目中。您可以根据当前湿度进行小计算,并调整输出数字。

传感器的质量

我的零件箱里有四个这样的传感器。其中一个很可怕。太可怕了,我在打字的时候把它扔进了垃圾箱。它还不如给我随机数字。因为这就是它的准确性。换句话说,这些年来我发现买一个高质量HC-SR04比便宜的好得多。我建议避免购买无名品牌和全球速卖通的商品。

相关:Arduino传感器综合清单

如果你有任何问题或遇到任何问题,请在下方留下评论,我们将尽我们最大的努力帮助你!

产品从Amazon.com