So. 28. Februar 2021 um 7:07

DIY: Mute Button für Zoom, WebEx, Jitsi, BigBlueButton etc. selbst gebaut

von Yves Jeanrenaud 0 Kommentare

Viele von uns können seit gut einem Jahr sehr vieles fast nur noch online erledigen. In Büro und Uni, Schule und Betrieb, in Studium und Arbeit hat darum die Videokonferenz längst Einzug gehalten. Ob Cisco WebEx, Zoom, Skype oder Microsoft Teams, aber auch Opensource-Lösungen wie Jitsi und BigBlueButton sind für viele nun schon (fast) alltäglich geworden. Gerade wenn man mehrere Programme einsetzt, ist es manchmal nicht so leicht, den Überblick über deren Tastenkombinationen zu behalten. Und auch wenn man eine Bildschirmpräsentation hält, sieht man ja oftmals die Schaltflächen der Video-Software nicht mehr.

 

Ich habe darum eine Lösung gesucht und schlussendlich eine selbst gebaut: Den Mute Button.

Das ist eine grosse Taste, die man drücken kann, um die Stummschaltung in der Videotelefon-App auszuschalten. Dann leuchtet die Taste gut sichtbar auf und zeigt so auf einen Blick an, dass das Mikrofon aktiv ist. Drückt man wieder drauf, erlischt nicht nur die Beleuchtung der Taste, sondern das Mikro wird auch wieder Stumm geschaltet. Und hält man die Taste gedrückt, ist die Stummschaltung bis zum Loslassen aufgehoben.

 

Hierfür emuliert mein Mute Button eine herkömmliche USB-Tastatur und funktioniert so unabhängig vom Betriebssystem. Egal ob Apple MacOS X, Microsoft Windows 10 oder Debian Linux – alles ist möglich und meist ohne zusätzliche Treiber sofort lauffähig.

 

Damit das Ganze nicht nur mit einer Videotelefonie-Software funktioniert, ist eine kleine Taste seitlich neben dem USB-Kabel angebracht, mit der zwischen Zoom, WebEx, BigBlueButton und Jitsi gewechselt werden kann. Was ausgewählt wurde, wird per Sprachausgabe der Produktname angesagt. Der C-Quellcode in Form einer Arduino-Projektdatei ist ebenfalls frei zur Verfügung gestellt. Wer will, kann also auch einfach die Tastenkombination ändern oder Videokonferenz-Produkte entfernen, die gar nicht benötigt werden.

 

Und das Beste: Diese Lösung ist ganz einfach und mit verhältnismässig wenig Aufwand sowie sehr geringen Kosten selber zu bauen! Die Anleitung und den passenden Code findet ihr nun hier im Folgenden.

Beschreibung des Mute Buttons

Der Mute Button besteht aus einem programmierbaren Microcontroller, einer grossen, beleuchteten Taste, einem Verstärker und einem Lautsprecher sowie einer weiteren, kleinen Taste. Als Microcontroller kommt ein ATmega32U4 von ATMEL zum Einsatz, der vielen vermutlich aus dem Arduino Leonardo Board bekannt sein dürfte. Weil der Leonardo etwas gross ist für unsere Zwecke, bedienen wir uns eines Arduino Pro Micro. Dieser hat den Charme, dass er einerseits recht simpel auf 16 MHz stabil hochgetaktet werden kann und gleichzeitig 5 V Ausgangsspannung liefert. Zudem verfügt er mit dem ATmega32U4 über die für uns wichtige USB HID-Funktion. HID steht für Human Interface Device und ist eine Geräteklasse für USB-Geräte, die Eingaben an Computern erlauben. Trackpads, Mäuse, Tastaturen, aber auch Joysticks und Gamepads melden sich so am USB-Host an.

 

Der Mikroprozessor ATmega32U4 kann nun also auch so tun, als wäre er ein USB-Eingabegerät. Genauer gesagt: Eine USB-Tastatur und/oder eine USB-Maus, wobei uns Letzteres nicht interessieren soll heute.

 

 

Dieser Chip ist, entsprechend programmiert, fast ein reines Eingabegeräte am USB-Host, vom Debugging-Kanal via serieller Schnittstelle mal abgesehen. Das bedeutet auch, dass dieses selbstgebastelte Gadget keine Ahnung hat, wie der Zustand der Stummschaltung in der Videokonferenz gerade ist und es lediglich stumpf eine Tastenkombination schickt. Es ist also wichtig, dass zu Beginn die Telefonie-Software auf Stumm gestellt ist, da sonst die Zuordnung des LED-Status nicht mehr stimmt.

 

 

