一、硬件介绍
1、产品特点
Arduino Nicla Vision 搭载STM32H747AII6 双核芯片(Cortex-M7_480MHz + Cortex-M4_240MHz),板载六轴智能运动传感器、集成麦克风和距离传感器、Wi-Fi和蓝牙模块、以及一个200万的彩色摄像头;

特性

系统框图

功率

二、距离 / ToF传感器 (VL53L1CBV0FY )
ST VL53L1CBV0FY飞行时间传感器(U4),近红外VCSEL激光器(包括模拟驱动器)与接收光学元件一同封装一体化小型模块中;

特性
完全集成的微型模块
发射器:940 nm不可见激光 (VCSEL) 及其模拟驱动器
带集成透镜的接收阵列
快速、精确测距
全视野 (FoV) 时,400 cm+的检测范围
60 Hz测距范围可达300 cm
多目标检测能力
具有可选阵列的多区域扫描
原理图
连接到开发板 I2C1

三、代码编写
安装支持库
VL53L1X

距离测量
输出测量信息:距离值、测量状态(有效性)、信号强度和环境光干扰水平
#include <Wire.h>
#include <VL53L1X.h>
VL53L1X sensor;
void setup()
{
Serial.begin(115200);
while (!Serial);
Wire1.begin();
Wire1.setClock(400000); // I2C: 400kHz
sensor.setBus(&Wire1);
if (!sensor.init())
{
Serial.println("初始化传感器失败!");
while (1);
}
// 设置为长距离模式,50毫秒完成一次测量
sensor.setDistanceMode(VL53L1X::Long);
sensor.setMeasurementTimingBudget(50000);
// 间隔应不小于时间预算。
sensor.startContinuous(50);
}
void loop()
{
sensor.read();
float range_cm = sensor.ranging_data.range_mm / 10.0f;
const char* status = VL53L1X::rangeStatusToString(sensor.ranging_data.range_status);
float signal = sensor.ranging_data.peak_signal_count_rate_MCPS;
float ambient = sensor.ranging_data.ambient_count_rate_MCPS;
Serial.print("距离: ");
Serial.print(range_cm);
Serial.print("cm ");
Serial.print("状态: ");
Serial.print(status);
Serial.print(" ");
Serial.print("信号强度: ");
Serial.print(signal);
Serial.print(" ");
Serial.print("环境光强度: ");
Serial.print(ambient);
Serial.println();
}
距离LED闪烁
LED 的闪烁频率 随测距值 动态变化,距离越近,闪烁越快;距离越远,闪烁越慢;
#include <Wire.h>
#include <VL53L1X.h>
VL53L1X proximity;
bool blinkState = false;
int reading = 0;
int timeStart = 0;
int blinkTime = 2000;
void setup() {
Serial.begin(115200);
Wire1.begin();
Wire1.setClock(400000);
proximity.setBus(&Wire1);
pinMode(LEDB, OUTPUT);
digitalWrite(LEDB, blinkState);
if (!proximity.init()) {
Serial.println("初始化失败!");
while (1);
}
proximity.setDistanceMode(VL53L1X::Long);
proximity.setMeasurementTimingBudget(50000);
proximity.startContinuous(50);
}
void loop() {
reading = proximity.read();
Serial.print(reading);
Serial.println(" mm");
if (millis() - timeStart >= reading) {
digitalWrite(LEDB, blinkState);
timeStart = millis();
blinkState = !blinkState;
}
}
我要赚赏金
