SKU:RB-02S001A RB URF02超声波传感器

来自ALSROBOT WiKi
2017年5月24日 (三) 10:17Arduino77讨论 | 贡献的版本

跳转至: 导航搜索
02S001A01.png

目录

产品概述

RB URF02超声波传感器是RB URF v1.1超声波传感器的升级产品,在保留原有功能的基础上,使用防插反接头并新增加模式选择功能,有两种模式可选择:单线模式只需要一根信号线,大大减少IO口资源;双线模式与原有功能一样,需要一根输入和输出信号线。侦测距离和精度也有较大提高,可达1cm到500cm,其在有效探测范围内自动标定,无需任何人工调整就可以获得障碍物准确的距离。令你的机器人像蝙蝠一样通过声纳来感知周围的环境,你只需要在单片机、Arduino微控制器中编写一小段程序,就可以根据障碍物的距离精确的控制机器人的电机运行,从而使你的机器人轻松地避开障碍物,因此其是机器人领域最常用的测距避障模块。

规格参数

  1. 工作电压 :+5v
  2. 工作电流 :<20mA
  3. 工作频率 :40KHz
  4. 工作温度范围:-10℃~+70℃
  5. 探测有效距离:1cm~500cm
  6. 探测分辨率:0.5cm
  7. 探测误差:±0.5%
  8. 灵敏度:大于1.8m外可以探测到直径2cm物体
  9. 接口类型:TTL(单线模式和双线模式可切换)
  10. 方向性侦测范围:定向式(水平/垂直)65度圆锥
  11. 尺寸大小: 46.7mm × 25.7mm × 19mm
  12. 固定孔尺寸:8.6mm × 41.2mm @ M2.9
  13. 重量大小:7g

接口定义

超声波传感器的引脚定义:

  • OUTPUT:响应信号输入
  • INPUT:触发控制信号输入
  • +:电源(VCC)
  • -:地(GND)
02S001A03.png

使用方法(Arduino控制器)

工作原理

超声波是指频率高于20KHz的机械波,超声波测距的原理是通过测量声波在发射后遇到障碍物反射回来的时间差计算出发射点到障碍物的实距离。
测距公式为:L = V * (T2-T1)/2
公式说明:

  • L 为测量的距离长度
  • V 为超声波在空气中的传播速度(在20℃时为344m/s)
  • t1 为测量距离的起始时间
  • t2 为收到回波的时间

速度乘以时间差等于来回的距离,除以2可以得到实际的距离。

编程原理

使用RB URF02超声波传感器双线时,首先拉低触发控制信号输入(input)端口,然后至少给10us的高电平信号来触发模块,在触发后,模块会自动发射8个40KHz的方波,并自动检测是否有信号返回;如果有信号返回,通过响应信号输出(output)一个高电平,高电平持续的时间便是超声波从发射到接收的时间,该模块工作时序图如下,所以测试距离的计算公式为:测试距离 = 高电平持续时间 * 340(m/s)*0.5
使用RB URF02超声波传感器单线时,原理同双线模式,只是通过一个触发控制信号输入(input)端口进行超声波控制器的信号收发。

P-2.jpg

双线模式接线图

  • INPUT、OUTPUT端口如图所示接到控制器的I/O口。5V 和GND分别接到电源的+5V和GND。

注:在使用双线模式时模式选择开关(Mode)拨到数字2侧。

02S001A04.png

双线模式例子程序

硬件连接如图所示,数字口4 接超声波的OUTPUT 、数字口5 接超声波INPUT ,将开关拨到数字2 一侧超声波进入双线模式。

