Dov's 100% Keyboard
a 100% mechanical keyboard based on the pi pico per key rgb, qmk firmware, rotary encoder, back mounted
Created by
Dov
Tier 3
22 views
5 followers
Dov
added to the journal ago
Bought PCB + Components from LCSC
Will purchase the rest of the required items from aliexpress.
I added a few extra LEDs since if I increased the cost by just under $2, there would be no $3 small order upcharge (saving blueprint the extra dollar). Thought I'd add this just incase someone was wondering.
Image cus image is required for some reason?

m0.hid ⚡
approved Dov's 100% Keyboard ago
Tier approved: 3
Grant approved: $103.00
Great work on this keyboard, I love the case you made!!
Dov
submitted Dov's 100% Keyboard for review ago
Dov
added to the journal ago
Updated Case Design

I added a sort of textured design to the front plate, as well as the TEDS logo. This adds some feel and texture to the keyboard, and makes it seem less flat. I also slightly reinforced some of the holes where the heat sets would go into in the bottom.

Dov
added to the journal ago
Added screws + heatset inserts

I added all of the heatset inserts and screws inside the assembled CAD. This will help me better plan / design the case, as well as any spacing / tolerances.
Sidd 🚀
requested changes for Dov's 100% Keyboard ago
Great project! The only thing I need you to fix is to add a bit more polish/style to the keyboard case, everything looks good. https://github.com/sharkingstudios/riptide might be good inspiration!
Dov
submitted Dov's 100% Keyboard for review ago
Dov
added to the journal ago
Finished Top Case

I created the top case. First, I added screw holes to the bottom case. To do this, I had to adjust the mounting tabs to make enough space and to ensure it is strong enough.

Here is the top case:

I added space for an 18mm rotary encoder knob.

I also added some extra space for the tabs. 1.5mm extra so that a 3mm (1.5mm) acrylic plate could be used if needed, and an extra 3mm to make clearance for the M3 screws / bolts securing the plate to the bottom case.

I also added a tilt to the bottom of the case

It should be around 5 degrees.
I also added a hole / slot for a USB cable (hopefully USBC if I can get a USBC RP2040 board)

I definitely didn't spend all day on this...
Time to get ready for the Design Review! (readme in repo, add cad files, bill of material etc.)
Dov
added to the journal ago
Redid plate + bottom placement / support

I felt that the old plate + bottom case didn't support the case well and may break. As a result, I redid how it worked. Would've been quicker if fusion wasn't annoying and / or I did it from the start, but here I am. Time to work on the top part!
Dov
added to the journal ago
Placed switches + Adapted plate to better fit rotary encoder

I placed every single MX switch into their spots. I used the measure tool and used move / copy along with coordinates to correctly place every single switch. I then edited the plate to add a square hole for the rotary encoder with a 0.5mm tolerance on all 4 sides.
Dov
added to the journal ago
Created (mostly) bottom part of the case

Using a sketch of the plate, I made the bottom case. I added a 1mm tolerence for the plate / case so that it would fit. I used an MX switch where the ESC key would be to align the plate and PCB.

At first there was less clearance but then I added a bit more to make sure a USBC pico clone could fit (might use my RP2040 devboard that I made)
Dov
added to the journal ago
Created Keyboard Plate

I used a generator to create the plate DXF. I added extra padding to ensure there is enough space and then added screw holes / tabs. I decided to go with a bottom mount instead of a tray mount.
Dov
added to the journal ago
Added a level shifter.

Why? Some guy in some random discord server told me to. Yep. That's it. I had a look around at different level shifters and figured out this one isn't too big and might not be too hard to solder.
I was also given the advice to use a lower power LED but... I decided to stick with these. Resistors should make it fine and I can always limit it in QMK. I think.
Dov
added to the journal ago
Finished PCB (I think / hope)

Everything is routed. I routed the columns and rows to the Pi Pico. Was a struggle especially with all of the traces being packed together tightly. I then added a ground fill, and fixed any errors. I then added a silkscreen. I will now need to design a case, and also make the firmware.
Dov
added to the journal ago
Routed 5v + Capacitors

I routed all of the LED 5v pads to the capacitors, then connected the lines to a large 5v running throughout the board. The main 5v trace is thicker to prevent issues.
I also routed all of the columns, and started work on the rows and connecting the LEDs.
Dov
added to the journal ago
Capacitors + Connect rows + Columns

