This is a generic looking 80% TKL keyboard I made over the span of a month. In total, I've spent about 20-25 hours in total for PCB redesigns, writing the keyboard firmware and case redesigns.
- Individually backlit keys with software addressable RGB
- 0.91" OLED display
- USB and Bluetooth connectivity
The keyboard has three LED modes:
- Off Mode: All LEDs are turned off
- RGB Mode: LEDs display a rainbow effect
- Custom Color Mode: All LEDs use a user-defined color
- Toggle LED Mode:
Ctrl + Alt + Pause/Break- Cycles through Off → RGB → Custom Color
- Adjust Brightness Up:
Ctrl + Alt + Shift + Up Arrow - Adjust Brightness Down:
Ctrl + Alt + Shift + Down Arrow
- Enter Custom Color Mode:
Ctrl + Alt + Page Up - When in custom color mode:
- The OLED will prompt for R, G, and B values sequentially
- Use number keys (0-9) to enter a value between 0-255
- Press
Backspaceto delete the last digit - Press
Enterto confirm and move to the next color component - After setting all three RGB values, the keyboard returns to normal operation with your custom color
The keyboard can operate in either USB or Bluetooth mode:
- Check Current Mode: The OLED screen displays either "USB Mode" or "BT Mode"
- Switch to Bluetooth Mode: Hold the Pause/Break key during boot (pin IO36)
- Note: After setup, the keyboard will remain in Bluetooth mode until changed
The OLED display shows:
- "AnsonKeyboard"
- Connection mode (USB or Bluetooth)
- Current WPM (words per minute) typing speed
- Current LED mode
When in custom color configuration mode, the display shows prompts for entering RGB values.
The keyboard automatically calculates your typing speed (WPM) and displays it on the OLED screen. This is calculated based on:
- Number of keypresses
- Time elapsed since last keypress
- Standard conversion (5 characters = 1 word)
| Function | Key Combination |
|---|---|
| Toggle LED Mode | Ctrl + Alt + Pause/Break |
| Enter Custom Color Mode | Ctrl + Alt + Page Up |
| Increase LED Brightness | Ctrl + Alt + Shift + Up Arrow |
| Decrease LED Brightness | Ctrl + Alt + Shift + Down Arrow |
| Enter Bluetooth Mode | Hold Pause/Break during boot |
I started with a simple idea which was a flat minimalistic TKL keyboard (inspired by the Apple keyboard). The goal was to keep it clean and modern, and remove unnecessary designs. However, as I thought more about ergonomics, I quickly realized that a completely flat keyboard wouldn't be comfortable at all to use during typing.
My initial PCB design had borders that were too thick, which also made the case borders too thick, it was quite bulky and uglier than what I wanted
I originally planned to use the Orpheus Pico as the microcontroller. However, due to the large footprint (making the case even bulkier) and the lack of wireless connectivity, I scrapped that idea and moved on to a new design. At this point, I also decided to make a triangle wedge to set the keyboard at 6 degrees for a better typing experience.
I wanted an integrated USB C port directly on the PCB, but when I redesigned the case and PCB to fit it, I realized that it would be close to impossible for someone with my skill level to hand solder the USB C port and it would have stuck up at an angle anyway (this stresses the cable)
For the final design, I came up a solution. Instead of mounting the USB C port directly onto the PCB, I would purchase a USB C breakout board instead and connect it via cables to the PCB.
(This is when the routing hell begins as I reroute the entire thing at least 3 times) The first time was my extremely inefficient matrix which was a 8x11 matrix. The traces were extremely messy and I've counted about 1.1k traces and 500 vias in total. (I'm so glad I don't have to see it again). I've then updated it to a 7x14 matrix which made routing much easier. The second time was when I had to move all LEDs down by 2mm since they didn't align with the cutout in the switches. Not even an hour after posting about my rerouting, someone from Slack recommmended that I wire my LEDs from top to bottom instead of side to side as to reduce via usage. This is the current version of the PCB and I'm quite happy with it
| QTY | Name | Part Number | LCSC Part Number | Price |
|---|---|---|---|---|
| 100x | 4.7kΩ Resistor | 1206W4F4701T5E | C17936 | $0.32 |
| 100x | 5.1kΩ Resistor | 1206W4F5101T5E | C26033 | $0.32 |
| 20x | Tact Switch | TS-1187A-B-A-B | C318884 | $0.38 |
| 5x | 3.3v Regulator | AMS1117-3.3 | C6186 | $0.84 |
| 150x | 100nF Capacitor | CC1206KRX7R9BB104 | C82601 | $1.61 |
| 20x | 10uF Capacitor | CL31B106KAHNNNE | C14860 | $0.54 |
| 200x | Diode | 1N4148WL | C33962554 | $1.00 |
| QTY | Name | Part Number | LCSC Part Number | Price |
|---|---|---|---|---|
| 150x | RGB LED | SK6812MINI-E | C5149201 | $8.70 |
| 1x | ESP-32-S3 | ESP32-S3-WROOM-1-N16R2 | C2913205 | $5.04 |
| 10x | Level Shifter | SN74LV1T34DBVR | C100024 | $0.59 |
LCSC Shipping: Singapore Post – $5.72
| QTY | Name | Local Price | Conversion Upcharge | Price |
|---|---|---|---|---|
| 5x | USB C Breakout Board | RM8.13 | +$0.15 | $2.10 |
| 1x | 0.91" OLED | RM10.62 | +$0.15 | $2.65 |
| 1x | SPX Express Shipping | RM5.20 | +$0.15 | $1.40 |
| QTY | Name | File Name | Production Method | Price |
|---|---|---|---|---|
| 1x | Top Case | TopCase.step | FDM 3D Print | - |
| 1x | Plate | Plate.step | FDM 3D Print | - |
| 1x | Lower Case | LowerCase.step | FDM 3D Print | - |
| 1x | Case Stand | CaseStand.step | FDM 3D Print | - |
| 5x | PCB | gerbers.zip | JLCPCB | $22.20 |
| 1x | PCB Shipping | - | E-Post | $9.76 |
| QTY | Name | Local Price | Conversion Upcharge | Price |
|---|---|---|---|---|
| 27x | M2 x 3.5 x 4 Heat Set Insert | RM9.45 | +$0.15 | $2.39 |
| 12x | M2 x 3.5 x 2 Heat Set Insert | RM4.20 | +$0.15 | $1.14 |
| 12x | M2 x 5mm Hex Screw | RM4.56 | +$0.15 | $1.23 |
| 12x | M2 x 3mm Hex Screw | RM4.08 | +$0.15 | $1.12 |
| 15x | M2 x 12mm Hex Screw | RM6.90 | +$0.15 | $1.78 |
| 1x | SPX Express Shipping | RM10.60 | +$0.15 | $2.66 |
| QTY | Name | Local Price | Conversion Upcharge | Price |
|---|---|---|---|---|
| 1x | XDA Keycap Set | RM91.20 | +$2.50 | $24.14 |
| 1x | TX Almost Perfect Stabilizers | RM74.80 | +$2.50 | $20.25 |
| 91x | Gateron Smoothie Switches | RM136.50 | +$4.00 | $35.42 |
| 1x | SPX Express Shipping | RM17.00 | +$0.40 | $4.31 |
- LCSC Total: $25.06
- Electronics (Local) Total: $6.15
- JLCPCB Total: $31.96
- Fasteners Total: $10.32
- Mechanical Total: $84.12
Note: Conversion upcharge is just a buffer for conversion rate fluctuations. Any unused funds will be returned.
















