Hoe bedoel je? De pendelmodule is een apart baanstuk. De polariteit tussen de beide eind stukken wordt nl omgedraaid na de wachttijd. Elke andere trein die in het tussenstuk zit staat stil gedurende de wachttijd en zal dan ook de andere kant op gaan rijden .
Zelf ben ik geen voorstander dit soort printen gezien prijs en beperking. Met een simpele Arduino nano van €3 en wat randcomponenten van dubbeltjes ben je er ook. Je kunt meerdere stops bedenken, langzaam optrekken en remmen, vaste of random wachttijd, detectie toevoegen. Maar als de print werkt…En zoals Bas ook zei, hulp is hier genoeg.
// Constants voor pinnenconst int lightSensorPin1 = 2; // Lichtsluis station 1 (digital)const int lightSensorPin2 = 3; // Lichtsluis station 2 (digital)const int relayPin = 4; // Relais uitgang (digital)const int pwmPin = 5; // PWM uitgang (analog)const int accelPotPin = A0; // Aanloopvertraging potentiometerconst int decelPotPin = A1; // Remvertraging potentiometerconst int waitPotPin = A2; // Wachttijd potentiometer// Variabelenint currentSpeed = 0;int targetSpeed = 0;bool movingForward = true;unsigned long lastUpdateTime = 0;unsigned long waitStartTime = 0;bool waiting = false;// Trein toestandenenum TrainState { MOVING_TO_STATION2, WAITING_AT_STATION2, MOVING_TO_STATION1, WAITING_AT_STATION1};TrainState currentState = MOVING_TO_STATION2;void setup() { // Pin modes instellen pinMode(lightSensorPin1, INPUT_PULLUP); pinMode(lightSensorPin2, INPUT_PULLUP); pinMode(relayPin, OUTPUT); pinMode(pwmPin, OUTPUT); // Seriële communicatie voor debugging Serial.begin(9600); // Start richting station 2 digitalWrite(relayPin, HIGH); // Richting station 2 movingForward = true;}void loop() { unsigned long currentTime = millis(); // Lees potentiometers int acceleration = map(analogRead(accelPotPin), 0, 1023, 50, 500); int deceleration = map(analogRead(decelPotPin), 0, 1023, 50, 500); int waitTime = map(analogRead(waitPotPin), 0, 1023, 5, 60) * 1000; // seconden naar milliseconds // Lichtsluis detectie bool atStation1 = digitalRead(lightSensorPin1) == LOW; bool atStation2 = digitalRead(lightSensorPin2) == LOW; // State machine switch (currentState) { case MOVING_TO_STATION2: targetSpeed = 255; // Volle snelheid vooruit if (atStation2) { currentState = WAITING_AT_STATION2; waitStartTime = currentTime; waiting = true; targetSpeed = 0; Serial.println("Aangekomen bij station 2"); } break; case WAITING_AT_STATION2: targetSpeed = 0; if (currentTime - waitStartTime >= waitTime && !waiting) { currentState = MOVING_TO_STATION1; digitalWrite(relayPin, LOW); // Richting station 1 movingForward = false; Serial.println("Vertrek van station 2"); } if (waiting && currentTime - waitStartTime >= 1000) { waiting = false; // Wacht tot trein volledig stil staat } break; case MOVING_TO_STATION1: targetSpeed = 255; // Volle snelheid achteruit if (atStation1) { currentState = WAITING_AT_STATION1; waitStartTime = currentTime; waiting = true; targetSpeed = 0; Serial.println("Aangekomen bij station 1"); } break; case WAITING_AT_STATION1: targetSpeed = 0; if (currentTime - waitStartTime >= waitTime && !waiting) { currentState = MOVING_TO_STATION2; digitalWrite(relayPin, HIGH); // Richting station 2 movingForward = true; Serial.println("Vertrek van station 1"); } if (waiting && currentTime - waitStartTime >= 1000) { waiting = false; // Wacht tot trein volledig stil staat } break; } // Snelheid geleidelijk aanpassen if (currentTime - lastUpdateTime >= 50) { // Update elke 50ms lastUpdateTime = currentTime; if (currentSpeed < targetSpeed) { // Versnellen currentSpeed += min(acceleration / 20, targetSpeed - currentSpeed); } else if (currentSpeed > targetSpeed) { // Vertragen currentSpeed -= min(deceleration / 20, currentSpeed - targetSpeed); } // PWM signaal schrijven analogWrite(pwmPin, currentSpeed); // Debug informatie Serial.print("State: "); Serial.print(currentState); Serial.print(" | Speed: "); Serial.print(currentSpeed); Serial.print(" | Wait: "); Serial.print(waitTime / 1000); Serial.println("s"); } delay(10); // Kleine vertraging voor stabiliteit}
Denk dat ik ipv een transistor een mosfet zou gebruiken.