VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino
- Admin
- Administrator
- Beiträge: 1254
- Registriert: Mo 20. Apr 2020, 09:47
- Wohnort: 82441 Ohlstadt
- Kontaktdaten:
Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino
OK, wann du Lust und Zeit hast. Ich kann auch mal vorbei kommen und sie abholen, wenn dir das lieber ist.
Schönes Wochenende
Franz
Schönes Wochenende
Franz
Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino

Ich baue dann mal die Infrarot ein.
Schönen Abend
Grüße aus der Heimat der E69
- Admin
- Administrator
- Beiträge: 1254
- Registriert: Mo 20. Apr 2020, 09:47
- Wohnort: 82441 Ohlstadt
- Kontaktdaten:
Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino
OK, wenns passt würde ich am Nachmittag kommen. 

- Admin
- Administrator
- Beiträge: 1254
- Registriert: Mo 20. Apr 2020, 09:47
- Wohnort: 82441 Ohlstadt
- Kontaktdaten:
Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino
Ja, so habe ich mir das jedenfalls vorgestellt. War aber nix

Ich habe es jetzt schon hinbekommen. Mit der entsprechenden Library


- Admin
- Administrator
- Beiträge: 1254
- Registriert: Mo 20. Apr 2020, 09:47
- Wohnort: 82441 Ohlstadt
- Kontaktdaten:
Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino
houston wir haben ein problem
Ich kämpfe gerade mit dem Programm.
Wenn ich einen Channel schließen will, muss ich normal schreiben, "I2CMux.closeChannel(x);" Das "x" steht für die Nummer dess Channels. Funktioniert aber nicht
Mit dem Befehl "I2CMux.openChannel(x);" öffnet man den Channel, das funktioniert. Aber der close Befehl zeigt keine Wirkung. Der Kanal bleibt offen und stört somit die Kommunikation mit dem jeweiligen Sensor, weil dann beide Sensoren parallel am I2C hängen
Das Prgramm unten funktioniert schon so weit, weil ich alle close Befehle gegen "I2CMux.closeAll();" ausgetauscht habe. Das geht auch, ist aber nicht Sinn der Sache. Man muss ja das, was man mit "I2CMux.openChannel(x);" geöffnet hat, auch wieder mit "I2CMux.closeChannel(x);" schließen können. Aber leider Arschkarte. Da stehe ich gerade ein bischen am Schlauch.
Hier ist mal das Programm:

Ich kämpfe gerade mit dem Programm.
Wenn ich einen Channel schließen will, muss ich normal schreiben, "I2CMux.closeChannel(x);" Das "x" steht für die Nummer dess Channels. Funktioniert aber nicht



Hier ist mal das Programm:
Code: Alles auswählen
/* Dieses Beispiel zeigt, wie man eine Einzelschussreichweite erhält
Messungen vom VL53L0X. Der Sensor kann optional sein
mit unterschiedlichen Ranging-Profilen konfiguriert, wie in . beschrieben
das VL53L0X API-Benutzerhandbuch, um eine bessere Leistung für
eine bestimmte Anwendung. Dieser Code basiert auf den vier
"SingleRanging"-Beispiele in der VL53L0X-API.
Die voreingestellte I2C Adresse (0x29)
Die Entfernungsmesswerte sind in mm angegeben. */
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
#include <LiquidCrystal_I2C.h> // LCD Display
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#include <Arduino.h> // I2C Multiplexer einrichten
#include "TCA9548A.h"
TCA9548A I2CMux;
int messung1 = 0;
int messung2 = 0;
// Entkommentieren Sie diese Zeile, um den Langstreckenmodus zu verwenden. Diese
// erhöht die Empfindlichkeit des Sensors und verlängert seine
// potenzielle Reichweite, erhöht aber die Wahrscheinlichkeit, dass
// eine ungenaue Lesung aufgrund von Reflexionen von Objekten
// anders als das beabsichtigte Ziel. Es funktioniert am besten im Dunkeln
// Bedingungen.
//#define LONG_RANGE
// Entkommentieren Sie EINE dieser beiden Zeilen, um folgendes zu erhalten.
// - höhere Geschwindigkeit auf Kosten einer geringeren Genauigkeit oder
// - höhere Genauigkeit auf Kosten einer geringeren Geschwindigkeit
//#define HIGH_SPEED
#define HIGH_ACCURACY
void setup()
{
I2CMux.begin(Wire); // Wire-Instanz wird an die Bibliothek übergeben für I2C Multiplexer
I2CMux.closeAll(); // Alle Kanäle schließen
Serial.begin(9600);
Wire.begin();
I2CMux.openChannel(0); // I2C Multiplexer Display Kanal 0 ativieren
lcd.begin(20, 4);
lcd.backlight();
lcd.clear();
lcd.setCursor (2, 0);
lcd.print (F("Abstandsmessung 1"));
lcd.setCursor (2, 1);
lcd.print (F("mm:"));
lcd.setCursor (2, 2);
lcd.print (F("Abstandsmessung 2"));
lcd.setCursor (2, 3);
lcd.print (F("mm:"));
//I2CMux.closeChannel(0); // I2C Multiplexer Display Kanal 0 deaktivieren
I2CMux.closeAll(); // Close all
I2CMux.openChannel(1); // I2C Multiplexer IR-Sensor 1 Kanal 1 ativieren
sensor.setTimeout(500);
if (!sensor.init())
{
Serial.println("Sensor 1 konnte nicht erkannt und initialisiert werden!");
while (1) {}
}
//I2CMux.closeChannel(1); // I2C Multiplexer IR-Sensor 1 Kanal 1 deativieren
I2CMux.closeAll(); // Close all
I2CMux.openChannel(2); // I2C Multiplexer IR-Sensor 2 Kanal 2 ativieren
sensor.setTimeout(500);
if (!sensor.init())
{
Serial.println("Sensor 2 konnte nicht erkannt und initialisiert werden!");
while (1) {}
}
#if defined LONG_RANGE
// Verringern Sie die Begrenzung der Rücksendesignalrate (Standard ist 0,25 MCPS)
// Sensor 1
//I2CMux.closeChannel(2); // I2C Multiplexer IR-Sensor 2 Kanal 2 deativieren
I2CMux.closeAll(); // Close all
I2CMux.openChannel(1); // I2C Multiplexer IR-Sensor 1 Kanal 1 ativieren
sensor.setSignalRateLimit(0.1);
// Laserpulsperioden erhöhen (Standardwerte sind 14 und 10 PCLKs)
sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
//Sensor 2
//I2CMux.closeChannel(1); // I2C Multiplexer IR-Sensor 1 Kanal 1 deativieren
I2CMux.closeAll(); // Close all
I2CMux.openChannel(2); // I2C Multiplexer IR-Sensor 2 Kanal 2 ativieren
sensor.setSignalRateLimit(0.1);
// Laserpulsperioden erhöhen (Standardwerte sind 14 und 10 PCLKs)
sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
#endif
// Sensor 1
//I2CMux.closeChannel(2); // I2C Multiplexer IR-Sensor 2 Kanal 2 deativieren
I2CMux.closeAll(); // Close all
I2CMux.openChannel(1); // I2C Multiplexer IR-Sensor 1 Kanal 1 ativieren
#if defined HIGH_SPEED
// Timing-Budget auf 20 ms reduzieren (Standard ist etwa 33 ms)
sensor.setMeasurementTimingBudget(20000);
#elif defined HIGH_ACCURACY
// Timing-Budget auf 200 ms erhöhen
sensor.setMeasurementTimingBudget(200000);
#endif
// Sensor 2
//I2CMux.closeChannel(1); // I2C Multiplexer IR-Sensor 1 Kanal 1 deativieren
I2CMux.closeAll(); // Close all
I2CMux.openChannel(2); // I2C Multiplexer IR-Sensor 2 Kanal 2 ativieren
#if defined HIGH_SPEED
// Timing-Budget auf 20 ms reduzieren (Standard ist etwa 33 ms)
sensor.setMeasurementTimingBudget(20000);
#elif defined HIGH_ACCURACY
// Timing-Budget auf 200 ms erhöhen
sensor.setMeasurementTimingBudget(200000);
#endif
}
void loop()
{
//Sensor 1
//I2CMux.closeChannel(2); // I2C Multiplexer IR-Sensor 2 Kanal 2 deativieren
I2CMux.closeAll(); // Close all
I2CMux.openChannel(1); // I2C Multiplexer IR-Sensor 1 Kanal 1 ativieren
messung1 = (sensor.readRangeSingleMillimeters());
I2CMux.closeChannel(1); // I2C Multiplexer IR-Sensor 1 Kanal 1 deativieren
I2CMux.openChannel(0); // I2C Multiplexer Display Kanal 0 aktivieren
lcd.setCursor (10, 1);
lcd.print (F(" "));
lcd.setCursor (10, 1);
lcd.print (messung1);
//Sensor 2
//I2CMux.closeChannel(1); // I2C Multiplexer IR-Sensor 1 Kanal 1 deativieren
I2CMux.closeAll(); // Close all
I2CMux.openChannel(2); // I2C Multiplexer IR-Sensor 2 Kanal 2 ativieren
messung2 = (sensor.readRangeSingleMillimeters());
//I2CMux.closeChannel(2); // I2C Multiplexer IR-Sensor 2 Kanal 2 deativieren
I2CMux.closeAll(); // Close all
I2CMux.openChannel(0); // I2C Multiplexer Display Kanal 0 aktivieren
lcd.setCursor (10, 3);
lcd.print (F(" "));
lcd.setCursor (10, 3);
lcd.print (messung2);
//Serial.print(sensor.readRangeSingleMillimeters());
//I2CMux.closeChannel(0); // I2C Multiplexer Display Kanal 0 deaktivieren
I2CMux.closeAll(); // Close all
I2CMux.openChannel(1); // I2C Multiplexer IR-Sensor 1 Kanal 1 ativieren
if (sensor.timeoutOccurred()) {
Serial.print(" TIMEOUT");
}
}
- Admin
- Administrator
- Beiträge: 1254
- Registriert: Mo 20. Apr 2020, 09:47
- Wohnort: 82441 Ohlstadt
- Kontaktdaten:
Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino
OK, das mit den Kanal schießen geht tatsächlich nicht. Ich habe jetzt einfach closeALL() zum schließen genommen das klappt wunderbar.
Hier nochmal der Code:
Hier nochmal der Code:
Code: Alles auswählen
/* Dieses Beispiel zeigt, wie man eine Einzelschussreichweite erhält
Messungen vom VL53L0X. Der Sensor kann optional sein
mit unterschiedlichen Ranging-Profilen konfiguriert, wie in . beschrieben
das VL53L0X API-Benutzerhandbuch, um eine bessere Leistung für
eine bestimmte Anwendung. Dieser Code basiert auf den vier
"SingleRanging"-Beispiele in der VL53L0X-API.
Die voreingestellte I2C Adresse (0x29)
Die Entfernungsmesswerte sind in mm angegeben. */
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
#include <LiquidCrystal_I2C.h> // LCD Display
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#include <Arduino.h> // I2C Multiplexer einrichten
#include "TCA9548A.h"
TCA9548A I2CMux;
int messung1 = 0;
int messung2 = 0;
// Entkommentieren Sie diese Zeile, um den Langstreckenmodus zu verwenden. Diese
// erhöht die Empfindlichkeit des Sensors und verlängert seine
// potenzielle Reichweite, erhöht aber die Wahrscheinlichkeit, dass
// eine ungenaue Lesung aufgrund von Reflexionen von Objekten
// anders als das beabsichtigte Ziel. Es funktioniert am besten im Dunkeln
// Bedingungen.
//#define LONG_RANGE
// Entkommentieren Sie EINE dieser beiden Zeilen, um folgendes zu erhalten.
// - höhere Geschwindigkeit auf Kosten einer geringeren Genauigkeit oder
// - höhere Genauigkeit auf Kosten einer geringeren Geschwindigkeit
//#define HIGH_SPEED
#define HIGH_ACCURACY
void setup()
{
I2CMux.begin(Wire); // Wire-Instanz wird an die Bibliothek übergeben für I2C Multiplexer
I2CMux.closeAll(); // Alle Kanäle schließen
Serial.begin(9600);
Wire.begin();
I2CMux.openChannel(0); // I2C Multiplexer Display Kanal 0 ativieren
lcd.begin(20, 4);
lcd.backlight();
lcd.clear();
lcd.setCursor (2, 0);
lcd.print (F("Abstandsmessung 1"));
lcd.setCursor (2, 1);
lcd.print (F("mm:"));
lcd.setCursor (2, 2);
lcd.print (F("Abstandsmessung 2"));
lcd.setCursor (2, 3);
lcd.print (F("mm:"));
I2CMux.closeAll(); // Close all
I2CMux.openChannel(1); // I2C Multiplexer IR-Sensor 1 Kanal 1 ativieren
sensor.setTimeout(500);
if (!sensor.init())
{
Serial.println("Sensor 1 konnte nicht erkannt und initialisiert werden!");
while (1) {}
}
I2CMux.closeAll(); // Close all
I2CMux.openChannel(2); // I2C Multiplexer IR-Sensor 2 Kanal 2 ativieren
sensor.setTimeout(500);
if (!sensor.init())
{
Serial.println("Sensor 2 konnte nicht erkannt und initialisiert werden!");
while (1) {}
}
#if defined LONG_RANGE
// Verringern Sie die Begrenzung der Rücksendesignalrate (Standard ist 0,25 MCPS)
// Sensor 1
I2CMux.closeAll(); // Close all
I2CMux.openChannel(1); // I2C Multiplexer IR-Sensor 1 Kanal 1 ativieren
sensor.setSignalRateLimit(0.1);
// Laserpulsperioden erhöhen (Standardwerte sind 14 und 10 PCLKs)
sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
//Sensor 2
I2CMux.closeAll(); // Close all
I2CMux.openChannel(2); // I2C Multiplexer IR-Sensor 2 Kanal 2 ativieren
sensor.setSignalRateLimit(0.1);
// Laserpulsperioden erhöhen (Standardwerte sind 14 und 10 PCLKs)
sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
#endif
// Sensor 1
I2CMux.closeAll(); // Close all
I2CMux.openChannel(1); // I2C Multiplexer IR-Sensor 1 Kanal 1 ativieren
#if defined HIGH_SPEED
// Timing-Budget auf 20 ms reduzieren (Standard ist etwa 33 ms)
sensor.setMeasurementTimingBudget(20000);
#elif defined HIGH_ACCURACY
// Timing-Budget auf 200 ms erhöhen
sensor.setMeasurementTimingBudget(200000);
#endif
// Sensor 2
I2CMux.closeAll(); // Close all
I2CMux.openChannel(2); // I2C Multiplexer IR-Sensor 2 Kanal 2 ativieren
#if defined HIGH_SPEED
// Timing-Budget auf 20 ms reduzieren (Standard ist etwa 33 ms)
sensor.setMeasurementTimingBudget(20000);
#elif defined HIGH_ACCURACY
// Timing-Budget auf 200 ms erhöhen
sensor.setMeasurementTimingBudget(200000);
#endif
}
void loop()
{
//Sensor 1
I2CMux.closeAll(); // Close all
I2CMux.openChannel(1); // I2C Multiplexer IR-Sensor 1 Kanal 1 ativieren
messung1 = (sensor.readRangeSingleMillimeters());
I2CMux.closeAll(); // Close all
I2CMux.openChannel(0); // I2C Multiplexer Display Kanal 0 aktivieren
lcd.setCursor (10, 1);
lcd.print (F(" "));
lcd.setCursor (10, 1);
lcd.print (messung1);
//Sensor 2
I2CMux.closeAll(); // Close all
I2CMux.openChannel(2); // I2C Multiplexer IR-Sensor 2 Kanal 2 ativieren
messung2 = (sensor.readRangeSingleMillimeters());
I2CMux.closeAll(); // Close all
I2CMux.openChannel(0); // I2C Multiplexer Display Kanal 0 aktivieren
lcd.setCursor (10, 3);
lcd.print (F(" "));
lcd.setCursor (10, 3);
lcd.print (messung2);
// Sensor 1
I2CMux.closeAll(); // Close all
I2CMux.openChannel(1); // I2C Multiplexer IR-Sensor 1 Kanal 1 ativieren
if (sensor.timeoutOccurred()) {
Serial.print(F(" TIMEOUT Sensor 1"));
}
// Sensor 2
I2CMux.closeAll(); // Close all
I2CMux.openChannel(2); // I2C Multiplexer IR-Sensor 2 Kanal 2 ativieren
if (sensor.timeoutOccurred()) {
Serial.print(F(" TIMEOUT Sensor 2"));
}
}
- Admin
- Administrator
- Beiträge: 1254
- Registriert: Mo 20. Apr 2020, 09:47
- Wohnort: 82441 Ohlstadt
- Kontaktdaten:
Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino
Wolfgang,
dein I2C Bus Multiplexer ist gelötet und wartet auf abholen.
Franz
dein I2C Bus Multiplexer ist gelötet und wartet auf abholen.
Franz
- Admin
- Administrator
- Beiträge: 1254
- Registriert: Mo 20. Apr 2020, 09:47
- Wohnort: 82441 Ohlstadt
- Kontaktdaten:
Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino
Na du. Wir hatten gerade ziehmlich starken Sturm und Regen. Aber alles vorbei. Nur ein paar Blumentöpfe haben aufgegeben. Die hat es etwas durch den Garten geblasen 

Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino

Helga war am schaufeln, nach 20 Min war das erledigt, der Rest kommt morgen auf
Schau Mal bei " Neuvorstellungen* nach.
Gute Nacht
Grüße aus der Heimat der E69
- Admin
- Administrator
- Beiträge: 1254
- Registriert: Mo 20. Apr 2020, 09:47
- Wohnort: 82441 Ohlstadt
- Kontaktdaten:
Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino
Jetzt muss da mal das Relais noch mit rein, dass du die Schranke damit schließen kannst.
Dann ist das wohl so weit.
Ich habe dann mal noch diese LED Ringe, die ich mir besorgt habe. Ich wollte zwar eigentlich nie LED´s ansteuern, weil ich das für Kitsch gehalten habe, aber jetzt muss ich mich doch mal mit den LED Streifen beschäftigen
Und die Sd Kartenspeicher muss ich testen, und die SSR DC-Relais habe ich auch gerade mal ausprobiert. Ich dachte die kann man auch als Motorregler benutzen, aber das war nix
Viel zu tun, greifen wir´s an
Dann ist das wohl so weit.
Ich habe dann mal noch diese LED Ringe, die ich mir besorgt habe. Ich wollte zwar eigentlich nie LED´s ansteuern, weil ich das für Kitsch gehalten habe, aber jetzt muss ich mich doch mal mit den LED Streifen beschäftigen


Viel zu tun, greifen wir´s an

Wer ist online?
Mitglieder in diesem Forum: Ahrefs [Bot] und 6 Gäste