USB Relaiskarte von Ulrich Radig

Wer im Internet nach einer USB-Relaiskarte sucht (damit kann man Schalter per USB auslösen, beispielsweise um einen Drucker vom Computer aus vom Netz zu trennen, irgendwelche Lichter zu schalten oder vielleicht auch Kaffee zu kochen), der wird früher oder später auf das entsprechende Selbstbau-Projekt von Ulrich Radig stoßen. Sie bietet sechs einzelnd schaltbare Relais (bis 8A/250 VAC) und vier per Optokoppler getrennte Eingänge bis max. 48V an. Die Platine kann man in seinem Shop bestellen, den Rest gibt's bei Reichelt oder Conrad. Alles in allem muss man mit etwa 50 EUR rechnen, wobei die teuersten Teile die Platine, die Relais, das Netzteil und der Versand sind. Und so sieht's dann aus:

USB-Relaiskarte von Ulrich Radig

USB-Relaiskarte von Ulrich Radig

Im Gegensatz zum Original habe ich ein paar kleine Änderungen vorgenommen. Die Relais stecken auf Sockeln von Typ "FIN 95.15.2", damit man sie zum Experimentieren am Treiber abnehmen kann und beim Löten nicht beschädigt. Da der eigentlich vorgesehene Relaistyp bei Reichelt nicht verfügbar war, habe ich den Typ "FIN 41.61.9 12V" verwendet. Der unterschied ist im wesentlichen nur, dass das Original zwei parallele Schalter besitzt und dieser hier nur einen. Das ist aber nicht schlimm, da der zweite Schalter vom Platinenlayout nicht verwendet wird. Des Weiteren habe ich gelbe statt rote LEDs für die Eingänge verwendet und dem Darlington-Array (ULN 2003A) einen Sockel spendiert, da es beim ersten mal ein wenig empfindlich auf die Hitze des Lötkolben reagierte ;-). Potentiellen Nachbauern würde ich nahelegen, die Power-LED ebenfalls durch eine andersfarbige zu ersetzen, um sie deutlicher von der Relais-Kontroll-LED unterscheiden zu können. Dazu muss der entsprechende Widerstand angepasst werden.

Update:
Neben dem ULN 2003A hat sich auch die Feinsicherung als problematisch herausgestellt. Jeder noch so kleine Kurzschluss beim Basteln zerstört diese. Ist ja auch ihre Aufgabe, aber sie jedesmal auszulöten ist ganz schön nervig. Als Lösung bietet es sich entweder an während der Entwicklung die Sicherung zu überbrücken (dann aber bitte nur mit einer 9V-Batterie und nicht mit einem Netzteil als Stromquelle arbeiten), oder die Anschlüsse durch Steckkontakte zu ersetzen und darüber mit einer herkömmlichen gefassten Feinsicherung zu verbinden. Letzteres funktioniert hier ziemlich gut :-)

Die rudimentäre Firmware habe ich ein wenig modifiziert, die Details sind in Ulrich's Forum beschrieben. Mit dieser modifizierten Firmware erfolgt die Verwendung wie folgt:

Die Relaiskarte identifiziert sich bei Linux als serielle USB-Schnittstelle /dev/ttyACM0. Unter Windows wird es wohl COM0 oder etwas in der Art sein. Die Steuerung erfolgt über einzelne Bytes, die an diese Schnittstelle gesendet bzw. gelesen werden. Ich habe dazu die pySerial-Bibliothek verwendet.

Zunächst muss das Gerät initialisiert werden, in dem 16 mal hintereinander das Byte 0xC0 (Binär: 11000000) gesendet wird. Bis dahin akzeptiert es keine Eingaben, um Problemen mit der automatischen Hardwareerkennung vorzubeugen. Anschließend ist die Bedeutung der einzelnen gesendeten Bits die folgende:

1 1 1 1 1 1 1 1
8 7 6 5 4 3 2 1

Die Bits 1 bis 6 steuern die einzelnen Relais. Eine 1 an der entsprechenden Position aktiviert das Relais, eine 0 deaktiviert es. Das 7. Bit ändert dies in einen "Toggle"-Befehl um, wenn es aktiviert ist. Der Befehl 01000000 macht also gar nichts, der Befehl 01111111 ändert den Zustand aller Relais. Das 8. Bit fordert von der Karte eine Statusmeldung an.

An den PC gesendet werden einzelne Bytes, deren Bits entwedern den Status der Eingänge (8. Bit = 0) oder der Relais (8. Bit = 1) angeben. Diese Ausgabe erfolgt entweder automatisch, wenn sich der Zustand eines Eingangs ändert, oder explizit wenn eine Statusanfrage angefordert wurde (8. Bit = 1 im gesendeten Byte).

Comments

anstelle der picofuse kann ich eine multifuse empfehlen. bei reichelt z.b. zu finden unter PFRA 050. mir sind durch mein netzteil beim einschalten gleich mal zwei abgeraucht :) eventuell wegen der hohen tripzeit eine kleinere wählen.

Hab die Relaiskarte aufgebaut und mit deiner Firmare geflasht. Die Karte soll (wenn sie denn mal funktioniert) an einem Debian System seine Arbeit verrichten. Ich wollte dein Script gerade zum Testen hernehmen, doch leider bekomme ich folgende Meldung:

[code]
addeb010:~# ./relaisboard_py_cybso.py
File "./relaisboard_py_cybso.py", line 237
except Exception as ex:
^
SyntaxError: invalid syntax
[/code]

Da ich von python kein plan habe, komme ich damit nicht weiter. könntest du mir ein Tip geben wo es dran liegt? Python und die pySerial-Bibliothek sind Installiert

(Diese Meldung ist auch bei Ulrich im Forum gepostet!)