Skip to the content
PCBKitNew board
2 layers126.2 × 90.5 mmSelenium s, the printed circuit board in 3D

Welcome to MKPico, a framework designed for creating custom keyboard firmware using the Raspberry Pi Pico microcontroller. MKPico is built using FreeRTOS, Pico SDK and tinyUSB.

Size
126.2 × 90.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
73
Nets
79
Pads
412
Tracks, vias
526, 54
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
6 Jul 2024
Updated
29 Nov 2024

Overview

Selenium s is an open-source printed circuit board by randcanary, from the randcanary/mkpico repository on GitHub. It is a 2-layer board of 126.2 × 90.5 mm with 73 parts on 79 nets, routed with 526 tracks and 54 vias.

It is built around the WS2812B-2020. Its parts include 36 diodes, 34 switches, 2 connectors and 1 IC. It belongs with the RP2040 boards of this library.

Main components

1

README

Readme.md

MKPico, a Pi pico USB Keyboard framework

Welcome to MKPico, a framework designed for creating custom keyboard firmware using the Raspberry Pi Pico microcontroller. MKPico is built using FreeRTOS, Pico SDK and tinyUSB.

Project Image

Selenium s (34 keys split mechanical keyboard)

Overview

This repository is the home of MKPico, and it includes everything you need to get started with developing your own keyboard firmware. MKPico abstracts the complexities of USB communication and real-time task management, providing an easy-to-use framework that is both powerful and efficient.

The first project built using MKPico is Selenium S, a custom 34-key split keyboard that demonstrates the capabilities of the framework. Selenium S serves as a reference implementation and a starting point for your own projects.

The main goals of the project are:

  • Cross-Platform Compatibility: MKPico ensures that your keyboards work seamlessly across multiple operating systems, including Linux and Windows.
  • Support for Boot and Normal Modes: The framework fully supports USB boot mode, making your keyboard operational even during system boot (BIOS/UEFI) and in the normal operating system environment. Real-Time Operating System: Powered by FreeRTOS, MKPico offers real-time task management, allowing for precise control over keyboard functions and responsiveness.
  • USB Protocol Management: Built on TinyUSB, MKPico handles USB communication reliably, ensuring your keyboard is fully compliant with USB standards.
  • Modular Design: MKPico’s modular architecture allows you to extend or customize the framework to suit specific needs, whether it’s adding new HID features or integrating with other hardware components.
  • Easy porting to new keyboard designs: The repository should allow to create new keyboard designs easily by defining a new layout and some key characteristics.

Project Structure

The MKPico project is organized into several key directories, each serving a specific purpose in the development and configuration of custom keyboards. Below is an overview of the project structure:

  • config/:

    • This folder contains configuration files for specific keyboards. Each keyboard has its own configuration file, which defines settings such as the key layout, pin mappings, and any special features or behaviors unique to that keyboard. By modifying these files, you can easily adapt MKPico to support different keyboard designs.
  • include/:

    • The include directory houses the internal API headers that define the interfaces and data structures used throughout the MKPico framework. These headers are essential for maintaining a clear and consistent API across different modules of the project, making it easier to develop and extend functionality.
  • src/:

    • This folder contains the core logic of the MKPico framework. It includes the following components:
      • Internal I2C Communication: Manages communication between the split halves of the keyboard, ensuring synchronized key presses and other functions across the two parts.
      • USB Interface: Handles the USB communication with the host computer, including enumeration, report generation, and processing of USB HID events.
      • Logic of Layers and Key Map: Implements the functionality for keyboard layers and key mapping, allowing users to define multiple layouts and switch between them dynamically.
      • Keystrokes Handling: Processes key presses and releases, manages debouncing, and ensures accurate and responsive input detection.

Getting started

This section guides you through setting up the environment to work with FreeRTOS and the Raspberry Pi Pico SDK.

1. Clone FreeRTOS Repository

First, clone the FreeRTOS kernel repository:

bash
git clone https://github.com/FreeRTOS/FreeRTOS-Kernel.git
cd FreeRTOS-Kernel

And move to the smp branch that supports multiple core:

bash
git checkout -t remotes/origin/smp
git submodule update --init

2. Clone Pico SDK Repository

Second, clone the Pico SDK repository:

bash
git clone https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk
git submodule update --init

3. Set environment variables

Set environment variables to point to the FreeRTOS and Pico SDK directories:

bash
export FREERTOS_KERNEL_PATH=/path/to/FreeRTOS-Kernel
export PICO_SDK_PATH=/path/to/pico-sdk

4. Initialize project code

Now, clone your project repository and initialize it.

bash
cd /path/to/your/workspace
git clone https://github.com/tknbr/mkpico.git
cd mkpico
git submodule update --init

5. Set up CMake and Build the Project

You can now set up CMake and build the project:

bash
mkdir build
cd build
cmake ..
make

Acknowledgements

The development of MKPico and the Selenium S keyboard was greatly influenced and supported by the vibrant communities dedicated to mechanical keyboards and custom firmware development. We would like to extend our gratitude to the following communities and content creators for their invaluable resources, tutorials, and inspiration:

  • Mechanical Keyboard Enthusiasts on GitHub: The numerous open-source keyboard projects and libraries available on GitHub have been instrumental in shaping the direction of MKPico. Special thanks to repositories like QMK Firmware, which provided insight into advanced keyboard features and firmware structure.

  • YouTube Content Creators: Channels such as Joe Scotto and Ben Vallack have offered detailed build guides, reviews, and deep dives into keyboard design that have been incredibly helpful during the development process.

  • Online Keyboard Communities: Platforms like r/ErgoMechKeyboards on Reddit, and forums like Geekhack, have provided a wealth of information and community support that was crucial in overcoming challenges during the project.

This project would not have been possible without the contributions of these communities, and we encourage anyone interested in custom keyboard development to explore these resources and get involved.

Parts

73
QtyValueFootprintReferences
34DiodeScottoKeebs_Components:Diode_SOD-123D1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +18
34KeyswitchScottoKeebs_Hotswap:Hotswap_MX_1.00uS1, S2, S10, S11, S12, S13, S14, S15, S16, S17, S18, S19, S20, S21, S22, S23 +18
2AudioJack4Connector_Audio:Jack_3.5mm_PJ320D_HorizontalJ1, J2
2WS2812B-2020LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mmD35, D36
1Raspberry_Pi_PicoScottoKeebs_MCU:Raspberry_Pi_PicoU1

Questions

How big is the Selenium s PCB?

It measures 126.2 × 90.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Selenium s use?

73 parts, built around the WS2812B-2020. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Selenium s KiCad files?

From the randcanary/mkpico repository on GitHub, at the commit this page was made from: the board is config/selenium_s/pcb/v4.kicad_pcb and its schematic config/selenium_s/pcb/v4.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Selenium s design in my own project?

Its repository states no licence, so its author keeps all rights: ask randcanary before reusing the design.

Similar boards

  • 4 layers16.9 × 119.4 mmOrbit, the printed circuit board in 3D

    Orbit

    earthtojake/text-to-cad

    Design physical products with AI

    182 parts26kMIT
  • 2 layers240 × 240 mmKfchess, the printed circuit board in 3D

    Kfchess

    misprit7/real-time-chess

    A physical chess board without the concept of turns

    235 parts254MIT
  • 2 layers26 × 28 mmESP32-S3-Expansion, the printed circuit board in 3D

    ESP32-S3-Expansion

    SpacehuhnTech/framework

    ESP32-S3 Framework Expansion Card

    22 parts69CERN-OHL-P-2.0
  • 2 layers86 × 54 mmLLM Business Card, the printed circuit board in 3D

    LLM Business Card

    pham-tuan-binh/bouija

    Running LLM on a Business Card LITERALLY

    84 parts60
  • 2 layers31.9 × 36 mmLemon pcb swizzle, the printed circuit board in 3D

    Lemon pcb swizzle

    rianadon/Cosmos-Keyboard-PCBs

    Open-Source keyboard PCB designs for the Cosmos Keyboard Generator

    63 parts43
  • 6 layers155.5 × 194.6 mmNerdEKO Gamma NoATX, the printed circuit board in 3D

    NerdEKO Gamma NoATX

    phil31/NerdEKO-Gamma

    fork of the NerdOCTAXE-Gamma design (https://github.com/Patsch91/NerdOCTAXE-Gamma), with 12 x BM1370 (14TH/s SHA256)

    499 parts42