I connected all of the rows and columns together (duplex so 2x rows and half columns). I placed the capacitors after which was a bad idea, but in the end it worked out. It was a lot of clicking and SHIFT + P. I used the (-7.4, 4) and (7.4, 6) offsets for the left and right capacitors. This is because I ended up flipping half of the LEDs to make data connections easier as it is in a Z pattern, going from left to right in the top row, right to left in the row below and so on.

Dov
added to the journal ago
Position all LEDs

I positioned all of the SK6812MINI-E LEDs and started wiring up the switches. But guess who forgot the capacitors... me. Hopefully all of the traces arent in the way of the capacitors.
Dov
added to the journal ago
Fixed Capacitors

So turns out I don't know how capacitors work... At least I figured it out by doing some googling and wondering why mine looks very different to the others.
Dov
added to the journal ago
Added RGB

I added the RGB leds (sk6812mini-e) to the schematic and wired them up. I used 0.1uF capacitors to reduce the power consumption and that it wouldn't overload the pi. I connected the 5v to the VBUS / USB 5v power. Hopefully it works. Also wasted a bit of time due to bad counting.
Dov
added to the journal ago
Duplex Matrix

Instead of an IO expander, I decided to add a duplex matrix. This involved merging 2 pairs of columns, halving the number of columns needed, but doubling the rows needed. Overall, this saved pins. I was also able to move some of the switches which were in a column alone to free up a column. This should remove the need for an IO expander. I looked into IO expanders, but felt they were too undocumented, both in QMK and ZMK. I am also considering whether I should add a rotary encoder or an oled screen, since I will only have 2 free GPIO pins after I add the backlight / rgb lights.
Dov
added to the journal ago
Connected switches (Schematic)

I connected all of the switches in the schematic in a matrix. I ended up with 6 rows and 20 columns. Unfortunately the pico only has 26 GPIO pins. I may need to use an IO expander.
Dov
added to the journal ago
Layout + Switches


First, I setup the required KiCad libraries / plugins. This involved installing the following repos:
Zykrah's KiCad repository
ebastler KiCad repository
From these repos, I installed the marbastlib library and the KiCad KLE placer plugin.
I then started placing down the switch matrix (22 columns, 6 rows). I then deleted the switches that weren't used, or areas where a switch was larger (e.g. enter, shift). After that, I started placing the PCB. After updating from the schematic, I placed the first switch and diode down in their correct positions. Using the KLE auto placer plugin, I was able to easily replicate this and place all of the other switches down, with the diodes in the same position. I then placed all of the stabilisers for all of the switches that were 2u or larger.
Summary:
- Setup the environment
- Created the schematic for the switch matrix
- Placed switches in ISO 105 key layout
- Placed stabilisers
Todo:
- Wire everything
- Add leds (per switch)
Dov
started Dov's 100% Keyboard ago
12/29/2025 - Layout + Switches


First, I setup the required KiCad libraries / plugins. This involved installing the following repos:
Zykrah's KiCad repository
ebastler KiCad repository
From these repos, I installed the marbastlib library and the KiCad KLE placer plugin.
I then started placing down the switch matrix (22 columns, 6 rows). I then deleted the switches that weren't used, or areas where a switch was larger (e.g. enter, shift). After that, I started placing the PCB. After updating from the schematic, I placed the first switch and diode down in their correct positions. Using the KLE auto placer plugin, I was able to easily replicate this and place all of the other switches down, with the diodes in the same position. I then placed all of the stabilisers for all of the switches that were 2u or larger.
Summary:
- Setup the environment
- Created the schematic for the switch matrix
- Placed switches in ISO 105 key layout
- Placed stabilisers
Todo:
- Wire everything
- Add leds (per switch)
1/10/2026 10 AM - Connected switches (Schematic)

I connected all of the switches in the schematic in a matrix. I ended up with 6 rows and 20 columns. Unfortunately the pico only has 26 GPIO pins. I may need to use an IO expander.
1/10/2026 3 PM - Duplex Matrix

Instead of an IO expander, I decided to add a duplex matrix. This involved merging 2 pairs of columns, halving the number of columns needed, but doubling the rows needed. Overall, this saved pins. I was also able to move some of the switches which were in a column alone to free up a column. This should remove the need for an IO expander. I looked into IO expanders, but felt they were too undocumented, both in QMK and ZMK. I am also considering whether I should add a rotary encoder or an oled screen, since I will only have 2 free GPIO pins after I add the backlight / rgb lights.
1/11/2026 10:04 PM - Added RGB

