Keyboard Saturn

Created by [Kunshpreet]

Simple Keyboard with OLED screen

Total time spent thus far: 70h

January: Research

  • Started looking at how to make my keyboard (looking at YouTube videos, etc)
  • Created a plan
    • Make the keyboard a 100% layout
    • Add an OLED screen to display extra info
  • Started thinking about what components to use (what type of switches,e.g., red, brown, blue, etc.)
  • Started looking at the pinout of the Pi Pico (my microcontroller)

Total time spent: 5h

May 17-20: PCB making

  • started creating the PCB
  • Found out that the PI Pico doesn't have enough pins for my matrix for the keys
    • Thought about using Japanese matrices, but instead I opted to use the MCP23017_SO since I want to learn how to solder SMD components
  • After creating the schematic, I posted it on Slack to get some feedback image
  • Then I started creating the PCB itself
  • Routing was hard, so for the first time, I used Vias image Total time spent: 15h

May 20-22: Making the chassis

  • started creating the chassis
  • Since I'm using somewhat custom spacing, it took a long time to make the top part of my keyboard image image
  • Once done, I started making the bottom part
  • After that, I started seeing how I was going to print out the chassis
    • JLC charges 100$ for the chassis
  • So instead, I made the chassis printable by splitting it into 3 parts and joining them via these standoffs that I made image Total time spent: 8h

May 22-23: Creating BOM

  • BOM done, please check the read me Total time spent: 4h

May 23: Updating Readme and other things

  • Readme updated Total time spent: 2h

May 23 - 24: Firmware

  • Started making firmware
    • took too long setting up QMK (like 5 hours in one day)
  • Found out the MCP23017_SO is way too slow since it's using the I2C connection protocol
    • Instead im using the SN74HC165N, which uses the spi protocal which is 100x faster
    • replaced it in the PCB
  • made the keyboard layout for my keyboard in QMK May 24th:
  • Took almost 5 hours to make the keyboard work, not even including the custom matrix
    • Not good with command-based apps, so I need to work on this in the future
  • made a custom matrix to read from the SN74HC165N
    • TOOK A LONG TIME JUST TO LEARN HOW TO DO IT
  • made the OLED work
  • Here are some code issues that I had today:
    • setPinOutput(MATRIXCOLPINS[c]) failed because the macro received 21 arguments instead of 1, likely because MATRIXCOLPINS[c] expands improperly.
    • writePinHigh(MATRIXCOLPINS[c]) and writePinLow(MATRIXCOLPINS[col]) also failed due to the same macro argument issue.
    • Macros like gpiosetpinoutputpushpull, gpiowritepinhigh, and gpiowritepin_low were not recognized as functions; they're macros and not meant to handle complex input.
    • matrixscanchange is used without declaration, leading to an implicit function declaration error.
    • All warnings were treated as errors (-Werror flag), causing the build to fail on these issues. Total time spent: 15h

May 28: Created Palm Rest:

  • Created a palm rest on the keyboard
  • Added the 3mf file for the print

image Total time spent: 2h

July 1–18: OLED Debugging & Firmware Migration (QMK → Arduino)

Total time spent: ~20h IMG_3415 IMG_3418

Matrix Ghosting & Pull-Down Resistor Fix

  • Began debugging ghosting issues in the keyboard matrix — noticed that random key presses were being registered without input.
  • Discovered I had forgotten to add 10k pull-down resistors to the inputs of the SN74HC165N shift registers.
  • This caused the lines to float, resulting in unpredictable input states.
  • Therefore, I had to add a delay in code, resulting in a ~700ms delay (around 70x slower than a normal keyboard)

SoftI2C and RP2040 Pin Constraints

  • Realized that the OLED was connected to non-native I2C pins (e.g., GPIO 22, 28) on the RP2040.
  • Switched to using SoftI2C to bit-bang I2C over any pins.
  • With SoftI2C, successfully scanned and detected the OLED at address 0x3C.

OLED Font Rendering

  • Created a simple text rendering function to write characters pixel-by-pixel on the OLED.
  • Initially, embedded all font bitmaps directly in the .ino file.
  • Later refactored by moving font data into a dedicated .h file for clarity and reuse.

Migrating from QMK to Arduino IDE

  • QMK was becoming too complex to support:
    • SPI reads from SN74HC165N
    • SoftI2C for OLED
    • Custom wiring constraints
  • Fully migrated to Arduino IDE, which provided:
    • Lower-level hardware access
    • Simplified debugging with Serial.print()
    • Better development velocity for custom hardware

Hardware Rework: 3.3V Connection Fix

  • Final keyboard assembly showed no power to the RP2040 MCU.
  • Diagnosed the issue and found that the 3.3V line wasn’t connected to the MCU.
  • Board was already fully soldered — had to use jumper wires to connect 3.3V to the correct pin on the MCU manually.
  • After rework, the SN74HC165N and OLED powered up correctly.

THIS PROJECT IS NOW DEPRECATED. IT WILL NOT BE GETTING ANY MORE SUPPORT. V2 is a possibility