ULS超声波测距模块

概述

ULS型大量程防水测距模组,是采用一体化防水探头设计而成的一款高性能的测距传感器,采用超声波回拨测距原理,运用精准的时差测量技术测量非接触式传感器与目标物体的之间的距离。具备一定的防尘防水等级,适用于潮湿、恶劣的测量场合。是一款操作简单的高性能、高可靠性的测距传感器。可作为料位检测,高度检测,车位检测等

技术参数

ULS波束指向特性示意图

功能特点

尺寸图

操作指示说明

超声波控制器有三种输出模式:串口输出、PWM 输出、开关量输出。产品出厂时默认 为串口模式输出,可以通过按键和触发方式来切换模式,指示灯会对应指示切换状态。

按键操作说明

  1. 短按(小于 2 秒)按键:“串口”和“PWM”两种模式可短按按键轮流切换,切换成功后模块会记忆此模式,掉电不会丢失。
  2. 长按(大于 3 秒)按键:控制器会把当前测量的距离值保存起来,作为开关量模式下的门限值距离,设置成功后模块会记忆此门限值距离,掉电不会丢失。

触发信号

  1. 当触发引脚“2.Trigger”一直为高电平时,控制器处于低功耗待机状态。
  2. 当触发引脚“2.Trigger”为下降沿时,要求下降沿低电平保持 0.1-10MS 时间.①如果控制器在UART输出模式下,会被触发工作一次,从而输出一帧串口数据;②如果控制器在PWM 模式下,会被触发工作一次,从而输出一次 PWM 信号.
  3. 当触发引脚“2.Trigger”一直为低电平时,或者直接接到电源地,此时控制器工作在开关量模式.

