Bahnübergang: Schranke und Andreaskreuz mit Arduino

So baust du einen Bahnübergang mit Schranke und Andreaskreuz mit dem Arduino-Board. Als Antrieb verwenden wir einen Servo-Motor.

Funktionsweise

Sobald ein Zug über einen Magnetschalter fährt, blinkt die rote LED über dem Andreaskreuz und die Schranke schließt sich durch einen Servo-Motor, der unter der Schranke an einer Zugstange mit Feder zieht. Der Zug überquert den Bahnübergang. Überfährt der Zug den zweiten Magnetschalter, der Servo-Motor öffnet die Schranke wieder.

Phasen

  1. Untätig (Engl.: Idle), warten auf Signal vom ersten Magnetschalter
  2. Andreaskreuz blinkt für eine bestimmte Zeit
  3. Schranke schließt sich, warten auf Signal vom zweiten Magnetschalter
  4. Schranke öffnet sich

Schaltung und Aufbau

Die Schaltung besteht aus einem Arduino-Board, zwei Magnetschaltern, die auf der einen Seite mit dem GND und auf der anderen Seite mit zwei digitalen Eingangspins (10 und 12) des Arduinos verbunden sind. Eine LED ist über einen 220 Ohm-Widerstand mit dem Pin 2 verbunden. Ein Servo-Motor ist mit GND, 5V und Pin 9 verbunden. Darüber hinaus gibt es einen Lautsprecher (z.B. einen Piezo oder Transducer) am Pin 8 für eine akustische Ausgabe.

Anmerkung: Wenn der Servo lange im Einsatz sein soll, lohnt es sich, einen besseren Servo zu verwenden. (Alternativ kann die Zugfunktion auch mit einem Elektromagneten* realisiert werden. Dazu muss der Strom des digitalen Pins allerdings verstärkt werden.)

Bauteile

Arduino-Code

#include <Servo.h>

int ledPin = 2;
int servoPin = 9;
int magnetSensor1Pin = 10;
int magnetSensor2Pin = 12;

int speakerPin = 8;

int myState = 0; // speichert die aktuelle Programmphase
Servo myServo;  // erstellt Servo-Objekt

int servoPositionOffen = 30; // anpassen je nach Servo
int servoPositionGeschlossen = 120; // anpassen je nach Servo

int servoPosition;
int servoGeschwindigkeit = 2;

int blinkZeit = 5000; // Blinkzeit vor Schrankenschließung
long timer = 0;

void setup() {
  myServo.attach(servoPin); // initiert den Servo
  pinMode(ledPin, OUTPUT);
  pinMode(magnetSensor1Pin, INPUT_PULLUP);
  pinMode(magnetSensor2Pin, INPUT_PULLUP);

  // Servo auf Anfangsposition stellen
  servoPosition = servoPositionOffen;
  myServo.write(servoPosition);
  delay(1000);
}

void playTone(){
  if (millis() % 2000 > 1800) tone(speakerPin,3000);
  else noTone(speakerPin);  
}

void blinkLED() {
  if (millis() % 2000 > 1000) digitalWrite(ledPin, HIGH);
  else digitalWrite(ledPin, LOW);
}

void loop() {
  switch (myState) {
    case 0: // Untätig, warten auf ersten Magnetschalter
      digitalWrite(ledPin, LOW);
      if (digitalRead(magnetSensor1Pin) == LOW) {
        myState++;
        timer = millis(); // timer wird gestartet
      }
      break;
    case 1: // Andreaskreuz blinkt
      if (timer + blinkZeit < millis()) myState++; // wenn blinkZeit überschritten ist, Schranke schließen
      blinkLED();
      playTone();
      break;
    case 2: // Schranke schließt sich, warten auf zweiten Magnetschalter
      if (servoPosition <= servoPositionGeschlossen) servoPosition = servoPosition + servoGeschwindigkeit;
      if (digitalRead(magnetSensor2Pin) == LOW) myState++;
      blinkLED();
      break;
    case 3: // Schranke öffnet sich
      if (servoPosition <= servoPositionOffen) myState = 0;
      else servoPosition = servoPosition - servoGeschwindigkeit;
      blinkLED();
      break;
  }
  myServo.write(servoPosition);
  delay(20);
}

Ich würde mich freuen, wenn du diesen Beitrag bewerten würdest :-)

Durchschnittliche Bewertung 4.3 / 5. Anzahl Bewertungen: 4

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Es tut uns leid, dass der Beitrag für dich nicht hilfreich war!

Lasse uns diesen Beitrag verbessern!

Wie können wir diesen Beitrag verbessern?

Ich hoffe, der Beitrag hilft dir weiter. Und falls du weitere Fragen hast, stelle sie gern hier im Arduino-Forum.

Du willst noch tiefer in die Materie einsteigen? Dann präsentiere ich dir die neuen E-Books von StartHardware:

  • 20 Lektionen
  • Projektbasiert und kurzweilig
  • Aus den Erfahrungen unzähliger Workshops
  • Sofortiger Download

  • Die beliebtesten Projekte von StartHardware
  • Mit Code, Schaltplan und Erklärungen
  • Fachwissen-Kapitel
  • Sofortiger Download


Willst du lieber ein Buch zum Anfassen? Dann werde mit diesem hier zum Arduino-Experten! Arduino: Kompendium: Elektronik, Programmierung und Projekte* – Damit lernst du alle Tricks!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.