Mechanical Keyboard
Making a mechanical keyboard with leds
Created by
Lingfeng Wang
Tier 3
33 views
0 followers
1Mon ⚡
approved Mechanical Keyboard ago
Tickets awarded: 209 tickets
Tier: 3
really impressive work getting the messed up pcb to work!!
Lingfeng Wang
submitted Mechanical Keyboard for review ago
Lingfeng Wang
added to the journal ago
bad case :(
I decided to assemble the case. unluckily, the cad was dimensioned wrong, so it did not fully fit. I ended up with gluing some paper over the seams so it looks alright, as I wait for the new case to print. The keyboard is fully functional, and it sounds quite nice too.
Lingfeng Wang
added to the journal ago
Perma ESC Function
When playing games, I noticed that I needed the esc key a lot. So I made it that if you double press fn, it will lock the tilda key to escape, so you don't need to press the keybind every time.

Lingfeng Wang
added to the journal ago
Function keys
Since my keyboard doesn’t have the 6th row for function keys, I had to make use of the fn key. When pressed, it would make the top row into the f1,2,3 keys. And to tell me it was activated, the top row would turn white. Similarly for caps lock, the led underneath that key would change to white whenever it was on. Since my keyboard LEDs still flicker too much and I honestly don’t care enough to fix it for the 15th time, I decided to remove the wave pattern and just have it a solid color. It still looks nice, and it isn’t like I am looking at my keyboard when I type anyways.

Lingfeng Wang
added to the journal ago
Keyboard works now
I spent a long time mapping individual keys to their function, and the LEDs to each key. This was done mostly trial and error, since the LEDs were not really placed in order.(oops!) after it was done, I wrote a simple script to make the LEDs light up in a wave after a key was pressed. However, due to my pcb issues, the LEDs would flicker a lot. I tried adding caps between 5v and gnd on a couple LEDs and an electrolytic cap on the rp2040, but it didn’t really help.

After adding a bit of foam underneath, the keyboard sounds quite nice, and I am quite proud of it.
Lingfeng Wang
added to the journal ago
Fixed pcb!!!
I finally finished soldering the pcb. I added a layer of electrical tape to keep everything together, then added some masking tape over to make it sound better. I got a basic program to run, making all the LEDs the same color but the keyboard doesn’t keyboard yet.
Lingfeng Wang
added to the journal ago
Fixed? pro micro
I reflowed the pro micro and it magically fixed itself.
I almost broke it, by having shaky hands that knocked off a couple components. Luckily, I was able to push them back into place, albeit a bit out of place.
Well the pro micro works fine, and still turns on the neopixels!
I got flux on my hot plate, but at least the pro micro works...

Lingfeng Wang
added to the journal ago
This project is ragebait
I was able to connect all the traces (not really but I will explain later)

Should've just bought a new board, this was NOT worth the time.
I also thought I broke my pro micro, so I had to desolder it. I was able to test my leds with an arduino mega, which looked fine.

However, inspection showed that two of my neopixels were soldered completely wrong, so I had to remove them and redo it.

The input is tied to the input of the previous led instead of the output.
But this broke the rest of the leds, so I'm gonna take a break from this godforsaken project
Lingfeng Wang
added to the journal ago
Soldered LEDS, diodes, switches
I was able to mount all the components.

However, since the pcb was cut, I need to add wires on top to make extra traces...
Mounting the components wasn't that hard, and I have quite a lot of experience from the hackpad.
Lingfeng Wang
added to the journal ago
Wrong pcb layout
Turns out I sent jlcpcb the wrong pcb layout. Two top keys were misaligned, and I was missing a key on the bottom row. So I had to cut out the pcb and sand and dremel and drill and a bunch of whatnot to fix this.

Terrible experience, 0/10, probably got cancer, do not suggest you try this. Just buy a new pcb it is NOT WORTH IT.

I used superglue to keep the "pcb" in place
Iamalive 🚀
approved Mechanical Keyboard ago
Tier approved: 3
Grant approved: $93.00
Awesome project! Thanks for listening :)
Lingfeng Wang
added to the journal ago
Wrote KMK Code
I was able to put my keyboard layout into the KMK code.

