(SKU:SEN0310)URM05 ultrasonic sensor(1500cm&RS485)

来自DFRobot Product Wiki
跳转至: 导航搜索
文件:URM08超声波传感器.jpg
URM08-RS485防水超声波传感器

目录

概 述

URM05具有高达1500CM的测距范围,测距频率3HZ,它是DFRobot主要针对大量程测距应用设计的超声波传感器,采用RS485协议通信,该款传感器内置温度补偿。传感器内置电源芯片,具有电池反接保护功能。

技术参数

  • 工作电压:DC9-24V
  • 额定功率:4.8W
  • 有效量程:70 ~ 1500cm
  • 距离分辨率:1cm
  • 距离误差:±1%
  • 温度分辨率:0.1℃
  • 温度误差:±1℃
  • 测量频率:3HZ
  • 工作温度:-10℃~+65℃
  • 工作湿度范围:RH<75%
  • 传感器声学频率:38~42KHz
  • 传感器方向角:15°±2°(-6dB)
  • 防护等级:IP65
  • 通信方式:RS485


接口说明

模块接口线序如下:

1. 黑色粗线-----屏蔽线(可接电源地)

2.白 ------VCC(电源)

3.黑色细线-----GND(电源地)

4.橙 ------RS485-A

5.棕 ------RS485-B











通信说明

出厂参数:

  • 波特率:19200 bps 8N1
  • 出厂地址:0x11

通信命令帧格式为:

帧头 地址 数据长度 命令 数据 校验和
0x55 0xAA 1字节 1字节 1字节 数据1~数据n 1字节





命令一览表:

读取距离 读取温度 设置地址 设置波特率 开关温度补偿
0x02 0x03 0x55 0x08 0x09





注意:
以下测试命令需要用到USB转RS485模块。该模块选购网址

读取测量测距

主机通过RS485接口向超声波模块发送一帧命令,触发模块开始测距,之后接收模块返回的距离值命令。

测距命令串口演示

例如超声波模块地址为 0x11,则主机发送: 0x55 0xAA 0x11 0x00 0x02 0x12 //读取测量距离 [ 55 AA 11 00 02 12 ]

说明:
帧头---------0x55 
帧头---------0xAA 
设备地址-----0x11
数据长度-----0x00
命令---------0x02
校验和-------0x12(校验和为前几个字节数据相加后去掉高位得到的值)

超声波模块返回数据为: 0x55 0xAA 0x11 0x02 0x02 0x00 0xCA 0xDE

说明:
帧头---------0x55
帧头---------0xAA 
本机地址-----0x11
数据长度-----0x02
命令---------0x02
距离高位-----0x00
距离低位-----0xCA(距离值为 0x00CA 单位为厘米,即十进制202厘米)
校验和-------0xDE(校验和为前几个字节数据相加后去掉高位得到的值)

读取温度

主机通过RS485接口读取超声波模块测得的当前温度。

测温命令串口演示

例如超声波模块地址为 0x11,则主机发送: 0x55 0xAA 0x11 0x00 0x03 0x13 //读取传感器当前温度 [ 55 AA 11 00 03 13 ]

说明:
帧头---------0x55 
帧头---------0xAA
设备地址-----0x11
数据长度-----0x00
命令---------0x03
校验和-------0x13

超声波模块返回数据为: 0x55 0xAA 0x11 0x02 0x03 0x01 0x13 0x29

说明:
帧头---------0x55
帧头---------0xAA
本机地址-----0x11
数据长度-----0x02
命令---------0x03
温度高位-----0x01
温度低位-----0x13(温度值为 0x0113 ,表示27.5摄氏度。注意:此温度值是放大10倍后的值,为有符号整数)
校验和-------0x29(校验和为前几个字节数据相加后去掉高位得到的值)

设置超声波模块地址

主机通过RS485接口设置超声波模块地址。

修改地址命令串口演示

例如设置超声波模块地址为 0x12,则主机发送: 0x55 0xAA 0xAB 0x01 0x55 0x12 0x12 //设置超声波地址0x12 [ 55 AA AB 01 55 12 12 ]

说明:
帧头---------0x55
帧头---------0xAA
设备地址-----0xAB(0xAB为广播地址,即所有模块的公共地址,在不确定模块地址的状态下,可以以0xAB代替设备本身的地址)
数据长度-----0x01
命令---------0x55
设置地址-----0x12(需要设置的设备地址为0x12)
校验和-------0x12	

设置成功则超声波模块返回命令为: 0x55 0xAA 0x12 0x01 0x55 0xCC 0x33

