Seite 3 von 8

Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino

Verfasst: Fr 16. Jul 2021, 17:33
von Admin
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

Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino

Verfasst: Fr 16. Jul 2021, 18:10
von e69-fan
:(V): ich bin morgen / Samstag den ganzen Tag zu Hause.

Ich baue dann mal die Infrarot ein.


Schönen Abend

Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino

Verfasst: Sa 17. Jul 2021, 09:23
von Admin
OK, wenns passt würde ich am Nachmittag kommen. :(V):

Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino

Verfasst: So 18. Jul 2021, 22:12
von Admin
Admin hat geschrieben: Di 13. Jul 2021, 18:03 Bei denen braucht man für die Bus Adressen 3 Pins wenn man alle 8 Busse adressieren muß. In deinem Fall sollte es reichen, wenn man A1 und A2 auf Low legt, und dann nur A0 mit einem Pin vom Arduino High / Low, Bus 0 oder Bus 1 auswählt.
Ja, so habe ich mir das jedenfalls vorgestellt. War aber nix :(o):

Ich habe es jetzt schon hinbekommen. Mit der entsprechenden Library :) Zumindest habe ich die grundsetzlich schon kapiert, jetzt muss ich noch die Aktivierung der einzelnen VL53L0X hinbekommen, weil wir ja dann zwei auf verschiedenen I2C-Adressen haben. Auch das Display hat jetzt eine eigene Adresse. Also die Grundeinstellungen muss ich dann ja für jeden einzeln VL53L0X im Setup machen. I2C auf den ersten VL53L0X stellen, Grundeinstellungen schicken, dann I2C auf den zweiten VL53L0X stellen, und wieder Grundeinstellungen schicken. Mache ich morgen noch, heute bin ich müüüüüüüüde. :roll:

Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino

Verfasst: Mo 19. Jul 2021, 11:25
von Admin
houston wir haben ein problem :O:

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 :eek: 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 :evil: 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. :O:

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");
  }
}

Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino

Verfasst: Di 20. Jul 2021, 14:14
von Admin
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:

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"));
  }
}

Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino

Verfasst: Do 22. Jul 2021, 16:59
von Admin
Wolfgang,
dein I2C Bus Multiplexer ist gelötet und wartet auf abholen.

Franz

Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino

Verfasst: Sa 24. Jul 2021, 19:25
von Admin
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 :O:

Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino

Verfasst: Sa 24. Jul 2021, 20:47
von e69-fan
:agt:

Helga war am schaufeln, nach 20 Min war das erledigt, der Rest kommt morgen auf

Schau Mal bei " Neuvorstellungen* nach.


Gute Nacht

Re: VL53L0X ToF Sensor Laser Entfernungsmessung am Arduino

Verfasst: Sa 24. Jul 2021, 20:53
von Admin
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 :(o): 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 :(o):

Viel zu tun, greifen wir´s an :O: