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

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

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


它以40 000 Hz发出超声波穿过空气,如果它的路径上有物体或障碍物,它将反弹回模块。考虑到旅行时间和声音的速度,您可以计算距离。

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

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

本教程所需的组件


您可以从下面的任何网站获取这些组件:

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

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

超声波传感器图

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

超声波传感器等分

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;//打印串行监视器序列号的距离.Print(“距离:”);serial.println(距离);

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

以下是完整的代码:

/* *超声波传感器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超声波传感器和LCD显示示例

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

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

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

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

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

/ * *超声波传感器HC-SR04和Arduino教程* * by dejan nedelkovski,* www.www.mfxpo.com * *bet188官方网站 / #include  //包括液晶库液晶LCD(1,2,4,5,6,7);//创建LCD对象。参数:( RS,ENABLE,D4,D5,D6,D7)CONSS INT TRIGPIN = 9;const int echoPin = 10;持续时间;int distancm,tatchinginch;void setup(){lcd.begin(16,2);//初始化界面到LCD屏幕,并指定显示Pinmode的尺寸(宽度和高度)(Trigpin,输出);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工作的。尝试在echo引脚上使用一个电阻,因为3.3V对于Trig引脚来说是好的,但是传感器的echo引脚将输出5V到你的Arduino DUI,这可能会损坏它。

      回复
    • Rhydo

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

      回复
  1. 伊恩

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

    回复
  2. Haravey

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

    回复
    • 德扬Nedelkovski

      谢谢!这个教程可以帮助你理解传感器的基本工作原理以及让它与Arduino一起工作的代码,但我没有你们描述的特定代码。每个项目都是独一无二的,需要独一无二的代码,但我不制作定制代码。我希望观看我的一些其他教程,也会让你的代码编写知识足够好,这样你就可以为你的项目制作自己的代码。干杯!

      回复
  3. 托尔

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

    回复
  4. 哈维

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

    回复
    • 特里·舒尔茨

      你好,我一直在HC-SR04超声波模块上工作,不知道你是否可以给我发一份lcd挂钩的项目原理图,谢谢你的时间

      回复
  5. 朱迪凯瑟琳

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

    回复
  6. Gaurav Jagannath Alande.

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

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

    问候,吨。

    回复
    • 德扬Nedelkovski

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

      回复
  8. 帕拉

    嗨,德扬

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

    回复
  9. rakan

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

    回复
  10. rakan

    我可以得到你的电子邮件,我们想与你的这个想法的合同。
    谢谢。

    回复
  11. 威廉

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

    回复
      • 威廉

        主席先生,因为我需要使用超声波传感器来检测从水管接收频率/脉冲的水管泄漏,所以可以将超声波传感器接收频率/脉冲?由于这是超声波的项目,你可以花时间解释超声波的概念,在检测水管泄漏中,我非常混淆,谢谢你回复我......。

  12. yoangel

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

    回复
  13. 一只蚂蚁

    嘿Dejan,是否有可能在输出中添加声音,以便百叶窗也可以使用距离!

    回复
  14. 胖子

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

    回复
  15. 马利克

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

    回复
  16. 尼基泡芙

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

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

    非常感谢

    回复
  17. 迈克·克劳福德

    你好,我想知道如何在app inventor上绘制超声波传感器投射的数据,你能帮我吗?谢谢,并致以最良好的问候。

    回复
    • 德扬Nedelkovski

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

      回复
  18. 阿古斯萨利姆

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

    回复
  19. 卜拉欣

    我想通过使用Ardouino确定空间点(exemple房间)的坐标(x,yz)是可能的吗?怎么做?

    回复
  20. Gustavo

    有没有办法减少测量的最大距离?顺便说一句,这首歌很棒

    回复
  21. Brian Burroughs.

    嗨,你是否有整个事情的接线原理?距离传感器和LCD?

    回复
  22. Brian Burroughs.

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

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

    回复
  23. 胭脂

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

    回复
  24. 克里斯

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

    回复
  25. 纳贾

    你好,这是真的吗?这个传感器可以从2厘米到4米的距离检测?如果距离超过4米,LCD上会显示什么?

    回复
  26. Hannu奥林

    谢谢你的清晰解释。我仍然不明白。计数开始,当Echopin(输入)获得高位(在此示例中)时开始。当它降低状态时,计数停止。Pingpin中的时间差是10US,并且它们在echopin中的时间差是10U。它总是相同的。距离没有任何差异。信号的开始在信号的末端快速移动。实际上开始计数。当信号进入Pingpin时必须启动。 And it has to stop, when the signal come sback to echoPin. Would You please explain me more.

    回复
    • 德扬Nedelkovski

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

      回复
  27. 克里斯蒂娜

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

    谢谢,
    克里克

    回复
  28. 阿巴合唱团

    你好德州,

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

    谢谢

    回复
    • 德扬

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

      回复

留下一个回复

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

推荐

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

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

推荐

2019年最佳Arduino入门套件

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

推荐

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

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