简介
很多时候我们都想要在户外长时间使用超声波测距传感器,但是传统的超声波测距传感器并不能防水,而户外经常遇到雨水天气,导致有些场景下在雨天就不能使用的情况。但是以后就不需要担心这个问题了,我们这个防水超声波测距传感器探头采用防水全封闭设计,能够在雨天使用,可以很方便的使用在户外场景中,例如汽车倒车测距,安防工控检测等。
产品参数
- 工作电压: DC5V
- 检测范围: 21-600 cm
- 测量角度: 50->70
- 静态电流: 5mA
- 工作电流: 30mA --> 40mA
- 工作频率: 40KHz
- 分辨率: 3mm
- 工作温度: -10 ~ 70°C
引脚说明
标号 | 名称 | 功能描述 |
---|---|---|
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=200K 高电平(PWM)脉宽自动输出
脉宽PWM自动输出下,模块以200MS的周期自动测量,并在测后输出与距离相对应的脉宽宽度高电平。计算距离方式参考模式0
(1)引脚定义
序号 | 标号 | 引脚说明 |
---|---|---|
2 | Trig | - |
3 | Echo | 高电平脉宽输出 |
模式4:Mode=360K 低功耗(PWM)高电平脉宽受控输出
低功耗模式下,模块的关门狗禁用,此模式适合使用电池供电用户,静电功耗小于70UA,工作测距方法同模式0一样。
(1)引脚定义
序号 | 标号 | 引脚说明 |
---|---|---|
2 | Trig | 触发控制引脚 |
3 | Echo | 高电平脉宽输出 |
模式5:Mode=470K 开关量输出
模块出厂会设定一个门限值,默认为1.5米。模块每200ms进行一次测距,当检测到目标的距离值小于设定的门限值,Echo引脚输出高电平,当前检测的距离值大于设定的门限值,Echo引脚输出低电平,为了提高稳定性,出厂默认连续2次检测到目标的距离值小于设定的门限值判定为检测的目标距离小于设定的门限值;模块Echo引脚只输出高低电平信号,无驱动能力。应用时应加三极管驱动继电器等。
(1)引脚定义
序号 | 标号 | 引脚说明 | 备注 |
---|---|---|---|
2 | Trig | 触发控制引脚 | |
3 | Echo | 开关量高电平输出脚 | 有障碍为H,反之L |
准备
- 硬件
- 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
#define ECHOPIN 3 //TX
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(ECHOPIN,INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
int distance = pulseIn(ECHOPIN,HIGH);
distance = distance/58;
Serial.print(distance);
Serial.println(" cm");
delay(50);
}
模式4
#define ECHOPIN 2// Pin to receive echo pulse
#define TRIGPIN 3// Pin to send trigger pulse
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(10);
digitalWrite(TRIGPIN, LOW); // Send pin low again
int distance = pulseIn(ECHOPIN, HIGH,26000); // Read in times pulse
distance= distance/58;
Serial.print(distance);
Serial.println(" cm");
delay(50);// Wait 50mS before next ranging
}
模式5
int ledPin = 13; // LED connected to digital pin 13
int inPin = 7; // pushbutton connected to digital pin 7
int val = 0; // variable to store the read value
void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin 13 as output
pinMode(inPin, INPUT); // sets the digital pin 7 as input
}
void loop()
{
val = digitalRead(inPin); // read the input pin
digitalWrite(ledPin, val); // sets the LED to the button's value
}
常见问题
还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖!