Umbau Faller Turm B-325 „Rust“, EuropaPark
Auf unserer Modellbahn-Kirmes findet man den Faller Turm „Rust“ (Artikelnummer B-325), bekannt aus dem Europa Park in Rust. Die Steuerung des Modells ist dabei denkbar einfach. Die Gondel des Turms ist an zwei Seilen befestigt, die über Umlenkrollen von einem Motor nach oben gezogen wird. Erreicht die Gondel den höchsten Punkt, ergibt sich ein Widerstand, der Motor schaltet durch den Widerstand (ohne Elektronik) die Fahrtrichtung um und die Gondel wird nach unten gelassen.
Vom Prinzip her also eine recht pragmatische Steuerung. Allerdings kann man damit nicht viel Variationen einbauen und es passiert in letzter Zeit immer wieder, dass der Motor nicht schaltet und damit der Turm komplett ausfällt. Dann ist ein manuelles Eingreifen erforderlich. Dies soll verhindert werden. Daher wird der Turm wie folgt umgebaut:
- Der Turm bekommt in der Gondel eine Innenbeleuchtung mit Goldcaps
- Der alte Faller-Motor wird durch einen Schrittmotor ersetzt
- Die Überprüfung der Stellung der Gondel soll durch mehrere Aspekte überprüft werden (der neue Motor würde im Fehlerfall das Seil abreisen)
- Status-LEDs sollen den Status des Turms anzeigen
Test-Programmcode für einen Schrittmotor mit Ansteuerplatine
#include <Stepper.h> // Hinzufügen der Programmbibliothek.
int SPU = 2048; // Schritte pro Umdrehung.
Stepper Motor(SPU, 3,5,4,6); // Der Schrittmotor erhält die Bezeichnung "Motor" und es wird angegeben an welchen Pins der Motor angeschlossen ist.
void setup() //Hier beginnt das Setup.
{
Motor.setSpeed(5); // Angabe der Geschwindigkeit in Umdrehungen pro Minute. Hier Werte von 1 - 13
}
void loop() {
Motor.step(2048); // Der Motor macht 2048 Schritte, das entspricht einer Umdrehung.
delay(1000); // Durch diese Pause bleibt der Motor nach der Drehung für eine Sekunde stehen.
Motor.step(-2048); // Der Motor macht durch das Minuszeichen 2048 Schritte in die andere Richtung.
delay(1000); // Durch diese Pause bleibt der Motor nach der Drehung für eine Sekunde stehen.
}
Verkabelung des Schrittmotors an den Arduino
IN1 der Motorsteuerplatine wird an Pin6 angeschlossen
IN2 der Motorsteuerplatine wird an Pin5 angeschlossen
IN3 der Motorsteuerplatine wird an Pin4 angeschlossen
IN4 der Motorsteuerplatine wird an Pin3 angeschlossen
GND der Motorsteuerplatine wird an einem GND Pin am Arduino-Board angeschlossen
VCC der Motorsteuerplatine wird an den 5V Pin am Arduino-Board angeschlossen
Ist die Gondel am Startpunkt?
Der wichtige Punkt in dem Programm ist: Ist die Gondel am Startpunkt, also in der Bodenstation? Denn nur dann kann ein verlässliches Zählen der Umdrehungen des Motors beginnen, bis die Gondel oben ist, quasi ein definierter Zustand. Dieser Zustand könnte z.B. durch einen Reedkontakt und einem Magneten erfolgen.
Da unsere Gondel aber Licht haben soll und wir dies über „GoldCaps“ lösen, da wir kein Kabel an der Gondel haben wollen, müssen diese GoldCaps an der Bodenstation geladen werden. Der Ladestrom kann über weitere Bauteile überwacht werden. Lädt also die Lichtsteuerung des Turms, dann ist klar, die Gondel ist am Boden. Von nun an kann der Schrittmotor präzise seine Runden zählen.
Überwachung des Ladestroms mit Stromstärkesensor (ACS712)
Hier wird erklärt, wie der fertige Stromstärkensensor anzuschließen ist. Der Sketch – auch von der verlinkten Seite – sieht dabei so aus:
int Sensor = A0; // Der Stromstärkesensor wird am Pin A0 (Analog "0") angeschlossen.
int VpA = 185; // Millivolt pro Ampere (100 für 20A Modul und 66 für 30A Modul)
int sensorwert= 0;
int Nullpunkt = 2500; // Spannung in mV bei dem keine Stromstärke vorhanden ist
double SensorSpannung = 0;
double Ampere = 0;
void setup()
{
Serial.begin(9600); // Serielle Verbindung starten, damit die Daten am Seriellen Monitor angezeigt werden.
}
void loop()
{
sensorwert = analogRead(Sensor);
SensorSpannung = (sensorwert / 1024.0) * 5000; // Hier wird der Messwert in den Spannungswert am Sensor umgewandelt.
Ampere = ((SensorSpannung - Nullpunkt) / VpA); // Im zweiten Schritt wird hier die Stromstärke berechnet.
// Ausgabe der Ergebnisse am Seriellen Monitor
Serial.print("Sensorwert = " ); // Ausgabe des reinen Sensorwertes
Serial.print(sensorwert);
Serial.print("\t Sensorspannung in mV = "); // Zeigt die Sensorspannung an
Serial.print(SensorSpannung,3); // Die "3" hinter dem Komma erzeugt drei Nachkommastellen
Serial.print("\t Ampere = "); // shows the voltage measured
Serial.println(Ampere,3); // Die "3" hinter dem Komma erzeugt drei Nachkommastellen
delay(1000);
}