说明:
帧头---------0x55
帧头---------0xAA
设备地址-----0x12(修改后的设备地址)
数据长度-----0x01
命令---------0x55
操作状态-----0xCC(0xCC——操作完成 0xEE——操作失败)
校验和-------0x33(校验和为前几个字节数据相加后去掉高位得到的值)

设置RS485通信波特率

主机通过RS485接口设置超声波模块通信波特率。

修改波特率命令串口演示

例如设置超声波模块地址为 0x11,则主机发送: 0x55 0xAA 0x11 0x01 0x08 0x0B 0x24 //设置模块波特率为256000bps [ 55 AA 11 01 08 0B 24 ]

说明:
帧头---------0x55
帧头---------0xAA 
设备地址-----0x11
数据长度-----0x01
命令---------0x08
波特率选择---0x0B
校验和-------0x24(校验和为前几个字节数据相加后去掉高位得到的值)

若设置成功,则超声波模块返回命令为: 0x55 0xAA 0x11 0x01 0x08 0xCC 0xE5

说明:
帧头---------0x55
帧头---------0xAA
设备地址-----0x11
数据长度-----0x01
命令---------0x08
操作状态-----0xCC(0xCC——操作完成 0xEE——操作失败)
校验和-------0xE5(校验和为前几个字节数据相加后去掉高位得到的值)

波特率选择一览表:

1200bps 2400bps 4800bps 9600bps 14400bps 19200bps 28800bps 38400bps 57600bps 115200bps 128000bps 256000bps
0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B





例如设备地址为默认0x11时,波特率设置命令如下:
55 AA 11 01 08 00 19 //设置模块波特率为1200bps
55 AA 11 01 08 01 1A //设置模块波特率为2400bps
55 AA 11 01 08 02 1B //设置模块波特率为4800bps
55 AA 11 01 08 03 1C //设置模块波特率为9600bps
55 AA 11 01 08 04 1D //设置模块波特率为14400bps
55 AA 11 01 08 05 1E //设置模块波特率为19200bps
55 AA 11 01 08 06 1F //设置模块波特率为28800bps
55 AA 11 01 08 07 20 //设置模块波特率为38400bps
55 AA 11 01 08 08 21 //设置模块波特率为57600bps
55 AA 11 01 08 09 22 //设置模块波特率为115200bps
55 AA 11 01 08 0A 23 //设置模块波特率为128000bps
55 AA 11 01 08 0B 24 //设置模块波特率为256000bps

设置温度补偿

模块自带温度补偿功能且默认为开启状态,用户可关闭或开启温度补偿功能,若关闭了温度补偿功能,声速以0℃在空气中的传播速度为参考。

关闭温度补偿命令串口演示

例如关闭温度补偿功能,则主机发送: 0x55 0xAA 0x11 0x01 0x09 0x00 0x1A //关闭温度补偿功能 [ 55 AA 11 01 09 00 1A ]

说明:
帧头---------0x55
帧头---------0xAA
设备地址-----0x11
数据长度-----0x01
命令---------0x09
关闭温度补偿-----0x00(该数据为0x00时关闭温度补偿,为0x01时开启温度补偿)
校验和-------0x1A

设置成功则超声波模块返回命令为: 0x55 0xAA 0x11 0x01 0x09 0xCC 0xE6

说明:
帧头---------0x55
帧头---------0xAA
设备地址-----0x11
数据长度-----0x01
命令---------0x09
操作状态-----0xCC(0xCC——操作完成 0xEE——操作失败)
校验和-------0xE6(校验和为前几个字节数据相加后去掉高位得到的值)

SEN0310测量示例


接线示意图

说明:
1、由于需要将 Leonardo的UART通信转换为RS485通信,这里我们用到了TTL转RS485扩展板。

距离测量示例

测距示例
/**************************************************************************************************************
*This code tests the range finder function of the URM05 ultrasonic sensor(1500cm&RS485)
*@ author : roker.wang@dfrobot.com
*@ data   : 30.07.2019
*@ version: 1.0
*RX(TTL-RS485转接板) -> TX1/D1 (Arduino Leonardo)  TX(TTL-RS485转接板)-> RX1/D0 (Arduino Leonardo)
**************************************************************************************************************/

// # Pin  RX  -> TX1/D1 (Arduino Leonardo)
// # Pin  TX  -> RX1/D0 (Arduino Leonardo)
#define header_H    0x55 //帧头
#define header_L    0xAA //帧头
#define device_Addr 0x11 //模块地址
#define data_Length 0x00 //数据长度
#define get_Dis_CMD 0x02 //距离测量命令
#define get_Temp_CMD 0x03 //温度测量命令

