Gethin's 75% Macro KB
Custom 75% mechanical keyboard with macro keys powered by a Raspberry Pi Pico on CircuitPython using the KMK module
Created by
Gethin
Tier 3
17 views
0 followers
Gethin
submitted Gethin's 75% Macro KB for review ago
Gethin
added to the journal ago
Fixing my code & boot.py
I had some issues with my code that I managed to fix. This included
- Creating a separate boot.py file for the bootcfg instead of having it in the main code.py
- Reversing my diode orientation to ROW2COL as I had done it backwards
- Importing the media keys library so my macros work
- Switching keyboard.tap_key to KC.[key] and updating my macro section



Gethin
added to the journal ago
CAD Split Body
Today, I did some more CAD work in Fusion 360 where I finished up some of the smaller details of my case and then I used the split body tool to split both the case and plate in half so they can print.
The plate doesn't need connectors as both halves will be held in place by the PCB soldered on below, but I made some small cylindrical joints for the case so they can easily be assembled.


Gethin
added to the journal ago
BOM Updates
I got a quote for the price of my PCB from JLCPCB and updated my BOM as well as added cart screenshots to my ReadMe.
I decided to switch my pico out from an official PiHut one to an off-brand aliexpress version to significantly save costs, but I also picked the USB-C version which means I can remove the micro USB -> USB cable from my BOM (further decreasing costs) as I already have a USB-C cable

Gethin
added to the journal ago
Bootcfg code
I added a little bit of code at the top of my code.py I will put on my pico that should use bootcfg to make the keyboard appear as a custom name when plugged into a computer.
I have set the manufacturer to "Gethin101" and the product to "Gethin-75". This should give a cleaner, more professional look to my keyboard

Gethin
added to the journal ago
Keyboard Firmware and Macro Keys
Next, I looked at other examples of code and wrote my KMK firmware for my pico that assigns each switch column and row to its respected GPIO pin on the pico and waits for the key to be pressed to send the keystroke through the pico.
I made a macro handler at the start which is just variables of each macro, like MAC1, MAC2, etc and I made a function for each one that is activated when the key is pressed. This means that I can change any key to a custom macro whenever I want, just by adding a small entry into the handler.
Obviously, I haven't tested this code yet as I don't have the parts for my keyboard, but it looks pretty good to me.
Here are my current macros:
- Previous song
- Play / Pause
- Next song
- Volume down
- Volume up
- Lock
- File Explorer
- Task Manager


I also made a small firmware section in my ReadMe that explains simply the process of flashing the pico and setting up the firmware so I know what to do when I need to and anyone else following my guide can quickly understand what they need to
Gethin
added to the journal ago
Assembly model and section analysis
I exported all my models again all fully updated and created a new assembly file where I made some final adjustments like giving a bit more clearance in the case for the PCB and Plate and did a section analysis so you can see how everything will be put together.


Gethin
added to the journal ago
Switch 3D models and texturing
I managed to find some 3D models of my mx switches so I imported them all into place in my keyboard. I'm not doing keycaps though because they are really annoying and I can't find ones for all my different key sizes and same for the stabilizers (but obviously they just clip into the plate anyway).

I made some adjustments and decided to make the case white instead (this is a bad texture shade but it will be probably like matte white PLA)

Gethin
added to the journal ago
Keyboard CASE, PLATE, PCB 3D model
Today, I did a lot of CAD for my keyboard project. I first exported my PCB as a step file and imported it into fusion so I have the correct sizing and positioning of my PCB.
I then modelled the case for my keyboard (I have gone for a minimalistic, black case) with a stylish chamfer on the front and 4 extruded pads that the PCB will sit on once assembled.
This means that I don't need to worry about glue or screws as it will fit in nicely with my accurate measurements.

I then exported my DXF layout using ai03 plate generator and also ensured I had the 'Cherry MX Spec' stabilizers setting on so my stabilizers will be able to simply slot into the pre-made holes in my build plate. I extruded it up by the standard 1.5mm and spend ages resizing the edges and extruding bits out so it lines up perfectly with my case and PCB.

Here, you can see my PCB 3D model in place inside its case. I also made a small slot on the back-right side of my case so I will be able to plug the pico into my computer via a micro USB -> USB cable.

Here, you can see my case, PCB model and build plate all assembled in Fusion 360.

Section analysis to see how my parts will all go together.

Gethin
added to the journal ago
PCB Silkscreen details
Next, I decided that I wanted to add a few details onto my PCB on the silkscreen layer.
I added my github link, project name and some Blueprint 2026 text


