Arduino超声波传感器-URM37V3.2超声波测距传感器
外 观
概 述
- 这个模块是为了做ROBOT而开发的东东。当然,如果你有更好的想法,比如用于汽车倒车报警器、门铃、警戒报警器、地铁安全线提示、银行及取款机的一米线提示等。
- 我们做ROBOT的想法是:把大部分功能集成化,从而解放主CPU。 自从我们的URM37 V1.0超声波测距模块推出后,网友们反馈回很多信息,他们希望模块上安装超声波传感器以方便使用。我们也发现不同传感器在使用时差异很大,所以现在URM37 V3.1集成了一对经过我们挑选好的传感器可以减少不少的麻烦;
- 对模块的编程控制能够尽量的简单,比如可以输出一个开关量,在测量距离大于设定的值时输出一个电平就可以了;
- 直接和电脑串口相连接,用串口调试程序进行操作;
- 模块可以控制一个舵机0~270度的旋转,可以组成一个空间扫描仪。
- 采用标准的IIC总线,可以在一个系统中使用多个URM37模块。
- 还有很多网友提出了很多宝贵的意见,这里一并向他们表示感谢,当然如果要满足所有给我们提出改进意见的网友的需求是不可能的。在现在的URM37 V3.1上已经很好的实现了上面提到的功能。
- 在此基础上升级为URM37 V3.2,机械尺寸与引脚接口以及通信命令兼容V3.1,在V3.1基础上做了如下更改:
1.串口电平由跳线选择,用户可以轻松的选择TTL电平输出或是RS232电平输出。
2.修改了测距算法,使测距耗时更少。
3.当检测不到障碍物测距失败的时候将立即返回0XFFFF,方便进行判断。
4.测量温度分辨率改为0.1摄氏度,测量温度范围:-10度~+70度,输出格式也做了变化。
5.模块串口波特率9600,无奇偶效验,一位停止位。
性能描述
1.工作电源:+5V
2.工作电流:<20mA
3.工作温度范围 :-10℃~+70℃
4.超声波距离测量:
- 最大测量距离―500cm
- 最小测量距离―4cm
- 分辨率-1cm
- 误差-1%
5.由于使用了更好的超声波处理方法,使测量距离更远更稳定。
6.模块使用RS232串口通讯可靠性更高,同时可以通过电脑串口采集数据,编写通讯程序非常的便捷。
7.模块可以通过脉宽输出的方式将测量数据输出,这样使模块使用更简单。
8.模块可以预先设定一个比较值,在测量距离小于这个值后管脚输出一个低电平,这样模块能够方便的作为一个超声波接近开关使用。
9.模块提供一个舵机控制功能,可以和一个舵机组组成一个270度测量组件用于机器人扫描0~270度范围障碍物。
10.模块内带温度补偿电路提高测量的精度。
11.模块内带253字节内部EEPROM,可以用于系统记录一些调电不丢失的系统参数。
12.模块内带一个温度测量部件,可以通过通讯口读出分辨率0.1摄氏度的环境温度数据。
13.模块尺寸22mm × 51 mm
14.模块重量:约30g
模块测量角度
引脚定义
URM37 V3.2模块正面管脚
1: +VCC 电源+5V输入
2: GND 电源地
3: nRST 模块复位,低电平复位
4: PWM 测量到的距离数据以PWM脉宽方式输出0-25000US,每50US代表1厘米
5: MOTO 舵机控制信号输出
6: COMP/TRIG
COMP: 比较模式开关量输出,测量距离小于设置比较距离时输出低电平
TRIG: PWM模式触发脉冲输入
7: NC 空脚
8: RXD 异步通讯模块接收数据管脚,RS232电平或者TTL电平
9: TXD 异步通讯模块发送数据管脚,RS232电平或者TTL电平
功能描述
模块最基本的一个接口是RXD脚和TXD脚组成的RS232电平或者TTL电平串口,通过串口可以对模块进行全面的控制。RS232电平可以直接和电脑的串口进行连接,这样可以方便的通过串口调试软件轻易的对模块进行操作。如果需要用单片机TTL电平的异步口控制模块,只需要设置一下串口选择跳线,模块就可以在RS232输出与TTL输出之间切换了(如下图跳线短路帽设置位置)。
RS232模式
TTL模式
通过串口可以读写模块内部EEPROM的0x00、0x01、0x02单元来设置模块的工作模式。
第一模式:PWM被动控制模式和串口被动模式(该模式一直存在)。
在串口被动模式下,模块处于等待状态,通过串口发出的距离测量命令启动一次距离测量,串口将测量到的距离数据返回,命令中带的舵机旋转度参数改变模块MOTO脚产生的舵机控制脉冲从而改变测量舵机的旋转度数。EEPROM的0x03到0xff是EEPROM的用户区也可以通过串口进行读写,还可以通过串口读取一个高精度的温度。 在PWM被动控制模式下,外部控制COMP/TRIG端上产生一个低电平的触发脉冲信号启动一次距离测量操作,这个低电平脉冲宽度同时代表控制舵机转动的角度控制参数,将270度旋转角度分为46个角度控制参数,每个控制参数代表5.87度,数字范围是范围是0到46,脉冲每50US代表一个控制角度。当发出触发脉冲后,模块的MOTO脚产生舵机控制脉冲从而改变测量舵机的旋转度数,接下来PWM端将测量到的距离数据以脉宽方式输出一个低电平脉冲,每50US代表1厘米,可以通过对这个低电平脉冲宽度的测量读取距离数据。当测量无效时将返回一个50000US的脉冲表示这次的测量是无效的。第二模式:自动测量模式。模块每隔25MS自动测量,将测量到的数据和比较值做比较,如果测量距离等于或者小于比较值COMP/TRIG脚输出低电平。另外每启动一次测量模块的PWM端将测量到的距离数据以脉宽方式输出一个低电平脉冲,每50US代表1厘米,可以通过对这个低电平脉冲宽度的测量读取距离数据。设置好比较距离值后可以简单的把模块当一个超声波开关使用。
通讯协议
模块串口波特率9600,无奇偶效验,一位停止位。控制命令通过一致的帧结构通讯,帧长度4字节:命令+数据0+数据1+校验和。效验和=命令+数据0+数据1的相加和的低8位。模块可以直接通过PC串口或单片机串口进行操作。
注:NC代表任意数据,SUM代表效验和。
1.PWM被动控制模式可以将多个模块数据线并联使用。
2.为了方便客户使用模块在出厂时可以根据客户需要配置其相应的参数。URM37 V3.2超声波测距模块硬件也可以根据特殊的客户定制改变软件使他成为一个专用的模块。
3.舵机旋转角度参考表:
注:蓝色数据为舵机转轴指向正前方的度数。
模块的连接与测试
电脑9针串口(公头)功能定义:
URM37V3.2超声波测距模块与电脑串口的连接(请将模块串口设置为RS232模式):
URM37V3.2超声波测距模块与单片机串口的连接(请将模块串口设置为TTL模式):
伴侣的使用
当您按照上图连接好模块后,就可以使用我们的“URM37 V3.2伴侣”对模块进行在线测试了。
软件的使用极其简单:先保证电脑上没有其他软件占用串口,然后运行伴侣,先选择COM口,再点击“打开串口”,右边窗口选择探测功能,选择“16位温度读取”可以进行温度测量,选择“16位距离读取”可以进行距离测量,“控制指令”窗口同时显示将要发送的指令,点击“启动功能”便完成操作。此时,“返回数据”窗口中间两位显示的是16进制数据,软件下方状态栏内也会显示出温度及距离的10进制数据。该软件使用方便、数据直观。
如果您还购买了我们的专用舵机,便可以使用舵机控制部分。如图所示,在“舵机角度”窗口内选择要执行的角度,同时在选择“16位距离读取”,然后点击“启动功能”,舵机便旋转到相应的角度上,同时超声波测量该方向上障碍物的距离。由此URM37V3.2配合舵机就可以完成空间障碍物扫描功能。
样例
// # Editor :Jiang from DFRobot
// # Data :18.09.2012
//#PWM output mode Arduino sample code
// # Product name:ultrasonic scanner
// # Product SKU:SEN0001
// # Version : 0.2
// # Description:
// # The Sketch for scanning 180 degree area 4-500cm detecting range
// # Connection:
// # Pin 1 VCC (URM V3.2) -> VCC (Arduino)
// # Pin 2 GND (URM V3.2) -> GND (Arduino)
// # Pin 4 PWM (URM V3.2) -> Pin 3 (Arduino)
// # Pin 6 COMP/TRIG (URM V3.2) -> Pin 5 (Arduino)
// #// # Description:
// # The Sketch for scanning 180 degree area 4-500cm detecting range
// # Connection:
// # Pin 1 VCC (URM V3.2) -> VCC (Arduino)
// # Pin 2 GND (URM V3.2) -> GND (Arduino)
// # Pin 4 PWM (URM V3.2) -> Pin 3 (Arduino)
// # Pin 6 COMP/TRIG (URM V3.2) -> Pin 5 (Arduino)
// #
int URPWM = 3; // PWM Output 0-25000US,Every 50US represent 1cm
int URTRIG=5; // PWM trigger pin
unsigned int Distance=0;
uint8_t EnPwmCmd[4]={0x44,0x02,0xbb,0x01}; // distance measure command
void setup()
{ // Serial initialization
Serial.begin(9600); // Sets the baud rate to 9600
PWM_Mode_Setup();
}
void loop()
{
PWM_Mode();
delay(20);
} //PWM mode setup function
void PWM_Mode_Setup()
{
pinMode(URTRIG,OUTPUT); // A low pull on pin COMP/TRIG
digitalWrite(URTRIG,HIGH); // Set to HIGH
pinMode(URPWM, INPUT); // Sending Enable PWM mode command
for(int i=0;i<4;i++)
{
Serial.write(EnPwmCmd[i]);
}
}
void PWM_Mode()
{ // a low pull on pin COMP/TRIG triggering a sensor reading
digitalWrite(URTRIG, LOW);
digitalWrite(URTRIG, HIGH); // reading Pin PWM will output pulses
unsigned long DistanceMeasured=pulseIn(URPWM,LOW);
if(DistanceMeasured>=10200)
{ // the reading is invalid.
Serial.println("Invalid");
}
else
{
Distance=DistanceMeasured/50; // every 50us low level stands for 1cm
Serial.print("Distance=");
Serial.print(Distance);
Serial.println("cm");
}
}
模块的应用
URM37 V3.2模块的AVR评估板电路图
由舵机组成的270度距离测量组合
AVR评估板的操作:电路通过74HC125三态门使单片机的一个串口分时复用来接收电脑输入的指令和控制读写URM37 V3.2模块。配置WINDOWS自带的超级终端作为电脑端的控制平台。
评估板除了可以通过串口控制还可以通过操作URM37 V3.2模块PWM脚和COM\TRIG脚来进行数据的读取。当设置为自动测量模式时评估板上的一个LED可以指示比较结果,当测量距离小于设置比较距离时LED亮
使用中常遇到的问题:
1.由于超声波在空气中衰减很厉害(与距离d的平方成反比),同时声音在障碍物表面反射时会受很多因素 (如障碍物形状、方向、质地)的影响,因此超声波测量的距离是有限的。
2.本系统远距离测试被测物是一面墙,近距离测试被测物可以是一支笔。根据使用环境和被测物的质地的不同,将可能造成测量结果与提供的数据不符。差距不大,属于正常情况。
3.上述所提及的舵机是我们专用的舵机,可以旋转270度。如果使用者自备舵机,可能控制时序就有所不同,请使用者注意(舵机旋转角度参考表内数据参考使用)。
4.如果遇到技术问题,请登陆到我们的售后论坛留言,我们会尽快解答您的问题。
本文整理于DFRobot wiki
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号