#define checksum_get_distance    (header_H+header_L+device_Addr+data_Length+get_Dis_CMD) //校验和
#define checksum_get_temp        (header_H+header_L+device_Addr+data_Length+get_Temp_CMD) //校验和

//#define  CE          2
#define  TX_EN()     digitalWrite(CE,HIGH)
#define  RX_EN()     digitalWrite(CE,LOW)
unsigned char i=0;
float temp = 0;
unsigned int  Distance=0;
unsigned char Rx_DATA[8];

unsigned char get_dis_CMD[6]={header_H,header_L,device_Addr,data_Length,get_Dis_CMD,checksum_get_distance}; //距离测量命令包
unsigned char get_temp_CMD[6]={header_H,header_L,device_Addr,data_Length,get_Temp_CMD,checksum_get_temp}; //距离测量命令包


int get_revdata(unsigned char *cmd)
{
  
  unsigned char i = 0;
   //TX_EN() ;
   for(i=0;i<6;i++){
    Serial1.write( cmd[i]);
    }
   // RX_EN() ;

   delay(200);  //
   i = 0;
   while (Serial1.available()){  //读取返回数据包(注意:Demo仅供参考,数据包并未做任何校验)
    Rx_DATA[i++]=(Serial1.read());  
    }
   return  ((Rx_DATA[5]<<8) | Rx_DATA[6]) ; //取出距离数据
 
}


void setup() {
  Serial1.begin(19200);  //使用Serial1与模块通信,波特率为19200
  Serial.begin(19200);   //使用Serial作为数据输出的串口
  //pinMode(CE,OUTPUT);
}

void loop() {
   Distance =  (unsigned int )get_revdata(get_dis_CMD);
   Serial.print( Distance);             
   Serial.println("cm"); 
   delay(300);
   
}

温度测量示例

测温示例
/**************************************************************************************************************
*This code tests the temperature measurement function of the URM05 ultrasonic sensor(1500cm&RS485)
*@ author : roker.wang@dfrobot.com
*@ data   : 30.07.2019
*@ version: 1.0
*RX(TTL-RS485转接板) -> TX1/D1 (Arduino Leonardo)  TX(TTL-RS485转接板)-> RX1/D0 (Arduino Leonardo)
**************************************************************************************************************/

#define header_H     0x55 //帧头
#define header_L     0xAA //帧头
#define device_Addr  0x11 //模块地址
#define data_Length  0x00 //数据长度
#define get_Temp_CMD 0x03 //温度测量命令
#define checksum     (header_H+header_L+device_Addr+data_Length+get_Temp_CMD) //校验和

unsigned char i=0;
int  temperature=0;
unsigned char Rx_DATA[8];
unsigned char CMD[6]={header_H,header_L,device_Addr,data_Length,get_Temp_CMD,checksum}; //读取温度命令包

void setup() {
  Serial1.begin(19200);  //使用Serial1与模块通信,波特率为19200
  Serial.begin(19200);   //使用Serial作为数据输出的串口
}

void loop() {
 for(i=0;i<6;i++){
    Serial1.write(CMD[i]);
    }
 delay(50);  //等待数据返回
 i=0;
 while (Serial1.available()){  //读取返回数据包(注意:Demo仅供参考,数据包并未做任何校验)
    Rx_DATA[i++]=(Serial1.read());  
    }
 temperature=((Rx_DATA[5]<<8)|Rx_DATA[6]);  //取出温度数据(这是10倍温度值)
 Serial.print(temperature/10);             //打印温度
 Serial.print('.');             
 Serial.print(temperature%10);            
 Serial.println("C");
}

探测角度及灵敏度说明

超声波传感器的物理特性决定了其实际具有不规则的探测区域,因此超声波测距传感器的探测角度难以被准确的定义。在实际使用过程中我们测试发现此该传感器模块的探测区域及灵敏度可能相对于其它超声波传感器要更大,因此在狭窄空间内使用该款传感器可能会出现非理想目标物被检测的情况出现。

我们分别使用了2种参考目标障碍物对多样本产品进行了反复测试,对应目标的参照检测区域如下图示:

[[File:|thumb|left|800px|URM08-TEST-1:直径7.5cm的PVC管检测测试]]

[[File:|thumb|right|630px|URM08-TEST-2:光滑的平面挡板检测测试]]











































常见问题

1、如有疑问,欢迎通过qq或者论坛联系我们!

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。


更多


DFshopping car1.png [Link DFRobot商城购买链接]

个人工具
名字空间

变换
操作
导航
工具箱