GY-56 (VL53L0X) 激光测距

文章目录

  • [一、GY-56 简介](#一、GY-56 简介)
  • 二、引脚功能
  • 三、通信协议
    • [1.串口协议: 当 GY-56 PS 焊点开放时候使用(默认)](#1.串口协议: 当 GY-56 PS 焊点开放时候使用(默认))
        • [(1)串口通信参数(默认波特率值 9600bps)](#(1)串口通信参数(默认波特率值 9600bps))
        • [(2)模块输出格式,每帧包含 8-13 个字节(十六进制)](#(2)模块输出格式,每帧包含 8-13 个字节(十六进制))
        • [(3)命令字节,由外部控制器发送至 GY-56 模块(十六进制)](#(3)命令字节,由外部控制器发送至 GY-56 模块(十六进制))
    • [2.IIC协议:当 GY-56 模块硬件 PS 焊点焊上时候使用,CT 为 SCL,DR 为 SDA](#2.IIC协议:当 GY-56 模块硬件 PS 焊点焊上时候使用,CT 为 SCL,DR 为 SDA)
  • [四、SET、OUT 引脚使用说明](#四、SET、OUT 引脚使用说明)
  • [五、串口模式下 GY56 模块校准说明](#五、串口模式下 GY56 模块校准说明)
  • 六、测试现象及程序

一、GY-56 简介

GY-56 模块由测距传感器(VL53L0X)和一个 MCU 组成 。工作电压 3-5v,功耗小,体积小,安装方便。 其工作原理是,红外 LED 发光,照射到被测物体后,返回光经过 MCU 接收,MCU 计算出时间差,得到距离。此模块,有两种方式读取数据,即串口 UART(TTL 电平)+IIC(2 线)模式,串口的波特率有 9600bps 与 115200bps,可配置,有连续,询问输出两种方式,可掉电保存设置。GY-56 可以设置上下限距离报警值,开关量输出,在设定的区间内有被测物体挡住,直接输出高电平。IIC 模式下,如果需要,可以设置内部 IIC 地址不同,以便多个传感器直接接在同一个总线。

二、引脚功能

VCC 电源正极 (3v-5v)
GND 电源地
CT 串口 USART_TX / IIC_SCL
DR 串口 USART_RX / IIC_SDA
SET 设置上下限距离报警值(电压 0~3.3V)
OUT 报警值状态输出

三、通信协议

1.串口协议: 当 GY-56 PS 焊点开放时候使用(默认)

(1)串口通信参数(默认波特率值 9600bps)

波特率:9600 bps 校验位:N 数据位:8 停止位:1

波特率:115200 bps 校验位:N 数据位:8 停止位:1

(2)模块输出格式,每帧包含 8-13 个字节(十六进制)

①.Byte0: 0x5A 帧头标志

②.Byte1: 0x5A 帧头标志

③.Byte2: 0x15 本帧数据类型

④.Byte3: 0x03 数据量

⑤.Byte4: 0x00~0xFF 数据前高 8 位

⑥.Byte5: 0x00~0xFF 数据前低 8 位

⑦.Byte6: 0x00~0xFF 模块测量模式

⑧.Byte7: 0x00~0xFF 模块温度

⑨.Byte8: 0x00~0xFF 校验和(前面数据累加和,仅留低 8 位)

数据计算方法:

距离长度计算方法

Distance= (Byte4<<8) | Byte5 单位 cm

Mode= Byte6

Temp= Byte7(MCU 温度)

例:一帧数据

< 5A-5A-15-04-00-0A-02-1A-F3>

Distance =(0x00<<8)|0x0A =10cm

Mode=2 高精度模式

Temp=0x1A=26℃

(3)命令字节,由外部控制器发送至 GY-56 模块(十六进制)

命令格式:0xA5+功能指令+指令值+sum

例 1:设置串口连续输出数据,(如需掉电保存,请发送掉电保存指令)

连续输出指令=0xA5+0x65+0x01+0x0B

例 2:设置在 10cm-50cm 的区间范围内 OUT 引脚输出高电平(如需掉电保存,请发送掉电保存指令)

设置上限阀值 50CM=0xA5+0x98+0x32+0x6F

设置下限阀值 10CM=0xA5+0xA9+0x0A+0x58

例 3: 掉电保存指令 = 0xA5+0x87+0x01+0x2D

2.IIC协议:当 GY-56 模块硬件 PS 焊点焊上时候使用,CT 为 SCL,DR 为 SDA

IIC 时钟:250K 以下,模块默认 8bit IIC 地址为 0XE0,1bit write:0,1bit read: 1


四、SET、OUT 引脚使用说明

为了便于表示在此特此声明如下:

S 表示模块与被测物体之间的距离;

S1 表示设定的最大警界阀值(上限阀值);

S2 表示设定的最小警界阀值(下限阀值);

S3 表示解除最大警界状态值;S3 和 S1 的关系,S3+3≤S1。例如 S1=100,则 S3≤97;

S4 表示解除最小警界状态值;S4 和 S2 的关系,S4-3≥S2。例如 S2=50,则 S3≥53;

OUT 引脚的状态为高电平和低电平两种。高电平表示 S2<S<S1;低电平表示 S>S1 或 S<S2。

1、OUT 由高电平变低电平。当模块 S>S1 或 S<S2 时,OUT 引脚变成低电平,模块 LED灯将由亮变灭。

2、OUT 由低电平变高电平。当 S>S1,让 S≤S3 时(即当实际距离低于最大警界阀值 3cm时),OUT 引脚由低电平变高电平,模块 LED 灯将由灭变亮。当 S<S2,让 S≥S4 时(即当实际距离大于最小警界阀值 3cm 时),OUT 引脚由低电平变高电平,模块 LED 灯将由灭变亮。设置最大警界阀值:可通过发送指令外,也可通过 SET 引脚手动来设置。

1、模块连续输出模式下,例如设置最大警界阀值 S1 为 100cm,则将模块放置在据被测物体 97cm 的位置进行 SET 引脚设置,或者发送指令:(A5 98 64 A1)0x64 是十进制的 100。

2、手动 SET 引脚接入 3.3V 高电平,大约 3 秒,待模块 LED 指示灯闪速 2 下,此时断开 SET 引脚 3.3V 连接,断开后大约 5 秒,待 LED 闪烁 3 下,则设置成功。如果 LED 闪烁 4

下,表示设置失败。失败原因有两种,一种是,接入高电平时间不够,另一种是设置的距离值小于最小警界阀值。 设置最小警界阀值:可通过发送指令外,也可通过 SET 引脚来设置。

1、模块连续输出模式下,例如设置最小警界阀值 S2 为 50cm,则将模块放置在据被测物体 53cm 的位置,进行 SET 引脚设置, 或者发送指令:(A5 A9 32 B2)0x32 是十进制的 50。

2、手动 SET 引脚接入 GND,大约 3 秒,待模块 LED 指示灯闪速 2 下,此时断开 SET 引脚 GND 连接,断开后大约 5 秒,待 LED 闪烁 3 下,则设置成功。如果 LED 闪烁 4 下,表示设置失败。失败原因有两种,一种是,接入低电平时间不够,另一种是设置的距离值大于最大警界阀值。

五、串口模式下 GY56 模块校准说明

串口下 GY56 模块校准说明:

1、SPADs 修正: 当测距传感器上方被透明材质物体覆盖,模块需进行一次该修正,并上电后加载 SPADs 修正参数。默认情况下,模块在每次上电后会进行一次 SPADs 修正操作,如用户手动执行一次 SPADs 修正后,设置了上电加载 SPADs 修正参数则模块不进行上电后 SPADs 修正操作,这样可以缩短模块初始化时间;通过上位机发送十六进制 A5 0A 01 B0 给模块,模块 LED 亮起,待熄灭校准完成。

2、温度修正:当模块工作环境温度变化超过 8 摄氏度,测距传感器灵敏度会发生改变,需进行一次温度修正;默认情况下,模块在每次上电后会进行一次温度修正操作,如模块工作环境温度恒定,可进手动进行一次温度修正后,设置模块上电后加载温度修正参数,这样可以缩短模块初始化时间;如用户开启了自动温度修正,则模块根据 MCU 温度超过 8度后,自行进行一次温度修正;通过上位机发送十六进制 A5 10 01 B6 给模块,模块 LED亮起,待熄灭校准完成。

3、偏差校准:当模块测距值与实际值之间存在一个固有的偏差时,可执行此操作。偏差校准的指令=0xA5+0x21+指令值+sum,指令值为实际距离值。例如:模块测距值为13CM,而实际值为 10CM,则指令中的指令值为十进制的 10;如需重新上电后加载该补偿值,需设置上电后加载偏差校准参数。通过上位机发送十六进制指令给模块,模块 LED 亮起,待熄灭校准完成。

4、窗口校准:当测距传感器上方被透明材质物体覆盖,模块在全量程测距的值不是线性的情况下,执行该操作。如下图所示:

X 轴为实际值,Y 轴为测量值。绿色虚线说明该材质对测距无影响或是传感器表面无任务材质覆盖,蓝色线表明为轻度影响,红线为中度影响,绿色实线为重度影响。窗口校准的指令=0xA5+0x32+指令值+sum;指令值的选取:使用 17%灰色的反射率目标,则设模块与被测目标的距离为 S。对于轻度影响的情况下,参见下图左侧蓝线,只要 S 在 AB 之间即可。指令值为实际距离值。中度影响的选取右测红线 AB 之间区域。如需重新上电后加载该补偿值,需设置上电后加载窗口校准参数。通过上位机发送十六进制指令给模块,模块 LED 亮起,待熄灭校准完成。

六、测试现象及程序

1.串口模式直接输出


Distance =(0x00<<8)|0x14 =20cm

2.IIC模式OLED显示(PS焊点短接)

(1)程序

c 复制代码
main.c
#include <STC89C5xRC.H>
#include <delay.h>
#include <IIC.H>
#include <oled.H>

void Read_VL53L0(unsigned int * distance)//读VL53L0
{
	unsigned char REG_data[2]={0,0};
	
	IIC_Start();
	IIC_SendByte(0xE1);
	IIC_ReceiveAck();//这里没有对应答做判断
	delay_1us(50);
	REG_data[0] = IIC_ReceiveByte();
	IIC_SendAck(0);
	REG_data[1] = IIC_ReceiveByte();
	IIC_SendAck(1);
	IIC_Stop();
	
	distance[0]=REG_data[0]<<8|REG_data[1];
}

void Write_VL53L0()//写VL53L0
{
	IIC_Start();
	IIC_SendByte(0xE0);
	IIC_ReceiveAck();
    delay_1us(40);
	IIC_SendByte(0x51);//发送测量命令
	IIC_ReceiveAck();
	delay_1us(40);
	IIC_Stop();
}
void main()
{
	unsigned int diatance=0;
	
	OLED_Init();//初始化OLED
	OLED_ColorTurn(0);//0正常显示,1 反色显示
    OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
	OLED_Clear();//清屏
	
	Delay_x_ms(1000);//系统启动延时
	
	while(1)
	{
		Write_VL53L0();
		Delay_x_ms(500);//测量转化延时
		Read_VL53L0(&diatance);
		
		OLED_ShowString(70,3,"cm",16);
		OLED_ShowNum(40,3,diatance,3,16);
		Delay_x_ms(1000);
	}
}

(2)现象

盒子放置于直尺15cm以及20cm位置测试,OLED 分别显示距离 15cm 及 20cm

本文测试结束,需要整个资料工程的可以在评论区留言邮箱哦!

相关推荐
hi941 小时前
PYNQ 框架 - 中断(INTR)驱动
嵌入式硬件·fpga开发·zynq·pynq
夏天匆匆2过1 小时前
linux性能提升之sendmmsg和recvmmsg
linux·c++·单片机·网络协议·udp·tcp
ice小游1 小时前
使用ATmega328p芯片制作Arduino Uno R3开发板
嵌入式硬件·arduino·开发板·芯片·atmega328p
chengpei1472 小时前
51单片机使用NRF24L01进行2.4G无线通信
c语言·51单片机
iot鑫鹏6 小时前
STM32问题集
stm32·单片机·嵌入式硬件
stm32发烧友1 天前
基于STM32的智能家居安防系统设计
stm32·嵌入式硬件·智能家居
LightningJie1 天前
STM32(hal库)中的定时器从模式TIM_SlaveConfigTypeDef结构体中的含义,以及可选参数的含义都是什么意思
stm32·单片机·嵌入式硬件
小齿轮lsl1 天前
无桥Boost-PFC 双闭环控制MATLAB仿真
单片机·嵌入式硬件·matlab·电力电子·电源硬件·pfc
Matlab程序猿小助手1 天前
【MATLAB源码-第213期】基于matlab的16QAM调制解调系统软硬判决对比仿真,输出误码率曲线对比图。
开发语言·嵌入式硬件·算法·matlab·机器人
鱼与仙人掌1 天前
STM32:ADC
stm32·单片机·嵌入式硬件