HC-SR04:关于超声波传感器的所有信息

HC-SR04传感器

有时候有必要 测量距离 为此,您可以使用多个传感器。 我们已经撰写了一篇文章来讨论 高精度距离传感器,例如VL52L0X。 该传感器属于ToF型,由于采用了激光,因此基于非常精确的测量。 但是,如果精度对您而言并不那么重要,并且您想要某种可以让您以低廉的价格测量距离的方法,那么另一种可能性就是 您触手可及的就是HC-SR04.

在的情况下,中 HC-SR04距离传感器,距离通过超声波测量。 该系统类似于VL52L0X的光学方法。 就是说,它被发射,有一个反弹并被接收,但是在这种情况下,它不是超声或红外,而是超声。 如果您对电子,机器人技术或业余制造商充满热情,则可以将其用于众多DIY项目,例如机器人的障碍物检测系统,存在传感器等。

什么是HC-SR04?

好吧,很明显,正如我在前几段中已经提到的那样, HC-SR04是基于超声波的低精度距离传感器。 有了它,您就可以轻松快速地测量距离,尽管原则上不经常使用它。 大多数情况下,它被用作换能器,以检测障碍并通过与传感器响应相关的其他机制来避开障碍。

的外观 HC-SR04非常独特且易于识别。 此外,它在Arduino入门套件中是相当受欢迎的项目,并且对于许多项目而言都是必需的。 它很容易识别,因为它有两个“眼睛”,它们实际上是此模块集成的超声设备。 其中一个是超声波发射器,另一个是接收器。 它的工作频率为40 Khz,因此人类听不到。

超声波传感器原理

的原则 它是基于模拟将石头扔进井中以测量其深度时使用的一种。 您扔石头,然后花多长时间才能跌落到底部。 然后,您可以计算经过时间的速度,并得出石头经过的距离。 但是在那种情况下,传感器就是你。

ESP8266
相关文章:
ESP8266:Arduino的WIFI模块

在HC-SR04中,发射器将发射超声波,当它们从物体或障碍物反弹时,将被接收器捕获。 这 电路将进行必要的计算 该回波以确定距离。 如果您知道某些动物(例如海豚,鲸鱼或蝙蝠)用来定位障碍物,猎物等的系统,那么您可能对此也很熟悉。

通过计算从发送脉冲到接收到响应之间的时间,可以准确地确定时间,从而确定距离。 请记住,[空间=速度时间] 但是对于HC-SR04,您必须将此数量除以/ 2,因为从超声波发出并经过太空直到碰到障碍物并返回的时间已被测量,因此该时间大约为这一半...

引脚和数据表

您已经知道,要查看所获取模型的完整数据,最好的办法是 查找数据表 制造商的混凝土。 例如,这是一个 英国威廉希尔Sparkfun数据表,但还有更多可用的PDF。 但是,以下是HC-SR04的最重要的技术数据:

  • 引脚:4个引脚,分别用于电源(Vcc),触发器(Trigger),接收器(Echo)和地(GND)。 触发器指示何时应激活传感器(何时启动超声),因此有可能知道接收器接收到信号时所经过的时间。
  • 馈送:5v
  • 超声波频率:40 Khz,人耳只能听到20Hz至20Khz的声音。 低于20Hz(次声)和高于20Khz(超声)的一切都不会被察觉。
  • 消耗(待机):<2mA
  • 消费工作:15毫安
  • 有效角度:<15º,根据物体的角度,您可能会获得更好或更差的结果。
  • 实测距离:从2厘米到400厘米,尽管从250厘米开始,分辨率不是很好。
  • 中分辨率:实际距离和测量值之间相差0.3厘米,因此尽管不像激光那样被认为具有很高的精度,但对于大多数应用而言,测量值还是可以接受的。
  • 价格:起价€0,65

与Arduino集成

带有Arduino的HC-SR04

将其连接到Arduino再简单不过了。 您只需要负责将GND连接到标有Arduino 5v电源的Arduino相应输出,即Vcc和HC-SR04的其他两个引脚,以及为项目选择的输入/输出。 您可以看到,在较高的Fritzing方案中这很简单...

您只需要考虑一下,虎须必须接收至少10微秒的电脉冲才能正常激活。 以前,您必须确保它处于LOW值。

至于 Arduino IDE的代码,则无需与其他组件一起使用任何库或类似的库。 只需编写公式即可计算距离,几乎没有其他...当然,如果您希望您的项目对HC-SR04传感器的测量做出响应,则必须添加所需的代码。 例如,您可以使伺服电机沿一个方向或另一个方向移动一定距离,以避开障碍物,或者使电机停止,并在检测到接近时激活警报等,而不是简单地在控制台上显示测量值。 。

 有关编程的更多信息: Arduino手册(免费PDF)

例如,您可以看到 用作基础的基本代码:

//Define las constantes para los pines donde hayas conectado el pin Echo y Trigger
const int EchoPin = 8;
const int TriggerPin = 9;
 
void setup() {
   Serial.begin(9600);
   pinMode(TriggerPin, OUTPUT);
   pinMode(EchoPin, INPUT);
}

//Aquí la muestra de las mediciones
void loop() {
   int cm = ping(TriggerPin, EchoPin);
   Serial.print("Distancia medida: ");
   Serial.println(cm);
   delay(1000);
}

//Cálculo para la distancia
int ping(int TriggerPin, int EchoPin) {
   long duration, distanceCm;
   
   digitalWrite(TriggerPin, LOW);  //para generar un pulso limpio ponemos a LOW 4us
   delayMicroseconds(4);
   digitalWrite(TriggerPin, HIGH);  //generamos Trigger (disparo) de 10us
   delayMicroseconds(10);
   digitalWrite(TriggerPin, LOW);
   
   duration = pulseIn(EchoPin, HIGH);  //medimos el tiempo entre pulsos, en microsegundos
   
   distanceCm = duration * 10 / 292/ 2;   //convertimos a distancia, en cm
   return distanceCm;
}


发表评论,留下您的评论

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   何塞

    我发现解释非常有用和简单。