概述
微波测距雷达是一款通过发射和接收无线电波来感应物体距离的电子传感器。该款24GHz微波测距雷达与其他原理的测距传感器相比具有体积小,重量轻,测距范围广, 具有一定的穿透能力(烟雾、粉尘、薄非金属材料等,墙等障碍物除外),具备多目标识别测量能力等优势。
其工作原理是通过测量发射与接收信号之间的时间差来测量物体距离,工作方式为调频连续波方式(FMCW)。内部集成了微波雷达的所有信号处理单元,用户只需要通过异步串行接口即可获取物体距离。
本微波测距雷达的数据接口采用异步串行通讯,其波特率为 57600bit/s,逻辑电平为 3.3V TTL电平,能够非常容易的与上位机或者其他MCU通讯,有效缩短了用户的开发周期。
在较远距离(>10米)测距中,相比红外测距优势明显。 搭配Arduino控制器可以很方便的运用到户外场景中,例如汽车倒车测距,自动感应装置,安防工控检测等。
特性
这种探测方式与其它探测方式相比具有如下的优点:
- 非接触探测;
- 不受温度、湿度、噪声、气流、尘埃、光线等影响,适合恶劣环境;
- 抗干扰能力强;
- 输出功率小,安全环保;
- 探测距离远,测距精度高;
- 感应角度大,测距范围广;
- 可以同时读取多个不同距离目标的距离信息;
- 微波的方向性很好,速度等于光速;
产品参数
- 输入电压: 4~8V(DC)
- 输入电流: >100mA
- 尺寸: 44mm*34mm*5mm
- 重量: 8g
- 存储温度: -40℃~80℃
- 使用温度: 0℃~70℃
- 发射参数:
- 探测距离: 0.5~20m(最小范围0.5m,最大范围20m)
- 发射频率: 24GHz
- 发射功率: 6dBM(最大值10dBM)
- 调制方式: FMCW
- 接收参数:
- 数据更新速度: 10Hz
- 垂直面3dB波束宽度: 23度
- 水平面3dB波束宽度: 78度
引脚说明
编号 | 功能描述 |
---|---|
1 | 电源输入。输入电压 4v-8v 直流电源,电流驱动能力需>100mA |
2 | 地(GND) |
3 | 辅助电源输出。此辅助电源输出电压为 3.3V,电流驱动能力最大 100mA) |
4 | 异步串行接口信号输出(TX)。输出距离信息或者距离频谱信息。通讯波特率为 57600bit/s |
5 | 异步串行接口信号输入(RX)。此接口功能保留。 |
6 | 工作模式选择。当此接口悬空时为距离数据输出,此接口接地(GND)时为距离+频谱数据输出 |
传感器模块说明
结构说明
信号处理示意
下图为传感器模块工作原理框图,将传感器接收到的微小信号经过放大,再通过比较电路将信号转换为方波信号,输出0、1数字信号,便于单片机处理。
` 数据输出共分为两种协议,当模式选择端口6接地(GND),为距离+频谱数据输出。此时,数据分为数据头、距离数据、频谱数据和`
` 数据尾组成,格式如下:`
` 0xff,0xff,0xff,0x**,0x**,0x##...0x##,0x00,0x00,0x00`
` 前三组 0xff是数据头,接下来的0x**是16位距离信息的高8位,第二个0x**是距离信息的低8位。共16位的二进制数据表示`
` 目标的距离,单位是cm。`
` 第一个0x##是距离谱线的第一个谱线幅度,接下来是第二条谱线的幅度,以此类推,共126条谱线。谱线的幅度范围为1-44。此`
` 谱线作为用户后期处理识别多目标等功能用。最后的三组0x00是数据尾,标志着一组数据的结束。`
` 当模式选择端口悬空,输出数据仅有距离信息,格式如下:`
` 0xff,0xff,0xff,0x**,0x**,0x00,0x00,0x00`
` 前三组0xff是数据头,接下来的0x**是16位距离信息的高8位,第二个0x**是距离信息的低8位。共16位的二进制数据表示`
` 目标的距离,单位是cm。接下来的三组 0x00是数据尾。`
` 串口采用通讯格式为1位启始位,8位数据位,1为停止位,无奇偶校验.`
多个目标计算方法
` 当模式选择端口6接地(GND),为距离+频谱数据输出。此时,数据分为数据头、距离数据、频谱数据和数据尾组成,`
` 格式如下:`
` 0xff,0xff,0xff,0x**,0x**,0x##...0x##,0x00,0x00,0x00`
` 前三组 0xff是数据头,接下来的0x**是16位距离信息的高8位,第二个0x**是距离信息的低8位。共16位的二进制数据表示目标的距离,单位是cm。`
` 第一个0x##是距离谱线的第一个谱线幅度,接下来是第二条谱线的幅度,以此类推,共126条谱线。谱线的幅度范围为1-44。`
` 此谱线作为用户后期处理识别多目标等功能用。最后的三组0x00是数据尾,标志着一组数据的结束。`
例: 如果谱线幅度达到最高值,算出高峰值的中间点,这个中间点是第n位数据,用乘以0.126
如谱线幅度在第14位和25位形成峰值:
则该点的距离为:(14+(25-14)/2)*0.126=2.457,单位m
使用教程
准备
- 硬件
- UNO x1
- 微波测距模块 x1
- 连接线 x1
- 软件
- Arduino IDE 点击下载Arduino IDE
接线图
单目标检测
- 硬件
- 1 x UNO R3开发板
- 1 x 24GHz微波测距雷达
- 若干 x杜邦线
- 接线说明
微波雷达按图所示从上到下为1~6引脚
微波雷达 1,2接UNO 5V 和GND
4,5接UNO数字引脚4,5
6不接
多目标目标检测
-
硬件
- 1 x UNO R3开发板
- 1 x 24GHz微波测距雷达
- 若干 x杜邦线
-
接线说明
微波雷达按图所示从上到下为1~6引脚
微波雷达 1,2接UNO 5V 和GND
4,5接UNO数字引脚4,5
6接UNO GND`
样例代码
单目标测距
/* ****************************************************
@brief 24GHz Microwave Radar Sensor
@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 char buffer_RTT[8] = {};
int YCTa = 0, YCTb = 0, YCT1 = 0;
SoftwareSerial mySerial(4, 5);
void setup() {
mySerial.begin(57600);
Serial.begin(115200);
}
void loop() {
// 只在收到数据时发送数据
if (mySerial.read() == 0xff) {
// 读取传入的字节
for (int j = 0; j < 8; j++) {
col = mySerial.read();
buffer_RTT[j] = (char)col;
delay(2);
}
mySerial.flush();
if (buffer_RTT[1] == 0xff) {
if (buffer_RTT[2] == 0xff) {
YCTa = buffer_RTT[3];
YCTb = buffer_RTT[4];
YCT1 = (YCTa << 8) + YCTb;
}
}//读取最大反射强度的障碍物距离
Serial.print("D: ");
Serial.println(YCT1);//输出反射强度最大的障碍物距离
}
}
输出结果:反射强度最大的障碍物距离
多目标测距
/* ****************************************************
@brief 24GHz Microwave Radar Sensor
@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 char buffer_RTT[134] = {};
int YCTa = 0, YCTb = 0, YCT1 = 0, checka, checkb, Tarnum = 1, TargetY1 = 0;
double Tar1a, Tar1b, Distance, Distance1, Distance2, Distance3;
SoftwareSerial mySerial(4, 5);
void setup() {
mySerial.begin(57600);
Serial.begin(115200);
}
void loop() {
// 只在收到数据时发送数据
if (mySerial.read() == 0xff)
{
// 读取传入的字节
for (int j = 0; j < 134; j++)
{
col = mySerial.read();
buffer_RTT[j] = (char)col;
delay(2);
}
mySerial.flush();
if (buffer_RTT[1] == 0xff) {
if (buffer_RTT[2] == 0xff) {
YCTa = buffer_RTT[3];
YCTb = buffer_RTT[4];
YCT1 = (YCTa << 8) + YCTb;
}
}//读取最大反射强度的障碍物距离
for (int i = 6; i < 134; i++) {
if (buffer_RTT[i] == buffer_RTT[i - 1]) {
if (buffer_RTT[i - 1] > buffer_RTT[i - 2]) {
Tar1a = i - 6;
checka = buffer_RTT[i - 1];
} //检测上升峰值
}
if (buffer_RTT[i] < buffer_RTT[i - 1])
{
if (buffer_RTT[i - 1] == buffer_RTT[i - 2])
{
checkb = buffer_RTT[i - 1]; //检测峰值下降
if (checka == checkb && checkb >= 10)
{
Tar1b = i - 6;
Tar1b = Tar1b - Tar1a;
Tar1b = Tar1b / 2;
Tar1a = Tar1a + Tar1b;
Distance = Tar1a * 0.126;
Distance = Distance * 100; //计算距离
Serial.print("Distance");
Serial.print(Tarnum);
Serial.print(":");
Serial.println(Distance);//分别输出其他障碍物的距离,最多读取另外3个障碍物
Serial.print("D: ");
Serial.println(YCT1);//输出反射强度最大的障碍物距离
if (Tarnum == 1) {
Distance1 = Distance;
}
if (Tarnum == 2) {
Distance2 = Distance;
}
if (Tarnum == 3) {
Distance3 = Distance;
}
Tarnum++;
}
}
}
}
Tarnum = 1;
}
}
输出结果:输出最多5个左右的目标距离读数
常见问题
还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖!