Da ich jetzt sowieso den Code poste dachte ich mir ich schreibe doch genau was ich machen möchte
Ich habe mir die LEGO Achterbahn 10261 direkt zum Release gekauft.
LEGO sieht es vor die Züge durch die Kurbel hochzukurbeln oder indem man einen M-Motor einbaut.
Mit dem M-Motor läuft aber die Kette die ganze Zeit auch wenn kein Zug darauf ist.
Mit LEGO Boost (160€) kann man seine Achterbahn programmieren damit die Kette sich erst bewegt wenn
ein Zug am Sensor vorbeifährt. Wie lange die Kette läuft ist aber programmiert in Sekunden.
So findet nach der Kette keine Abfrage statt und da der Zug es auch noch bei einer niedrigen Geschwindigkeit (bei
fast leeren Batterien) die Kette hochschaffen soll ist die Dauer der Kette länger programmiert.
Zudem fährt der Zug ständig ohne in der Station zu halten. Also habe ich mich hingesetzt
und mir ein Arduino Uno gekauft + 4 LDR Sensoren. Und einen zweiten Motor in die Station zur Beschleuningung aus
der Station.
Realisierung
- Sensor: Vor der Kette
- Sensor: Nach der Kette/Vor der ersten Abfahrt
- Sensor: vor der Station
Wenn der Zug also über den ersten Sensor fährt wird die Kette gestartet. Kurz vor der ersten Abfahrt ist der zweiten
Sensor der die Kette stoppt.
Dann fährt der Zug die restliche Strecke entlang.
Kurz vor der Station fährt er über einen weiteren Sensor (LDR 3). Der Zug ist nun in der Station und wartet dort
seine 4 Sekunden. Nach den 4 Sekunden beschleunigt der Zug heraus (Motor 2 an).
Wenn der Zug wieder über LDR 1 fährt schaltet er den Stationsmotor aus (Motor 2) und schaltet wieder den Motor
für die Kette (Motor 1) an.
LDR1> Motor1 (Kette) an
LDR2> Motor1 (Kette aus)
LDR3> Motor2 (Station an nach x sekunden)
Das funktioniert auch recht gut mit einem Zug.
Jetzt möchte ich aber einen weitern Zug hinzufügen.
Dazu habe ich oben auf der kette noch ein weiteren Sensor angebracht.
Genau dort soll der Zug stehen bleiben (Motor1 aus) sofern ein Zug noch auf der Strecke ist. (LDR2 zuvor überfahren
aber LDR 3 noch nicht überfahren.
Und das ist genau das was mir noch fehlt.
#include <legopowerfunctions.h>
LEGOPowerFunctions lego(13);
int licht1;
int licht2;
int licht3;
int licht4;
void setup() {
Serial.begin(9600);
pinMode (13, OUTPUT);
}
void loop() {
licht1 = analogRead(3);//vor der Kette
licht2 = analogRead(1);//Nach der Kette/Vor der ersten Abfahrt
licht3 = analogRead(2);//Station
licht4 = analogRead(0);//Auf der Kette
Serial.println(licht3);
if (licht1 > 210) {
lego.SingleOutput(0, PWM_FWD5, RED, CH1);//Kette bewegen (Motor 1 an)
lego.SingleOutput(0, PWM_FLT, BLUE, CH1);//Stationsbescheluning aus (Motor 2 aus)
}
if (licht2 > 480) {
lego.SingleOutput(0, PWM_FLT, RED, CH1);//Kette stoppen (Motor 1 aus)
}
if (licht3 > 480) {
delay(4000);//4 sekunden warten
lego.SingleOutput(0, PWM_REV7, BLUE, CH1);//Stationsbescheluning (Motor 2 ein)
}
}