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..
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
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
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?
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?
.. 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.
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.
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
}