探测车模拟器

基于 VL53L0X 激光测距 · 双马达控制逻辑复现

VL53L0X 距离
— mm
模式
待机
收集星星
0
碰壁次数
0
马达 A(AIN1/AIN2 · PWM5)
PWM 0
马达 B(BIN1/BIN2 · PWM6)
PWM 0

手动控制(键盘 WASD / 方向键 · 或点击按钮)

传感器检测正前方障碍物距离。当距离 > 30 mm马达A转、马达B停(直行); 距离 ≤ 30 mm马达A停、马达B转(自动转向避障)。

Arduino C++
// ── 依赖库 ──────────────────────────────────────────
#include <Wire.h>
#include <VL53L0X.h>

VL53L0X sensor;

// ── A 马达引脚 ─────────────────────────────────────
const int STBY = 2;
const int PWMA = 5;
const int AIN1 = 4;
const int AIN2 = 3;

// ── B 马达引脚 ─────────────────────────────────────
const int PWMB = 6;
const int BIN1 = 7;
const int BIN2 = 8;

void setup() {
  Serial.begin(9600);
  Wire.begin();

  pinMode(STBY, OUTPUT);
  pinMode(PWMA, OUTPUT);
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);

  pinMode(PWMB, OUTPUT);
  pinMode(BIN1, OUTPUT);
  pinMode(BIN2, OUTPUT);

  if (!sensor.init()) {
    Serial.println("Error: Sensor not found!");
    while (1);
  }

  sensor.startContinuous();
  digitalWrite(STBY, HIGH);
  Serial.println("Switch System Ready!");
}

void loop() {
  int distance = sensor.readRangeContinuousMillimeters();

  Serial.print("Dist: ");
  Serial.print(distance);
  Serial.println(" mm");

  if (distance > 30) {
    // 【30mm 以外】:A 转,B 停
    digitalWrite(AIN1, HIGH);
    digitalWrite(AIN2, LOW);
    analogWrite(PWMA, 255);

    digitalWrite(BIN1, LOW);
    digitalWrite(BIN2, LOW);
    analogWrite(PWMB, 0);
  } else {
    // 【30mm 以内】:A 停,B 转
    digitalWrite(AIN1, LOW);
    digitalWrite(AIN2, LOW);
    analogWrite(PWMA, 0);

    digitalWrite(BIN1, HIGH);
    digitalWrite(BIN2, LOW);
    analogWrite(PWMB, 255);
  }

  delay(100);
}

← 返回主页