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

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

HC-SR04超声波传感器是如何工作的

它会发出40000赫兹的超声波,在空气中传播,如果在它的路径上有物体或障碍物,它会反弹回模块。考虑到传播时间和声速,就可以计算出距离。

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

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

本教程所需的组件

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

必威外围提钱披露:这些是附属链接。作为一名亚马逊员工,我通过符合条件的购买赚取收入。

为了产生超声波,你需要将三角设置在一个高状态10µs。它会发出一个8个周期的超声波脉冲它会在音速它将在回音引脚中接收。Echo引脚将以微秒为单位输出声波传播的时间。

超声波传感器图

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

Ultrasonic-Sensor-Equasions

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

首先,你必须定义三角和Echo引脚。在本例中,它们是Arduino Board上的引脚9和10,它们被命名为trigPin和echoPin。然后您需要一个Long变量,命名为“duration”,表示您将从传感器获得的旅行时间,以及一个整数变量表示距离。

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

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

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

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

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

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

为了得到距离,我们将持续时间乘以0.034,然后除以2,正如我们之前解释的这个等式。

//读取echoPin,返回声波传播时间(毫秒)duration = pulseIn(echoPin, HIGH);//计算距离距离=持续时间*0.034/2;//在串行监视器上打印距离。打印(“距离:”);以(距离);

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

以下是完整的代码:

/* *超声波传感器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设置为HIGH状态10微秒digitalWrite(trigPin, HIGH); 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一起使用,并在LCD上显示结果。

Arduino超声波传感器和LCD显示示例

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

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

测量距离的代码与基本示例基本相同。在这里,我们不是在串行显示器上打印结果,而是在LCD上打印结果。如果你还需要详细说明如何使用和连接带有Arduino的LCD你可以查看我的特别教程。

/* *超声波传感器HC-SR04和Arduino教程* * by Dejan Nedelkovski, * www.HowToMechatronics.com * *bet188官方网站/ #include  //包含LiquidCrystal库LiquidCrystal lcd(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

关于“超声波传感器HC-SR04与Arduino教程”的95个思考

    • 问题可能是您使用的是Arduino DUE,它有3.3V引脚,超声波传感器的工作电压为5V。尝试在echo引脚上使用电阻器,因为3.3V适合Trig引脚,但传感器的echo引脚将向Arduino DUI输出5V,这可能会损坏它。

      回复
  1. 不幸的是,我得到的还是(0,0,.....超声波传感器在监视器上的响应,以及使用Mega 2560只使用传感器代码本身??
    还有其他建议吗?
    欢呼,伊恩

    回复
  2. 伟大的视频。谢谢。我试着把它设置成在预定范围内触发一个门或继电器如果有东西靠得太近就会发出一盏灯。您已经为这个场景开发了一个草图了吗?我自己就是没法让它正常工作。谢谢。

    回复
    • 谢谢这是一个教程,可以帮助你理解传感器的基本工作原理,以及让它与Arduino一起工作的代码,但是我没有你描述的具体代码。每个项目都是唯一的,需要唯一的代码,但我不制作自定义代码。我希望通过观看我的一些其他教程,可以让您的代码编写知识足够好,这样您就可以为您的项目编写自己的代码。干杯

      回复
  3. 我把所有东西都修好了,你的教程很棒!我的显示器可以工作,但它只是一个蓝屏。它只是蓝色的,上面没有数字或任何东西,请帮忙!

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

    回复
  5. 传感器和液晶显示器的源代码是在一个草图??还是我需要两块arduino板??如果是的话,我该如何将两者联系起来呢?

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

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

    你好,唐。

    回复
  8. 嗨,德扬

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

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

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

    回复
      • 先生,因为我需要用超声波传感器来检测水管泄漏,而水管泄漏会接收水管发出的频率/脉冲,所以超声波传感器可能会接收到频率/脉冲??既然这是超声波项目,你能不能花点时间解释一下超声波在检测水管漏水方面的概念,我很困惑,谢谢你回复我....

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

    回复
  12. 嗨,我已经检查了这个和许多其他代码,但它没有给出准确的距离,只有2英寸。此外,我想修改范围,我如何才能做到这一点?

    回复
  13. 老兄,你的教程太他妈棒了!!
    我从来没有发现像这个教程…
    容易理解,易于实现,所以是的

    你有私人联系吗?我在大学有一个期末项目,需要您的新想法,可以吗?

    非常感谢

    回复
  14. 嗨,伙计,我想知道如何在app inventor上绘制超声波传感器的数据投影,你能帮我吗?谢谢,并致以最良好的祝愿。

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

      回复
  15. 嗨…好project1
    我有个问题,,
    什么代码arduino超级匹配另一种arduino?比如nano,uno…等等
    谢谢你!

    回复
  16. Dejan,问个小问题,我想把距离传感器和树莓pi 3连接起来,我看到的所有教程似乎都使用电阻,为什么arduino不需要电阻,而pi需要电阻?

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

    回复
  17. 你好,我是来自罗马的卡敏,
    有可能改变绝对读数相对读数与电位器改变到一个相对距离显示?
    谢谢你!

    回复
  18. 您好,这是真的吗?这个传感器可以从2厘米到4米范围内检测到吗?如果距离超过4米,lcd显示屏上会显示什么?

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

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

      回复
  20. 嗨。
    这方面我是新手,但我想知道。必须使用面包板吗?或者我可以把传感器直接连接到我的Arduino UNO上?

    谢谢
    短剑

    回复
  21. 你好,德扬,

    举个例子,我在测量一个容器的体积差。我如何修改代码来度量体积呢?

    谢谢

    回复
    • 你需要测量三个维度,宽度,长度和深度,然后把它们相乘得到体积。查看我的Arduino Range measurement项目,我展示了一些类似的东西,或者如何使用这个传感器测量面积。

      回复

留下你的评论