Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time



KeyBoh is an Arduino Leonardo shield for making customizable, cheap, USB keyboards. We love to use the NicoHood HID Project library for interfacing the whole thing to a Computer. It's very cheap because uses commonly available 12x12 tactile switches.


PCBWay has the project ready to be manufactured and shipped. Making the PCB on PCBWay will support our work!
You need to subscribe to PCBWay first using this invite link. Then you'll have a bonus of $5 for PCB Manufacturing.
Once subscribed to PCBWay you can let them make you the PCB from the shared project page. Gerbers are provided anyway.


In the STL folder are located the two panels you can 3Dprint by yourself. Then you can assemble the Keyboh as showed in the pictures using 4x 24mm F/F and 4x M/F 6mm hex spacers + 12x M3 6mm screws and 4 3M bolts.

Code examples

See in the Arduino folder for code examples. We're currently working to a multi-predefined configurable keyset for various applications, so stay tuned.


See the NicoHood HID Project library for knowing how library works and example. In the keys.txt document are reported the names for the keys of the keyboard as used by NicoHood library.

Connection table

(To do) In the meanwhile look at schematic in the docs folder

Can I use keyboh with other boards?

Keyboh is designed for the Arduino Leonardo using his own USB features for making USB devices you can use on the computer or any device recognizes HID devices (even if on cellphone).

Keyboh on Arduino UNO ?

You can use Keyboh on the Arduino UNO if you want to control remote devices through the UART: you can connect an external device simply connecting the UART using wires or you can attach a Bluetooth or an XBee module, or an ESP8266 but be always aware of the voltage levels! There is the possibility to have a voltage divider only on the Arduino RX but connecting an ESP8266 requires a voltage divider on the TX.

You can use Keyboh on the Arduino UNO also for USB communication using the HoodLoader by NicoHood. This project is made for reprogramming the 16U2, used on the UNO as serial/USB bridge, and use it for USB custom purposes. We've still not used that feature so please read the documentation of this library.

Since the Leonardo has separate SDA and SCL lines while the UNO has SDA and SCL shared with A4 and A5, using the shield on the UNO will make not available I2C lines, or you may not use the joystick (connected to A4 and A5) freeing those two pins for using them for I2C.

Keyboh on other boards

You can use the shield on other development boards connecting wires on pads: the silkscreen will help a lot.
You can also saw off the PCB part with encoder and joystick: a part of soldering pads will be anyway available for reconnecting the two separate pcbs or for connecting them through wires.


Since keymatrix is implemented without protection diodes on pushbuttons, is no safe press more than 1 button on the same row at a time: this bring to a momentary short-circuit since 2 or more columns are connected together. Usually this is not a big problem since the duration of the short is very small due to column scan, but is better not doing this. In the next revision we'll add the protection diodes.

Bad Coding leads to problems!

First of all: Always remember to put a Keyboard.releaseALL() or Keyboard.relese([KEY]) after instructions or the keys will remain pressed forever causing a lot of problems!

A very big problem is this: you write some wrong instructions so the keyboard cycles some keys indefinitely (ore some keys are always pressed) and then, since those keys affects the Arduino IDE functions, you may be not able to reprogram the board. In this case a thing you can do is detach the Arduino Leonardo, then see in the Control Panel which devices are connected, then you attach the Leonardo and you will see new devices (example: HID Keyboard), in the panel you can try to disinstall the new device (Mouse right click - Uninstall) but you need to do this very fast.

In worst cases you can reprogram the Leonardo with a clean sketch on the ISP connector using another Arduino as ISP programmer.

Another problem can be board not recognized from Arduino IDE even if the board is working and the selected serial port is right. In this case try to disconnect and reconnect the USB cable or pressing the Leonardo reset button after you've pressed the IDE button for the sketch upload.

Notes for an ipothetical next PCB revision

  • Add protection diodes on keymatrix switches
  • Add circuitry for hardware debounce, on the encoder mainly
  • Add voltage divider also on UART TX
  • Use the Arduino micro instead of Leonardo (more compact) ?



Since we love when others share our projects, here are linked pages who shared the project.
Those links can be useful since people make also questions commenting on social posts and we try to give answers directly.


Arduino Leonardo shield for customizable USB keyboards






No releases published


No packages published