_SKU_SEN0218_URM11V1.0超声波测距传感器 - jimaobian/DFRobotWikiCn GitHub Wiki

[[File:产品样图.jpg|产品名称

Update/modify/delete Forbidden, 禁止更改本图,请更改图片名称新建图片

]]

简介

URM11是在URM37的基础上做删减产生的产品,沿袭了URM37的主要信号变换电路和核心程序。最主要的更改体现在对模块的操作采用了单线方式。 另外为了适应Explorer MAX小车结构而做了外形的改变。

产品参数

  • 工作电压: 3.6V ~ 10V
  • 工作电流: < 20mA
  • 工作温度: -10℃ ~ 70℃
  • 测量范围: 5CM ~500CM
  • 尺寸:60mm × 31 mm
  • 重量:约30克
  • 测量周期:建议不小于50MS

引脚说明

| | | | -------------------------------------------- | | | URM11.jpg | |

标号 名称 功能描述
1 GND 电源负极
2 VCC 电源正极
3 D 单线信号口

表名

使用教程

准备

接线图

URM11接线图.jpg

读写URM11寄存器

URM11寄存器映射表

地址 名称 掉电保存 权限 初始值 描述
0x01 DeviceMainClass 只读 0x02 设备主类 (0x02 : 超声波测距传感器)
0x02 DeviceSubClass 只读 0x01 设备子类 (0x01 : URM11 传感器模块)
0x03 DeviceMainClass 只读 0x0A 软件版本 (0x0A : V1.0)
0x04 ID 读/写 0x01 设备地址(设备编号 1~255, 0 : 广播地址)
0x05 Start/ Stop 读/写 0x00 启动停止命令/状态(0x00:停止 0x01:启动)
0x06 Temperature_H 只读 0x00 温度数据高低位寄存器,数据格式如下: 1、温度为 0x00FA 即 25℃时: Temperature_H=0x00 Temperature_L=0xFA 2、温度值错误或超量程时: Temperature_H=0xFF Temperature_L=0xFF
0x07 Temperature_L 只读 0x00 温度数据高低位寄存器,数据格式如下: 1、温度为 0x00FA 即 25℃时: Temperature_H=0x00 Temperature_L=0xFA 2、温度值错误或超量程时: Temperature_H=0xFF Temperature_L=0xFF
0x08 Distance_H 只读 0x00 距离数据高低位寄存器,数据格式如下: 1、距离为 0x0064 即 100cm 时: Distance _H=0x00 Distance _L=0x64 2、盲区或超量程测量时: Distance _H=0xFF Distance _L=0xFF
0x09 Distance_L 只读 0x00 距离数据高低位寄存器,数据格式如下: 1、距离为 0x0064 即 100cm 时: Distance _H=0x00 Distance _L=0x64 2、盲区或超量程测量时: Distance _H=0xFF Distance _L=0xFF
0x0A Factory set 只写 0x00 0x01:将所有寄存器数据恢复到初始值

读写URM11寄存器

URM11的所有寄存器都可读,这里我们演示读距离寄存器低8位(地址0x09),在读寄存距离值之前先要向启动寄存器(START/STOP REG 地址0x05)写1开启模块,使URM11工作。读出的数据以CM为单位,例如读出的数据为0x000B,则代表当前测得的距离为11CM。(若读出的数据为0xFFFF,则代表测得的数据为无效或未测到数据)

将示例代码编译下载到Arduino板上,按照图示把超声波模块和Arduino连接就能够实现距离的测量。

| 注意:请先下载程序,再连接线路。因为UNO板下载程序时会占用TX/RX口,如果将arduino与SEN0001事先连接的话,将会导致程序下载失败。 |

演示代码


#include <SoftwareSinglebus.h>
char dataRegStart = 0x01;
char addrRegStart = 0x05;
SoftwareSinglebus  mySingleBus(2);

void SinglebusWriteByte(char reg, char* str, char len){
  mySingleBus.beginTransmission(0x01,WRITE);
  mySingleBus.write(reg);//register address
  while(len--)
    mySingleBus.write(*str++);//data
  mySingleBus.endTransmission();
}

char readdata(void){
  char data = -1;
  mySingleBus.beginTransmission(0x01,READ);
  mySingleBus.write(0x09);//register address
  mySingleBus.write(0x01);//length
  mySingleBus.endTransmission();
  mySingleBus.requestFrom(0x01,0x01);

  if(mySingleBus.available()){
    data = mySingleBus.read();
  }
  mySingleBus.endTransmission();
  return data;
}
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  mySingleBus.begin();
  SinglebusWriteByte(addrRegStart,&dataRegStart,1);// write 0x01 to START/STOP Reg
  delay(10);

}

void loop() {
  // put your main code here, to run repeatedly:
  char data = readdata();//Read Distance_L Reg
  if(data != -1){
   Serial.print("distance  = ");
   Serial.print((unsigned char)data);
   Serial.println("cm");
  }
  delay(100);
}

结果

Arduino 板发送给串口上位机显示距离信息

testPicture11.jpg

波特率选择115200baud

疑难解答

  1. 如果用户在和Arduino连接的时候,出现无法使用它时,请首先检查一下当前串口电平的模式,有可能出现在使用TTL电平时,而我们的模块却工作在RS232电平。
  2. 由于超声波在空气中衰减很厉害(与距离d的平方成反比),同时声音在障碍物表面反射时会受很多因素 (如障碍物形状、方向、质地)的影响,因此超声波测量的距离是有限的。
  3. 本系统远距离测试被测物是一面墙,近距离测试被测物可以是一支笔。根据使用环境和被测物的质地的不同,将可能造成测量结果与提供的数据不符。差距不大,属于正常情况。
  4. 如果遇到技术问题,请登陆到我们的售后论坛留言,我们会尽快解答您的问题。

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