The LED currently is a very simple controller that just sets it all of them to a light cyan. This will be expanded on once tested.
Lingfeng Wang
submitted Mechanical Keyboard for review ago
Iamalive 🚀
requested changes for Mechanical Keyboard ago
Please include a screenshot of the shipping option you choose for your pcb. Additionally, please choose a cheaper option/color for your keyboard switches.
Lingfeng Wang
submitted Mechanical Keyboard for review ago
technical_.
requested changes for Mechanical Keyboard ago
Please specify the amounts of components you need in your BOM. The word diodes is very ambiguous for the amount of diodes you want to order.
Lingfeng Wang
submitted Mechanical Keyboard for review ago
Tanuki ⚡🚀
requested changes for Mechanical Keyboard ago
Hello! Please include the BOM in the readme, as well as the schematic. u also get 45 pieces, but the keeb is 67 pieces. Other than that, looking good!
Lingfeng Wang
submitted Mechanical Keyboard for review ago
Lingfeng Wang
added to the journal ago
Finished V2 of the CAD
I was able to finish the new cad, with the new pcb, stabilizers, and a new pcb mounting method.


Previously, I had the pcb bolted into the case, but now I just have it slide in, and the top and bottom go together to clamp on it.
I'm still not sure how to clamp the two sides together, but that can come later after I have finished making sure everything works IRL.

nimit 🚀
requested changes for Mechanical Keyboard ago
You do not have a PCB screenshot in the repo! Also, your microcontroller sits on the opposite side of your switch. When the mcu is soldered, you will not be able to solder the switch or vice versa! Please move your MCU and check the 3D viewer in kicad to see these issues
Lingfeng Wang
added to the journal ago
Added Extra Key
Looking at some 60% keyboards, I realised that I needed an extra key in order to make it fit with my keycap set.

I added the key, and did some rerouting.

Lingfeng Wang
submitted Mechanical Keyboard for review ago
Lingfeng Wang
added to the journal ago
Finished PCB V2
I finished the new PCB, with a pro micro rather than an elite-pi.

I wanted to use an elite-pi rp2040 as the controller, but I could not find any online without expensive shipping, so I had to switch to the rp2040 pro micro, because it also has enough pins.


The pro micro will actually be underneath the pcb, but with the same orientation.
Lingfeng Wang
added to the journal ago
Finished PCB
I was finally able to finish the PCB today!

I also fixed the LEDs, so they go where they should be now.

Next, I need to fix the cad for my new pcb, and I should be good to go. I also updated my BOM.
Lingfeng Wang
added to the journal ago
Rework Part 1
I started redoing the pcb, with a different matrix and different chip.

I chose to replace this with an elitepi, because it has usb-C, 25 GPIO pins, and has a small form factor that fits on my board.
I also moved it to the back so I can plug directly into the board instead of having an extension cable.

The CAD has leds in the wrong spot other than the green one, because I made a couple edits to the footprint.

Lingfeng Wang
added to the journal ago
LED rework
To try to put everything on one pcb, I decided to mount the leds upside down, like this

I had to make a custom footprint, because kicad did not have one previously.


Next, I need to redo the matrix to make wiring simpler, switch to a rp2040.
koeg 🚀
requested changes for Mechanical Keyboard ago
Hi! Are you getting the cheapest shipping on JLC? Try using global direct shipping. Also, do you have a specific reason for making a separate PCB for the LEDs, instead of just placing them on the main PCB with the switches and the rp2040? I have sent you a DM regarding this. Besides this, everything looks good!
Lingfeng Wang
submitted Mechanical Keyboard for review ago
Lingfeng Wang
added to the journal ago
Rendered CAD
I rendered the CAD (to make the banner look pretty)
Nothing else was changed, which is why this took 0.1 hours. As for the keyboard, it is still being worked on.

alexren ⚡🚀
requested changes for Mechanical Keyboard ago
Hey! I'm returning this as you're missing a LOT of things! you're missing a proper README, PCB files, etc. I would go over the blueprint requirements again and also ask in #blueprint for help!
Lingfeng Wang
submitted Mechanical Keyboard for review ago
Lingfeng Wang
added to the journal ago
Updated PCB
I had to move all the holes on the pcb to the bottom.

This took a lot less time than I expected, and this was actually pretty easy. After some CAD imports, I was done.
Lingfeng Wang
added to the journal ago
CAD Case
While doing the CAD, I realised that a lot of the mounting holes were actually misplaced.

So, I had to go back to kicad and fix those.
Once those were fixed, I made the case of the keyboard.

It took quite a while to get all the parts together, and I had to try a couple different sizes.
So after looking at some keyboards online, I noticed that they had the leds under the keycap.

Looking at most keycaps, such as the one in the CAD, they do have a clear part there. That made me realise I needed to redo the PCB to move all the leds to the bottom, because they used to be on the top... (My switches are actually upside down)


(the white circle is the led hole)
Well I know what I'll be doing for the next couple hours...

Lingfeng Wang
added to the journal ago
Starting CAD
To start, I made/found/imported all the CAD I would need.
I imported the pcbs from kicad, and split them up into two files


I also did a quick CAD of the rp2040 pcb.

I also imported a switch CAD, from this link: https://grabcad.com/library/kailh-polia-switch-cherry-mx-compatible-1

Lastly, I cadded the USB port of the rp2040.

Lingfeng Wang
added to the journal ago
PCB Design
To start off, I put all the keys in their positions.

Then, I made a drawing of all the LEDS I wanted, and started placing them

Getting in the leds was quite a squeeze, and I had to move around a lot of the diodes.

Only after hours, did I finish wiring the keys

It partly took this long because I was lazy and didn't put the keys in a good position, so I had to basically restart and redo all of the layout again.
When I started doing LEDs, I realised there was genuinely no space. So, I decided the best way to go would be to cut out holes in this pcb, and to stack two on top of each other for LEDS. This should also be pretty easy, so I got ahead to doing that.

It may not look pretty, but it does work! (or at least it should...)
The two pcbs are connected with a 3pin header, and I'm just going to hope that everything goes right.
Lingfeng Wang
added to the journal ago
PCB Schematic
I finished the schematic for the pcb, but not the actual pcb itself.

