ULA超声波测距模块

概述

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

技术参数

ULA波束指向特性示意图

功能特点

尺寸图

输出格式

引脚图

引脚编号 引脚名称 引脚描述 备注
1 VCC 5V~12V 电源输入引脚
2 RX 在RS232模式下接受串口数据
3 TX 在RS232模式下输出串口数据
4 Vout 在电压模拟量模式下输出电压值
5 GND 电源地线引脚

RS232输出

如当前不在RS232输出模式下,可以通过短按按键切换,LED蓝色快闪三次停1秒,再快闪三次,说明切换成功。 控制器每次上电工作,会以500ms周期自动探测距离,“3.TX”自动输出一帧串口数据。 如果“2.RX”输入引脚接收到正确的串口读取指令,控制器开始变为受控输出,每接收一次命令,就触发控制器工作一次,而输出一帧串口数据,控制器的触发周期必须大于60ms。 控制器可以通过对应的指令码更改不同的地址,可用来区分每个控制器的身份,掉电不会丢失。

串口通信命令帧格式

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

输出帧格式

帧头标识 控制器地址(默认为0x01) 距离高位数据 距离低位数据 温度高位数据 温度低位数据 通讯校验和
0xFF Add Data_H Data_L Temp_H Temp_L SUM

距离值计算

距离值= Data_H*256+ Data_L

温度值计算

`温度的高位数据 Temp_H 的最高位为 0 时,表示正温度,当为 1 时,表示负温度。`
`由 Temp_H=0x01=0b0000 0001,其最高位为 0,表示环境为正温度;<br>`
`温度值= Temp _H*256+ Temp _L`

效验和计算

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

自动输出举例
自动输出时序图

注:T1=T2=T3=500ms。

受控输出举例

受控输出时序图
受控输出时序图

注:T1=1~55ms。 受控输出举例 例一:读取地址为0x01的控制器距离和温度

帧头 Add 控制指令 SUM
主机发 0xFF 0x01 0x01 0x01
帧头标识 控制器地址(默认为0x01) 距离高位数据 距离低位数据 温度高位数据 温度低位数据 通讯校验和
从机回 0xFF Add Data_H Data_L Temp_H Temp_L SUM

例二:更改控制器的地址为0x05

帧头 Add 控制指令 SUM
主机发 0xFF 0x05 0x03 0x07
帧头 Add 控制指令 SUM
从机回 0xFF 0x05 0x03 0x07

完成上述指令后控制器地址被改为:Add=0x05,控制指令为0x03:表示更改地址;

电压模拟量输出

电压模拟量模式切换说明

`如当前不在电压模拟量输出模式下,可以通过短按按键切换为电压模拟量输出模式,LED蓝色快闪一次停1秒,再快闪一次,说明切换成功。<br>`
`此时控制器会默认以500ms的周期自动探测距离,根据探测距离的远近输出对应比例的电压值。`

电压距离关系图
电压距离关系图

计算方式

在电压模拟量输出模式下,只要读取引脚 “4.Vout”的输出电压值,就可以计算对应的距离值,控制器出厂默认以0.0~3.30V的电压值对应 0-330cm的距离值,每0.01V的电压对应1cm的距离。当探测的距离大于330cm或没有探测到物体时输出3.30V电压

ULA使用示例

准备

ULA模块使用连接示意图

⚠注意:探测起点默认以探头表面为准,如以喇叭口平面需减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[7] = {};
unsigned char buffer_coderead[] {0xFF, 0x01, 0x01, 0x01};
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() {
  do {
    for (int j = 0; j <= 6; 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] + buffer_RTT[5];
    cor = cor & 0x00FF;
    if (buffer_RTT[6] == cor)
    {
      Rage = (buffer_RTT[2] << 8) + buffer_RTT[3];
      Tflag =  buffer_RTT[4] & 0x80;
      if (Tflag == 0x80) {
        buffer_RTT[4] = buffer_RTT[4] ^ 0x80;
      }
      Temp = (buffer_RTT[4] << 8) + buffer_RTT[5];
      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("============================== ");
  delay(100);
}

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

电压模拟量示例

/* ****************************************************
      @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
int analogPin = 0;//定义模拟脚0
int val = 0;
void setup() {
  Serial.begin(57600);     // 打开串口,设置速率为57600 bps
  mySerial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);
}

void loop() {
  val = analogRead(analogPin);// 读取模拟口数值
  float voltage = val * (3.3 / 1023); //数据换算
  Serial.print("Vout:");
  Serial.print(voltage);
  Serial.println("m");
  delay(200);
}

电压量输出结果
电压量输出结果

常见问题

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

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

更多

DFshopping_car1.png DFRobot商城购买链接