Att mäta avstånd och omvandla det till toner

Hej. Jag behöver hjälp med att göra en sketch för VL53L0X, avståndsmätning, samt att omvandla avståndet till toner som det går att lyssna på i hörlurar.. Någon som har en bra ide. Jag har provat lite själv men får inte rätt på programmeringen. Åker bara på error vid kompilering.

Welcome to the forum

Your duplicate topic has been deleted. Please do not post the same question in multiple categories of the forum

Välkommen till forumet

Ditt dubblettämne har tagits bort. Vänligen posta inte samma fråga i flera kategorier av forumet

Hello @hakan99 ,

are you interested in support in English or only in Swedish?

Hej, är du intresserad av support på engelska eller bara på svenska?

ec2021

Edit: I have endeavoured to create an example with Wokwi that shows the principle. Since there is no VL53L0X available in Wokwi, I use a HC-SR04 ultrasonic distance sensor, but with a "fake" VL53L0X library:

Edit: Jag har försökt att skapa ett exempel med Wokwi som visar principen. Eftersom det inte finns någon VL53L0X tillgänglig i Wokwi använder jag en HC-SR04 ultraljudsavståndssensor, men med ett "falskt" VL53L0X-bibliotek:

https://wokwi.com/projects/419982214678329345

Sketch

Main Sketch:

/*
  Forum: https://forum.arduino.cc/t/att-mata-avstand-och-omvandla-det-till-toner/1342230
  Wokwi: https://wokwi.com/projects/419982214678329345

  This sketch "fakes" a TOF board VL53L0X by a HC SR-04 Ultrasonic Dstance Sensor
  and converts the distance data into some audible signals

  The range (0 ... 1000 mm) is mapped to the frequencies from "maxHz" to "minHz" 
  so the highest tone will be created at the lowest range/distance detected

  2025/01/13
  ec2021


*/

#include "VL53L0X.h"

const unsigned long interval {100};   // Interval in ms between two measurements
const byte tonePin {5};               // Pin for buzzer
const int maxRange {1000};            // maximum Range of TOF sensor
const int minHz   {50};               // minimum frequency to be used
const int maxHz   {3000};             // maximum frequency to be used

VL53L0X lox = VL53L0X();
unsigned long lastMeasurement = 0;

void setup() {
  Serial.begin(115200);
  Serial.println("Fake VL53L0X test.");
  if (!lox.begin()) {
    Serial.println(F("Failed to boot Fake VL53L0X"));
    while(1);
  }
  Serial.println(F("Fake VL53L0X API Continuous Ranging example\n\n"));
  // start continuous ranging
  lox.startRangeContinuous();
}


void loop() {
  if (millis()-lastMeasurement > interval){
    lastMeasurement = millis();
    doMeasurement();
  }
}

void doMeasurement(){
  if (lox.isRangeComplete()) {
    noTone(tonePin);
    Serial.print("Distance in mm: ");
    float loxRange = lox.readRange();
    Serial.println(loxRange);
    int Tone = map(loxRange,0, maxRange,maxHz,minHz);
    tone(tonePin,Tone,interval);
  }
}

The next File fakes the required functions of the Adafruit_VL53L0X library so that the main sketch can use similar functions and declarations (only required in Wokwi):

#pragma once

const byte echoPin {2};
const byte triggerPin {3};

class VL53L0X {
  private:
    float distance = 0;
    boolean autoRange = false;
    void measureRange();
  public:
    VL53L0X() {};
    boolean begin() {
      pinMode(echoPin, INPUT);
      pinMode(triggerPin, OUTPUT);
      return true;
    };
    float readRange() {
      return distance;
    };
    void startRangeContinuous() {
      autoRange = true;
    };
    void stopRangeContinuous() {
      autoRange = false;
    };
    boolean isRangeComplete() {
      if (autoRange) {
          measureRange();
          return true;
      }
      return false;
    };
};


void VL53L0X::measureRange() {
  digitalWrite(triggerPin, LOW);
  delayMicroseconds(2);
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW);
  uint16_t duration = pulseIn(echoPin, HIGH);
  float dist = duration * 0.034 / 2;
  distance = map(dist,0,400,0,1000);
}

Ha det så kul! (Have fun!)
ec2021

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.