Измеритель расстояния с зуммером — Arduino Uno simulation

Система измерения расстояния с датчиком VL53L0X, RGB-светодиодом и звуковым оповещением.

An interactive Arduino Uno circuit simulation you can run free in your browser on Velxio, by sophiia.

Components

Sketch code

#include <Wire.h>
#include <Adafruit_VL53L0X.h>

Adafruit_VL53L0X lox = Adafruit_VL53L0X();

const int redPin = 9;     // Червоний канал RGB
const int greenPin = 10;  // Зелений канал RGB
const int buzzerPin = 8;  // П'єзодинамік (Buzzer)

unsigned long lastBuzzerTime = 0;
bool buzzerState = false;

void setup() {
  Serial.begin(115200);

  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);

  if (!lox.begin()) {
    Serial.println("Помилка ініціалізації датчика!");
    while (1);
  }
}

void loop() {
  VL53L0X_RangingMeasurementData_t measure;
  lox.rangingTest(&measure, false);
  
  // Беремо відстань напряму (або ставимо дефолтну, якщо статус помилковий)
  int distance = measure.RangeMilliMeter;
  
  Serial.print("Відстань: ");
  Serial.print(distance);
  Serial.println(" мм");

  // 1) Безпечна зона (> 1000 мм / > 1 м): тільки зелений
  if (distance > 1000 || measure.RangeStatus == 4) {
    digitalWrite(greenPin, HIGH);
    digitalWrite(redPin, LOW);
    noTone(buzzerPin);
  }
  // 2) Зона уваги (500 - 1000 мм / 0.5 - 1 м): жовтий + переривчастий звук
  else if (distance >= 500 && distance <= 1000) {
    digitalWrite(greenPin, HIGH);
    digitalWrite(redPin, HIGH); // Жовтий (зелений + червоний)
    
    int beepInterval = map(distance, 500, 1000, 50, 400);
    
    if (millis() - lastBuzzerTime >= beepInterval) {
      lastBuzzerTime = millis();
      buzzerState = !buzzerState;
      
      if (buzzerState) {
        tone(buzzerPin, 1000);
      } else {
        noTone(buzzerPin);
      }
    }
  }
  // 3) Критична зона (< 500 мм / < 0.5 м): червоний + безперервний писк
  else {
    digitalWrite(greenPin, HIGH); // іноді ставлять LOW, але за твоїм завданням тут лише червоний
    digitalWrite(greenPin, LOW);
    digitalWrite(redPin, HIGH);
    tone(buzzerPin, 2000);
  }
  
  delay(30);
}

More projects by sophiia