查看: 44486|回复: 29

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

[复制链接]
  • TA的每日心情
    擦汗
    2016-8-7 07:53
  • 签到天数: 112 天

    [LV.6]常住居民II

    发表于 2012-5-30 11:13 | 显示全部楼层 |阅读模式
    本帖最后由 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:静态电流:小于2mA3:电平输出:高5V                  4:电平输出:底0V5:感应角度:不大于15       6:探测距离:2cm-450cm
    7:高精度可达0.2cm   
    五、模块工作原理:
    (1)采用IO触发测距,给至少10us的高电平信号;
    (2)模块自动发送840khz的方波,自动检测是否有信号返回;
    (3)有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间.测试距离=(高电平时间*声速(340M/S))/2;  

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



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

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




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

    超声波4.jpg


    超声波3.jpg



    十、下面是与Arduino Uno测试的演示代码:
    int inputPin=4;  // define ultrasonic signal receiver pin  ECHO to D4
          int outputPin=5; // define ultrasonic signal transmitter pin  TRIG 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口我们可以看到超声波红外测距模块遇到前方障碍物时的距离。

    申明:不经同意,不得转载,谢谢!
    结果.jpg

    该用户从未签到

    发表于 2012-7-13 22:14 | 显示全部楼层
    ladywent 发表于 2012-7-13 21:42
    请问  公式:uS/58=厘米   这个58是怎么来的?

    先顶下帖子,然后回答这58怎么得来:

    声音在干燥、摄氏 20度的空气中的传播速度大约为343米/秒,合34,300厘米/秒。
    或者,我们作一下单位换算,34,300除以1,000,000厘米/微秒。
    即为:0.0343厘米/微秒
    再换一个角度,1/0.0343 微秒/厘米

    即:29.15 微秒/厘米。s=v*t(路程=速度X时间),所以速度v=s/t=1/29
    当然这s是来回2倍的s所测距离,所以v=s/2/t=s/2t=1、2X29=1/58
    打赏作者鼓励一下!

    该用户从未签到

    发表于 2012-7-13 21:42 | 显示全部楼层
    请问  公式:uS/58=厘米   这个58是怎么来的?

    该用户从未签到

    发表于 2012-7-14 08:05 | 显示全部楼层
    本帖最后由 ladywent 于 2012-7-14 08:06 编辑
    海神 发表于 2012-7-13 22:14
    先顶下帖子,然后回答这58怎么得来:

    声音在干燥、摄氏 20度的空气中的传播速度大约为343米/秒,合34,30 ...


    多谢!!!
    是我被绕晕了,我以为距离=t*343/2, 不知道为什么要用除。

    该用户从未签到

    发表于 2012-7-15 08:44 | 显示全部楼层
    测的距离有时不准是怎么造成的

    该用户从未签到

    发表于 2012-7-24 10:54 | 显示全部楼层
    运动的话就会出现误差..怎样解决啊?
    例如,飞行器用超声定高,然后用100KM/h的速度离地1米飞行,这是超声怎样才可以用呢?
  • TA的每日心情
    擦汗
    2016-8-7 07:53
  • 签到天数: 112 天

    [LV.6]常住居民II

     楼主| 发表于 2012-7-25 09:06 | 显示全部楼层
    yuri_su 发表于 2012-7-24 10:54
    运动的话就会出现误差..怎样解决啊?
    例如,飞行器用超声定高,然后用100KM/h的速度离地1米飞行,这是超声怎样 ...

    这个运动中出现的误差我也不太清楚,貌似做飞行器用这个模块不太好,还是选择专业一点的模块!

    该用户从未签到

    发表于 2012-8-1 10:52 | 显示全部楼层
    yuri_su 发表于 2012-7-24 10:54
    运动的话就会出现误差..怎样解决啊?
    例如,飞行器用超声定高,然后用100KM/h的速度离地1米飞行,这是超声怎样 ...

    从飞行器上看,如果向地面垂直发射声波的话,因为速度较小,回声仍旧是垂直回来的,这样就可以了。

    该用户从未签到

    发表于 2012-12-31 22:01 | 显示全部楼层
    运动中要考虑多普勒效应

    点评

    怎么玩?能详细点么?  发表于 2013-11-12 10:50

    该用户从未签到

    发表于 2013-8-4 10:44 | 显示全部楼层
    吧错,谢谢,回去搞搞去,谢谢!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    KittenBot杯第六届开源硬件开发大赛启动啦
    KittenBot杯第六届开源硬
    大赛简介: 第六届开源硬件开发大赛由Arduino中文社区发起 由KittenBot冠名赞助
    GRBL sender 自己制作的控制软件
    GRBL sender 自己制作的控
    网上找了许多GRBL控制软件都不理想,于是决定自己动手做一个,这是第一版,功能有限,
    有关程序编译出错问题
    有关程序编译出错问题
    ActionGroup_[AG_NUM_][CHAR_NUM]二维数组传入void handleActionGroup(const char
    基于arduino的ZS-40蓝牙模块传输超声波距离,app显示
    基于arduino的ZS-40蓝牙模
    基于arduino的ZS-40蓝牙模块传输超声波距离,app显示
    上传出错
    上传出错
    自从我做红外遥控小车之后就上传出错了,换了一根线也不行,单片机没有插任何东西
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表