int inputPin = 4;   //  接超声波的 output 引脚到数字D4脚 
int outputPin = 5;  //  接超声波的 input 引脚到数字D5脚 
int ledpin = 13;    // 定义 ledPin 引脚为D13脚
void setup() 
{ //初始化串口及引脚的输入、输出模式
  Serial.begin(9600); 
  pinMode(ledpin,OUTPUT); 
  pinMode(inputPin, INPUT); 
  pinMode(outputPin, OUTPUT); 
}                                                                                                                                          
void loop() 
{ 
  unsigned int x1,x2;
  digitalWrite(outputPin, LOW); //使发出发出超声波信号接口低电平2 μs 
  delayMicroseconds(2); 
  digitalWrite(outputPin, HIGH); //使发出发出超声波信号接口高电平10μs ,这里是至少10μs 
  delayMicroseconds(10); 
  digitalWrite(outputPin, LOW);  // 保持发出超声波信号接口低电平 
  float distance1 = pulseIn(inputPin, HIGH);  //  读出接收脉冲的时间 
  distance1 = distance1/58;       // 将脉冲时间转化为距离(单位:厘米) 
  x1 = distance1 * 100.0;
  distance1 = x1 / 100.0; //保留两位小数 
  Serial.print("x1 = "); 
  Serial.println(distance1);   // 输出距离值     
  delay(150);  
  if (distance1 >=50) 
  {  
     digitalWrite(ledpin,HIGH); //如果距离大于50厘米小灯亮起
  }  
  else                          
     digitalWrite(ledpin,LOW); //如果距离小于50厘米小灯熄灭
} 

双线模式在线云编程程序

01S001a.png

单线模式接线图

02S001A05.png
  • INPUT端口如图所示接到控制器的I/O口。5V 和GND分别接到电源的+5V和GND。

注:在使用单线模式时模式选择开关(Mode)拨到数字1侧。

单线模式例子程序

硬件连接如图所示,数字口2 接超声波的INPUT ,将开关拨到数字1 一侧超声波进入单线模式。

float duration;                 //变量duration 用来存储脉冲时间 
float distance;                 //变量distance 用来存储距离 
int srfPin = 2;                 //定义srfPin 引脚为 2  
float val = 50.0;
int led = 13;
void setup() 
{ 
Serial.begin(9600); 
pinMode(led,OUTPUT);
} 
void loop() 
{ 
  pinMode(srfPin, OUTPUT); 
  digitalWrite(srfPin, LOW);            
  delayMicroseconds(2); 
  digitalWrite(srfPin, HIGH);           
  delayMicroseconds(10); 
  digitalWrite(srfPin, LOW);            
  pinMode(srfPin, INPUT); 
  duration = pulseIn(srfPin, HIGH);         
  distance = duration/58;        // 将脉冲时间转化为距离(单位:厘米) 
  Serial.println(distance);       // 输出距离值 
  delay(50);  
  if(distance>val)
    digitalWrite(13,HIGH);
   else
    digitalWrite(13,LOW);                           
} 

单线模式在线云编程程序

01S001b.png

程序效果

  • 打开串口助手可以观察到输出的距离值,如下图所示,如果距离小于 50厘米数字口13的LED 小灯熄灭,距离大于50厘米数字口13的LED 小灯亮起同时串口打印处距离数据。
02S001A02.png

两个超声波联调实验

为了方便电子爱好者使用多个超声波传感器,现将两个传感器的联调实验方法写下,供电子爱好者参考。

连接图示

两个超声波的INPUT引脚接在D5,OUTPUT分别接D3、D4,如下图:

Csb2.png

例子程序

依照程序连接两个超声波传感器与UNO,测试实际检测的距离。

const int pingPin = 11;
int inputPin1=4;   //  接超声波的 output 引脚到数字D4脚 
int outputPin=5;  //  接超声波的 input 引脚到数字D5脚 
int inputPin2=3;
int ledpin=13;    // 定义 ledPin 引脚为D13脚
void setup() 
{ //初始化串口及引脚的输入、输出模式
  Serial.begin(9600); 
  pinMode(ledpin,OUTPUT); 
  pinMode(inputPin1, INPUT); 
  pinMode(outputPin, OUTPUT); 
   pinMode(inputPin2, INPUT); 
}
void loop() 
{ 
  unsigned int x1,x2;
  digitalWrite(outputPin, LOW); //使发出发出超声波信号接口低电平2 μs 
  delayMicroseconds(2); 
  digitalWrite(outputPin, HIGH); //使发出发出超声波信号接口高电平10μs ,这里是至少10μs 
  delayMicroseconds(10); 
  digitalWrite(outputPin, LOW);  // 保持发出超声波信号接口低电平 
  float distance1 = pulseIn(inputPin1, HIGH);  //  读出接收脉冲的时间 
  distance1= distance1/58;       // 将脉冲时间转化为距离(单位:厘米) 
  x1 = distance1 * 100.0;
  distance1 = x1 / 100.0; //保留两位小数 
  Serial.print("x1 = "); 
  Serial.println(distance1);   // 输出距离值     
  delay(150);
  
  digitalWrite(outputPin, LOW); //使发出发出超声波信号接口低电平2 μs 
  delayMicroseconds(2); 
  digitalWrite(outputPin, HIGH); //使发出发出超声波信号接口高电平10μs ,这里是至少10μs 
  delayMicroseconds(10); 
  digitalWrite(outputPin, LOW);  // 保持发出超声波信号接口低电平 
  float distance2 = pulseIn(inputPin2, HIGH);  //  读出接收脉冲的时间 
  distance2 = distance2/58;       // 将脉冲时间转化为距离(单位:厘米) 
  x2 = distance2 * 100.0;
  distance2 = x2 / 100.0; //保留两位小数 
  Serial.print("x2 = "); 
  Serial.println(distance2);   // 输出距离值                   
  delay(150);    
  
}

