Effekte steuern mit VB und MicroController (> µC)
Oftmals besteht der Wunsch, mit unserem Programm nicht nur die Modellbahn zu
steuern, sondern auch andere Dinge wie z.B. eine Lampe oder eine Windmühle ein-/ausschalten usw.
Mit Hilfe von Magnetartikel-Decodern kann man schon einiges erreichen, ein
Nachteil dabei aber ist, dass viele Decoder die Schaltzeit begrenzen, d.h. nach
wenigen Sekunden wird der Ausgang deaktiviert. Folglich nur für kurzzeitige
Effekte nutzbar.
Bei länger dauernden Schaltzeiten kann man mit einem bistabilen Relais einen
zeitlich unbegrenzten Zeitraum erreichen, benötigt jedoch einen zweiten Decoderausgang
um das Relais zurückzusetzen.
Effektiver und vielseitiger ist die Verwendung einer seriellen Schnittstelle
(RS232 / V24) in Verbindung mit einem µC wie z.B einem
ATMega 8 und einer nachfolgenden
Relaiskarte.
Der µC ist in einem 28poligen DIL-Gehäuse untergebracht und bietet die
Möglichkeit bis zu 20 Relais anzusteuern.
Die u.a. Relaiskarte kann direkt vom µC angesteuert werden, zusätzlich
Transistoren sind nicht erforderlich.
Neuere PCs bieten kaum noch serielle Schnittstellen an, dafür jedoch
USB-Schnittstellen in nahezu unbegrenzter Zahl.
USB to TTL-Konverter gibt es in verschiedensten Ausführungen, teilweise
mit Kabel zum direkten Anschluss.(z.B.: CH340G-Profilic)
Allen gemeinsam sind die genormten Ausgänge hin zum µC, als da sind
+ 5V
TXD
RXD
GND
Manche Konverter besitzen noch weitere Ausgänge, welche in unserem Fall jedoch
nicht benötigt werden.
Hinweis !
Eine herkömmliche serielle Schnittstelle darf keinesfalls direkt mit dem µC
verbunden werden, da diese mit einem anderen Signalpegel arbeitet.
In diesem Fall muss ein Pegelkonverter wie z.B. ein MAX232
dazwischengeschaltet werden.
Die bereits o.e. USB to TTL-Konverter bieten beides:
- eine weitere serielle Schnittstelle und
- den zum µC passenden Signalpegel
Die folgende Zeichnung zeigt den prinzipiellen Aufbau
zu beachten ist, dass Sendeleitung (TXD) und Empfangsleitung (RXD) gekreuzt
werden,
d.h., die Sendeleitung TXD des PCs wird auf den Eingang RXD des µC geführt und
umgekehrt.
Mit dem Anschluss des µC an +5V und GND sind alle erforderlichen Verbindungen
hergestellt.
Ist der Konverter in den PC eingesteckt findet man unter Arbeitsplatz >
Eigenschaften > Hardware > Gerätemanager > Anschlüsse (COM und LPT) die vom
PC zugeordnete Nummer der Schnittstelle.
In meiner Anwendung steuere ich u.a. den Drehkran von Märklin und die
Drehscheibe
7186 über die o.a. Schaltung.
Die Hebe- und Drehbewegungen sind temporär, der Magnet dagegen bleibt für
längere Zeit aktiv.
Um den Magnet dauerhaft aktiv zu halten nutze ich die Variable MagnetStatus:
Variable deklarieren |
Dim MagnetStatus As Boolean |
Die Funktionen werden mittels 5 Buttons (btnKran) ein- / ausgeschaltet.
Diese sind mit Index = 0 bis Index = 5 versehen.
Funktion(en) einschalten |
Private
Sub btnKran_MouseDown(Index As Integer, Button As Integer, Shift As Integer,
x As Single, y As Single) Select Case Index Case 1 ' --- heben V24Kran.Output = "C5_0" Case 2 ' --- rechts drehen V24Kran.Output = "C4_0" Case 3 ' --- senken V24Kran.Output = "C3_0" Case 4 ' --- links drehen V24Kran.Output = "C2_0" Case 5 ' --- Magnet ein / aus If MagnetStatus = False Then ' --- wenn AUS V24Kran.Output = "C1_0" ' --- einschalten MagnetStatus = True ' --- Status auf EIN ändern Else ' --- wenn EIN V24Kran.Output = "C1_1" ' --- ausschalten MagnetStatus = False ' --- Status auf AUS ändern End If End Select End Sub |
Da die ersten 4 Funktionen (heben, senken, links drehen und rechts drehen)
nur für jeweils kurze Zeit aktiv sind, werden sie beim 'Loslassen' des Buttons
wieder deaktiviert,
Funktion(en) ausschalten |
Private
Sub btnKran_MouseUp(Index As
Integer, Button As Integer, Shift As Integer, x As Single, y As Single) Select Case Index Case 1 ' --- heben V24Kran.Output = "C5_1" Case 2 ' --- rechts drehen V24Kran.Output = "C4_1" Case 3 ' --- senken V24Kran.Output = "C3_1" Case 4 ' --- links drehen V24Kran.Output = "C2_1" End Select End Sub |
Wie man erkennen kann, wird der Magnet im Mouse_Up-Ereignis nicht
aufgeführt, da er beim Loslassen der Taste weiterhin aktiv bleiben muss.
Sein jeweiliger Zustand wird in der Variablen MagnetStatus gespeichert
und erst beim nächsten Tastendruck geändert.
Als zu übertragendes Kommando habe ich die Portbezeichnungen des µC gewählt,
selbstverständlich kann hier jede andere Art von Kommando übertragen werden (der
µC muss selbstverständlich entspr. programmiert werden).
Was noch auffallen könnte:
die einschalte-Kommandos setzen den jeweiligen Port auf '0' !
Das liegt an der verwendeten Relaiskarte - diese aktiviert das zugehörige Relais
bei '0'-Pegel.
Um die Kommandos des PC ' verstehen' zu können muss der µC entspr. programmiert
werden:
das Programm des µC |
[...] Dim
Zeichen As String * 3 |
Die Möglichkeit "Ping" dient nicht der direkten Steuerung des µC
sondern veranlaßt diesen, eine Antwort zurück zusenden.
Indem man die Antwort auswertet, kann man die Erreichbarkeit des µC und die
ordnungsgemäße Funktion der Verbindung prüfen.
Dazu wird im PC-Programm ein Label (lblPing) angelegt, welches dann die
Antwort des µC anzeigt.
Verbindung zum µC prüfen |
Private
Sub btnKranTest_Click() V24Kran.Output = "Ping" ' --- zum µC senden lblPing.Caption = V24Kran.Input ' --- Antwort des µC ausgeben End Sub |
Ein kleiner Nachteil dieser Art der Steuerung ist, dass zur gleichen Zeit immer
nur e i n e Funktion ausgeführt werden kann.
Während bei der Steuerung des Krans über das zugehörige Stellpult heben
und drehen zusammen erfolgen können, ist das hier nicht möglich.
die einzelnen Bauteile
USB to TTL-Konverter CH340G-Profilic
Preis: ca. 5 EUR
AVR Atmel 8-16
Preis: ca. 2 EUR
Relaiskarte
Preis: 3 EUR (1 Relais) bis 12 EUR (16 Relais)
(Stand 2019)