URM07-UART低功耗超声波测距模块

概述

超声波测距是通过发射超声波,并计算传感器收到回声的时间差,从而得出传感器到目标物体距离的一种方法。
URM07是一款超低功耗的超声波测距模块,有效测量距离7.5米,支持3.0~5.5V宽电压供电,可直接兼容3.3V或者5V控制设备,例如Arduino,树莓派等。URM07平均工作电流仅5mA,待机电流仅14uA,绝大部分控制器IO端口便可以为单个或多个URM07模块提供工作电流。
从超声波测距的原理来看,距离的准确性会受到空气的温度和风向干扰,URM07内置温度传感器,可以读取周边环境温度,并自动补偿数据。传感器采用收发一体的超声波探头,探测夹角约为60°,外形小巧,质量轻盈。预留2.54间距-4P接口,采用UART通信方式,能够适应更多系统架构的二次开发与应用。
URM07-UART超声波传感器各项参数都经过我们长时间严格的实验测定和优化,具有一流的测距响应速度、稳定性、灵敏度及低功耗。如果您的产品或设计对超声波传感器性能有着近乎苛刻的要求,那么URM07绝对是您的最佳选择。

技术参数

  • 工作电压:3.0~5.5 VDC
  • IO工作模式: 开漏(OD),内置上拉电阻
  • 有效量程:20~750 cm �
  • 方向角:60°
  • 待机电流:<14 uA(主要由电源芯片消耗,核心电路消耗<1uA)
  • 测距峰值电流:<9 mA
  • 测距平均电流:<5 mA(连续测量下测得,仅供参考)
  • 距离分辨率:1 cm ②
  • 测距误差:1%
  • 工作温度范围:-10~70℃
  • 温度误差:±1℃
  • 工作湿度范围:RH<75%
  • 声学频率: 38~42KHz
  • 开机启动时间:<20ms
  • 测量周期: <60ms
  • 尺寸:27mm*27mm
  • 重量:约4.2g(不含排针)

说明:1、上述①②两项参数仅为我们的实验环境下测得的参考值,实际参数可能会根据使用环境的不同而有所差异。
2、上述参数仅对URM07有效,我们还可以针对更专业的客户提供功耗、尺寸、协议、性能等方面的优化定制服务。点此联系我们

功能特点

  • 极其精简的设计
  • 极轻的重量
  • 极高的测量稳定性
  • 极高的测量灵敏度
  • 内置温度补偿
  • 极低的电流消耗
  • 电源防反接保护(短暂保护)
  • 接口过电压保护
  • 便捷的安装及使用方式

通信接口

  • 出厂参数:
  • 串口参数: 19200(bps) 8N1
  • 出厂地址: 0x11

通信命令帧格式为:

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

通信命令一览表:

读取距离 读取温度 设置地址 设置波特率
0x02 0x03 0x55 0x08

读取测量测距

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

URM07测距演示

例如超声波模块地址为 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(校验和为前几个字节数据相加后去掉高位得到的值)

读取温度

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

URM07测温度演示

例如超声波模块地址为 0x11,则主机发送: 0x55 0xAA 0x11 0x00 0x03 0x13 [ 55 AA 11 00 03 13 ]

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

超声波模块返回数据为: 0x55 0xAA 0x11 0x02 0x03 0x00 0xFF 0x14

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

设置超声波模块地址

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

URM07修改地址演示

例如设置超声波模块地址为 0x12,则主机发送: 0x55 0xAA 0xAB 0x01 0x55 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(校验和为前几个字节数据相加后去掉高位得到的值)

设置UART通信波特率

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

URM07修改波特率演示

例如设置超声波模块地址为 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

重要说明

warning_yellow.png

1、单个URM07模块使用情况下若未知设备地址,则可使用通用设备地址0xAB代替。

2、在URM07模块上电未启动之前,将TX端口置高、RX端口拉低,维持超过1s可以使模块各参数恢复出厂设置。

3、恢复出厂设置后模块不能正常启动进入正常通信状态,板载LED灯将以10HZ频率循环闪烁指示。只有待重新上电后方可正常启动。

4、模块启动后,URM07模块仅在接收到数据并作处理的过程中板载LED点亮指示,待机状态时LED熄灭。

单个URM07模块使用示例


说明:

1、示例使用的URM07探头地址与波特率设置均为出厂默认参数。

2、由于Leonardo的IO端口驱动电流高达40mA,因此示例采用IO口为URM07模块供电(实际使用时可选择使用5V或3.3V电源供电)。