I added the RGB leds (sk6812mini-e) to the schematic and wired them up. I used 0.1uF capacitors to reduce the power consumption and that it wouldn't overload the pi. I connected the 5v to the VBUS / USB 5v power. Hopefully it works. Also wasted a bit of time due to bad counting.
1/11/2026 10:24 PM - Fixed Capacitors

So turns out I don't know how capacitors work... At least I figured it out by doing some googling and wondering why mine looks very different to the others.
1/12/2026 - Position all LEDs

I positioned all of the SK6812MINI-E LEDs and started wiring up the switches. But guess who forgot the capacitors... me. Hopefully all of the traces arent in the way of the capacitors.
1/14/2026 - Capacitors + Connect rows + Columns

I connected all of the rows and columns together (duplex so 2x rows and half columns). I placed the capacitors after which was a bad idea, but in the end it worked out. It was a lot of clicking and SHIFT + P. I used the (-7.4, 4) and (7.4, 6) offsets for the left and right capacitors. This is because I ended up flipping half of the LEDs to make data connections easier as it is in a Z pattern, going from left to right in the top row, right to left in the row below and so on.

1/16/2026 - Routed 5v + Capacitors

I routed all of the LED 5v pads to the capacitors, then connected the lines to a large 5v running throughout the board. The main 5v trace is thicker to prevent issues.
I also routed all of the columns, and started work on the rows and connecting the LEDs.
1/17/2026 - Finished PCB (I think / hope)

Everything is routed. I routed the columns and rows to the Pi Pico. Was a struggle especially with all of the traces being packed together tightly. I then added a ground fill, and fixed any errors. I then added a silkscreen. I will now need to design a case, and also make the firmware.
1/19/2026 - Added a level shifter.

Why? Some guy in some random discord server told me to. Yep. That's it. I had a look around at different level shifters and figured out this one isn't too big and might not be too hard to solder.
I was also given the advice to use a lower power LED but... I decided to stick with these. Resistors should make it fine and I can always limit it in QMK. I think.
1/25/2026 12 PM - Created Keyboard Plate

I used a generator to create the plate DXF. I added extra padding to ensure there is enough space and then added screw holes / tabs. I decided to go with a bottom mount instead of a tray mount.
1/25/2026 4 PM - Created (mostly) bottom part of the case

Using a sketch of the plate, I made the bottom case. I added a 1mm tolerence for the plate / case so that it would fit. I used an MX switch where the ESC key would be to align the plate and PCB.

At first there was less clearance but then I added a bit more to make sure a USBC pico clone could fit (might use my RP2040 devboard that I made)
1/25/2026 6 PM - Placed switches + Adapted plate to better fit rotary encoder

I placed every single MX switch into their spots. I used the measure tool and used move / copy along with coordinates to correctly place every single switch. I then edited the plate to add a square hole for the rotary encoder with a 0.5mm tolerance on all 4 sides.
1/26/2026 - Redid plate + bottom placement / support

I felt that the old plate + bottom case didn't support the case well and may break. As a result, I redid how it worked. Would've been quicker if fusion wasn't annoying and / or I did it from the start, but here I am. Time to work on the top part!
1/27/2026 - Finished Top Case

I created the top case. First, I added screw holes to the bottom case. To do this, I had to adjust the mounting tabs to make enough space and to ensure it is strong enough.

Here is the top case:

I added space for an 18mm rotary encoder knob.

I also added some extra space for the tabs. 1.5mm extra so that a 3mm (1.5mm) acrylic plate could be used if needed, and an extra 3mm to make clearance for the M3 screws / bolts securing the plate to the bottom case.

I also added a tilt to the bottom of the case

It should be around 5 degrees.
I also added a hole / slot for a USB cable (hopefully USBC if I can get a USBC RP2040 board)

I definitely didn't spend all day on this...
Time to get ready for the Design Review! (readme in repo, add cad files, bill of material etc.)
2/17/2026 - Added screws + heatset inserts

I added all of the heatset inserts and screws inside the assembled CAD. This will help me better plan / design the case, as well as any spacing / tolerances.
2/18/2026 - Updated Case Design

I added a sort of textured design to the front plate, as well as the TEDS logo. This adds some feel and texture to the keyboard, and makes it seem less flat. I also slightly reinforced some of the holes where the heat sets would go into in the bottom.

2/26/2026 - Bought PCB + Components from LCSC
Will purchase the rest of the required items from aliexpress.
I added a few extra LEDs since if I increased the cost by just under $2, there would be no $3 small order upcharge (saving blueprint the extra dollar). Thought I'd add this just incase someone was wondering.
Image cus image is required for some reason?
