查看: 2401|回复: 0
打印 上一主题 下一主题

简单超声波测距

[复制链接]
跳转到指定楼层
沙发
发表于 2015-5-24 11:36:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
超声波发射器向某一方向发射超声波,在发射的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离s,即:s=340m/s× t / 2 。这就是所谓的时间差测距法。本实验利用超声波测得的距离从串口中显示。


元器件清单:
Zduino UNO × 1
OJ传感器扩展板× 1
USB数据线 × 1
1p杜邦线 × 4
超声波传感器 × 1

知识要点:
pulseIn():用于检测引脚输出的高低电平的脉冲宽度。
pulseIn(pin, value)
pulseIn(pin, value, timeout)
Pin---需要读取脉冲的引脚
Value---需要读取的脉冲类型,HIGHLOW
Timeout---超时时间,单位微秒,数据类型为无符号长整型。

使用方法及时序图:




1、使用Arduino采用数字引脚给SR04Trig引脚至少10μs的高电平信号,触发SR04模块测距功能;
2、触发后,模块会自动发送840KHz的超声波脉冲,并自动检测是否有信号返回。这步会由模块内部自动完成。
3、如有信号返回,Echo引脚会输出高电平,高电平持续的时间就是超声波从发射到返回的时间。此时,我们能使用pulseIn()函数获取到测距的结果,并计算出距被测物的实际距离。

  1. /*
  2. [url=http://www.openjumper.com/]www.openjumper.com[/url]
  3. 日期:2013.5.18
  4. IDE 版本:1.0.1
  5. 功能:利用SR04超声波传感器进行测距,并用串口显示测出的距离值
  6. */

  7. // 设定SR04连接的Arduino引脚
  8. const int TrigPin = 2;
  9. const int EchoPin = 3;
  10. float distance;
  11. void setup()
  12. {   // 初始化串口通信及连接SR04的引脚
  13.         Serial.begin(9600);
  14.         pinMode(TrigPin, OUTPUT);
  15.     // 要检测引脚上输入的脉冲宽度,需要先设置为输入状态
  16.         pinMode(EchoPin, INPUT);
  17.     Serial.println("Ultrasonic sensor:");
  18. }
  19. void loop()
  20. {
  21.     // 产生一个10us的高脉冲去触发TrigPin
  22.         digitalWrite(TrigPin, LOW);
  23.         delayMicroseconds(2);
  24.         digitalWrite(TrigPin, HIGH);
  25.         delayMicroseconds(10);
  26.         digitalWrite(TrigPin, LOW);
  27.     // 检测脉冲宽度,并计算出距离
  28.         distance = pulseIn(EchoPin, HIGH) / 58.00;
  29.         Serial.print(distance);
  30.         Serial.print("cm");
  31.         Serial.println();
  32.         delay(1000);
  33. }
复制代码

连线实物图:

下载完程序后,打开串口监视器,并将超声波传感器对向需要测量的物体,即可看到当前超声波传感器距物体的距离,如下图:


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表