Physical Mute Button for Zoom Meetings

This is a big physical button you can put on your desk that will toggle your mute in zoom meetings, and if you hold the button down it leaves the meeting or ends it if you are the host.

It consists of a Digispark clone board (attiny85), a resistor, and a switch. The microcontroller acts as a keyboard with with just one button, and I’m taking advantage of the keyboard shortcuts built into the zoom app. The main thing that makes this work is the fact that CTRL+ALT+SHIFT brings focus to the meeting controls. This brings the zoom window to the front if you are a participant (sometimes I toggle mute with the button just to find the window), and it also works while you are sharing your screen. A short press sends ALT+A which toggles your mute state, and a long press sends ALT+Q then ENTER, which exits the meeting entirely.

Source code will be at the end of the post, it’s a slightly modified example from the digikeyboard library. I used the Arduino IDE – you’ll need to install the digistump boards through the board manager and also get the button library I used here: https://github.com/mathertel/OneButton. The wiring is very simple, it is just a momentary switch between GND and P0, and a 10k pullup resistor between 5V and P0 (this is not required at all in fact, so you can leave the resistor out).

I have created an instructable for this as well, a PDF copy is downloadable below and the link is: https://www.instructables.com/id/Zoom-Meetings-Physical-Mute-Button/

//Elliotmade 4/22/2020
//https://elliotmade.com/2020/04/23/physical-mute-button-for-zoom-meetings/
//https://www.youtube.com/watch?v=apGbelheIzg
//Used a digispark clone

//this will switch to the zoom application and mute it or exit on long press
//momentary button on pin 0 with pullup resistor

//https://github.com/mathertel/OneButton
//button library
#include "OneButton.h"

int button1pin = 0;

#include "DigiKeyboard.h"

//set up buttons
  OneButton button1(button1pin, true);

void setup() {
  // put your setup code here, to run once:


  //set up button functions

  button1.attachClick(click1);
  button1.attachLongPressStart(longPressStart1);

  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.delay(500);
  
}

void loop() {
  // put your main code here, to run repeatedly:
  //monitor buttons
  button1.tick();
}


// This function will be called when the button1 was pressed 1 time (and no 2. button press followed).
void click1() {
  // this is generally not necessary but with some older systems it seems to
  // prevent missing the first character after a delay:
  DigiKeyboard.sendKeyStroke(0);
  
  // Type out this string letter by letter on the computer (assumes US-style
  // keyboard)
  DigiKeyboard.sendKeyStroke(0, MOD_SHIFT_LEFT | MOD_CONTROL_LEFT | MOD_ALT_LEFT);
  DigiKeyboard.delay(100);
  DigiKeyboard.sendKeyStroke(KEY_A, MOD_ALT_LEFT);


} // click1


// This function will be called once, when the button1 is pressed for a long time.
void longPressStart1() {
  // this is generally not necessary but with some older systems it seems to
  // prevent missing the first character after a delay:
  DigiKeyboard.sendKeyStroke(0);
  
  // Type out this string letter by letter on the computer (assumes US-style
  // keyboard)
  DigiKeyboard.sendKeyStroke(0, MOD_SHIFT_LEFT | MOD_CONTROL_LEFT | MOD_ALT_LEFT);
  DigiKeyboard.delay(50);
  DigiKeyboard.sendKeyStroke(KEY_Q, MOD_ALT_LEFT);
  DigiKeyboard.delay(50);
  DigiKeyboard.sendKeyStroke(KEY_ENTER);

} // longPressStart1

Comments

  1. Love this project! Very very cool. I was thinking it’d be awesome to have the button light up when it’s unmuted and dark when it’s muted. There are arcade buttons that are momentary pushbutton and can take led’s that could potentially work for this.

    https://paradisearcadeshop.com/home/controls/buttons/paradise-arcade/paradise-led-series/2330_paradise-led-button-with-black-plunger-translucent-yellow

    https://paradisearcadeshop.com/home/electrical/pcbs-lighting/led-lighting-solutions/paradise-arcade-kaimana-led-series/1720_paradise-kaimana-j2-rgb-led

    Do you think it’d be hard to modify your code to activate the led as a toggle indicating mute/unmute? Is it even possible with this micro controller? The led’s just take 5v so I guess it’s a question as to if there’s a pin on the board that you can switch power on and off. Thanks for publishing this project. Very inspiring.

    1. Lighting up an LED would be no problem for the board with any of the spare pins, and really simple in the code to toggle on and off when you use the button. Unfortunately this doesn’t really do what we all want – in order to represent the actual status of the zoom program you would actually need some software running on your computer that communicates back to the button, right now it is one-way only. Without that it’s pretty likely that the LED will get out of sync with the zoom app on the computer and probably be wrong some of the time. Cheers!

  2. Hi,

    I made a project that took a different approach to this same problem. Mine shuts off the microphone at the Operating System (OS) level so that it can work for other conferencing software as well. It includes LED indicators for mute status as well as a hot-mic detection function.

    https://github.com/dakota-mewt/mewt

    Hope this helps

Leave a Reply

Your email address will not be published. Required fields are marked *