Gethin
added to the journal ago
Making my schematic and PCB + 3D rendering
Next, I spent a while making the schematic for my keyboard in KiCad. I used global tags this time instead of net labels as they are easier to see and read.
I also improved on the schematic making process from last time by spending the time to think about the layout and wiring the switches in the schematic in relation to their physical footprints later on. This mean that it would be easier to route later on as the wiring wouldn't be a mess everywhere.

I then took time to assign all of the footprints to each symbol and imported the DXF layout from ai03 plate generator on user.drawings so I knew where to position the components. I also learnt with the help of some other people that I needed to select 'Cherry MX Spec' instead of 'Cherry MX' for the stabilizers as I am doing plate-mounted stabilizers not PCB-mount and this will help me as it means I can just clip in the stabilizers into the plate later on that will also use this DXF.
Due to my efficient wiring in the schematic earlier, it meant that I could just connect all the rows in 6 lines on the back of the PCB, then connect the switches to their diodes and the diodes to each other in their columns on the front of the PCB.
This was very efficient as it allowed the routing process to be enjoyable and satisfying as I was just following a pattern that I had decided before. I am getting a lot better at PCB-making now as if I tried to make this a couple months ago, it would be a complete mess and the routing would be a nightmare.

I placed all the diodes on the back side of the PCB so that I can solder them on easily and I went for the THT version of the 'DD0-35SOD27P7.62mmHorizontal' as I am familiar with through-hole soldering.
I then connected each diode column onto the Pico's GPIO pins and I also decided to use the SMD-style footprint for the pico as I have only ever done THT soldering and I think this will exciting and a bit more of a challenge. I made sure to position the pico on the top-right corner where the micro-USB port will be accessible. I ran both the ERC and DRC and the design rules checker had a few issues that I fixed and now they both come back perfectly.
I learnt how to use the 3D preview feature in KiCad so I drew the outline of my edge.cuts then used this feature so I could see how my PCB will look once manufactured.

All I need to do next is:
- Add silkscreen details to the PCB
- Make plate in CAD
- Make keyboard case in CAD
- Update BOM with my components and submit for review
Gethin
added to the journal ago
Layout redesign and Project Restart
Today, I realised that this layout isn't actually what I want so I did some research and redesigned the layout for my keyboard. I decided that I am going to make a 75% keyboard with 8 extra macro keys and I also realised that the rotary encoder was in a stupid position that would be in the way whenever I type and I probably won't even use it anyway so I removed that.
Also, I've decided to switch to plate-mounted MX stabilizers so I won't need to add them into the PCB design at all and shouldn't be too difficult as I can just make slots in the CAD design before the case and plate is 3D printed.
This means I am going to completely restart the project in KiCad, which obviously means this project is going to take more time, but also means that I will be able to take the mistakes and bad decisions in the first attempt and improve on them with my updated keyboard.

Gethin
added to the journal ago
Pico, Rotary Encoder & Mechanical Stabilizers
Next, I added the raspberry pi pico symbol in and wired it to all the switch ROWs and COLs with net labels. I wired the pico's ground to GND and the 3V3 to a +3.3V flag.
Then I added a rotary encoder with a switch into my schematic and used net labels to wire the ENC-A, ENC-B and ENC-SW to the pico's GPIO pins 16, 17 and 18 then wired the ground to the common GND in my PCB.
I added 4x 2u stabilizers and a 6.25u stabilizer into my schematic by using a Conn-01x01 placeholder and changing the values, for e.g. STAB-2U-BACKSPACE. These don't need to be wired to anything as they are just there so I can assign a mechanical stabilizer footprint later on.
I wrote up a GPIO wiring table for the Raspberry Pi Pico which shows the 4 rows and 6 columns' connections to their respected GPIO pins and the full schematic is below:

Gethin
added to the journal ago
Switch Matrix and Schematic Wiring
Next, I learnt how to create a switch matrix so that all the keys can be wired to my microcontroller later on. I used labels to assign the rows and columns from ROW0 and COL0 -> ROW4 and COL6 and made sure that the diode cathodes are facing away from the switches and are the side that is connected as columns

Gethin
added to the journal ago
Keyboard layout and plate generating
Today, I started working on my custom 60% mechanical keyboard project. I began by designing the physical layout using Keyboard Layout editor. I chose the 60% preset as it is what I want and I added a placeholder key for a rotary encoder for volume control that I will replace later with a real rotary encoder in KiCad.
Next, I exported the JSON and used the ai03 plate generator to convert my JSON into a DXF plate file that I imported into KiCad on user.drawings in the PCB editor so I know where to position my switches and footprints later. At first, I thought I messed up with the design as it only showed the switch cutouts not the full keyboard outline but I found out that this is how it is supposed to be.



