在这个Arduino教程中,我们将学习HC-SR04超声波传感器的工作原理,以及如何使用Arduino板。你可以观看下面的视频或阅读下面的书面教程。
betway它是如何工作的-超声波传感器
它以40 000 Hz发出超声波穿过空气,如果它的路径上有物体或障碍物,它将反弹回模块。考虑到旅行时间和声音的速度,您可以计算距离。
HC-SR04超声波模块有4个引脚,接地,VCC,三角和回声。模块的Ground和VCC引脚需要分别连接到Arduino板上的Ground和5伏引脚,三角和回声引脚需要连接到Arduino板上的任何数字I/O引脚。
本教程所需的组件
您可以从下面的任何网站获取这些组件:
- 超声波传感器HC-SR04 ............亚马逊/Banggood/阿里巴巴全球速卖通
- Arduino电路板 .................................亚马逊/Banggood/阿里巴巴全球速卖通
- 面包板和跳线.........亚马逊/Banggood/阿里巴巴全球速卖通
必威外围提钱披露:这些是附属链接。作为一个亚马逊助理,我从合格的购买中赚取。
为了产生超声波,你需要将三角设置在一个高状态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上。
连接超声波传感器和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.
请注意,您的故障接线图中显示GND到VCC和VCC回声的错误。
谢谢
谢谢你的评论。我会把这个换掉。
能否将更新后的超声波电路示意图发邮件给我?
先谢谢你,
Pradeep
它已经更新。
连接VCC到+5伏
请给我们液晶显示屏的超声波图
这里你可以找到详细的如何连接和使用液晶显示器:
https://bet188官方网站www.mfxpo.com/tutorials/arduino/lcd-tutorial/
我们可以用一个引线来表示距离????吗如果是,请将代码发送给我....谢谢
你可以,但我没有这样的密码。
https://bet188官方网站www.mfxpo.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/
你好,
遵循我猜的一切。
我仍然看到距离不会大于1厘米:
0, 0厘米
0, 0厘米
0, 0厘米
0, 0厘米
0, 1厘米
0, 0厘米
0, 0厘米
我使用的是Arduino DUE,其余的任何东西都直接连接到板上。
什么好主意吗?
最好的祝福
问题可能是你在使用Arduino DUE,它的引脚是3.3V,超声波传感器是5V工作的。尝试在echo引脚上使用一个电阻,因为3.3V对于Trig引脚来说是好的,但是传感器的echo引脚将输出5V到你的Arduino DUI,这可能会损坏它。
确保你的三角和回声引脚连接到数字引脚9和10,而不是11和12。
不幸的是,我得到的还是(0,0,.....超声波传感器在监视器上的响应,以及使用Mega 2560只使用传感器代码本身??
还有其他的建议吗?
欢呼,伊恩
很遗憾听到这个消息,但我刚刚尝试了这个代码,它与我的HC-SR04完美地工作。你一定是做错了什么,或者你的传感器没有正常工作。
谢谢你对此是如此活跃。
我应该使用什么类型的arduino ?
嗯,您可以通过几乎任何工作电压为5V的模型进行。
你好,你忘记在LCD代码里写液晶了
是的,谢谢,现在修好了。
伟大的视频。谢谢。我试着把它设置成在预定范围内触发一个门或继电器如果有东西靠得太近就会发出一盏灯。您已经为这个场景开发了一个草图了吗?我自己就是没法让它正常工作。谢谢。
谢谢!这个教程可以帮助你理解传感器的基本工作原理以及让它与Arduino一起工作的代码,但我没有你们描述的特定代码。每个项目都是独一无二的,需要独一无二的代码,但我不制作定制代码。我希望观看我的一些其他教程,也会让你的代码编写知识足够好,这样你就可以为你的项目制作自己的代码。干杯!
我把所有东西都修好了,你的教程很棒!我的显示器可以工作,但它只是一个蓝屏。它只是蓝色的,上面没有数字或任何东西,请帮忙!
问题是显示器的对比度。使用电位器来调整对比度(如我的Arduino LCD教程中所示)或用两个电阻做一个分压器。
你能给我发邮件或更新这个项目的图的连接通过添加16×2液晶绿屏泰提前这个网站是一个真正的帮助我,我和我的第一个arduino项目使用arduino uno是好或我必须改变一些问题给项目等待快速反应:)
很好地将电路原理图与我的Arduino LCD教程和这一组合结合。
你能同时上传/邮寄x轴和y轴距离测量的代码和图表给我吗
你是什么意思,这是本教程中的哪个例子?
其实我想知道,如果我想在同一时间连接两个超声波并在显示器中显示输出,那么...那将是什么代码???谢谢
是的! !我做到了……不管怎样谢谢. .
你好,我一直在HC-SR04超声波模块上工作,不知道你是否可以给我发一份lcd挂钩的项目原理图,谢谢你的时间
你好,你做到了,太棒了!你能告诉我密码吗?谢谢。
传感器和液晶显示器的源代码是在一个草图??还是我需要两块arduino板??如果是的话,我该如何将两者联系起来呢?
一个Arduino,一个草图。超声波传感器连接如解释所述,关于LCD连接请检查我的Arduino LCD教程
你能把arduino与HCSR-04传感器-SG-90伺服电机和蜂鸣器接口的lcd的接口代码发给我吗
对不起,我没有这样的密码。
我可以用PIC控制器做同样的事情吗?用一个修改过的程序
是的,你当然可以。
请问arduino UNO板可以用这个代码吗
是的,你可以。
亲爱的德扬,我正在用这个传感器制造一个简单的机器人。问题是这样的:我想在50厘米的距离上避免碰撞。我如何在代码中实现这个值在我做的简单软件。(机器人被编程驱动一个8)与简单的代码digitalWrite HIGH或LOW在两个引脚。
问候,吨。
传感器可以探测到那个距离的物体,所以我想,使用一些“如果”语句,你可以制作一个简单的代码来避免碰撞。
嗨,德扬
我可以使用HCSR 04发送数据到另一个HC SR04吗?我的意思是让一个作为发射器,另一个作为接收器?如果是,我如何修改代码?
我还没有尝试过这样的事情,所以我什么都不能说。你应该试试,也许有可能。
亲爱的,
我有一个方法来测量水箱里的水量。
在你的运动传感器实验视频中可以看到。
问:是否有可能将屏幕上的厘米变化转换成一个百分比,例如40%,50%。
谢谢。
rakan.
当然,你只需要在代码中实现数学运算。
我能收到你的电子邮件吗?我们想和你签订这个项目的合同。
谢谢。
我可以得到你的电子邮件,我们想与你的这个想法的合同。
谢谢。
亲爱的,超声波有可能检测到水管漏水吗?是指超声波能接收到频率或其他值来表示水管有渗漏时,该值会发生变化吗?谢谢
好吧,我不太确定这个。我猜超声波可能会在撞到水的情况下反弹,但我不能说它是否会为你的想法而工作。
主席先生,因为我需要使用超声波传感器来检测从水管接收频率/脉冲的水管泄漏,所以可以将超声波传感器接收频率/脉冲?由于这是超声波的项目,你可以花时间解释超声波的概念,在检测水管泄漏中,我非常混淆,谢谢你回复我......。
我的HC SR04总是给最大输出24厘米。
现在该做什么>
如何来吗?你是否像教程中那样正确地连接了所有内容,以及,你是否使用了完全相同的源代码?
您曾经用哪种软件绘制此电路设计
弗里茨。
你好,如果我想要的测量是不显示厘米,如果不是在升或毫升应该是公式?因为我想用这个传感器来测量水箱的水位
如果你知道油箱的尺寸,你可以使用和转换单位“厘米”来测量油箱的“升”。
嘿Dejan,是否有可能在输出中添加声音,以便百叶窗也可以使用距离!
当然这是有可能的。
我把传感器连接到PIC 16f877a,我想测量水箱中的水的体积,但我得到了错误的结果,这可能是问题所在
抱歉,但我还没有测试这个模块与特定的微控制器。
你好,我检查了这个和许多其他代码,但它没有给出准确的距离,只有2英寸。另外,我想修改范围我怎么做呢?
代码是100%工作,所以你要么有一个错误的连接或你的传感器是错误的。
老兄,你的教程太他妈棒了!!
我从来没有发现像这个教程…
容易理解,易于实现,所以是的
你有私人联系吗?我在大学有一个期末项目,需要您的新想法,可以吗?
非常感谢
谢谢!抱歉,但我不在私人项目上工作。bet188me
你好,我想知道如何在app inventor上绘制超声波传感器投射的数据,你能帮我吗?谢谢,并致以最良好的问候。
嗨。很抱歉,但我能说的是,检查我的教程上的应用程序发明家和结合本教程,使项目自己。
我的工作是教授一个特定的传感器、模块或程序的基础知识,而你应该使用从这些教程中获得的知识来制作一个特定的项目。
干杯!
嗨…好project1
我有一个问题,
什么代码arduino mega match与另一种类型的arduino?像一个纳米,uno . .等
谢谢你!
代码是一样的。
可以用PIR传感器来停止直流电机吗??
当然,这是可能的。
我想通过使用Ardouino确定空间点(exemple房间)的坐标(x,yz)是可能的吗?怎么做?
你可以用这个超声波传感器来实现这一点。如果你知道角度和距离,你就可以确定它的坐标。
有没有办法减少测量的最大距离?顺便说一句,这首歌很棒
用什么方法缩短距离?我没听懂。传感器的范围从~2cm到4m。
嗨,你是否有整个事情的接线原理?距离传感器和LCD?
对不起,我没有,但是如果你查看我的Arduino LCD教程,你可以很容易地组合它们。
有没有为距离传感器结合液晶显示器的接线图?
Dejan,问个小问题,我想把距离传感器和树莓pi 3连接起来,我看到的所有教程似乎都使用电阻,为什么arduino不需要电阻,而pi需要电阻?
我可以在没有电阻的情况下在PI上做吗?
你好,我是来自罗马的卡迈恩,
有可能改变绝对读数相对读数与电位器改变到一个相对距离显示?
谢谢你!
如果您修改代码以补偿初始读取,您应该能够做到这一点,可能是通过一个简单的算术操作。
超声波传感器能全天候工作吗?日常吗?它会烧或变热吗?谢谢
这是个好问题。这是电子设备,应该能必威lol工作,但我不知道这些便宜的传感器有多可靠。
非常有用,谢谢分享!
你好,这是真的吗?这个传感器可以从2厘米到4米的距离检测?如果距离超过4米,LCD上会显示什么?
这是真的。如果测量的距离超过4米它不会给你正确的值,只是一些随机的数字。
这样就没有解决办法了吗?
谢谢你的清晰解释。我仍然不明白。计数开始,当Echopin(输入)获得高位(在此示例中)时开始。当它降低状态时,计数停止。Pingpin中的时间差是10US,并且它们在echopin中的时间差是10U。它总是相同的。距离没有任何差异。信号的开始在信号的末端快速移动。实际上开始计数。当信号进入Pingpin时必须启动。 And it has to stop, when the signal come sback to echoPin. Would You please explain me more.
根据代码和触发和回音引脚的逻辑你完全有理由感到困惑,所以我确实困惑了,但诀窍是
当我们激活触发器输入(digitalWrite(trigPin, HIGH);)时,我们发送超声波,但与此同时,传感器内部升起回波引脚。因此,当程序到达pulseIn()函数时,回波引脚已经是HIGH了,这意味着计数将取决于对象的距离。
传感器读取非常快,我想每0.5秒读取一次,我该怎么做
你可以在程序中添加延迟或某种时间计数器。
嗨。
这方面我是新手,但我想知道。必须使用面包板吗?或者我可以把传感器直接连接到我的Arduino UNO上?
谢谢,
克里克
你没必要用面包板。你可以直接把它连接到Arduino上。
你好德州,
举个例子,我在测量一个容器的体积差。我如何修改代码来度量体积呢?
谢谢
你需要测量三个维度,宽度,长度和深度,然后把它们相乘得到体积。查看我的Arduino Range measurement项目,我展示了一些类似的东西,或者如何使用这个传感器测量面积。
非常感谢!我是初学者,这是非常有用的