Blueprint

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 Dov

Tier 3

22 views

5 followers

Dov 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?

image

m0.hid 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 Dov submitted Dov's 100% Keyboard for review ago

Dov Dov added to the journal ago

Updated Case Design

image

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.
image

Dov Dov added to the journal ago

Added screws + heatset inserts

image

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 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 Dov submitted Dov's 100% Keyboard for review ago

Dov Dov added to the journal ago

Finished Top Case

AssembledKB

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.
image

Here is the top case:
image

I added space for an 18mm rotary encoder knob.

image

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.

image

I also added a tilt to the bottom of the case
image

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)
image

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 Dov added to the journal ago

Redid plate + bottom placement / support

image
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 Dov added to the journal ago

Placed switches + Adapted plate to better fit rotary encoder

Assembled

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 Dov added to the journal ago

Created (mostly) bottom part of the case

image

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.

image

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 Dov added to the journal ago

Created Keyboard Plate

image

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 Dov added to the journal ago

Added a level shifter.

image

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.

image

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 Dov added to the journal ago

Finished PCB (I think / hope)

image

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 Dov added to the journal ago

Routed 5v + Capacitors

image

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 Dov added to the journal ago

Capacitors + Connect rows + Columns

image

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.
image

Dov Dov added to the journal ago

Position all LEDs

image

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 Dov added to the journal ago

Fixed Capacitors

image

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 Dov added to the journal ago

Added RGB

image

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 Dov added to the journal ago

Duplex Matrix

image

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 Dov added to the journal ago

Connected switches (Schematic)

image

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 Dov added to the journal ago

Layout + Switches

image
image

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 Dov started Dov's 100% Keyboard ago

12/29/2025 - Layout + Switches

image
image

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)

image

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

image

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

image

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

image

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

image

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

image

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.
image

1/16/2026 - Routed 5v + Capacitors

image

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)

image

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.

image

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.

image

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

image

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

image

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.

image

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

Assembled

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

image
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

AssembledKB

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.
image

Here is the top case:
image

I added space for an 18mm rotary encoder knob.

image

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.

image

I also added a tilt to the bottom of the case
image

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)
image

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

image

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

image

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.
image

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?

image