目录
简介
URM11是在URM37的基础上做删减产生的产品,沿袭了URM37的主要信号变换电路和核心程序。最主要的更改体现在对模块的操作采用了单线方式。 另外为了适应Explorer MAX小车结构而做了外形的改变。
产品参数
- 工作电压: 3.6V ~ 10V
- 工作电流: < 20mA
- 工作温度: -10℃ ~ 70℃
- 测量范围: 5CM ~500CM
- 尺寸:60mm × 31 mm
- 重量:约30克
- 测量周期:建议不小于50MS
引脚说明
表名
所需硬件
- UNO x1
- URM11模块 x1
- 数字传感器 x1
所需软件
- Arduino IDE
接线图
读写URM11寄存器
- URM11寄存器映射表
- 读写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 板发送给串口上位机显示距离信息
波特率选择115200
疑难解答
- 如果用户在和Arduino连接的时候,出现无法使用它时,请首先检查一下当前串口电平的模式,有可能出现在使用TTL电平时,而我们的模块却工作在RS232电平。
- 由于超声波在空气中衰减很厉害(与距离d的平方成反比),同时声音在障碍物表面反射时会受很多因素 (如障碍物形状、方向、质地)的影响,因此超声波测量的距离是有限的。
- 本系统远距离测试被测物是一面墙,近距离测试被测物可以是一支笔。根据使用环境和被测物的质地的不同,将可能造成测量结果与提供的数据不符。差距不大,属于正常情况。