Arduino Uno + HY-SRF05 超声波测距模块详细讲解演示实验

Randy 于 2012-5-30 11:16 编辑





一、首先我们来了解一下什么叫超声波?

答:声波的频率范围很大(从零以上到几百万以上),而人的听力灵敏度却有限,故科学家们将听力灵敏度很低的20Hz以下的声波定义为次声波,将20KHz以上的声波定义为超声波;将听力灵敏度还可以的声波范围(20Hz--20KHz)定义为音频声波(听力灵敏度最高的频率是1KHz)。超声波的指向性很强(频率越高,越接近光波),故人们利用超声波这一特性发明了超声探伤、B超等应用。

二、超声波测距的原理:通过超声波发射装置发出超声波,根据接收器接到超声波时的时间差就可以知道距离了。这与雷达测距原理相似。 超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。(超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2)。本模块性能稳定,测度距离精确。能和国外的SRF05,SRF02等超声波测距模相媲美。模块高精度,盲区(2cm)超近,稳定的测距是此产品成功走向市场的有力根据!

三、超声波的特点:超声波指向性强,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物 位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移 动机器人的研制上也得到了广泛的应用。  为了使移动机器人能自动避障行走,就必须装备测距系统,以使其及时获取距障碍物的距离信息(距离和方向)。本文所介绍的三方向(前、左、右)超声波测距系统,就是为机器人了解其前方、左侧和右侧的环境而提供一个运动距离信息。

四、本模块主要技术参数:
1:使用电压:DC5V
2:静态电流:小于2mA
3:电平输出:高5V
4:电平输出:底0V
5:感应角度:不大于15度
6:探测距离:2cm-450cm 7:高精度可达0.2cm

五、模块工作原理:
(1)采用IO触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间.测试距离=(高电平时间*声速(340M/S))/2;

我们公司测试主要是用arduino uno与HY-SRF05 链接进行测试的。效果还是很不错的,公司只是提供简单的测试程序,如需进行其他的开发请自行深入研究,谢谢合作!六、实物规格:





七、超声波时序图:



以上时序图表明你只需要提供一个10uS 以上脉冲触发信号,该模块内部将 发出8 个40kHz 周期电平并 检测回波。一旦检测到有回波 信号则输出 回响信号。回响信号 的脉冲宽度与所 测的距离成正比。由此通过 发射信号到收到的回响信号时间间隔可以计算得到距离。公式:uS/58=厘米或者uS/148=英寸;或是:距离=高电平时间*声速(340M/S)/2;建议测量周期为60ms 以上,以防止发射信号对回响信号的影响。注:1、此模块不宜带电连接,若要带电连接,则先让模块的GND端先连接,否则会影响模块的正常工作。2、测距时,被测物体的面积不少于0.5 平方米且平面尽量要求平整,否则影响测量的结果。



八、看一下本模块具体是长什么样子的。




九、再来看一下与Arduino Uno连接的实物图:






十、下面是与Arduino Uno测试的演示代码:

int inputPin=4;// define ultrasonic signal receiver pinECHO to D4

int outputPin=5; // define ultrasonic signal transmitter pinTRIG to D5

void setup()

{

Serial.begin(9600);

pinMode(inputPin, INPUT);

pinMode(outputPin, OUTPUT);

}

void loop()

{

digitalWrite(outputPin, LOW);

delayMicroseconds(2);

digitalWrite(outputPin, HIGH); // Pulse for 10μs to trigger ultrasonic detection

delayMicroseconds(10);

digitalWrite(outputPin, LOW);

int distance = pulseIn(inputPin, HIGH);// Read receiver pulse time

distance= distance/58; // Transform pulse time to distance

Serial.println(distance); //Ourput distance

delay(50);

}

通过串口调试COM口我们可以看到超声波红外测距模块遇到前方障碍物时的距离。


via - arduino中文社区

标签: Arduino教程