Nutzung von mehreren vl53l0x ohne spezifische Adresse möglich?

Guten Morgen zusammen

Da ich noch relativ neu in diesem Business bin, habe ich da mal ne evtl komische Frage;

Ich möchte mehrere vl53l0x nutzen - wenn eine bestimmte Distanz unterschritten wird, soll ein Motor angesteuert werden > von welchem Sensor nun dieser unterschrittene Wert kommt, spielt keine Rolle.

Muss ich nun “der Ordnung” halber den verschiedenen vl53l0x eine spezifische Adresse zuteilen, oder kann ich mir das ersparen?

Meine Idee:

  • Überwachen aller vl53l0x;
  • Wenn Wert x unterschritten, dann Motor links-drehen für 6s anschliessend Motor aus
  • Wenn Wert x wieder “normal”, dann Motor rechts-drehen für 6s anschliessend Motor aus

Ich weiss, es ist sehr rudimentär geschrieben - eventuell stelle ich mir das auch etwas zu einfach vor…

Über eure Inputs und Vorschläge bin ich sehr froh; besten Dank schon einmal im Voraus…

Matthias

Nein das geht gar nicht!

Du hast genau 3 Möglichkeiten!

  1. Du gibst jedem Sensor seine eigene Adresse (Aber das ist doch kein Problem, warum willst du das nicht?)
  2. Du verwendest einen I2C Multiplexer
  3. Du schaltest alle, bis auf einen, per XShut ab, und wertest dann nur diesen aus

Ok, besten Dank, ich denke ich werde es mit einem I2C Multiplexer versuchen...

So wie ich es verstanden habe wäre es, wie du sagst, eigentlich nicht schwer die Adresse zu ändern, jedoch müsste man dies nach jedem Neustart neu adressieren... was mich stört

Und der Multiplexer stört dich nicht?
Der würde mich stören.

Denn der will nicht nur zu Anfang, sondern immer verwaltet werden.

hmm... was ist nun das kleinere Übel..

Da die Schaltung dann meistens in Betrieb ist, könnte ich mittels Stützbatterie allfällige Spannungsausfälle überbrücken...

Besten Dank schon einmal für die Denkanstösse!

Die I2C Adressen resetieren sich auf die Defaultadresse wenn der Sensor resetiert (power on) wird.
Um diese bei mehreren am Bus hängenden Sensoren zu ändern muß man alle Sensoren, bis auf einen mittels XSund abschalten und den aktiven Sensore umprogrammieren. Hat man das einmal gemacht dann kann man die Sensoren über ihre Adresse ansprechen. Dies muß bei jedem Einschalten gemacht werden.
Grüße Uwe

Hi, die I2C-Adressen für die Sensoren sind doch mit wenigen Zeilen Code im Setup vergeben. Gut, Du benötigst pro Sensor einen Zusätzlichen PIN vom Arduino.
Hier ne Anleitung, wie Du die Adressen richtig setzt: I2C Adress-Setting must etwas runterscrollen bis Connecting Multiple Sensors

Ist doch kaum Aufwand.

LG Stefan

Hallo Stefan

Vielen Dank für dein Input, werde ich mir anschauen und versuchen .... tönt recht gut.

-wie gesagt, bin noch ein rechtes greenhorn auf diesem Gebiet..

habe soeben festgestellt, dass man auch da jedes Mal die Adressen neu setzen muss wenn das Ganze mal ausgeschalten wurde:

"... Repeat for each sensor, turning each one on, setting a unique address.
Note you must do this every time you turn on the power, the addresses are not permanent! "

Wobei ich mich folgendes frage; wenn ich jeden Sensor an einen eigenen Pin hänge mittles XSHUT, kann es mir doch eigentlich egal sein, wenn alle die gleiche Adresse haben, da ich sie ja über die einzelnen Pin abrufen kann - wenn ich das richtig verstanden habe- oder?

Nicht wirklich!
Ohne Shutdown macht der Baustein auch zwischendurch Messungen.

Warum wehrst du dich so dermaßen dagegen, die Initialisierung so zu machen, wie es das Datenblatt empfiehlt?

Hi Matche77,

Ja Du musst die Zuweisung der Adressen neu machen, wenn der Saft weg war, genau deshalb sollst Du ja die dazu erforderlichen Code-Zeilen ins Setup des Sketch schreiben, denn das setup wird ja sobald der Saft wieder da ist automatisch ausgeführt.
Oder willst Du die Sensoren separat mit Spannung versorgen und diese zwischendurch abschalten?

Ich sehe da echt Dein Problem nicht?

LG Stefan

@Deltaflyer: Es ist Variante 3 aus #1 gemeint.

Gruß Tommy

@ Deltaflyer

.. Wie gesagt - ich bin auf diesem Gebiet absolut keine Leuchte - eher ein Maulwurf...

Stimmt ja eigentlich; wie gesagt wurde - wenn das ganze über den Code im Setup geregelt wird, dann spielt es keine Rolle.

Ich war mir da nicht so sicher (hat mich verwirrt), da explizit erwähnt wurde, dass die Adressierung nach Spannungslosigkeit neu gemacht werden muss. Da dies ja im Setup bei jedem Start geschieht, ist es ja "wurst"...

Hi Matche77,
ja, da ja Arduino und Sensoren gemeinsam ein und ausgeschaltet wierden und der Arduino nach dem Neustart auch erstmal konfiguriert werden muss, geht dies ja alles in einem, und ist somit wirklich wurst.

Mir ist das auch schon so ergangen. Man hat ein Konzept im Kopf, für das man ein Lösungsweg erarbeitet hat, und wenn es ein problem gibt, fällt es einem manchmal schwer, den erdachten Pfad zu verlassen. Man steckt dan irgrndwie in ner Art endlosschleife fest, die man nur schwer verlassen kann.

Ich hab das mit dem 'ich sehe Dein Problem nicht' auch nicht böse gemeiint, sondern wollte Dir einfach helfen, den Knoten zu lösen, was ja jetzt auch geklappt hat.
Weiterhin viel Erfolg mit Deinem Projekt, und bei Fragen, einfach fragen, dazu sind wir ja hier.

LG Stefan

Mir ist das auch schon so ergangen. Man hat ein Konzept im Kopf, für das man ein Lösungsweg erarbeitet hat, und wenn es ein problem gibt, fällt es einem manchmal schwer, den erdachten Pfad zu verlassen. Man steckt dan irgrndwie in ner Art endlosschleife fest, die man nur schwer verlassen kann.

Das geht wohl jedem mal so…

Der Kopf ist rund,
damit das Denken die Richtung wechseln kann.

Wer in die falsche Richtung läuft,
braucht sich nicht zu beeilen.

Vielen Dank euch allen!
Ich werde mich am Wochenende mal daran versuchen - hoffe ich habe die Zeit dazu - sonst dann halt nächstes Wochende ;D

Hallo zusammen;

ich konnte mich wieder ein wenig mit meinem Projekt befassen…

Ich habe einen Code gefunden, welcher mit dem PWM-Pin arbeitet.
Ich habe jetzt zu einem Sensor mal einen Part geschrieben welcher bei Unterschreitung von 200 eine LED aufleuchten lässt (solange dieser Wert unterschritten wird). Setze ich diesen Code zu jedem Sensor, blinkt die LED, setze ich ihn an den Anfang, leuchtet die LED dauerhaft, ohne dass der Wert unterschritten worden ist…

Nun mein Gedanke: ich möchte nun, dass wenn dieses Signal kommt (<200), egal von welchem Sensor, der Motor angesteuert wird (Motor auf) (die LED habe ich nur genutzt um zu sehen was passiert) bis er den Endschalter erreicht, anschliessend läuft der Motor in umgekerter Richtung (Motor ab), bis er wieder einen Endschalter erreicht, dann geht es wieder von vorne los…

Wie schreibe ich den Part nun, dass der Motor a) auf geht; b) weiter aufgeht bis an den Enschalter - und nicht stoppt, wenn kein Signal mehr unter 200 da ist?

Hier der Code, mit der LED beim letzten Sensor:

/************************
Connections:
Arduino -> Breakout
VCC        VCC
GND        GND
IO 4       PWM1
IO5         PWM2
IO6         PWM3
IO7         PWM4
Default Baudrate is 9600
*************************/

int Sensor1 = 2;
int Sensor2 = 3;
int Sensor3 = 4;
int Sensor4 = 5;
const int led = 6;
int messWert = 0;
unsigned long duration;
void setup()

{
Serial.begin(9600);
pinMode(Sensor1, INPUT);
pinMode(Sensor2, INPUT);
pinMode(Sensor3, INPUT);
pinMode(Sensor4, INPUT);
delay(500);
}
void loop()
{

uint16_t distance = 0;


{duration = pulseIn(Sensor1, HIGH);
distance = duration / 10;
Serial.println(distance);
delay(100);}

{duration = pulseIn(Sensor2, HIGH);
distance = duration / 10;
Serial.println(distance);
delay(100);}

{duration = pulseIn(Sensor3, HIGH);
distance = duration / 10;
Serial.println(distance);
delay(100);}

{duration = pulseIn(Sensor4, HIGH);
distance = duration / 10;
Serial.println(distance);
delay(100);}

messWert = distance;
if (messWert < 200)
{digitalWrite(led, HIGH);}
else
{digitalWrite(led, LOW);}       // die LED leuchtet so lange, wie bei diesem Sensor der Wert unter 200 liegt

}