简介
很多时候我们都想要在户外长时间使用超声波测距传感器,但是传统的超声波测距传感器并不能防水,而户外经常遇到雨水天气,导致有些场景下在雨天就不能使用的情况。但是以后就不需要担心这个问题了,我们这个防水超声波测距传感器探头采用防水全封闭设计,能够在雨天使用,可以很方便的使用在户外场景中,例如汽车倒车测距,安防工控检测等。
产品参数
- 工作电压: DC3.3-5V
- 检测范围: 24cm~500cm
- 精度:±(1+S*0.5%)
- 测量角度: 60°
- 静态电流: 8mA
- 工作电流: 40mA
- 工作频率: 40KHz
- 分辨率: 3mm
- 温度补偿:有
- 工作温度: -20 ~ 70°C
- 尺寸:42 * 29 *12 mm
引脚说明
标号 | 名称 | 功能描述 |
---|---|---|
1 | 5V | 电源输入正 |
2 | Trig/RX | 信号控制端/串口输入 |
3 | Echo/TX | 信号接收端/串口输出 |
4 | GND | 电源输入负 |
使用教程
本教程将介绍如何使用防水超声波测距模块来测量距离。
功能说明
注意:电感器不能随意调节
本模块共有六种工作模式可以选择,客户可根据自己实际需要进 行切换或实验。如下图
模式0:Mode=悬空 高电平(PWM)脉宽输出
(1)引脚定义
序号 | 标号 | 引脚说明 |
---|---|---|
2 | Trig | 触发控制引脚 |
3 | Echo | 高电平脉宽输出 |
(2)基本工作原理
1.采用 IO 口 TRIG 触发测距,给最少 10us 的高电平信呈。
2.模块自动1.采用 IO 口 TRIG 触发测距,给最少 10us 的高电平信呈。
2.模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;
3.有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。常温下测试距离=(高电平时间×声速(348M/S))/2;
4.模块被触发测距后,如果接收不到回波(原因超过所测范围或是探头没有正对被测物),ECHO 口会在 40MS 后自动变为低电平,标志着此次测量结束,不论成功与否。
5.LED 上电时末亮,只有在给了 TRIG 引脚触发信号后才亮,灯闪频率与触发周期同步,说明此时模块接收到正确的指令进入工作状态。
(3)超声波时序图
以上时序图表明你只需要提供一个 10uS 以上脉冲触发信号,该模块内部将发出8个 40kHz 周期电平并检测回波。一旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式:uS/57.5=厘米或者 uS/148=英寸;或是:距离=高电平时间×声速(348M/S)/2;建议测量周期为 50ms 以上,以防止发射信号对回响信号的影响。
模式1:Mode=47K (或直接短接 M1 位)UART 自动输出
UART 自动输出方式按 UART 通信格式输出测量距离值(十六进制数),本方式无需外加触发信号,模块每 100ms 可自动测量一次, 每次测量完成在 TX 引脚输出测量距离值。
(1)引脚定义
序号 | 标号 | 引脚说明 |
---|---|---|
2 | TX | UART输出引脚 |
3 | RX | 无 |
(2)通信协议
UART | 波特率 | 校验位 | 数据位 | 停止位 |
---|---|---|---|---|
TTL | 9600bps | N | 8 | 1 |
(3)格式说明
帧数据 | 说明 | 字节 |
---|---|---|
帧头 | 固定为0XFF | 1字节 |
H_DATA | 距离数据的高8位 | 1字节 |
L_DATA | 距离数据的低8位 | 1字节 |
SUM | 数据校验和 | 1字节 |
注:校验和只保留累加数值的低8位
例如:
产品应答 FF 07 A1 A7
其中校验码 SUM=A7=(0x07+0xA1+0Xff)&0x00ff
0x07 为距离的高位数据;
0xA1 为距离的低位数据;
距离值为 0x07A1;
转换成十进制为 1953;
单位为:毫米
注:模块在盲区内输出最近的距离值约 21cm,如果模块测量不到数据或是超出距离范围输出0。Led上电进后进入工作模式就自动以100MS频闪。
模式2:Mode=120K(或直接短接 M2 位)UART 受控输出
UART 受控输出方式按 UART 通信格式输出测量距离值(十六进制数),本方式
需在 RX 脚加触发指令 0X55 信号,模块每收到一次指令则测量一次, 每次测量完成
在 TX 引脚输出测量距离值。指令触发周期要大于 60MS
(1)引脚定义
序号 | 标号 | 引脚说明 |
---|---|---|
2 | TX | UART输出引脚 |
3 | RX | UART 受控接收脚(指令 0X55) |
(2)通信协议
UART | 波特率 | 校验位 | 数据位 | 停止位 |
---|---|---|---|---|
TTL | 9600bps | N | 8 | 1 |
(3)格式说明
帧数据 | 说明 | 字节 |
---|---|---|
帧头 | 固定为0XFF | 1字节 |
H_DATA | 距离数据的高8位 | 1字节 |
L_DATA | 距离数据的低8位 | 1字节 |
SUM | 数据校验和 | 1字节 |
注:校验和只保留累加数值的低8位
例如: 产品应答 FF 07 A1 A7
其中校验码 SUM=A7=(0x07+0xA1+0Xff)&0x00ff
0x07 为距离的高位数据;
0xA1 为距离的低位数据;
距离值为 0x07A1;
转换成十进制为 1953;
单位为:毫米
注:模块在盲区内输出最近的距离值约 21cm,如果模块测量不到数据或是超出距离范围输出0。Led上电进后进入工作模式每触发一次指令灯就会亮,频率与触发周期相同,灯每触发两次才会完成翻转为灭。
模式3:Mode=470K(或直接短接M3)开关量输出
工作说明 模块出厂会设定一个门限值,默认为1.5 米。模块每200ms进行一次测距,当检测到目标的距离值小于设定的门限值,Echo 引脚输出高电平,当前检测的距离 值大于设定的门限值,Echo 引脚输出低电平,为了提高稳定性,出厂默认连续 2 次检测到目标的距离值小于设定的门限值判定为检测的目标距离小于设定的门限值;模块 Echo 引脚只输出高低电平信号,无驱动能力。应用时应加三极管驱动继电器等。如有特殊要求需要修改门限值 或其他设定,采购时需特别说明。
(1)引脚定义
序号 | 标号 | 引脚说明 |
---|---|---|
2 | Trig | 开关量低高电平输出脚 |
3 | Echo | 开关量高电平输出脚 |
准备
- 硬件
- UNO x1
- 防水超声波测距模块 x1
- 软件
- Arduino IDE 版本1.6.8 点击下载Arduino IDE
接线图
样例代码
模式0
#define ECHOPIN 7// Pin to receive echo pulse
#define TRIGPIN 8// Pin to send trigger pulse
int distance;
void setup(){
Serial.begin(9600);
pinMode(ECHOPIN, INPUT);
pinMode(TRIGPIN, OUTPUT);
//digitalWrite(ECHOPIN, HIGH);
}
void loop(){
digitalWrite(TRIGPIN, LOW); // Set the trigger pin to low for 2uS
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH); // Send a 10uS high to trigger ranging
delayMicroseconds(20);
digitalWrite(TRIGPIN, LOW); // Send pin low again
distance = pulseIn(ECHOPIN, HIGH)/58; // Read in times pulse
//Serial.println(distance);
Serial.print(distance);
Serial.println(" cm");
delay(50);// Wait 50mS before next ranging
}
模式1
/* ****************************************************
* @brief Water-proof Ultrasonic Sensor (ULS)
* @copyright [DFRobot](http://www.dfrobot.com), 2016
* @copyright GNU Lesser General Public License
* @author [huyujie](yujie.hu@dfrobot.com)
* @version V1.0
* @date 2020-12-7
* GNU Lesser General Public License.
* All above must be included in any redistribution
* ****************************************************/
#include <SoftwareSerial.h>
unsigned char buffer_RTT[4] = {0};// 用于存储从串口读到的数据
int Distance = 0;//用于储存读到的距离值
unsigned char CS;//储存校验和
SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
Serial.begin(115200);
mySerial.begin(9600);
}
void loop() {
if(mySerial.available() > 0){
delay(4);
if(mySerial.read() == 0xff){ //判断数据包头
buffer_RTT[0] = 0xff;
for (int i=1; i<4; i++){
buffer_RTT[i] = mySerial.read(); //读取数据
}
CS = buffer_RTT[0] + buffer_RTT[1]+ buffer_RTT[2]; //计算校验和
if(buffer_RTT[3] == CS) {
Distance = (buffer_RTT[1] << 8) + buffer_RTT[2];//计算距离
Serial.print("Distance:");
Serial.print(Distance);
Serial.println("mm");
}
}
}
}
模式2
/* ****************************************************
* @brief Water-proof Ultrasonic Sensor (ULS)
* @copyright [DFRobot](http://www.dfrobot.com), 2016
* @copyright GNU Lesser General Public License
* @author [huyujie](yujie.hu@dfrobot.com)
* @version V1.0
* @date 2020-12-7
* GNU Lesser General Public License.
* All above must be included in any redistribution
* ****************************************************/
#include <SoftwareSerial.h>
unsigned char buffer_RTT[4] = {0};// 用于存储从串口读到的数据
int Distance = 0;//用于储存读到的距离值
uint8_t CS;//储存校验和
#define COM 0x55
SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
Serial.begin(115200);
mySerial.begin(9600);
}
void loop() {
mySerial.write(COM , 1);
delay(100);
if(mySerial.available() > 0){
delay(4);
if(mySerial.read() == 0xff){ //判断数据包头
buffer_RTT[0] = 0xff;
for (int i=1; i<4; i++){
buffer_RTT[i] = mySerial.read(); //读取数据
}
CS = buffer_RTT[0] + buffer_RTT[1]+ buffer_RTT[2]; //计算校验和
if(buffer_RTT[3] == CS) {
Distance = (buffer_RTT[1] << 8) + buffer_RTT[2];//计算距离
Serial.print("Distance:");
Serial.print(Distance);
Serial.println("mm");
}
}
}
}
模式3
int ECHO = 7, Trig = 8;
int i = 0, q = 0;
void setup() {
Serial.begin(9600);
pinMode(ECHO, INPUT);
pinMode(Trig, INPUT);
}
void loop() {
i = digitalRead(ECHO);
q = digitalRead(Trig);
Serial.print("ECHO= ");
Serial.print(i);
Serial.print(" Trig= ");
Serial.println(q);
delay(1000);
}
常见问题
还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖!