TOF Time of Flight sensor (afstand)

Deze time of flight sensor meet vrij nauwkeurig afstanden tot 2 meter. 

De sensor is gebouwd rond de VL53L0x sensor, maar de M5core behuizing maakt het geheel steviger en minder kwetsbaar. 

datasheet VL53L0x

Demo-programma TOF sensor

Onderstaand programma demonstreert de werking van de TOF sensor. Vermits de sensor zeer snel nieuwe meetwaarden geeft en deze niet altijd even stabiel zijn, middelen we de laatste 25 waarden uit met een moving average filter. Dat geeft een veel stabieler resultaat.

In de seriële monitor ziet u de twee waarden (onstabiele momentele waarde en stabiele uitgemiddelde waarde) naast elkaar.

Het is noodzakelijk om eerst 3 bibliotheken te installeren:

  • VL53L0X by Polulu
  • movingAVG by Jack Christensen
  • OneWire by Jim Studt

/*Deze code geeft de sensorwaarde van de TOF sensor 
weer in de Seriële monitor (of stuurt deze naar Excel)
de metingen zijn waarden in mm */

//
#include <VL53L0X.h>    // library voor TOF Sensor VL53L0X van Polulu
#include <Wire.h>       // TOF Library gebruikt deze Communicatie library
#include <movingAvg.h>  // Lib om onstabiele meetwaarden uit te middelen. https://github.com/JChristensen/movingAvg

VL53L0X sensor;            // Definieer VL53L0X object
movingAvg avgRoutine(25);  // define the moving average object - over laatste 25 metingen
                           // verhoog deze waarde voor een nog stabielere meting
void setup() {
  Serial.begin(9600);  // initialiseer Seriële communicatie via USB naar Seriële monitor
  Wire.begin();        // start de wire library

  sensor.setTimeout(500);  // routine die boddschap "Failed to detect and initialize sensor!"
  if (!sensor.init())      // toont als de sensor niet binnen de 500msec reageert
  {
    Serial.println("Failed to detect and initialize sensor!");
    while (1) {}
  }

  sensor.startContinuous();  // start de continue meting met de TOF sensor
  avgRoutine.begin();        // start gemiddelde routine op laatste 25 metingen
}

void loop() {
  int afstandSensor = sensor.readRangeContinuousMillimeters();  // lees de meetwaarde in van de TOF sensor
  int avg = avgRoutine.reading(afstandSensor);                  // neem het gemiddelde van de laatste 25 metingen en zet in var avg

  Serial.print(afstandSensor);  // print de momentele meetwaarde van de TOF sensor (onstabiel)
  Serial.print(",");            // komma - nodig voor logger in Excel
  Serial.print("\t");           // TAB - uitlijning in Seriële monitor
  Serial.print(avg);            // print de gemiddelde meetwaarde (laatste 25 metingen) van de TOF sensor (stabiel)

  if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
  // Foutboodschap als de communicatie met de TOF sensor misloopt

  Serial.println();  // begin een nieuwe lijn
  delay(50);         // wacht 50msec op de volgende meting
}