Leben/Meinung / Relay Board (µC controlled 6 channel 2 button)


In Elektronikwerkstätten muss so gut wie immer irgendetwas geschaltet werden!
Ob es jetzt Spannungen von Netzteilen, bestimmte Signale, I/Os von Controllern oder was auch immer ist, die Möglichkeiten sind nahezu unendlich.

Einige meiner Netzteile lassen sich per GPIB steuern, aber spätestens bei separaten Netzteilen oder gar Akkus oder Batterien hört es da leider schon wieder auf.

So kam mir die Idee, ein kleines Board mit einigen Relais zu entwickeln und aufzubauen, dass ich sowohl manuell als auch automatisiert steuern kann.
Als Controller arbeitet hier ein ESP8266-µC, der über ein ULN2003A-Darlington-Array die Relais und ihre zugehörigen Status-LEDs schaltet.
Versorgt wird es über die 24Vdc-Modulversorgung auf meiner Werkbank, die 5Vdc für den µC werden über einen L7805CV-Regler auf dem Board selbst generiert. Der Anschluss für die Versorgung über JST XH-Header ist bei meinem Board doppelt vorhanden, um die Modulversorgung zu weiteren Boards durchschleifen zu können.


Zusätzlich zu den Realis wollte ich auch zwei Buttons auf dem Board haben, um auch direkt ohne Software-Kommunikation schalten zu können. Abzüglich der zwei Inputs die ich dafür brauche, und den Pins für RX und TX, hatte ich noch sechs gut nutzbare GPIOs für die Relais frei. Zugegeben mit einem kleinen Trick, der analoge Input wird für Button No.2 verwendet. Aber auch analoge Eingänge lassen sich für digitale Signale nutzen, weil die LOW-Value irgendwo nahe bei Null und die HIGH-Value dementsprechend nahe beim Maximum liegt, und sich die beiden Zustände so gut unterscheiden lassen.

Das Board bringt sein eigenes Web Interface mit. Auf der Sub Page switching wird oben links der aktuelle Status der Buttons angezeigt. Direkt darunter lassen sich die Relais alle über den roten Status-Button manuell umschalten, und vor allem über den grauen Button dahinter auch pulsen. Die Pulslänge dazu wird in der Software als Variable eingestellt. Im ausgeschalteten Zustand pulsen sie ein, aber im eingeschalteten Zustand pulsen sie auch aus.
Neben den Relais finden sich die Gruppen, welche über den Klick auf den grauen Button dahinter aufgerufen werden können.


Um die Gruppen und die Zuordnung der Buttons zu je einer Gruppe einzustellen, genügt ein Klick auf den Link settings unten links.Bei den Buttons wird je einfach die Nummer der Gruppe gewählt, zu der sie wechseln sollen. Bei den Gruppen lassen sich die Zustände der Relais über die violetten Buttons setzen, und dann über den grauen Button dahinter für die jeweilige Gruppe speichern. Der Button färbt sich zur Bestätigung kurz orange.
Über den Link switching unten links geht es zurück zur vorherigen Sub Page.

Neben dem Web Interface, das über das Websocket-Protokoll mit dem Controller kommuniziert, stehen auch noch GET-Request und UART auf 3.3V-Level zur Verfügung. Letztes ist bei mir als JST XH-Header auf dem Board vorhanden.

Über strukturierte Comammds an dem Websocket der Boards, der unter /websocket erreichbar ist, lassen sich Zustände abfragen, Relais schalten, Gruppen auswählen und ändern, und Buttons ändern:
- state State der Buttons und Relais als 0/1-Ziffernfolge
- relay:#:0 Relais mit der Nummer # ausschalten
- relay:#:1 Relais mit der Nummer # einschalten
- relay:#:t Relais mit der Nummer # umschalten
- relay:#:p Relais mit der Nummer # pulsen
- button:#X:#Y Zuordnung der Gruppe mit der Nummer #Y dem Button mit der Nummer #X
- group:set:#:ABCDEF Zuordnung der Relais A bis F der Gruppe mit der Nummer als 0/1-Ziffernfolge#
- group:get:# Aufruf der Gruppe mit der Nummer #

Bei jeder Änderungen der Buttons oder Relais überträgt die Software den aktuellen Status. Wenn die Zuordnung der Gruppen verändert werden, gibt es auch entsprechende Rückmeldungen:
- buttonState:XY Status der Buttons X und Y als 0/1-Ziffernfolge
- relayState:ABCDEF Status der Relais A bis F als 0/1-Ziffernfolge
- groupChangeButton:#X:#X Zuordnung der Gruppe mit der Nummer #Y zum Buttom mit der Nummer #X
- groupChangeRelay:#:ABCDEF Zuordnung der Relais A bis F zur Gruppe mit der Nummer # als 0/1-Ziffernfolge

GET-Requests sind ähnlich aufgebaut, bringen aber andere Commands mit sich:
- /state State-Command der Buttons und Relais als 0/1-Ziffernfolge, Plain Text
- /change Change-Command in Kombination mit den Parametern off und on mit den Nummern der Relais als Values
  (zum Beispiel /change?off=135&on=246)
- /group Group-Command in Kombination mit dem Parameter number mit der Nummer der Gruppe als Values
  (zum Beispiel /group?number=16)
- /switching Sub Page zum direkten Switching der Relais und der Gruppen
- settings Sub Page zur Ruweisung der Butttons und Relais zu Gruppen

Zuletzt bleiben noch die Command über UART, welche denen über GET-Request sehr ähnlich sind:
- /state State-Command der Buttons und Relais in Kombination mit den Parametern &button und &relay als 0/1-Ziffernfolge
  (zum Beispiel state&button&relay)
- /change Change-Command in Kombination mit den Parametern &off und &on mit den Nummern der Relais als Values
  (zum Beispiel /change&off=135&on=246)

Wie beim Websocket auch schon gibt es bei Änderungen der Buttons oder Relais den aktuellen Status als Message:
- buttonChange:XY Status der Buttons X und Y als 0/1-Ziffernfolge
- relayChange:ABCDEF Status der Relais A bis F als 0/1-Ziffernfolge

Die UART-Schnittstelle soll größtenteils der Kommunikation mit anderen Geräten dienen, die nicht IP-fähig sind. Deren Command-Sets lassen sich nämlich in den meisten Fällen anpassen, so dass sie auch auf die Messages des Relay Boards reagieren können.


Den Großteil der automatisierten Abläufe werde ich wahrscheinlich per Websocket realisieren. Als erstes habe ich mir zum Beispiel ein Addon für mein Stream Deck programmiert, dass die States der Relais anzeigt, sie direkt über die Buttons umschaltbar macht, und auch eine Auswahl der Gruppen zulässt.
Gerade bei Langzeitversuchen und selbstständig laufenden Testaufbauen wird das Board viel Anwendung finden. Dadurch, dass jedes Relais über eine NC/NO-Kontaktkombination verfügt, von der alle drei Anschlüsse je auf zwei Pin-Headern und zwei Pin-Sockets liegen, ist es wie all meine Adapter sehr einfach in Aufbauten zu integrieren

RelayBoard(software).zip ⇐ Software

RelayBoard(schematic).pdf ⇐ Schematics