跳转到主要内容

Intel Curie/Arduino 101入门开发套件之超声波传感器使用教程

editor 提交于


作者:Leonardo

超声波是频率高于20000Hz的声波,它指向性强,能量消耗缓慢,在介质中传播的距离较远,因而经常用于测量距离。

超声波传感器型号众多,这里我们为大家介绍一款常见的超声波传感器。


SR04是利用超声波特性检测距离的传感器。其带有两个超声波探头,分别用作发射和接收超声波。其测量范围在3cm-450cm。

超声波发射器向某一方向发射超声波,在发射的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离s,即:s=340m/s×t/2 。这就是所谓的时间差测距法。


SR04超声波模块有4个引脚,各功能如下:


使用Arduino采用数字引脚给SR04的Trig引脚至少10μs的高电平信号,触发SR04模块测距功能;


触发后,模块会自动发送8个40KHz的超声波脉冲,并自动检测是否有信号返回。这步会由模块内部自动完成。


如有信号返回,Echo引脚会输出高电平,高电平持续的时间就是超声波从发射到返回的时间。此时,我们能使用pulseIn() 函数获取到测距的结果,并计算出距被测物的实际距离。


链接示意图


示例代码如下:

/*
SR04超声波传感器驱动
串口显示检测距离
*/
/*
SR04超声波传感器驱动
串口显示检测距离
*/

// 设定SR04连接的Arduino引脚
const int TrigPin = 2;
const int EchoPin = 3;
float distance;

void setup()
{ // 初始化串口通信及连接SR04的引脚
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
// 要检测引脚上输入的脉冲宽度,需要先设置为输入状态
pinMode(EchoPin, INPUT);
Serial.println("Ultrasonic sensor:");
}

void loop()
{
// 产生一个10us的高脉冲去触发TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
// 检测脉冲宽度,并计算出距离
distance = pulseIn(EchoPin, HIGH)/ 58.00;
Serial.print(distance);
Serial.print("cm");
Serial.println();
delay(1000);
}

在本示例中,我们将超声波模块的Trig连接到Arduino的2号引脚,Echo连接到Arduino 101的3号引脚。下载完程序后,打开串口监视器,并将超声波传感器对向需要测量的物体,即可看到当前超声波传感器距物体的距离,如图所示:


环境温度、湿度等对声波的传输速度也有影响,你可以尝试结合其他的温湿度传感器,校正超声波传感器测出的数据,以得到更准确的测量结果。

文章来源:Adruino中文社区