指示灯说明

  1. 当短按按键切换为PWM模式成功后,LED蓝色快闪一次停1秒,再快闪一次.
  2. 当短按按键切换为串口模式成功后,LED 蓝色快闪三次停1秒,再快闪三次.
  3. 当长按按键设定门限值成功后,LED 红蓝双色交替闪烁五次.
  4. 当控制器工作在串口或者 PWM 模式时,控制器被下降沿触发工作一次,LED红色闪烁一次.
  5. 当控制器工作在开关量模式时,LED红色实时指示开关量的状态,如当前探测的距离值在门限值范围内LED亮红色,不在感应范围内LED灭`

输出格式

引脚图

引脚编号 引脚名称 引脚描述 备注
1 VCC 3.3V~12V 电源输入引脚
2 Trigger 触发引脚
3 TX/PWM 串口和PWM输出引脚
4 ON-OFFout 开关量输出引脚
5 GND 电源地线引脚

串口输出

产品出厂时默认为串口模式输出,如当前不在串口模式下,可以通过短按按键切换为串口模式,LED 蓝色快闪三次停 1 秒,再快闪三次,说明切换成功。 每当触发引脚“2.Trigger”为下降沿并且低电平保持 0.1-10ms 时间,就会触发控制器工作一次,然后输出引脚“3.TX/PWM”将输出一帧 3.3V TTL 电平的串口数据,此数据通过温度补偿。 控制器的触发周期必须大于60ms 时序图

注:T1=0.1~10ms;T2=4~6ms;T3=1~55ms

串口通信命令帧格式

接口类型 起始位 数据位 停止位 奇偶校验 波特率
全双工 1 8 1 9600

输出帧格式

帧头标识 距离高位数据 距离低位数据 温度高位数据 温度低位数据 通讯校验和
0xFF Data_H Data_L Temp_H Temp_L SUM

距离值计算

距离值= Data_H*256+ Data_L单位为mm

温度值计算

`温度的高位数据 Temp_H 的最高位为 0 时,表示正温度,当为 1 时,表示负温度。`
`由 Temp_H=0x01=0b0000 0001,其最高位为 0,表示环境为正温度;<br>`
`温度值= Temp _H*256+ Temp _L`
`例:转换成十进制温度值等于 281;`
`    此时控制器探测的温度为 28.1℃,单位是摄氏度`

效验和计算

`注:效验和只保留累加数值的低8位<br>`
`SUM =(帧头+ Data_H+ Data_L+ Temp_H+ Temp_L)&0x00FF`

PWM输出

如当前不在 PWM 模式下,可以通过短按按键切换为 PWM 模式,LED 蓝色快闪一次停1秒,再快闪一次,说明切换成功。 每当触发引脚“2.Trigger”为下降沿并且低电平保持0.1~10ms 时间,就会触发控制器工作一次,然后输出引脚“3.TX/PWM”将输出一次 3.3V TTL电平的 PWM 信号 控制器的触发周期必须大于 60ms。 输出原理

`当触发引脚接收到下降沿触发电平后,模块内部自动发出 40kHz 的超声波,同时输出引脚“3.TX/PWM”就会被拉高,当检测到回波信号回来时,输出引脚马上被拉低,当没有检测到物体时,输出引脚约 55ms 后也会被拉低结束探测,此过程没有经过温度补偿。`
`可采用MCU判断PWM 高电平的时间,这个时间就是超声波探测物体来回的时间,可以根据波速计算出距离值`

时序图

PWM时序图

注:T1=0.1~10ms;T2=4~6ms;T3=1~55ms 计算方式

`由【距离=高电平时间*声速(340m/s)/2】,us/58=厘米或者us/148=英寸;超声波在不同温度下的传播速度为:v=332+0.6t (m/s) 。如果控制器没有检测到物体,输出引脚将输出约55ms的固定脉宽.`

开关量输出

控制器要工作在开关量模式下,只要触发引脚“2.Trigger”一直为低电平,或者是直接接到电源地,此时控制器就会工作在开关量模式,以250ms的工作周期自动探测距离。探测的距离值会与之前设定的门限值进行比较,从而控制开关量的输出状态 门限值设定

`  第一步:先评估需要设定的门限距离值,将感应的平面物体或挡板放在感应门限距离值的位置。比如我要设定门限距离值为3米,就在 3 米处放一个平面挡板,挡板放平,环境空阔能保证准确性<br>`
`  第二步 :将控制器对准平面物体或挡板,长按(大于 3 秒)按键,当 LED 红蓝双色交替闪烁,说明已经设定成功。控制器会把当前测量的距离值保存起来,作为门限值距离。如需重新设定,继续长按按键即可`

输出状态

`  情况一 :如当前探测的距离值小于设定的门限值,输出引脚 “4.ON-OFFout”输出低电平,同时 LED 亮红色`
`  情况二 :如当前探测的距离值大于设定的门限值,“4.ON-OFFout”输出上拉高电平,同时LED灯灭`

ULS使用示例

准备

ULS模块使用连接示意图

⚠注意:探测起点默认以探头表面为准,如以喇叭口平面需减40mm

读取串口数据示例

/* ****************************************************
  @brief Water-proof Ultrasonic Sensor (ULS)

   @copyright   [DFRobot](https://www.dfrobot.com), 2016
   @copyright   GNU Lesser General Public License

  @author [Xiaoyu](Xiaoyu.zhang@dfrobot.com)
  @version  V1.0
  @date  2019-03-11

  GNU Lesser General Public License.
  All above must be included in any redistribution
* ****************************************************/
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
char col;
unsigned char buffer_RTT[6] = {};
int Rage = 0;
float Temp = 0;
int Tflag = 0;
void setup() {
  Serial.begin(57600);     // 打开串口,设置波特率为57600 bps
  mySerial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);
}
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(100);
  digitalWrite(LED_BUILTIN, LOW);
  delay(4);
  digitalWrite(LED_BUILTIN, HIGH);
  do {
    for (int j = 0; j <= 5; j++) {
      col = mySerial.read();
      buffer_RTT[j] = (char)col;
    }
  } while (mySerial.read() == 0xff);
  mySerial.flush();
  if (buffer_RTT[0] == 0xff) {
    int cor;
    cor = (buffer_RTT[0] + buffer_RTT[1] + buffer_RTT[2] + buffer_RTT[3] + buffer_RTT[4]) & 0x00FF; //校验
    if (buffer_RTT[5] == cor)
    {
      Rage = (buffer_RTT[1] << 8) + buffer_RTT[2];
      Tflag =  buffer_RTT[3] & 0x80;
      if (Tflag == 0x80) {
        buffer_RTT[3] = buffer_RTT[3] ^ 0x80;
      }
      Temp = (buffer_RTT[3] << 8) + buffer_RTT[4];
      Temp = Temp / 10;
    }
    else {
      Rage = 0;
      Temp = 0;
    }
  }
  Serial.print("Rage : ");
  Serial.print(Rage);//输出距离单位毫米
  Serial.println("mm");
  Serial.print("Temperature: ");
  if (Tflag == 0x80)
  {
    Serial.print("-");
  }
  Serial.print(Temp);//输出温度
  Serial.println("℃");
  Serial.println("============================== ");
}

串口数据显示结果
串口数据显示结果

PWM示例

/* ****************************************************
      @brief Water-proof Ultrasonic Sensor (ULS)

       @copyright   [DFRobot](https://www.dfrobot.com), 2016
       @copyright   GNU Lesser General Public License

      @author [Xiaoyu](Xiaoyu.zhang@dfrobot.com)
      @version  V1.0
      @date  2019-03-11

      GNU Lesser General Public License.
      All above must be included in any redistribution
    * ****************************************************/
#include <SoftwareSerial.h>
char col;// 用于存储从串口读到的数据
unsigned long duration;
int datapin = 10;
int val = 0;
void setup() {
  Serial.begin(57600);     // 打开串口,设置速率为57600 bps
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(datapin, INPUT);
  digitalWrite(LED_BUILTIN, HIGH);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(57);
  digitalWrite(LED_BUILTIN, LOW);
  delay(4);                         //给与电平信号
  duration = pulseIn(datapin, HIGH);//读取引脚上的高电平脉冲,最大脉冲时间间隔为55ms,并且把结果赋值给duration变量
  delay(3);
  digitalWrite(LED_BUILTIN, HIGH);//信号引脚拉高
  duration = duration / 58.00; //时间换算成距离
  Serial.print(duration);//串口打印数据
  Serial.println("cm");
  Serial.println("=========== ");
}

PWM输出显示结果

PWM输出显示结果

开关量示例

/* ****************************************************
      @brief Water-proof Ultrasonic Sensor (ULS)

       @copyright   [DFRobot](https://www.dfrobot.com), 2016
       @copyright   GNU Lesser General Public License

      @author [Xiaoyu](Xiaoyu.zhang@dfrobot.com)
      @version  V1.0
      @date  2019-03-11

      GNU Lesser General Public License.
      All above must be included in any redistribution
    * ****************************************************/
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
unsigned char buffer_RTT[7] = {};
unsigned long duration;
int datapin = 9;
void setup() {
  Serial.begin(57600);     // 打开串口,设置速率为57600 bps
  mySerial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(datapin, INPUT);
  digitalWrite(LED_BUILTIN, HIGH);
}

void loop() {
  digitalWrite(LED_BUILTIN, LOW);//给低电平
  duration = digitalRead(datapin);//读取引脚状态
  delay(3);
  switch (duration) {
    case 0 : Serial.println("LOW"); break; //表示障碍物低于设定距离,设定距离默认1m
    case 1 : Serial.println("HIGH"); break; //表示障碍物超过设定距离
  }
}

开关量测量显示结果

开关量测量显示结果

常见问题

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

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

更多

DFshopping_car1.png DFRobot商城购买链接