程序效果

打开串口监视器可以观察到输出的距离值为当前超声波距前方障碍物的实际距离。

Dcsb.png

使用方法(Raspberry Pi 控制器)

  • 硬件环境:Raspberry Pi 3 控制器
  • 系统环境:Raspberry Pi RASPBIAN JESSIE WITH PIXEL 2017-04-10
  • 软件环境:Python 3
  • 使用硬件

(1)Raspberry Pi 3 控制器
(2)5V 2.5A 适配器
(3)杜邦线 * 若干
(4)超声波传感器
(5)10K 欧姆电阻 * 2个

  • 系统配置

(1)Raspberry Pi 连接到 WiFi 并可正常连接外网
教程:Raspberry Pi 3 Wifi 连接配置
http://www.makerspace.cn/forum.php?mod=viewthread&tid=6412&fromuid=10780

(2)使用远程桌面或 SSH 登录到 Raspberry Pi 控制器
教程:树莓派教程第5课——远程图形化显示
http://www.makerspace.cn/forum.php?mod=viewthread&tid=5665&fromuid=10780

(3)树莓派 Python 和 GPIO 库安装
(3.1)安装python-dev,输入以下指令。

sudo apt-get install python-dev

(3.2)安装 RPi.GPIO,依次输入以下命令。由于树莓派的GPIO库不断更新,可以在官网下载最新的库文件,也可以直接下载 wiki 教程中提供的版本
下载链接:http://pan.baidu.com/s/1slRlNLr 密码:m4w5

(3.2.1)解压库文件

$ tar xvzf RPi.GPIO-0.6.3.tar.gz

(3.2.2)进入解压之后的目录

$ cd RPi.GPIO-0.6.3

(3.2.3)启动安装

$ sudo python setup.py install
  • 硬件连接
02S001900.png
  • 例子程序
import RPi.GPIO as GPIO
import time

def checkdist():
        GPIO.output(2,GPIO.HIGH)
        time.sleep(0.000015)
        GPIO.output(2,GPIO.LOW)
        while not GPIO.input(3):
                pass
        t1 = time.time()
        while GPIO.input(3):
                pass
        t2 = time.time()
        return (t2-t1)*340/2
GPIO.setmode(GPIO.BCM)
GPIO.setup(2,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(3,GPIO.IN)

time.sleep(2)
try:
        while True:
                print 'Distance: %0.2f m' %checkdist()
                time.sleep(0.5)
except KeyboardInterrupt:
        GPIO.cleanup()
  • 代码运行

在启动的树莓派控制器上或者直接通过远程登录到树莓派控制器运行代码,使用指令“sudo python xx.py”(这里XX是你程序的名称,随意命名即可,不要有空格和中文字符)。

02S001901.png

视频演示

Chao sheng bo 01.png
Chao sheng bo 02.png


产品相关推荐

Erweima.png

例子程序下载

产品购买地址

RB URF02超声波传感器

周边产品推荐

超声波传感器支架
PING))) 超声波传感器

相关问题解答

超声波测距传感器为什么一直输出零?

相关学习资料

视频:Arduino-2WD轻量型移动机器人超声波旋转侦测演示
超声波测距LED输出小装置制作
Arduino学习笔记- Arduino连接超声波传感器测距
奥松机器人技术论坛