Um eine grosse, beleuchtete Taste zu bekommen, nutzen wir einen 60 mm Button, wie sie früher gerne an Arcade-Maschinen verbaut wurden. Ich habe mich für die prägnante Signalfarbe Rot entschieden. Es gibt die Tasten aber in verschiedenen Ausführungen und Farbvarianten.

Die darin verbaute LED ist meist auf 12 V ausgelegt, weswegen wir die gleich austauschen werden.

 

Weiter benötigen wir einen Satz Dupond-Steckerkabel zum Verbinden und ein Mini-Breadboard, wobei das auch kostensparender geht, wenn man die Verbindungen direkt am Controller festlöten mag. Ich bin aber ein grosser Fan von Steckverbindungen bei Prototypen und habe deswegen auf ein kleines Projekt-Steckbrett gesetzt, das sowieso noch in der Bauteilekiste lag.

 

Einen 3 W Lautsprecher an einem PAM8403-Verstärker sowie eine kleine Drucktaste zum Umschalten der Tastenbelegung kommen noch hinzu sowie ein 100 Ohm-Vorwiederstand für die LED.

Bestellliste für den Mute Button

Hier ist nun die Teileliste direkt mit passenden Artikeln vom Online-Giganten Amazon zu finden. Natürlich gibt es auch hunderte andere Bezugsmöglichkeiten und wer beispielweise zwei bis vier Wochen warten mag, findet auf Bangoods oder AliExpress auch zu einem Bruchteil des Preises, den man dafür bei Amazon zahlt. Dafür ist die Rückgabe-und Garantieabwicklung manchmal auch etwas umständlicher oder unbefriedigender.

 

Keine Produkte gefunden.

 

Wie ihr seht, sind manche der Artikel hier in grösseren Bestellmengen aufgelistet. Klar, denn eine einzelne LED ist ebenso wenig wirtschaftlich sinnvoll zu verkaufen wie einzelne Widerstände. In den meisten Bastelstuben wird aber beides vermutlich sowieso schon vorhanden sein und muss nicht extra gekauft werden. Wenn nicht, legt ihr mit der Bestellung eben den Grundstein für zukünftige Bastelprojekte.

Gehen aber von den absolut notwendigen Bauteilen aus und lassen Jumper-Kabel, Breadboard, LED und Widerstand aussen vor, kommen wir auf einen Preis von ca. 20,- Euro bzw. SFr. bei Amazon. Bei AliExpress zahlen wir für den LED-Pushbutton fast genauso viel, sind aber für die Mikrocontroller, Lautsprecher und den kleinen Drucktaster bei weniger als einem drittel des Preises, selbst wenn wir den Mengenrabatt der Angebote von Amazon herunter rechnen.

Ohne Sprachausgabe und zweiten Button, quasi als Single-Use-Installation, sind die Materialkosten sogar unter 5.- SFr. beim China-Direktimport und 16,- Euro bei Amazon. Dann braucht es nur noch die Teile 1 und 2 auf der unten stehenden Auflistung.

  1. Arduino Pro Micro Mikrocontroller (Clone) ATmega32U4
  2. 60 mm Arcade LED-Pushbutton
  3. Mini-Druckschalter
  4. PAM8403 Digitale Verstärkerplatine
  5. Lautsprecher

Ein handelsübliches microUSB-Kabel dient zur Kommunikation und Stromversorgung. Da diese heutzutage in rauen Mengen in den meisten Haushalten unbenutzt herumliegen, ist es ebenso wenig wie der Lötkolben und das (bleifreie) Lötzinn auf der Teileliste enthalten. Als Gehäuse habe ich übrigen einen alten Joghurt-Eimer aus Kunststoff recycled. Die Kosten hierfür sind also auch bei Null, die Grösse scheint mir gut zu passen, er lässt sich sehr leicht bearbeiten und ist dennoch verhältnismässig stabil. Natürlich geht auch der Einbau in viele andere Gehäuse, wie etwa in eine hübsche Abzweigbox, wie sie in der Elektrotechnik üblicher ist. Aber die sind entsprechend teurer und mir gefiel die Gestaltung des Eimerchens als Prototypengehäuse, dass ich bei Gelegenheit noch vielleicht schwarz bemalen werde für die schickere Desktop-Optik.

 

