超声波传感器HC-SR04和Arduino教程

在本Arduino教程中,我们将学习如何HC-SR04超声波传感器的工作,以及如何使用Arduino板。你可以观看下面的视频或阅读下面的书面教程。

betway超声波传感器是如何工作的


它发出40 000赫兹的超声波,通过空气传播,如果在它的路径上有一个物体或障碍,它会反弹回模块。考虑到传播时间和声音的速度,你可以计算距离。

超声波传感器如何工作betway

HC-SR04超声波模块有4个引脚,接地,VCC,三角和回波。模块的地引脚和VCC引脚需要分别连接Arduino板上的地引脚和5伏引脚,以及Arduino板上的任何数字I/O引脚的三角引脚和回波引脚。

本教程所需的组件


你可以从以下任何一个网站获得这些组件:

必威外围提钱披露:这些是附属链接。作为一名亚马逊助理,我从合格的购买中获得收入。

为了生成超声波,需要将三角函数设置为高状态10µs。这将发出8个周期的声波爆炸,将以声音的速度传播,它将在Echo针接收。Echo引脚将以微秒为单位输出声波传播的时间。

超声波传感器图

例如,如果物体距离传感器10厘米,声音的速度为340米/秒或0.034厘米/µs,声波将需要传播294u秒左右。但你从Echo针得到的结果是这个数字的两倍,因为声波需要向前传播和向后反弹。因此,为了得到以厘米为单位的距离,我们需要将接收到的回波引脚的旅行时间值乘以0.034,然后除以2。

Ultrasonic-Sensor-Equasions

Arduino和HC-SR04超声波传感器代码


首先你必须定义Trig和Echo引脚。在这种情况下,它们是Arduino板上的引脚编号9和10,它们被命名为trigPin和echoPin。然后,你需要一个Long变量,命名为“持续时间”,表示你将从传感器获得的旅行时间,还有一个整数变量表示距离。

//定义引脚数const int trigPin = 9;const int echoPin = 10;//定义长持续时间的变量;int距离;

在设置中,您必须将trigPin定义为输出,将echoPin定义为输入,并启动串行通信,以便在串行监视器上显示结果。

void setup() {pinMode(trigPin, OUTPUT);//设置trigPin为输出pinMode(echoPin, INPUT);//设置echoPin为输入串行。begin(9600);//启动串行通信}

在循环中,首先你必须确保trigPin是清楚的,所以你必须将该pin设置为2µs的LOW状态。现在为了产生超声波,我们必须将trigPin设置在HIGH状态为10µs。使用pulseIn ()函数,你必须读取旅行时间,并将该值输入变量“持续时间”。这个函数有两个参数,第一个是echo pin的名字,第二个可以写HIGH或LOW。

//清除trigPin digitalWrite(trigPin, LOW);delayMicroseconds (2);//设置trigPin on HIGH状态为10微秒delayMicroseconds (10);digitalWrite (trigPin、低);

在本例中,HIGH表示pulsIn ()功能将等待引脚去高的反弹声波,它将开始计时,然后它将等待引脚去低时,声波将结束,这将停止计时。最后函数将以微秒为单位返回脉冲的长度。

为了得到距离,我们将持续时间乘以0。034,然后除以2,就像我们之前解释过的那样。

//读取echoPin,返回以微秒为单位的声波传播时间= pulseIn(echoPin, HIGH);//计算距离距离=持续时间*0.034/2;//在Serial Monitor上打印距离。打印(“距离:”);以(距离);

最后我们将在串行监视器上打印距离的值。

以下是完整的代码:

/* *超声波传感器HC-SR04和Arduino教程* * by Dejan Nedelkovski, * www.HowToMechatronics.com * *bet188官方网站/ //定义引脚数const int trigPin = 9;const int echoPin = 10;//定义长持续时间的变量;int距离;void setup() {pinMode(trigPin, OUTPUT);//设置trigPin为输出pinMode(echoPin, INPUT);//设置echoPin为输入串行。begin(9600);//启动串行通信}void loop(){//清除trigPin digitalWrite(trigPin, LOW);delayMicroseconds (2);//设置trigPin on HIGH状态为10微秒 delayMicroseconds(10); digitalWrite(trigPin, LOW); // Reads the echoPin, returns the sound wave travel time in microseconds duration = pulseIn(echoPin, HIGH); // Calculating the distance distance= duration*0.034/2; // Prints the distance on the Serial Monitor Serial.print("Distance: "); Serial.println(distance); }

Arduino超声波传感器和液晶显示示例

这是另一个例子如何使用超声传感器Arduino和显示结果在LCD上。

Arduino超声波传感器和液晶显示示例

超声波传感器和LDC的连接方式如下:

Arduino超声波传感器及LDC电路图

测量距离的代码与基本示例基本相同。这里,我们把结果打印在液晶显示器上,而不是在串行显示器上。如果你需要更多详细介绍了如何使用和连接液晶显示器与Arduino你可以查看我的教程。

/* *超声波传感器HC-SR04和Arduino Tutorial * * by Dejan Nedelkovski, * www.HowToMechatronicsbet188官方网站.com * */ #include  //包括LiquidCrystal Library液晶(1,2,4,5,6,7);//创建一个LCD对象。参数:(rs, enable, d4, d5, d6, d7) const int trigPin = 9;const int echoPin = 10;长时间;int distanceCm distanceInch;Void setup() {lcd.begin(16,2);//初始化LCD屏幕的接口,并指定显示pinMode(trigPin, OUTPUT)的尺寸(宽度和高度);pinMode (echoPin、输入);} void loop() {digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distanceCm= duration*0.034/2; distanceInch = duration*0.0133/2; lcd.setCursor(0,0); // Sets the location at which subsequent text written to the LCD will be displayed lcd.print("Distance: "); // Prints string "Distance" on the LCD lcd.print(distanceCm); // Prints the distance value from the sensor lcd.print(" cm"); delay(10); lcd.setCursor(0,1); lcd.print("Distance: "); lcd.print(distanceInch); lcd.print(" inch"); delay(10); }

我希望你喜欢这个教程,并学到一些新的东西。欢迎在下面的评论区提出任何问题,不要忘记看看我收集的Arduino项目bet188me

95年响应

    • 德扬Nedelkovski

      问题可能是您使用的是Arduino DUE,它有3.3V引脚,超声波传感器是5V工作。尝试使用一个电阻在回波引脚,因为3.3V是好的三角引脚,但传感器的回波引脚将输出5V到您的Arduino DUI,这可能会损坏它。

      回复
    • Rhydo

      确保您的三角和Echo引脚连接到数字引脚9和10,而不是11和12。

      回复
  1. 伊恩

    不幸的是,我得到相同的0 0 .....对超声波传感器的响应,以及使用Mega 2560只用传感器代码本身??
    还有其他的建议吗?
    欢呼,伊恩

    回复
  2. Haravey

    伟大的视频。谢谢。我在试着设置一个在预定范围内触发门或继电器的装置如果有东西靠得太近就会发出光。你已经开发了这个场景的草图了吗?我自己似乎就是不能让它正常工作。谢谢。

    回复
    • 德扬Nedelkovski

      谢谢!这是一个教程,可以帮助你理解传感器的基本工作原理和代码,让它在Arduino中工作,但我没有你描述的特定代码。每个项目都是一个独特的,需要一个独特的代码,但我不做自定义代码。我希望看一些我的其他教程,将使您的代码编写知识足够好,以便您可以为您的项目制作自己的代码。干杯!

      回复
  3. 托尔

    嘿,我得到了一切工作和你的教程是伟大的!我的显示器工作,但它只是一个蓝屏。它只是蓝色的,没有数字或任何东西在上面,请帮助!

    回复
  4. 哈维

    你能给我发邮件或更新这个项目的图的连接通过添加16×2液晶绿屏泰提前这个网站是一个真正的帮助我,我和我的第一个arduino项目使用arduino uno是好或我必须改变一些问题给项目等待快速反应:)

    回复
    • 特里·舒尔茨

      你好,我一直在研究HC-SR04超声波模块,想知道你是否可以给我一个带液晶显示器连接的项目示意图,谢谢你的时间

      回复
  5. 朱迪凯瑟琳

    传感器和LCD的源代码是在一个草图下吗?或者我需要使用两块arduino板??如果是的话,我怎么能把这两者联系起来呢?

    回复
  6. Gaurav使人盲目崇Alande

    你能把arduino与HCSR-04传感器-SG-90伺服电机和带有蜂鸣器接口的lcd的接口代码发给我吗

    回复
  7. 亲爱的Dejan,我正在用这个传感器建造一个简单的机器人。问题是:我想在50厘米的距离避免碰撞。我如何在代码中实现这个值在我做的简单软件。(机器人被编程来驱动一个8)用简单的代码digital在两个引脚上写HIGH或LOW。

    问候,吨。

    回复
    • 德扬Nedelkovski

      传感器可以探测到那个距离的物体,所以我猜使用一些“如果”语句,你可以制作一个简单的代码来避免碰撞。

      回复
  8. 帕拉

    嗨,德扬

    我可以使用HCSR 04发送数据到另一个HC SR04吗?我的意思是让一个作为发送器,另一个作为接收器?如果是,我如何修改代码?

    回复
  9. rakan

    亲爱的,
    我有一个方法来测量水箱中的水量。
    在你的运动传感器实验视频中可以看到。
    问:是否有可能将屏幕上的厘米变化转换为百分比,例如40%或50%。
    谢谢。
    Rakan

    回复
  10. rakan

    我能收到你的邮件吗?我们想和你就这个想法签订合同。
    谢谢。

    回复
  11. 威廉

    亲爱的,超声波有可能检测到水管漏水吗?是否超声波能接收到频率或其他值来表示水管有泄漏时,该值会发生变化?谢谢

    回复
      • 威廉

        先生,因为我需要用超声波传感器检测水管漏水,接收水管的频率/脉冲,超声波传感器可能接收到频率/脉冲??既然这是超声波项目,你能不能花时间解释超声波用于检测水管泄漏的概念,我很困惑,谢谢回复我....

  12. yoangel

    你好,如果我想要测量不是厘米,如果不是公升或毫升的公式应该是?因为我想用这个传感器来测量水箱的水位

    回复
  13. Anant

    嘿,Dejan,有可能在输出中添加一个声音,这样距离也可以被百叶窗使用!

    回复
  14. 胖子

    我将传感器连接到PIC 16f877a,我想测量水箱中的水量,但我得到了错误的结果,这可能是问题所在

    回复
  15. 马利克

    你好,我检查了这个和许多其他代码,但它没有给出准确的距离,只给出2英寸。另外,我想修改范围,怎么做呢?

    回复
  16. 尼基泡芙

    老兄,你的教程太棒了!!
    我从来没有发现像这个教程…
    容易理解,易于执行

    你有私人联系吗?我大学有期末项目要做,我需要你给我一些新的建议,你可以吗?

    非常感谢

    回复
  17. 迈克·克劳福德

    你好,我想知道如何从超声波传感器的数据铸造的应用程序发明者,你可以帮助我吗?感谢并致以最良好的问候。

    回复
    • 德扬Nedelkovski

      嗨。很抱歉,但我能说的是检查我的教程的应用程序发明者和结合本教程,让自己的项目。
      我的工作是教授一个特定传感器、模块或程序的基础知识,而您应该使用从这些教程中获得的知识来制作一个特定的项目。
      干杯!

      回复
  18. 阿古斯萨利姆

    嗨…好project1
    我有一个问题,
    什么代码arduino的百万匹配另一种类型的arduino?像一个纳米,uno . .等
    谢谢你!

    回复
  19. 卜拉欣

    我想用ardouino来确定空间中一个点的坐标(x,yz)可以吗?怎么做呢?

    回复
  20. Gustavo

    有没有办法缩短测量到的最大距离?顺便说一句,很棒的tuto

    回复
  21. 布莱恩·巴勒斯

    嗨,你有整个装置的配线示意图吗?距离传感器和液晶显示器?

    回复
  22. 布莱恩·巴勒斯

    Dejan,我想把距离传感器与树莓派3连接起来,我看到的所有教程似乎都使用电阻,为什么你不需要他们与arduino,但你需要他们与pi?

    我可以在没有电阻的PI上做吗?

    回复
  23. 胭脂

    大家好,我是卡迈因,来自罗马,
    它可以改变绝对读数到相对读数与电位器改变到相对距离显示?
    谢谢你!

    回复
  24. 克里斯

    超声波传感器能全天候工作吗?日常吗?它会烧还是会变热?谢谢

    回复
  25. 眼镜蛇

    你好,这个传感器真的能探测到2cm - 4米的距离吗?如果距离超过4米,液晶显示器会显示什么?

    回复
  26. Hannu奥林

    谢谢你的清楚解释。我还是不明白。计数开始时,echoPin(输入)获得状态HIGH(在本例中)。当它的状态为LOW时,计数停止。他们的pingPin和echo in的时间差分别是10us和10us。它总是一样的。距离并没有什么不同。信号的开始和结束移动得一样快。真正开始计数的是什么。信号进入ping - pin后,它必须启动。 And it has to stop, when the signal come sback to echoPin. Would You please explain me more.

    回复
    • 德扬Nedelkovski

      根据触发器和echo引脚的代码和逻辑你完全有理由感到困惑,我确实感到困惑,但这里有个窍门:
      当我们激活触发器输入(digitalWrite(trigPin, HIGH);),我们发送超声波,但同时,传感器内部提高回声引脚。因此,当程序到达pulseIn()函数时,echo pin已经是HIGH,这意味着计数将取决于对象的距离。

      回复
  27. 克里斯蒂娜

    嗨。
    我是新手,但我想知道。是否必须使用实验板?或者我可以把传感器直接连接到我的Arduino UNO ?

    谢谢,
    短剑

    回复
  28. 阿巴合唱团

    你好,德扬,

    例如,我在测量一个容器的体积差。如何修改代码以度量容积。

    谢谢

    回复
    • 德扬

      你需要测量三个维度,宽,长,深,然后乘以它们来得到体积。检查我的Arduino范围测量项目,我显示了类似的东西,或如何使用这个传感器测量面积。

      回复

留下一个回复

您的电子邮件地址将不会被公布。

推荐

2019年面向初学者和爱好者的最佳入门级示波器

最适合初学者和爱好者的示波器

推荐

2019年针对初学者的8个最佳Arduino入门工具包

8个最好的arduino初学者工具包

推荐

最佳3D打印机初学者和爱好者- 3D打印

最好的3d打印机初学者和爱好者