zoom-controller
zoom-controller copied to clipboard
A wireless controller for making Zoom meetings easier and more pleasant
Table of Contents
-
What is this?
- Demo Video
-
How do I use it?
- Turning on
- Connecting to Bluetooth
- Turning off
- Disconnecting Bluetooth
- Adjust volume
- Controlling Zoom!
- Switching modes
-
Getting fancy
- Desktop notifications
- YouTube controller
-
How do I make one?
- Stand
- Electronics
- Additional hardware
- Software
- Feedback
What is this?
I, like many others, found myself using Zoom video conference software a lot this past year. I created this device to make interacting with Zoom faster and more pleasant.
- The Zoom Controller connects with your computer over Bluetooth and emulates keyboard key presses
- Works with Mac and Windows
- Five buttons are setup to emulate the default keyboard shortcuts in Zoom
- A knob controls the computer's media volume
- Powered by two AA batteries
- The circuit board mounts to a bent piece of 12 Gauge steel
- Bonus features include desktop notifications and YouTube Mode (see getting fancy)
Demo video
How do I use it?
- Turning on
- Connecting to Bluetooth
- Turning off
- Disconnecting Bluetooth
- Controlling Zoom!
- Switching modes
Turning on
Press and hold the VOLUME knob to turn on. You can let go of the knob as soon as you see it light up red. The knob will "breathe" red light while it is trying to connect to Bluetooth. Once connected, the knob will turn green.
The controller will automatically turn off after 20 seconds attempting and failing to connect.
Connecting to Bluetooth
If it is the first time using Zoom Controller, you will need to add it your computer's list of Bluetooth devices. Once added, the Zoom Controller will automatically connect when turned on and within range of your computer.
Mac
- Open System Preferences -> Bluetooth
- Turn on Zoom Controller
- When it appears in your list of Bluetooth devices, click connect. Once connected, the light will turn green, and you're good to go!
- There may be a "Keyboard Setup Assistant" window that pops up asking you to press a key to identify your keyboard. You can ignore this and just close the window.
Windows
- Search for "bluetooth" in the search bar and select "Bluetooth and other devices settings"
- At the top, click "Add Bluetooth or other device"
- Click "Bluetooth - Mice, keyboards, pens or other kinds of Bluetooth devices"
- Turn on the Zoom Controller by pressing the VOLUME knob until a red light appears
- Zoom controller should appear in the "Add a device" list
Turning off
Press and hold the LEAVE button. The volume knob's light will turn off when the controller is powered off.
There is an idle clock always counting. Every time you press a button or rotate the knob, the idle clock is reset to 0. If the idle clock reaches 60 minutes, the controller will automatically turn itself off to save battery.
Disconnecting Bluetooth
The Zoom Controller can only be connected to one device at a time. If you want to use it with a different computer it is important that you first remove it from its current computer's Bluetooth device list.
Mac
- Open to System Prefrences -> Bluetooth
- Right click on the Zoom Controller and select "Remove"
Windows
- Search for "bluetooth" in the search bar and select "Bluetooth and other devices settings"
- Under the "Mouse, keyboard, & pen" click "Zoom Controller" and then click "Remove device"
Controlling Zoom!
Adjust volume
Rotate the VOLUME knob clockwise to increase volume, counterclockwise to decrease volume.
Send Shortcuts on Mac
The five buttons are setup to execute the following Zoom functions by emulating their default keyboard shortcuts.
Button | Zoom Function | Emulated Mac Keypress |
---|---|---|
Mic | mute/unmute microphone | shift + command + a |
Camera | start/stop video | shift + command + v |
Share | start/stop screen sharing | shift + command + s |
View | speaker/gallery view | shift + command + w |
Leave* | leave meeting | command + w, followed by Return to confirm leave |
Send Shortcuts on Windows
Button | Zoom Function | Emulated Windows Keypress |
---|---|---|
Mic | mute/unmute microphone | alt + a |
Camera | start/stop video | alt + v |
Share | start/stop screen sharing | alt + s |
View (single press) | speaker view | alt + F1 |
View (double press) | gallery view | alt + F2 |
Leave* | leave meeting | alt + q, folowed by Enter to confirm leave |
*Zoom Controller will automatically turn off 8 seconds after pressing LEAVE, unless you keep it awake by pressing a button or rotating the knob within those 8 seconds. The knob will blink green indicating that the controller is about to turn itself off.
Switching modes
Keyboard shortcuts sent by Zoom Controller depend on which operating system and which application is being used. Because of this, there are 4 different modes that Zoom controller can be in. There are 2 operating system modes (Mac, Windows) and 2 application modes (Zoom, YouTube*).
*see YouTube Controller
Mac mode
- Press down the VOLUME button.
- While holding the VOLUME button, press and hold the MIC button for 2 seconds
- The VOLUME button will blink 3 times indicating it is now in Mac mode. You can release both buttons.
Windows mode
- Press down the VOLUME button.
- While holding the VOLUME button, press and hold the CAMERA button for 2 seconds
- The VOLUME button will blink 7 times indicating it is now in Windows mode. You can release both buttons.
Switch into Zoom mode
- Press and hold the VOLUME knob
- Press and release the MIC button
Switch into YouTube mode
- Press and hold the VOLUME knob
- Press and release the CAMERA button
Getting fancy
Desktop notifications
You can enable Zoom Controller notifications show up on your desktop. The following notifications will appear when relevant:
- "Mac Mode"
- "Windows Mode"
- "Zoom Mode"
- "YouTube Mode"
- "Controller has been idle for awhile and will soon turn itself off. Press any button or rotate knob to keep awake"
Mac notifications setup
- Download Hammerspoon.
- Click the Hammerspooon menu bar icon and select "Open Config".
- Add the following to your
init.lua
file:
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "F1", function()
hs.alert.show("Mac Mode")
end)
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "F2", function()
hs.alert.show("Windows Mode")
end)
hs.hotkey.bind({"cmd","alt","ctrl"}, "F3", function()
hs.notify.new({title="Zoom Controller Idle", informativeText="Controller will turn off soon\nPress any key to keep awake"}):send()
end))
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "F4", function()
hs.alert.show("Zoom Mode")
end)
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "F5", function()
hs.alert.show("YouTube Mode")
end)
- Save your changes to the
inti.lua
file then click the Hammerspoon menu bar icon and select "Reload Config"
Windows notifications setup
- Download AutoHotkey
- Download this zoom_controller_notifications.ahk script file
- Once the script file is downloaded, double click it to begin running the script
- If you want the script to automatically run every time you turn on your computer, follow instructions here
YouTube controller
I've found this device to be super useful for watching online videos.
Installation
- Add an extension called Video Speed Controller to your web browser
Controlling YouTube
Send Shortcuts
Button | YouTube Function | Emulated Keypress |
---|---|---|
Mic | ||
Camera | rewind 10s | z |
Share | fast forward 10s | x |
View | toggle fullscreen | f |
Leave | play/pause | spacebar |
Adjust playback speed
- Increase/decrease the video playback speed by rotating the VOLUME knob clockwise/counterclockwise
- Toggle between 1X speed and your adjusted playback speed by clicking the VOLUME knob
Adjust Volume
- Increase/decrease the volume by pressing and holding down MIC then rotating the VOLUME knob clockwise/counterclockwise.
How do I make one?
Stand
- File for lasercutting: stand.dxf
- 0.1" thick (12Ga) steel cut and bent at https://www.oshcut.com/
Electronics
Bill of Materials
Qty | Reference | Description | Value/MPN |
---|---|---|---|
1 | BT1 | Battery Holder | 2462 |
1 | C1 | 0805 Capacitor | 10nF |
1 | D1 | Schottky Diode | BAT54C |
2 | H3, H4 | Threaded Standoff | 4207 |
1 | Q1 | P-Channel MOSFET | FDN340P |
1 | Q2 | N-Channel MOSFET | BSS123 |
1 | R1 | 0805 Resistor | 100KΩ |
1 | R2 | 0805 Resistor | 10KΩ |
1 | R3 | 0805 Resistor | 330Ω |
1 | R4 | 0805 Resistor | 1MΩ |
5 | S1, S2, S3, S4, S5 | Tactile Button | DD-15326 |
1 | SW1 | Rotary Encoder | COM-15140 |
1 | U1 | Microcontroller | ESP32-WROOM-32E |
Additional hardware
- 6mm long M3 x 0.5mm screws: https://www.mcmaster.com/92095A179/
- Clear plastic knob for rotary encoder: https://www.sparkfun.com/products/10597
Software
The code was developed using PlatformIO. An ESP-PROG was used to program the ESP32 microcontroller. You should be able to use the platform.ini file from this repository, you'll just need to change the upload port. The platform.ini will automatically download the requisite ESP32-BLE-Keyboard library and ESP32 and Arduino frameworks.
Feedback
If people are interested, I may consider buying some parts in bulk and selling the controllers on Tindie or Etsy ¯\_(ツ)_/¯
If you have questions, comments, or are interested in buying a Zoom Controller: