Awesome
<p align="center"> <img src="img/yampad_logo.png" alt="Yampad logo" width="450"/> <img src="img/qmk-badge-dark.png" alt="QMK" width="145"/> </p> <h3 align="center">The Yampad project repository</h3> <div align="center"> </div>The Yampad project is an open-source, QMK (Quantum Mechanical Keyboard Firmware) powered, hot-swappable, RGB-backlighted, OLED featured, mechanical numpad. This repository will be used to share information about the project and instruction on how to use and assemble the Yampad.
<p align="center"> <img src="img/yampad.jpg" alt="Yampad PCB" width="600"/> </p>Designer's bio: Mattia Dal Ben (aka u/TiaMaT102) obtained a master's degree in Electrical Engineering with a specialization in Computer Science at the University of Udine. Currently works as a Software Engineer in R&D department for a big IoT and Embedded Computers company.
Table of contents
Rationale
<p align="center"> <img src="img/yampad2.jpg" alt="Yampad v2" width="600"/> </p>The Yampad is a Macropad/Numpad which uses Cherry MX style mechanical switches laid out in the usual numeric pad layout. The only difference comes from the bottom row, which uses a 4 keys configuration, thus enabling the use of the macropad as a nav cluster.
The name comes from the acronym: Yet Another Mechanical numPAD, referring to the disruptive and innovative nature of the project.
The main goal of this project is to have a cheap, easy-to-build, feature-rich numpad which is completely open source.
Features:
- Cheap to build: the PCB can be manufactured for less than 1$ per piece.
- Easy to source components.
- Easy to build.
- Hot swappable keys using Kailh PCB sockets.
- Arduino Pro Micro powered.
- QMK compatible.
- RGB backlighting support (optional).
- OLED 0.91" screen (optional).
- Completely open-source.
Useful links
Default Layout
<p align="center"> <img src="img/BL.png" alt="Layer 1 Yampad" width="250"/> <img src="img/NV.png" alt="Layer 2 Yampad" width="250"/> <img src="img/FN.png" alt="Layer 3 Yampad" width="250"/> </p>Bill of materials
Qty | Item | Notes |
---|---|---|
1 | Arduino Pro Micro (ATmega32u4) | a.k.a. SparkFun Pro Micro |
18 | Cherry MX compatible swtiches | |
18 | SOD-123 1N4148/1N4148W diodes | |
18 | Kailh PCB sockets CPG151101S11 | |
9 | WS2812B RGB LEDs | Optional |
9 | SMD 0805 100nF capacitors | Optional (only required if WS2812B are installed) |
1 | I2C 0.91" 128*32 OLED Display Module | The ones using SSD1306 driver IC over I2C |
1 | 6mm*6mm button switch | |
1 | YamPAD PCB | Order from PCBWay |
5 | M3 screws |
Assembly guide
There's no wrong order for the YamPAD assembly with the exception of the Arduino/OLED/ResetButton. Here I will suggest an order because I found more comfortable to solder the components this way.
- Start with soldering the WS2812 LEDs. Start by applying solder to a pad, then heat it up while adding the component, finally solder the remaining pads.
- Now add the 0805 100nF caps. Use the same technique as before.
- Add the 1N4148 diodes.
- Add the CPG151101S11 Kailh PCB sockets.
- Add the reset 6mm button switch.
- Add some electrical tape just to be sure.
- Add the Arduino Pro Micro bottom side up.
- Add the OLED screen
- Move to the firmware section and you should be set!
Assembly details
Step 1: WS2812 assembly
<p align="left">The LEDs have a direction, this is indicated by a small cut out corner showing a triangle on the LED itself that must align with a corner indicated on the PCB as a visible corner angle. Top left on images below.</p> <p align="center"> <img src="img/assembly/step1-a.jpg" alt="Step 1-a" width="250"/> <img src="img/assembly/step1-b.jpg" alt="Step 1-b" width="250"/> <img src="img/assembly/step1-c.jpg" alt="Step 1-c" width="250"/> </p>Step 2: Capacitors assembly
<p align="center"> <img src="img/assembly/step2-a.jpg" alt="Step 2-a" width="300"/> <img src="img/assembly/step2-b.jpg" alt="Step 2-b" width="300"/> </p>Step 3: Diodes assembly
<p align="left">The diodes have a direction, the side indicated by the line on the diode must align to the closed side of the shape on the PCB. Left on the three images below.</p> <p align="center"> <img src="img/assembly/step3-a.jpg" alt="Step 3-a" width="250"/> <img src="img/assembly/step3-b.jpg" alt="Step 3-b" width="250"/> <img src="img/assembly/step3-c.jpg" alt="Step 3-c" width="250"/> </p>Step 4: Kailh PCB sockets assembly
<p align="center"> <img src="img/assembly/step4-a.jpg" alt="Step 4-a" width="300"/> <img src="img/assembly/step4-b.jpg" alt="Step 4-b" width="300"/> </p>Step 5: Reset switch
<p align="center"> <img src="img/assembly/step5.jpg" alt="Step 5" width="300"/> </p>Step 6: Electrical tape
<p align="center"> <img src="img/assembly/step6.jpg" alt="Step 6" width="300"/> </p>Step 7: Arduino assembly
<p align="center"> <img src="img/assembly/step7-a.jpg" alt="Step 7-a" width="300"/> <img src="img/assembly/step7-b.jpg" alt="Step 7-b" width="300"/> </p>Firmware
The firmware is available through QMK firmware repository. Make example for this keyboard (after setting up your build environment):
make yampad:default
Example of flashing this keyboard:
make yampad:default:flash
See the build environment setup and the make instructions for more information. Brand new to QMK? Start with our Complete Newbs Guide.
Pre-built
I also added a pre-built .HEX file in the 'firmware/' folder here to test the electronics.
Via Support
I also added a porting to via .HEX file in the 'firmware/via_support' folder here to load use .json file in via apps.
Stacked Acrylic Case
<p align="center"> <img src="img/acrylic_case/yampad (2 of 10).jpg" alt="Yampad Acrylic Case" width="300"/> <img src="img/acrylic_case/yampad (4 of 10).jpg" alt="Yampad Acrylic Case" width="300"/> </p> <p align="center"> <img src="img/acrylic_case/yampad (10 of 10).jpg" alt="Yampad Acrylic Case" width="300"/> </p>Acrylic case image gallery here.
Donations
If you've read this far and found something useful, please consider donating to help me maintain and further develop this project.
<p align="center"> <a href="https://www.paypal.me/MattiaDalBen"><img src="img/donate-button.jpeg" alt="Donate button" width=300/></a> </p>