Arduino怎么使用HC-SR04超声波距离传感器

距离传感器在机器人控制中非常有用,这篇文章介绍怎么用Arduino使用HC-SR04超声波距离传感器。

如果你喜欢Pi,那么你也可以将HC-SR04设置成与Raspberry Pi一起工作。不管是Arduino还是Raspberry Pi,距离传感器都用处多多。

设备清单

必须设备

  • Arduino Uno
  • 面包板
  • 面包板线
  • HC-SR04超声波传感器

HC-SR04超声波距离传感器

HC-SR04超声波测距传感器是常用的经济型传感器,可提供2厘米至400厘米的测量范围。它的精度可以达到3毫米,但根据传感器的质量不同,精度也会有所差异。

超声波传感器是比较简单的设备,在很多高科技的设备中常见。工作原理是发射声波,然后接收附近物体反射的声波。HC-SR04-Ultrasonic-Diagram

我们可以通过根据声音速度380m/s和传感器告诉我们的时间差计算物体的距离,计算公式:距离=时间*声速

一定要记住,要把值减半,因为我们计算的是声音传播的来回距离,减半之后就是声源到物体的距离。

可以看出计算距离所使用的方法非常简陋,不是很准确,不过,对于大多数项目来说,这种精度就足够了。

连接Arduino和HC-SR04距离传感的电路

电路连接比较简单,按照下面的步骤和示意图做就可以了

  • VCC连接到5v
  • Trig连接到引脚2
  • Echo连接到引脚3
  • GND连接到GND

Arduino-Distance-Sensor-Circuit

Arduino控制HC-SR04超声波传感器的代码

有几种不同的代码实现,你可以用它来计算距离,每个计算都依赖距离传感器的信号。

最简单的方法是使用库,但对于本教程,我们从头开始编写代码。

  1. 这段代码非常简单,不用担心看不懂。
int trigger_pin = 2;
int echo_pin = 3;
long distance, pulse_duration;

首先,设置脚本中需要的所有变量,需要定义触发器和回波的引脚。

还需要距离和脉冲间隔时间这两个变量。

void setup() {

  Serial.begin (9600);
  
  pinMode(trigger_pin, OUTPUT);
  pinMode(echo_pin, INPUT);
}

接下来,我们编写setup函数,这个函数将初始化我们需要的东西,为循环函数做好准备。

首先,启动串行输出,并将波特率设置为9600。

触发器引脚(tigger_pin)需要设置为输出,这个引脚将告诉传感器发出超声波。

回声引脚(echo_pin)设置为输入,这个引脚会在超声波弹回打到接收机上时,升为高电平。

void loop() {
  
  //Set pin to high for 10 microseconds
  digitalWrite(trigger_pin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger_pin, LOW);
 
  //Check the echo pin for when it goes high and save the time it took in microseconds)
  pulse_duration = pulseIn(echo_pin, HIGH);

接下来我们看一下loop函数,在这个函数里我们会让HC-SR04发出超声波,接收回波,并计算距离。

先将trigger_pin (echo)设置为高电平,让HC-SR04发出超声波,将引脚保持高电平10微秒,然后将其设置为低电平。

最后,我们使用pulseIn函数来测量回波引脚(echo_pin)从低到高所需的时间,单位为微秒。

如果有错误,简单地返回0,表明它在超时时间内从未收到一个完整的脉冲。

// Math: distance = ( (duration) * (speed of sound in cm per microsecond 0.0343 / 2)
  distance = round(pulse_duration * 0.0171);

  // Math: distance = ( (duration) * (speed of sound in inches per microsecond 0.01350 / 2)
  //distance = round(pulse_duration/0.00675);

现在,我们有了距离计算算法,如上图所示,一个是厘米,另一个是英寸。

厘米和英寸的计算方法除了声速值外,其他的计算方法都是大致相同的,来解释一下厘米的计算方法。

音速的单位是厘米,每微秒的声速大概是0.0343。我们把它除以2,因为我们只测量了超声波所走的距离的一半,这样,得到的数值是0.0171。

Serial.print(distance);
  Serial.print("cm");
  Serial.println();
  
  delay(500);
}

最后,把信息打印出来,使用Serial.print,所有的数据都会被打印在序列监视器中。

首先打印距离,其次是cm,之后调用Serial.println,这样下一行数据就会在新的一行上。

最后,将脚本延迟500毫秒。

完整的代码如下:

int trigger_pin = 2;
int echo_pin = 3;
long distance, pulse_duration;

void setup() {

Serial.begin (9600);

pinMode(trigger_pin, OUTPUT);
pinMode(echo_pin, INPUT);

digitalWrite(trigger_pin, LOW);
}

void loop() {

digitalWrite(trigger_pin, HIGH);
delayMicroseconds(10);
digitalWrite(trigger_pin, LOW);

pulse_duration = pulseIn(echo_pin, HIGH);

distance = round(pulse_duration * 0.0171);

//distance = round(pulse_duration/0.00675);

Serial.print(distance);
Serial.print("cm");
Serial.println();

delay(500);
}

测试电路和代码

  1. 上传代码到Arduino,点击verify(1),然后点击upload(2).Verify-and-Upload-v2如果出现了问题,请检查下代码和电路连接

还要看下Arduino和你的电脑是不是连接正常了,可以检查下Tooles->Port

  1. Arduino距离传感器现在应该开始工作了。加载工具菜单中的串行监控器,应该会看到一些测量结果被打印出来。Load-Arduino-Serial-Monitor

问题解决

在这个教程中,有一些问题可能会出现,这里列出一些常见的问题。

  • 如果Arduino编译器抛出了错误,请回过头来验证是否正确地复制了代码。编译器通常会指出问题所在,修复这些问题,然后代码就可以编译了。 – 没有意义的怪异值通常与距离传感器接线不良或距离传感器故障有关。接线不良的传感器容易修复,因为你只需要仔细检查一下你的电路就可以了。如果是有问题,你就需要买一个新的。另外,检查是否在脚本中声明了正确的引脚。
  • 如果你在上传代码到Arduino上有问题,那么请仔细检查是否在IDE中选择了它。位于 “Tools->Port”和 “Tools->Board”。

希望本教程完整详细地告诉了你怎么用Arduino使用HC-SR04距离传感器,如果有任何反馈、技巧或其他问题,请不要犹豫,在下面留言。

平均: 0 / 5. votes: 0

到目前为止还没有投票!成为第一位评论此文章。

欢迎转载,请留下出处链接:Labno3 » Arduino怎么使用HC-SR04超声波距离传感器

赞 (0)

评论

5+8=