Gethin
started Gethin's 75% Macro KB ago
2/22/2026 12 PM - Keyboard layout and plate generating
Today, I started working on my custom 60% mechanical keyboard project. I began by designing the physical layout using Keyboard Layout editor. I chose the 60% preset as it is what I want and I added a placeholder key for a rotary encoder for volume control that I will replace later with a real rotary encoder in KiCad.
Next, I exported the JSON and used the ai03 plate generator to convert my JSON into a DXF plate file that I imported into KiCad on user.drawings in the PCB editor so I know where to position my switches and footprints later. At first, I thought I messed up with the design as it only showed the switch cutouts not the full keyboard outline but I found out that this is how it is supposed to be.



2/22/2026 1 PM - Switch Matrix and Schematic Wiring
Next, I learnt how to create a switch matrix so that all the keys can be wired to my microcontroller later on. I used labels to assign the rows and columns from ROW0 and COL0 -> ROW4 and COL6 and made sure that the diode cathodes are facing away from the switches and are the side that is connected as columns

2/22/2026 2 PM - Pico, Rotary Encoder & Mechanical Stabilizers
Next, I added the raspberry pi pico symbol in and wired it to all the switch ROWs and COLs with net labels. I wired the pico's ground to GND and the 3V3 to a +3.3V flag.
Then I added a rotary encoder with a switch into my schematic and used net labels to wire the ENC-A, ENC-B and ENC-SW to the pico's GPIO pins 16, 17 and 18 then wired the ground to the common GND in my PCB.
I added 4x 2u stabilizers and a 6.25u stabilizer into my schematic by using a Conn-01x01 placeholder and changing the values, for e.g. STAB-2U-BACKSPACE. These don't need to be wired to anything as they are just there so I can assign a mechanical stabilizer footprint later on.
I wrote up a GPIO wiring table for the Raspberry Pi Pico which shows the 4 rows and 6 columns' connections to their respected GPIO pins and the full schematic is below:

2/23/2026 - Layout redesign and Project Restart
Today, I realised that this layout isn't actually what I want so I did some research and redesigned the layout for my keyboard. I decided that I am going to make a 75% keyboard with 8 extra macro keys and I also realised that the rotary encoder was in a stupid position that would be in the way whenever I type and I probably won't even use it anyway so I removed that.
Also, I've decided to switch to plate-mounted MX stabilizers so I won't need to add them into the PCB design at all and shouldn't be too difficult as I can just make slots in the CAD design before the case and plate is 3D printed.
This means I am going to completely restart the project in KiCad, which obviously means this project is going to take more time, but also means that I will be able to take the mistakes and bad decisions in the first attempt and improve on them with my updated keyboard.

2/27/2026 8 AM - Making my schematic and PCB + 3D rendering
Next, I spent a while making the schematic for my keyboard in KiCad. I used global tags this time instead of net labels as they are easier to see and read.
I also improved on the schematic making process from last time by spending the time to think about the layout and wiring the switches in the schematic in relation to their physical footprints later on. This mean that it would be easier to route later on as the wiring wouldn't be a mess everywhere.

I then took time to assign all of the footprints to each symbol and imported the DXF layout from ai03 plate generator on user.drawings so I knew where to position the components. I also learnt with the help of some other people that I needed to select 'Cherry MX Spec' instead of 'Cherry MX' for the stabilizers as I am doing plate-mounted stabilizers not PCB-mount and this will help me as it means I can just clip in the stabilizers into the plate later on that will also use this DXF.
Due to my efficient wiring in the schematic earlier, it meant that I could just connect all the rows in 6 lines on the back of the PCB, then connect the switches to their diodes and the diodes to each other in their columns on the front of the PCB.
This was very efficient as it allowed the routing process to be enjoyable and satisfying as I was just following a pattern that I had decided before. I am getting a lot better at PCB-making now as if I tried to make this a couple months ago, it would be a complete mess and the routing would be a nightmare.

I placed all the diodes on the back side of the PCB so that I can solder them on easily and I went for the THT version of the 'DD0-35SOD27P7.62mmHorizontal' as I am familiar with through-hole soldering.
I then connected each diode column onto the Pico's GPIO pins and I also decided to use the SMD-style footprint for the pico as I have only ever done THT soldering and I think this will exciting and a bit more of a challenge. I made sure to position the pico on the top-right corner where the micro-USB port will be accessible. I ran both the ERC and DRC and the design rules checker had a few issues that I fixed and now they both come back perfectly.
I learnt how to use the 3D preview feature in KiCad so I drew the outline of my edge.cuts then used this feature so I could see how my PCB will look once manufactured.

