_SKU_SEN0218_URM11V1.0超声波测距传感器 - jimaobian/DFRobotWikiCn GitHub Wiki
Update/modify/delete Forbidden, 禁止更改本图,请更改图片名称新建图片
]]
简介
URM11是在URM37的基础上做删减产生的产品,沿袭了URM37的主要信号变换电路和核心程序。最主要的更改体现在对模块的操作采用了单线方式。 另外为了适应Explorer MAX小车结构而做了外形的改变。
产品参数
- 工作电压: 3.6V ~ 10V
- 工作电流: < 20mA
- 工作温度: -10℃ ~ 70℃
- 测量范围: 5CM ~500CM
- 尺寸:60mm × 31 mm
- 重量:约30克
- 测量周期:建议不小于50MS
引脚说明
| | | | -------------------------------------------- | | | | |
标号 | 名称 | 功能描述 |
1 | GND | 电源负极 |
2 | VCC | 电源正极 |
3 | D | 单线信号口 |
表名
使用教程
准备
- 硬件
- UNO x1
- URM11模块 x1
- 数字传感器 x1
- 软件
- Arduino IDE 版本1.6 点击下载Arduino IDE
接线图
读写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 板发送给串口上位机显示距离信息
波特率选择115200baud
疑难解答
- 如果用户在和Arduino连接的时候,出现无法使用它时,请首先检查一下当前串口电平的模式,有可能出现在使用TTL电平时,而我们的模块却工作在RS232电平。
- 由于超声波在空气中衰减很厉害(与距离d的平方成反比),同时声音在障碍物表面反射时会受很多因素 (如障碍物形状、方向、质地)的影响,因此超声波测量的距离是有限的。
- 本系统远距离测试被测物是一面墙,近距离测试被测物可以是一支笔。根据使用环境和被测物的质地的不同,将可能造成测量结果与提供的数据不符。差距不大,属于正常情况。
- 如果遇到技术问题,请登陆到我们的售后论坛留言,我们会尽快解答您的问题。
| 更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖! |