A fully-functional open source and open hardware mechanical USB computer keyboard with only three keys!

Overview

threeboard

threeboard is a fully-functional open source and open hardware mechanical USB computer keyboard with only three keys. It supports multiple programmable layers, and achieves the same functionality as a full-sized keyboard. Its firmware and hardware are built completely from scratch and are extensively documented.

Unlike a traditional keyboard, characters don't show up on the screen after each keypress, because there aren't enough keys. Instead, combinations of the three keys are used to specify key and modifier codes on two built-in 8-bit LED binary indicators. This can then be sent to the host computer as USB keycodes. The multiple layers allow users to program macros into the threeboard’s storage for quick retrieval. All functionality is documented in the threeboard user manual.

Motivation

The main goal of the threeboard project is to build a relatively easy to understand, readable, self-contained and well-documented embedded software and hardware project. The threeboard is built from scratch, with no external dependencies. This means that all components, from the USB stack to the PCB hardware designs, are written from the ground up and are all contained in this repository.

The threeboard project is extensively documented: within the firmware itself as comments, in this set of detailed markdown documents, and in a PDF design document. The primary design goal of the C++ firmware code is readability, to enable as many people to read and learn from it as possible, regardless of background. It's well tested, including end-to-end integration tests which execute tests against the firmware in a hardware simulator to emulate the physical hardware.

How to try it out

The threeboard project includes a terminal-based graphical firmware simulator capable of simulating the entire functionality of the threeboard. You can build and run the simulator yourself by reading the simulator build instructions. The simulator is built on top of the simavr AVR simulator, and runs the exact same firmware file that gets flashed to physical hardware. The simulator also allows remote debugging with GDB, so you can step through the threeboard firmware as it's being simulated to learn about it or investigate bugs!

Building your own physical threeboard requires a physical threeboard PCB, soldering tools and components, as well as some knowledge of electronics and soldering. If you're interested in building one, check out the threeboard hardware build instructions.

Full documentation

Below are markdown files documenting various aspects of the threeboard project in detail. Full 41-page documentation is available in PDF format in the threeboard design doc file.

Background reading

threeboard user manual
How do USB keyboards work?

Firmware

Firmware design
Firmware build instructions
Simulator user manual & design
Simulator build instructions

Hardware

Hardware design
Hardware build instructions
Component list

Hardware designs are licensed under CERN-OHL-P, the firmware is licensed under GPLv3, and all documentation under CC BY-SA 4.0.

You might also like...
Simple ATTiny85 based PS/2 to Amiga keyboard protocol converter that fits inside the keyboard.
Simple ATTiny85 based PS/2 to Amiga keyboard protocol converter that fits inside the keyboard.

Simple ATTiny85 based PS/2 to Amiga keyboard protocol converter that fits inside the keyboard.

ESP32S2 Arduino USB host printer, MIDI, and keyboard demos
ESP32S2 Arduino USB host printer, MIDI, and keyboard demos

ESP32 S2 USB Host Jumpstart A collection of experiments and demos using Espressif ESP32 S2 in USB host mode. Most of the sketches have little or no C+

Tiny and portable usb host and device stack for mcu with usb ip

Tiny and portable usb host and device stack for mcu with usb ip

USB2Sun - USB keyboard/mouse to Sun Converter

USB2Sun While I've found many projects for connecting the Sun serial based keyboards to a modern machine via USB, I've never found anything to connect

USB-C_PCB_experiments - USB-C ports made from a flex PCB and an ATtiny84A
USB-C_PCB_experiments - USB-C ports made from a flex PCB and an ATtiny84A

USB-C PCB Experiments This is part of an ongoing series of projects involving creative interpretations of the USB mechanical standards. You've probabl

Anotter USB temperature logger that can record up to four channels with thermocouple or NTCs connected via CDC directly or SCPI to USB.
Anotter USB temperature logger that can record up to four channels with thermocouple or NTCs connected via CDC directly or SCPI to USB.

temperature-logger Anotter USB temperature logger that can record up to four channels with thermocouple or NTCs connected via CDC directly or SCPI to

C/C++ Application to solve irrigation rotation whatever two-turn rotation or three-turn rotation, longitudinal section design, hydraulic calculations, and design of hydraulic structures like weirs and tail escape.
C/C++ Application to solve irrigation rotation whatever two-turn rotation or three-turn rotation, longitudinal section design, hydraulic calculations, and design of hydraulic structures like weirs and tail escape.

Irrigation works C/C++ Application to solve irrigation rotation whatever two-turn rotation or three-turn rotation, longitudinal section design, hydrau

By putting in a lot of speed, the speed sequence is sorted and divided, three types of speed interval distribution maps are generated.(including broken line graph,histogram and curve graph)

Auto-drawing-speed-range-map By putting in a lot of speed, the speed sequence is sorted and divided, three types of speed interval distribution maps a

Open-source and open-hardware scientific RPN calculator
Open-source and open-hardware scientific RPN calculator

OpenRPNCalc Open-source and open-hardware scientific RPN calculator Introduction OpenRPNCalc is a scientific calculator based on STM32 microcontroller

Comments
  • A couple components are now unavailable

    A couple components are now unavailable

    Eager to try this project out as my first hardware project! Looks like these two parts are no longer in stock anywhere, any idea what could be a suitable replacement?

    ATMEGA34U4

    FA-238 16.0000MB-C3

    opened by 3bash 3
  • Include LICENSE?

    Include LICENSE?

    Beautiful project! Thank you for making the hardware designs, software, and documentation open source.

    Can you please include LICENSE information for the hardware, software, and documentation in this repository, please? This way it will meet the open source software and open source hardware definitions. For the hardware designs, I suggest one of the CERN Open Hardware Licenses 2.0. Maybe GPLv3 for software, and CC BY-SA 4.0 for documentation.

    opened by penyuan 2
  • Add kitspace.yaml

    Add kitspace.yaml

    Hey, I thought this would be a nice project to add to https://kitspace.org. The idea of Kitspace is to make it as easy as possible to actually build people's open source hardware designs.

    All that's required to add your project is to merge this PR. It includes a kitspace.yaml manifest that helps us find the right files. After you merge this the Kitspace page will keep updating with your repo in the future.

    Here is a preview of what your project would look like. If you have any questions don't hesitate to ask.

    As you can see, we can't get any "buy parts" links from your project yet. If you'd like to improve the bill of materials we have an open source tool called BOM Builder to help with that. Please email [email protected] and we'll send you a link.

    opened by solotash 1
  • Improve InstrumentingSimavr for use in deterministic property tests

    Improve InstrumentingSimavr for use in deterministic property tests

    • Merge property_test into integration_test.
    • Add ability to enable & disable instruments in the InstrumentingSimavr.
    • Add support for various new instruments: stack recording, symbol table checking, integrity checking.
    • Modify keypress handling in the Simulator to avoid keypresses being registered in different event handling cycles.
    opened by taylorconor 0
sipeed opensource mechanical keyboard make with BL706

sipeed_keyboard sipeed opensource mechanical keyboard make with BL706 矽π 开源双模机械键盘 目录结构 ./ ├── LICENSE ├── README.md ├── firmware // 存放键盘固件 ├── hardwar

Sipeed 54 Aug 10, 2022
An Alice-like 35% 3d printed mechanical keyboard using ItsyBitsy dev boards

QALBLE An ergo 35% 3d printed wireless mechanical keyboard, born from the thought of "Imagine QAZ but split like an Alice ?? " The BLE is a misnomer s

null 16 Sep 16, 2022
Raw HID keyboard forwarder to turn the Pi 400 into a USB keyboard

Raspberry Pi 400 as a USB HID Keyboard Hook your Pi 400 up to your PC somehow, using a USB Type-C cable into the power port. Anker make good ones- I u

Philip Howard 168 Sep 28, 2022
Use Atari keyboard as USB keyboard with a Teensy 3.6

Atari Keyboard Convert an Atari 600/800/1200 XL into a USB keyboard. I bricked my Atari mainboard. My goal is to use the keyboard of the Atari on a Ra

Jos Koenis 2 Dec 3, 2021
ESP32 software USB host through general IO pins. We can connect up to 4 USB-LS HID (keyboard mouse joystick) devices simultaneously.

esp32_usb_soft_host esp32 USB-LS pure software host thru general IO pins. Up to 4 HID devices simultaneously. board ~$3 :https://www.aliexpress.com/pr

Samsonov Dima 285 Oct 3, 2022
ESP8266 software USB host through general IO pins. We can connect up to 2 USB-LS HID (keyboard mouse joystick) devices simultaneously.

esp8266_usb_soft_host Test for esp8266 usb host . Works with ESP-IDF v3.4 80MHz and 160MHz. WorkInProgress Test run with mouse & combined mouse & keyb

Samsonov Dima 28 Sep 1, 2022
Firmware, mechanical and electrical design files for the Inline Filament Diameter Estimator, Lowcost (InFiDEL).

Inline Filament Diameter Estimator, Lowcost (InFiDEL) Originally created by Thomas Sanladerer A cheap, yet precise filament diameter sensor, intended

Daniel Smullen 100 Sep 22, 2022
A large mechanical 7-segment clock using cheap stepper motors.

mechanical-7-segment-clock A large mechanical 7-segment clock using cheap stepper motors. Each digit requires its own controller board. The seconds di

null 45 Aug 11, 2022
split89 keyboard - a 3d printed 89 key split TKL keyboard base powered by ATmega32U4 Pro Micro controllers with QMK Configurator support.

split89 keyboard - a 3d printed 89 key split TKL keyboard base powered by ATmega32U4 Pro Micro controllers with QMK Configurator support. This keyboar

null 43 Aug 7, 2022
Gesture-Detecting-Macro-Keyboard - Glorified Bluetooth macro keyboard with machine learning (TensorFlow Lite for Microcontrollers) running on an ESP32.

Gesture detection tldr; Glorified Bluetooth macro keyboard with machine learning (TensorFlow Lite for Microcontrollers) running on an ESP32. Main feat

Jakob Krantz 67 Sep 4, 2022