When doing it, I realised that the rp2040 does not have enough GPIO pins for 67 keys, so I opted to use a waveshare rp2040-tiny, which has 20 GPIO pins.
I currently use 19 :(
Now, I am moving onwards to the pcb design.
Lingfeng Wang
added to the journal ago
Design Ideas
Before I started the actual design, I wanted to write out my goals for this project:
I knew that a keyboard requires a case, a pcb, switches, keys, but not much more.
Having found no guidance online, I decided to plan this out step by step.

To start, I looked at how keyboards worked. I decided on a 60% keyboard, because it would be the easiest to make.
I wanted my keyboard to be light purple, so I choose switches and keycaps for this.
For the switches, I honestly picked random switches and hopefully they sound good :P

And for keycaps, I chose a random purple set.

I also wanted to have RGB lights, so I will probably be using SK6812mini (online said it works)

It seems that a seeed xiao rp2040 is the most popular choice, so I will be using those too.

Having planned out all the parts, it was finally time to plan out the build.
This will be the layout, with 67 keys. hehe.

- I will follow the HackPad tutorial for the pcb
- I will figure out how to CAD the case on my own...
Lingfeng Wang
started Mechanical Keyboard ago
11/29/2025 7 PM - Design Ideas
Before I started the actual design, I wanted to write out my goals for this project:
I knew that a keyboard requires a case, a pcb, switches, keys, but not much more.
Having found no guidance online, I decided to plan this out step by step.

To start, I looked at how keyboards worked. I decided on a 60% keyboard, because it would be the easiest to make.
I wanted my keyboard to be light purple, so I choose switches and keycaps for this.
For the switches, I honestly picked random switches and hopefully they sound good :P

And for keycaps, I chose a random purple set.

I also wanted to have RGB lights, so I will probably be using SK6812mini (online said it works)

It seems that a seeed xiao rp2040 is the most popular choice, so I will be using those too.

Having planned out all the parts, it was finally time to plan out the build.
This will be the layout, with 67 keys. hehe.

- I will follow the HackPad tutorial for the pcb
- I will figure out how to CAD the case on my own...
11/29/2025 10 PM - PCB Schematic
I finished the schematic for the pcb, but not the actual pcb itself.

When doing it, I realised that the rp2040 does not have enough GPIO pins for 67 keys, so I opted to use a waveshare rp2040-tiny, which has 20 GPIO pins.
I currently use 19 :(
Now, I am moving onwards to the pcb design.
11/30/2025 8:21 PM - PCB Design
To start off, I put all the keys in their positions.

Then, I made a drawing of all the LEDS I wanted, and started placing them

Getting in the leds was quite a squeeze, and I had to move around a lot of the diodes.

Only after hours, did I finish wiring the keys

It partly took this long because I was lazy and didn't put the keys in a good position, so I had to basically restart and redo all of the layout again.
When I started doing LEDs, I realised there was genuinely no space. So, I decided the best way to go would be to cut out holes in this pcb, and to stack two on top of each other for LEDS. This should also be pretty easy, so I got ahead to doing that.

It may not look pretty, but it does work! (or at least it should...)
The two pcbs are connected with a 3pin header, and I'm just going to hope that everything goes right.
11/30/2025 8:30 PM - Starting CAD
To start, I made/found/imported all the CAD I would need.
I imported the pcbs from kicad, and split them up into two files


I also did a quick CAD of the rp2040 pcb.

I also imported a switch CAD, from this link: https://grabcad.com/library/kailh-polia-switch-cherry-mx-compatible-1

Lastly, I cadded the USB port of the rp2040.

12/1/2025 7 AM - CAD Case
While doing the CAD, I realised that a lot of the mounting holes were actually misplaced.

So, I had to go back to kicad and fix those.
Once those were fixed, I made the case of the keyboard.

It took quite a while to get all the parts together, and I had to try a couple different sizes.
So after looking at some keyboards online, I noticed that they had the leds under the keycap.

Looking at most keycaps, such as the one in the CAD, they do have a clear part there. That made me realise I needed to redo the PCB to move all the leds to the bottom, because they used to be on the top... (My switches are actually upside down)


(the white circle is the led hole)
Well I know what I'll be doing for the next couple hours...
12/1/2025 9 AM - Updated PCB
I had to move all the holes on the pcb to the bottom.

This took a lot less time than I expected, and this was actually pretty easy. After some CAD imports, I was done.
12/1/2025 7 PM - Rendered CAD
I rendered the CAD (to make the banner look pretty)
Nothing else was changed, which is why this took 0.1 hours. As for the keyboard, it is still being worked on.

12/4/2025 2 PM - LED rework
To try to put everything on one pcb, I decided to mount the leds upside down, like this

I had to make a custom footprint, because kicad did not have one previously.


Next, I need to redo the matrix to make wiring simpler, switch to a rp2040.
12/4/2025 9 PM - Rework Part 1
I started redoing the pcb, with a different matrix and different chip.

I chose to replace this with an elitepi, because it has usb-C, 25 GPIO pins, and has a small form factor that fits on my board.
I also moved it to the back so I can plug directly into the board instead of having an extension cable.

The CAD has leds in the wrong spot other than the green one, because I made a couple edits to the footprint.

12/5/2025 - Finished PCB
I was finally able to finish the PCB today!

I also fixed the LEDs, so they go where they should be now.

Next, I need to fix the cad for my new pcb, and I should be good to go. I also updated my BOM.
12/6/2025 5 PM - Finished PCB V2
I finished the new PCB, with a pro micro rather than an elite-pi.

I wanted to use an elite-pi rp2040 as the controller, but I could not find any online without expensive shipping, so I had to switch to the rp2040 pro micro, because it also has enough pins.


The pro micro will actually be underneath the pcb, but with the same orientation.
12/6/2025 10 PM - Added Extra Key
Looking at some 60% keyboards, I realised that I needed an extra key in order to make it fit with my keycap set.

I added the key, and did some rerouting.

12/7/2025 - Finished V2 of the CAD
I was able to finish the new cad, with the new pcb, stabilizers, and a new pcb mounting method.


Previously, I had the pcb bolted into the case, but now I just have it slide in, and the top and bottom go together to clamp on it.
I'm still not sure how to clamp the two sides together, but that can come later after I have finished making sure everything works IRL.

12/26/2025 - Wrote KMK Code
I was able to put my keyboard layout into the KMK code.

The LED currently is a very simple controller that just sets it all of them to a light cyan. This will be expanded on once tested.
1/23/2026 9:15 PM - Wrong pcb layout
Turns out I sent jlcpcb the wrong pcb layout. Two top keys were misaligned, and I was missing a key on the bottom row. So I had to cut out the pcb and sand and dremel and drill and a bunch of whatnot to fix this.

Terrible experience, 0/10, probably got cancer, do not suggest you try this. Just buy a new pcb it is NOT WORTH IT.

I used superglue to keep the "pcb" in place
1/23/2026 9:17 PM - Soldered LEDS, diodes, switches
I was able to mount all the components.

However, since the pcb was cut, I need to add wires on top to make extra traces...
Mounting the components wasn't that hard, and I have quite a lot of experience from the hackpad.
1/23/2026 9:21 PM - This project is ragebait
I was able to connect all the traces (not really but I will explain later)

Should've just bought a new board, this was NOT worth the time.
I also thought I broke my pro micro, so I had to desolder it. I was able to test my leds with an arduino mega, which looked fine.

However, inspection showed that two of my neopixels were soldered completely wrong, so I had to remove them and redo it.

The input is tied to the input of the previous led instead of the output.
But this broke the rest of the leds, so I'm gonna take a break from this godforsaken project
1/23/2026 9:23 PM - Fixed? pro micro
I reflowed the pro micro and it magically fixed itself.
I almost broke it, by having shaky hands that knocked off a couple components. Luckily, I was able to push them back into place, albeit a bit out of place.
Well the pro micro works fine, and still turns on the neopixels!
I got flux on my hot plate, but at least the pro micro works...

1/26/2026 1:08 AM - Fixed pcb!!!
I finally finished soldering the pcb. I added a layer of electrical tape to keep everything together, then added some masking tape over to make it sound better. I got a basic program to run, making all the LEDs the same color but the keyboard doesn’t keyboard yet.
1/26/2026 1:13 AM - Keyboard works now
I spent a long time mapping individual keys to their function, and the LEDs to each key. This was done mostly trial and error, since the LEDs were not really placed in order.(oops!) after it was done, I wrote a simple script to make the LEDs light up in a wave after a key was pressed. However, due to my pcb issues, the LEDs would flicker a lot. I tried adding caps between 5v and gnd on a couple LEDs and an electrolytic cap on the rp2040, but it didn’t really help.

After adding a bit of foam underneath, the keyboard sounds quite nice, and I am quite proud of it.
1/26/2026 11 AM - Function keys
Since my keyboard doesn’t have the 6th row for function keys, I had to make use of the fn key. When pressed, it would make the top row into the f1,2,3 keys. And to tell me it was activated, the top row would turn white. Similarly for caps lock, the led underneath that key would change to white whenever it was on. Since my keyboard LEDs still flicker too much and I honestly don’t care enough to fix it for the 15th time, I decided to remove the wave pattern and just have it a solid color. It still looks nice, and it isn’t like I am looking at my keyboard when I type anyways.

1/26/2026 12:15 PM - Perma ESC Function
When playing games, I noticed that I needed the esc key a lot. So I made it that if you double press fn, it will lock the tilda key to escape, so you don't need to press the keybind every time.

1/26/2026 12:25 PM - bad case :(
I decided to assemble the case. unluckily, the cad was dimensioned wrong, so it did not fully fit. I ended up with gluing some paper over the seams so it looks alright, as I wait for the new case to print. The keyboard is fully functional, and it sounds quite nice too.