在Arduino上使用声纳传感器测量距离

  • 内容
  • 评论
  • 相关

声纳传感器最主要的用途是能够在水下进行测量,它利用声音的传播来探测物体,由于声波在水中比在空气中传播得更远,因此声纳比雷达等其他类型的传感器在水中的表现更好。但声纳传感器也可以在空气中使用,在实际测量距离时也存在着微小的干扰。

声纳传感器

声呐传感器模块

声纳传感器有两种类型:被动声纳和主动声纳。主动声纳有一个发射器和一个探测器,它根据信号返回到声纳的时间,它可以探测到物体的范围或距离及其方位,它还能检测到信号的强度,以确定接收方接收到信号的时间。被动声纳主要用来接收船只和其他海洋生物的信号,比如鲸鱼和潜艇等,被动声纳没有发射器,它只能接收到向它靠近的声波。

声呐传感器工作原理图

MB1010声纳传感器测量距离

在本文中我们将使用一个Arduino Uno作为微处理器来读取MB1010声呐模块探测到的距离。使用的声纳是LV-MaxSonar-EZ1声纳测距模块 MB1010。

LV-MaxSonar-EZ1声纳测距模块 MB1010

过程中需要使用烙铁把电线焊接到传感器得接口上。

MB1010 sonar pinout

MB1010模块背面从上至下的七个引脚,分别是:GND、+5V、TX(串口)、RX(串口)、AN(ADC)、PW(Pulse Width,)、BW(使用时可接+5V)。本文使用脉冲宽度测量的方法。焊接就位后,可以通过USB Type B型数据线连接Arduino UNO。

Arduino uno连接MB1010声呐传感器

然后使用Arduino IDE上传下面的代码。MB1010声呐传感器可以从Arduino的+5V输出引脚中直接连接电源,传感器的脉冲宽度输出连接到Arduino上任何可以接收脉冲宽度的输入引脚,在本例中使用的是数字引脚 3。

#include "Maxbotix.h"

Maxbotix rangeSensorPW(3, Maxbotix::PW, Maxbotix::LV); // #3 定义读取的数字输入引脚
//Maxbotix:PW 定义Arduino是读取PW信号 

void setup()
{
  Serial.begin(9600);
}
void loop()
{
  unsigned long start;  
  Serial.println("Reading 1st Sensor");  //串行监视器输出字符串 
  start = millis(); // 声纳接收到信号之前的毫秒数
  Serial.print("PW 1: ");
  Serial.print(rangeSensorPW.getRange()*.393701); // 乘以这个把厘米转换成英寸
  Serial.print(" inches - ");
  Serial.print(millis() - start);  
  Serial.println("ms");
 
  Serial.println();
  delay(1500);   // 等待 1.5 秒   
}

当上传代码后,可以打开串口监视器,监视器将每隔1.5秒刷新一次,显示的距离的单位为英寸,如果要显示厘米可以按下面的形式修改代码:

Serial.print(rangeSensorPW.getRange()*.393701);

改为:

Serial.print(rangeSensorPW.getRange());

如果把你的手或者另一个物体放在探测范围内,声呐传感器将会读取并显示距离值,下图是连续代码运行时的图像。

MB1010声呐传感器读取距离值。