Übrigens gibt es neben dem Arduino Pro Micro auch den Arduino Pro Mini zu kaufen, der Baugleich bis auf einen miniUSB-Anschluss anstelle des microUSB-Anschlusses ist. Kommt also nur auf euer Kabel an. Choose your connector.

Technischer Aufbau des Mute Buttons

Im Folgenden ist der Schaltplan des ganzen Aufbaus via fritzing zu sehen. Das Ganze ist denkbar einfach: Die LED des Arcade-Pushbuttons wird mit dem digitalen Ausgang D3 des ATmega32U4 über einen Vorwiderstand zur Erdung verbunden. Damit kann die LED per Code ein- und ausgeschaltet werden. Als Vorwiderstand für die LED nehmen wir 100 Ohm nach der bekannten Formel R=U/I. So lebt die LED länger und brennt nicht zu hell.

 

Die Taste des Pushbuttons selbst wird mit dem digitalen Eingang D7 verbunden, der zweite Taster mit D2 und beide zur Erdung GND wiederum. Auf Pullup-Widerstände verzichten wir an der Stelle und setzen auf die eingebauten des Microkontrollers, die mittels Parameter INPUT_PULLUP konfiguriert werden.

 

An die Pins A9 und A10 legen wir den PAM8403 Verstärker-Eingang an, der über VCC und GND mit 5 V Spannung versorgt wird.Ssie werden per Talkie -Bibliothek mit Sound bespielt. Übrigens muss ggf. der Kontaktpunkt J1 auf dem Arduino Pro micro noch mit etwas Lötzinn verbunden werden, damit der Chip auf 5 V und und mit 16 MHz läuft. Am besen vorher ausmessen. Manche Clone sind von Haus aus auf 5 V geschaltet. An den Ausgängen des Verstärker-Boards stecken wir den Lautsprecher an. Da wir nur Mono-Sound ausgeben, ist es egal, ob an L oder R. Hauptsache, es sind sowohl Eingang wie Ausgang auf demselben Kanal. Übrigens nicht wundern: Das Bauteilsymbol in der Elektroniksoftware Firtzing hat einen eingebauten Lautstärkeregler, während der PAM8403 aus der Bestellliste mit einer festen Lautstärke daher kommt. Das macht ihn natürlich etwas billiger in der Herstellung, aber für unsere Zwecke funktioniert er genauso gut.

 

 

 

 


DIY: Mute Button für Zoom, WebEx, Jitsi, BigBlueButton etc. selbst gebaut
Steckplatine und Schaltplan für den Mute Button. Bild: PocketPC.ch / Jeanrenaud – mit Fritzing

Die Fotos unten zeigen den Prototyp im Aufbau und Einsatz. Die etwas unorthodoxen Farben der Kabel entsprechen denen im Schema oben zum besseren Verständnis.

Der Code

Ich war noch nie sehr gut darin, Quelltext wirklich gut zu beschreiben, aber ich hoffe, es wird einigermassen verständlich, was der Code, der beispielsweise mit der kostenlosen Arduino IDE auf den Microkontroller geladen wird, genau macht.

 

In meinem Repository zum Mute Button Projekt auf GitHub findet ihr den kompletten Quellcode selbstverständlich kostenlos zum Download.

 

 

Neben den notwendigen Bibliotheken, wie Talkie, Keyboard oder die Funktionen für den Zugriff auf den EEPROM-Speicher des ATmega32U4 geladen wurden, definiert der Code die Startwerte und die Anschlüsse für die jeweiligen Komponenten.

int LED1 = 3; //D3 connecting the LED of the pushbutton
int button = 7; //D7 connecting pushbutton; normally open. Cause only 0,1,2,3 and 7 are external interrupts
int button2 = 2; //D2/SDA connecting the second pushbutton; normally open
 
#define KEY_SPACE 0x20
#define EEADDR 15324
 
byte keyOptionVar = 153; //bogus value; 0 is webex, 1 is bigbluebutton,2 is jitsi and default is zoom

//create talkie object
Talkie voice(true,true);
 
//set start values
boolean LED1State = false;
 
long buttonTimer = 0;
long button2Timer = 0;
long longPressTime = 250;
 
boolean buttonActive = false;
boolean button2Active = false;
boolean longPressActive = false;

 

Die Tonspuren für die Sprachausgabe werden als sogenannte LPC Frames direkt im Code angelegt und sind in den vier Zeilen enthalten, die mit const uint8_t beginnen.

 

