Arduino问答实验室

使用 NewPing 程序库操作 HC-SR04 声纳传感器2条评论

作者:学长   发布于:2013年8月22日 17:10:10 周四    分类: Arduino    15748 人浏览

声纳传感器,又称超声波距离传感器。

一般能买到的为四支引脚型号为 SR04 的超声波距离传感器。

本实验最终使用三支引脚就能使用 SR04 而非四引脚。


官方 SR04 的规格如下:

1. 电压: 5V

2. 电流:一般30mA 最大 50mA

3. 频率:40KHz

4. 最短距离:3cm (1.18 in)

5. 最远距离:3m (9.84 ft)

6. 回音波:正 TTL 信号

7. 重量:11.33gm(0.4 oz)

8. 敏感度:侦测 3cm(1.18in) 直径以上的圆柱体

1. 连接方式:Digital

2. 最短距离:3cm

3. 最远距离:3m

4. 角度:45度,

5. 回音数:1

6. 时间间隔:100us-36ms

7. 其他注意事项:无



SR04 引脚如下:


Vcc -> 接5V 电源

Trig -> 触发超声波,接数位引脚。

Echo -> 回传时间

GND -> 接地


一般来说,Trig 是触发超声波 Echo  是接收,使用的时候 Trig 接 Arduino 输出脚,Echo 接 输入脚,含电源及接地总共4线。

本实验 将用3线及4线 来操作 SR04 ,4线为一般的接线方式,3线的方法是让 Trig 跟 Echo 使用同一个数位引脚,然後进行输出/输入切换。


先实验一个常用的接线,并且使用一般的控制程序。

接线图如下

sonar-1.png


程序如下:


const int TrigPin = 2; 
const int EchoPin = 3; 
float cm; 
void setup() 
{ 
  Serial.begin(115200); 
  pinMode(TrigPin, OUTPUT); 
  pinMode(EchoPin, INPUT); 
  digitalWrite(TrigPin, LOW);
} 
void loop()  
{  
  digitalWrite(TrigPin, HIGH); 
  delayMicroseconds(15); 
  digitalWrite(TrigPin, LOW); 

  cm = (pulseIn(EchoPin, HIGH)/2) / 29.1;
  cm = (int(cm * 100.0)) / 100.0; //保留两位小数 
  Serial.print(cm); 
  Serial.print("cm"); 
  Serial.println(); 
  delay(300); 
} 
程序说明:略。



接下来使用 NewPing 程序库来操作 SR-04,使用跟上面一样的接线图。


程序如下:


// ---------------------------------------------------------------------------
// Example NewPing library sketch that does a ping about 20 times per second.
// ---------------------------------------------------------------------------

#include <NewPing.h>

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

void setup() {
  Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
}

void loop() {
  delay(50);                      // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
  unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
  Serial.print("Ping: ");
  Serial.print(uS / US_ROUNDTRIP_CM); // Convert ping time to distance and print result (0 = outside set distance range, no ping echo)
  Serial.println("cm");
}



程序说明:略。


第三个使用1个引脚的接线图如下:

sonar-2.png


程序如下:


// ---------------------------------------------------------------------------
// NewPing library sketch that interfaces with all but the SRF06 sensor using
// only one Arduino pin. You can also interface with the SRF06 using one pin
// if you install a 0.1uf capacitor on the trigger and echo pins of the sensor
// then tie the trigger pin to the Arduino pin (doesn't work with Teensy).
// ---------------------------------------------------------------------------

#include <NewPing.h>

#define PING_PIN  12  // Arduino pin tied to both trigger and echo pins on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

NewPing sonar(PING_PIN, PING_PIN, MAX_DISTANCE); // NewPing setup of pin and maximum distance.

void setup() {
  Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
}

void loop() {
  delay(50);                      // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
  unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
  Serial.print("Ping: ");
  Serial.print(uS / US_ROUNDTRIP_CM); // Convert ping time to distance and print result (0 = outside set distance range, no ping echo)
  Serial.println("cm");
}


程序说明:略


总结:

使用了 NewPing 程序库之后程序变得易读了。NewPing 内部使用 Time 计时来取代 pulseIn()  。

虽然定位的精确度只到 1cm ,如果需要更精准可稍微修改下 NewPing 程式库。

第一个实验所使用的公式, 其中距离公式的说明,请参考另一篇 ardublock 的声纳实验文章,内有详细说明。

Me.png



Arduino问答实验室- 本站版权
1、本主题由文章作者发表,文章作者与Arduino问答实验室享有文章相关版权
2、转载或引用本文时请同时征得文章作者和Arduino问答实验室的同意
3、本站部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站即时予与以处理
5、原文链接:www.985z.com/?post=19
二维码
继续查看有关 arduino sonar 超声波 声纳 sr04 的文章

2访客评论

  • Giannapl
    我想这是一个相当普遍的问题,所以我猜有人会帮我处理这个错误。它似乎我有在发布消息的人的问题。谁能帮助我?通过我接触的个人网页<>/ URL]或只写了我一个下午:)

    2014-04-12 01:52 回复

我来说说

*

*