All I need to do next is:
- Add silkscreen details to the PCB
- Make plate in CAD
- Make keyboard case in CAD
- Update BOM with my components and submit for review
2/27/2026 5 PM - PCB Silkscreen details
Next, I decided that I wanted to add a few details onto my PCB on the silkscreen layer.
I added my github link, project name and some Blueprint 2026 text


2/28/2026 - Keyboard CASE, PLATE, PCB 3D model
Today, I did a lot of CAD for my keyboard project. I first exported my PCB as a step file and imported it into fusion so I have the correct sizing and positioning of my PCB.
I then modelled the case for my keyboard (I have gone for a minimalistic, black case) with a stylish chamfer on the front and 4 extruded pads that the PCB will sit on once assembled.
This means that I don't need to worry about glue or screws as it will fit in nicely with my accurate measurements.

I then exported my DXF layout using ai03 plate generator and also ensured I had the 'Cherry MX Spec' stabilizers setting on so my stabilizers will be able to simply slot into the pre-made holes in my build plate. I extruded it up by the standard 1.5mm and spend ages resizing the edges and extruding bits out so it lines up perfectly with my case and PCB.

Here, you can see my PCB 3D model in place inside its case. I also made a small slot on the back-right side of my case so I will be able to plug the pico into my computer via a micro USB -> USB cable.

Here, you can see my case, PCB model and build plate all assembled in Fusion 360.

Section analysis to see how my parts will all go together.

3/1/2026 9 AM - Switch 3D models and texturing
I managed to find some 3D models of my mx switches so I imported them all into place in my keyboard. I'm not doing keycaps though because they are really annoying and I can't find ones for all my different key sizes and same for the stabilizers (but obviously they just clip into the plate anyway).

I made some adjustments and decided to make the case white instead (this is a bad texture shade but it will be probably like matte white PLA)

3/1/2026 10 AM - Assembly model and section analysis
I exported all my models again all fully updated and created a new assembly file where I made some final adjustments like giving a bit more clearance in the case for the PCB and Plate and did a section analysis so you can see how everything will be put together.


3/1/2026 12:20 PM - Keyboard Firmware and Macro Keys
Next, I looked at other examples of code and wrote my KMK firmware for my pico that assigns each switch column and row to its respected GPIO pin on the pico and waits for the key to be pressed to send the keystroke through the pico.
I made a macro handler at the start which is just variables of each macro, like MAC1, MAC2, etc and I made a function for each one that is activated when the key is pressed. This means that I can change any key to a custom macro whenever I want, just by adding a small entry into the handler.
Obviously, I haven't tested this code yet as I don't have the parts for my keyboard, but it looks pretty good to me.
Here are my current macros:
- Previous song
- Play / Pause
- Next song
- Volume down
- Volume up
- Lock
- File Explorer
- Task Manager


I also made a small firmware section in my ReadMe that explains simply the process of flashing the pico and setting up the firmware so I know what to do when I need to and anyone else following my guide can quickly understand what they need to
3/1/2026 12:49 PM - Bootcfg code
I added a little bit of code at the top of my code.py I will put on my pico that should use bootcfg to make the keyboard appear as a custom name when plugged into a computer.
I have set the manufacturer to "Gethin101" and the product to "Gethin-75". This should give a cleaner, more professional look to my keyboard

3/2/2026 - BOM Updates
I got a quote for the price of my PCB from JLCPCB and updated my BOM as well as added cart screenshots to my ReadMe.
I decided to switch my pico out from an official PiHut one to an off-brand aliexpress version to significantly save costs, but I also picked the USB-C version which means I can remove the micro USB -> USB cable from my BOM (further decreasing costs) as I already have a USB-C cable

3/3/2026 - CAD Split Body
Today, I did some more CAD work in Fusion 360 where I finished up some of the smaller details of my case and then I used the split body tool to split both the case and plate in half so they can print.
The plate doesn't need connectors as both halves will be held in place by the PCB soldered on below, but I made some small cylindrical joints for the case so they can easily be assembled.


3/4/2026 - Fixing my code & boot.py
I had some issues with my code that I managed to fix. This included
- Creating a separate boot.py file for the bootcfg instead of having it in the main code.py
- Reversing my diode orientation to ROW2COL as I had done it backwards
- Importing the media keys library so my macros work
- Switching keyboard.tap_key to KC.[key] and updating my macro section