void setup() wird beim Start des Geräts, sprich beim Einstecken an den USB-Anschluss, einmalig ausgeführt. In der Routine setup werden die Anschlüsse des Arduino entsprechend so belegt, wie wir sie benötigen und die Speicheradresse aus dem EEPROM ausgelesen, um zu prüfen, ob wir schon einen Wert gespeichert haben, wie die Taste genau belegt werden soll. Wenn nicht, gilt Zoom als Standardwert. Dieser gilt auch, wenn unter der definierten Adresse EEADDR kein für unser Programm sinnvoller Wert steht.

 

Mit Serial.begin(9600); aktivieren wir den COM-Port des Arduino, so dass einfach mitverfolgt werden kann, was die kleine Bastelei gerade so macht. Das ist nützlich zur Fehlersuche. Theoretisch könnte man darauf und alle Serial-Aufrufe auch verzichten.

 

Mit Keyboard.begin(); starten wir die Keyboard-Funktion des ATmega-Chips. Dies ist zentral. Erst danach können wir Keyboard-Aufrufe tätigen und Tastendruck an den Rechner schicken.

Bilder: PocketPC.ch / Jeanrenaud

 

Im loop() wird alles in Dauerschleife abgearbeitet, bis das Programm beendet wird. Das ist in diesem Fall nur durch das Abziehen des Steckers und somit das Trennen der Stromversorgung möglich.

 

Hier warten wir auf eine Veränderung des Zustands unserer Pins definiert in button und button2, um darauf entsprechend reagieren zu können. Entsprechend der Variable keyOptionVar, die wir aus dem EEPROM-Wert befüllt haben eingangs, wird nun die richtige Taste oder Tastenkombination für die jeweilige Software gedrückt.

 

Bei button==LOW nutzen wir millis(), um einen langen Tastendruck zu erkennen. Dessen Schwellenwert ist in der Variable longPressTime eingangs definiert wordem. So wird entsprechend die eine oder andere Tastenkombination an den USB-Host geschickt.

 

Drücken wir die zweite, kleine und grüne Taste, wird in der Endlosschlaufe ja button2 gegen Null geschaltet, ist also LOW und wir wechseln von der derzeitigen Tastenbelegung zur nächsten. Nach Zoom folgt entsprechend WebEx, dann BigBlueButton und dann Jisti, bevor alles wieder von vorne beginnt mit Zoom. Jedes EEPROM.put(); speichert sodann den Wert nichtflüchtig im Speicher des Controllers ab, so dass auch nach einem Neustart dieselbe Software eingestellt ist, wie zuvor. Abschliessend an diesen Programmiervorgang setzen wir LED und Tastenstatus wieder zurück und gehen zurück in die Schleife. Das EEPROM hat eine begrenzte Schreibanzahl, die jedoch mit 100’000 Schreibzyklen so hoch ist, dass wir uns kaum Sorgen zu machen brauchen.

 

Ein paar kurze Worte zum Schluss

Ihr seht, das Ganze ist nicht weiter kompliziert, kann einem aber das Leben deutlich erleichtern. Ich hoffe, ihr fandet es interessant und habt vielleicht Lust bekommen, das kleine Projekt nachzubauen. Selbstverständlich kann auch auf PAM8403, Lautsprecher und zweite Taste gänzlich verzichtet werden. Wer zum Beispiel nur Zoom einsetzt, kommt so mit weniger Teilen, geringen Kosten und auch einem schlankeren Code aus.

 

 

À propos: Der Code ist bei weitem nicht optimal oder hübsch, aber er funktioniert soweit. Es ging schnellschnell, wie so oft, und ausschliesslich zwischendurch 😉

Wer mag, sei hiermit herzlich eingeladen, am Projekt YJ_MuteButton_USB_HID auf GitHub mitzuwirken!

 

Was beispielsweise noch nicht so richtig klappen will, ist die LED glühen oder blinken zu lassen, wenn der USB Host schläft, sprich der PC aus ist. Dieses HAL-Feeling wäre ein nettes Gimmick. Nötig ist es aber sicherlich nicht. Und die Tonaufnahmen für die Sprachausgabe, die sich selbst aufgenommen habe, um keine Rechte zu verletzen, sind auch noch weit entfernt von perfekt. Auch hierbei freue ich mich, wenn jemand entsprechende LPC-kodierte Zeilen beisteuern mag.

Das könnte Sie auch interessieren

Schreibe einen Kommentar

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert
Teilen