读取距离测量示例

    // # 作者    : Strictus.zhang@dfrobot.com
    // # 日期    : 20.08.2016
    // # 产品名  : URM07-UART单探头超低功耗超声波测距传感器
    // # SKU     : SEN0153
    // # 版本号  : 1.0
    // # 代码说明: 20-750cm 距离测量,接收数据未作校验处理

    // # 连接:(单个探头可以使用IO端口供电)
    // # Pin VCC (URM07 V1.0) -> D3     (Arduino Leonardo)
    // # Pin GND (URM07 V1.0) -> D2     (Arduino Leonardo)
    // # Pin  RX (URM07 V1.0) -> TX1/D1 (Arduino Leonardo)
    // # Pin  TX (URM07 V1.0) -> 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 checksum    (header_H+header_L+device_Addr+data_Length+get_Dis_CMD) //校验和

    unsigned char i=0;
    unsigned int  Distance=0;
    unsigned char Rx_DATA[8];
    unsigned char CMD[6]={header_H,header_L,device_Addr,data_Length,get_Dis_CMD,checksum}; //距离测量命令�

    void setup() {
      pinMode(2, OUTPUT);
      pinMode(3, OUTPUT);
      digitalWrite(3, HIGH);
      digitalWrite(2, LOW);   //D3和D2分别作为VCC和GND为模块提供电源
      Serial1.begin(19200);  //使用Serial1与模块通信,波特率为19200
      Serial.begin(19200);   //使用Serial作为数据输出的串口
    }

    void loop() {
     for(i=0;i<6;i++){
        Serial1.write(CMD[i]);
        }
     delay(150);  //等待测距结束
     i=0;
     while (Serial1.available()){  //读取返回数据包(注意:Demo仅供参考,数据包并未做任何校验)
        Rx_DATA[i++]=(Serial1.read());
        }
     Distance=((Rx_DATA[5]<<8)|Rx_DATA[6]); //取出距离数据
     Serial.print(Distance);               //打印距离
     Serial.println("cm");
    }

读取温度示例


URM07温度测量显示效果


    // # 作者    : Strictus.zhang@dfrobot.com
    // # 日期    : 20.08.2016
    // # 产品名  : URM07-UART单探头超低功耗超声波测距传感器
    // # SKU     : SEN0153
    // # 版本号  : 1.0
    // # 代码说明: 温度测量,接收数据未作校验处理

    // # 连接:(单个探头可以使用IO端口供电)
    // # Pin VCC (URM07 V1.0) -> D3     (Arduino Leonardo)
    // # Pin GND (URM07 V1.0) -> D2     (Arduino Leonardo)
    // # Pin  RX (URM07 V1.0) -> TX1/D1 (Arduino Leonardo)
    // # Pin  TX (URM07 V1.0) -> 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() {
      pinMode(2, OUTPUT);
      pinMode(3, OUTPUT);
      digitalWrite(3, HIGH);
      digitalWrite(2, LOW);   //D3和D2分别作为VCC和GND为模块提供电源
      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");
    }

多个URM07模块级联测距示例

说明:

1、级联使用前请先对每个URM07超声波模块设置不同的地址(示例使用四个URM07探头,地址分别设置为0x11、0x22、0x33、0x44)。

2、由于Leonardo的IO端口驱动电流高达40mA,因此示例依然采用IO口为四个URM07模块供电(实际使用时可选择使用5V或3.3V电源供电)。

URM07距离测量显示效果


    // # 作者    : Strictus.zhang@dfrobot.com
    // # 日期    : 20.08.2016
    // # 产品名  : URM07-UART单探头超低功耗超声波测距传感器
    // # SKU     : SEN0153
    // # 版本号  : 1.0
    // # 代码说明: 4个模块级联,温度、距离测量,接收数据未作校验处理

    // # 连接:(四个模块并联,使用IO端口供电)
    // # Pin VCC (URM07 V1.0) -> D3     (Arduino Leonardo)
    // # Pin GND (URM07 V1.0) -> D2     (Arduino Leonardo)
    // # Pin  RX (URM07 V1.0) -> TX1/D1 (Arduino Leonardo)
    // # Pin  TX (URM07 V1.0) -> RX1/D0 (Arduino Leonardo)

    unsigned char i=0,j=0;
    unsigned int  Distance=0;
    unsigned char Rx_DATA[8];
    unsigned char CMD[4][6]={
                             {0x55,0xAA,0x11,0x00,0x02,0x12},
                             {0x55,0xAA,0x22,0x00,0x02,0x23},
                             {0x55,0xAA,0x33,0x00,0x02,0x34},
                             {0x55,0xAA,0x44,0x00,0x02,0x45},
                            }; //距离测量命令�

    void setup() {
      pinMode(2, OUTPUT);
      pinMode(3, OUTPUT);
      digitalWrite(3, HIGH);
      digitalWrite(2, LOW);   //D3和D2分别作为VCC和GND为模块提供电源
      Serial1.begin(19200);  //使用Serial1与模块通信,波特率为19200
      Serial.begin(19200);   //使用Serial作为数据输出的串口
    }

    void loop() {
      for(j=0;j<4;j++)
      {
     for(i=0;i<6;i++){
        Serial1.write(CMD[j][i]);
        }
     delay(150);  //等待测距结束
     i=0;
     while (Serial1.available()){  //读取返回数据包(注意:Demo仅供参考,数据包并未做任何校验)
        Rx_DATA[i++]=(Serial1.read());
        }
     Distance=((Rx_DATA[5]<<8)|Rx_DATA[6]); //取出距离数据
     Serial.print("URM07-UART module[");   //打印距离
     Serial.print(j);
     Serial.print("]get_Dis= ");
     Serial.print(Distance);
     Serial.println("cm");
      }
     Serial.print("\r\n\r\n");    //打印换行分割
    }

常见问题

还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!

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

更多

DFshopping_car1.png DFRobot商城购买链接