Skip to the content
PCBKitNew board
2 layers489.6 × 170.7 mmMission control, the printed circuit board in 3D

Modern replacement PCB for the IBM Model M 122

Size
489.6 × 170.7 mm
Copper layers
2
Thickness
1.6 mm
Parts
286
Nets
175
Pads
1,491
Tracks, vias
2,121, 112
Pours
1
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
8 Feb 2024
Updated
19 Aug 2024

Overview

Mission control is an open-source printed circuit board by dcpedit, from the dcpedit/mission-control repository on GitHub, published under the CC-BY-4.0 licence. It is a 2-layer board of 489.6 × 170.7 mm with 286 parts on 175 nets, routed with 2,121 tracks and 112 vias.

It is built around the BAV70 and TIP120. Its parts include 64 diodes, 4 resistors, 2 connectors and 1 IC.

Main components

2

README

README.md

Mod Mmm Logo

Mission Control PCB for the IBM Model M122

This project is designed to replace all internal compoents of an Model M122 keyboard, and is based off my previous Mod Mmm Project. Only the curved steel backplate is needed for the PCB to be mounted on.

m122 9009 m122 switches

Image gallery: https://imgur.com/a/wuXMWVg

Features

  • Hotswap sockets for MX switches
  • Multiple layout support, including ISO, split spacebar, and 4x5 macropad for numpad. KLE link
  • PCB mount stabilizers
  • Under-switch LED for caps lock and num lock
  • Piezo buzzer
  • Solenoid
  • LCD display
  • USB-C support
  • Bluetooth support (via PillBug)
  • QMK/VIA firmware
  • ZMK firmware (for BT PillBug)
Layout

The Build "Stack"

The following is a table of measurements of everything that's stacked on top of the steel backplate. The key spacing was taken from hires scans I made of the Model M's wiring membrane. I recalculated the spacing for each decrease in radius except for the foam where I reused the numbers from the switch plate. I was lazy and figured foam can stretch anyways.

PartThickness (mm)Radius (mm)Radius Start1u vertical spacing (mm)
Steel backplate1.0276.635inner20.617
Hex Standoffs4.0n/an/an/a
PCB1.0272.135center20.560
Plate Foam3.5n/an/an/a
Switch Plate1.5267.385center20.201

Parts List

PartCountNotes
Mission Control PCB11mm FR4 thickness
Blackpill (STM32F411)1
M2.5x3mm Wafer Screw138Link
M2.5x4mm Hex Standoff69Link
BAV70 Diodoe64Link
Piezo Buzzer1Link
5v Solenoid1Link
Hotswap Sockets108 - 115Recommend Gateron v2
2mm LED2For switch status led. Link
10kΩ Resistor2For keycap LED. Smaller = brighter
22kΩ Resistor1Pullup for pin A10
TIP120 Transistor1For solenoid. Link
1N4001 Diode1For solenoid. Comes with above kit
2.2kΩ Resistor1For solenoid. Comes with above kit
Mill-Max 315 sockets (1x20)2
Mill-Max 315 sockets (1x4)1
Mill-Max round pin (¼in)44Link
2u plate mount stabilizer7 - 10Count varies based on layout
7u plate mount stabilizer1For 7u spacebar
Switch plate (5 piece set)1Optional 1.5mm acrylic
Case foam (under PCB)1Optional 2mm EVA
Plate Foam1Optional 3.5mm EVA foam (or 2mm + 1.5mm)
2.2" ILI9341 display1Optional display, link
8 pin headers (2.54mm pitch)2For optional display
8 pin ribbon cable1For optional display
USB-C panel mount1Link

For the Mill-Max 315 series sockets, I found it more cost efficient to just buy a really long socket and cut the sizes I need with flush cutters. Here's an example of a 1x64 socket.. Make sure to file down the rough edge after cutting.

PCB Build Guild

To complete this build, you will need to get the main PCB manufactured with an FR4 thickness of 1mm. I personally like using JLCPCB, and I've included the gerber zip in the pcb/production folder. (Note: you will need to order a minimum of 5 boards).

1) Disassembly

The first step is to disassemble your Model M and clean it if neccessary. There are lots of tutorials online on how to do this, and make sure you have a 7/32 inch (5.5mm) socket for the case screws.

Remove the plastic rivets on the back of the steel plate with a pair of flush cutters. Once this is done, all the components can be removed leaving just the steel plate.

2) Shape PCB

Using the hex standoffs and a few screws, mount the PCB onto the steel backplate for 24hrs. You only need enough screws & standoffs for the PCB to hold its shape. After you remove the PCB, you want there to be a slight curve to the FR4 before soldering on the components. This way, the componenets and solder joints experience less stress when the PCB is bent into its final shape.

3) BAV70 Diodes

Flip the PCB over to the backside and solder on the BAV70 diodes (D1 - D64). Place a dab of solder on the single bottom pad of the diode on the PCB. Then using tweesers, position the diode so that the legs line up with the pads. Then using the point of one tweeser leg, gently hold the top of the diode in place while melting the dab of solder that was placed on the bottom pad previously. With the diode now held in position, solder the top two legs to their respective pads.

4) Hotswap Sockets

Place some solder on one of the hot swap socket pads. There should be enough solder to make a small mound. Place the socket into position and melt the mound of solder that was previously added while pressing down on the center of the socket. Be sure to avoid touching any metalic parts to prevent burns. Keep the soldering iron on the pad long enough for the solder to flow around the socket connector (usually around 3 to 4 seconds). Now solder the other socket connector to the pad.

5) 22k Pullup Resistor

In order to use pin A10 on the Blackpill, a 22k pullup resistor is needed (according to the QMK docs). Solder this into the R3 position. Orientation does not matter.

6) Blackpill Development Board

It's probably best to flash the firmware onto the Blackpill first using the bin file in the firmware directory. Hook it up to QMK Toolbox and push the following buttons to place it in bootloader mode before flashing:

  • Press and hold the BOOT0 button
  • Press and release NRST (reset) button
  • Release BOOT0 button

Solder the Mill-Max 315 sockets onto the daughterboard. Then place a piece of masking tape over the pin holes, and insert each pin though the tape and into its hole with tweezers. Then set the Blackpill into place with the components facing up and the USB port facing the top of the daughterboard. Solder the pins into place, and then carefully and slowly remove the Blackpill. If you pull too fast and hard, one edge will suddenly pop loose, bending the pins on the opposite side. Remove the masking tape, and push the Blackpill back into place.

Lazy-man's short cut: skip the masking tape. But note that using too much solder will cause it to flow down the pin and into the socket. If this happens, the keyboard will still work, but you won't be able to remove the Blackpill without desoldering.

Choose build option

At this point in the build, you will need to choose between ONE of the following 2 options.

Option #1: Solenoid, buzzer, and status LEDs

a) Solenoid Components

Bend the narrow part of the pins on the TIP120 back towards the heatsink at a 90 degree angle. Solder it into the TIP1 position.

The 2.2k resistor goes into the R4 spot (orientation does not matter). The 1N4001 diode goes in to the 1N1 position where the line matches the printed line on the board. The solenoid wires don't have an orientation, and you can solder them directly into the holes or use a header/connector.

b) Piezo Buzzer

Solder this into the BZ1 position. Orientation does not matter.

c) Switch LEDs and resistors (optional)

These LEDs go under the caps lock and scroll lock switches. Depending on your switch, you may have to solder these in AFTER placing the switch into the socket. You can tell by looking under the switch to see if there's a hole big enough for the LED to fit through. If there are only 2 small holes for the LED pins, then the switch needs to go in first. The short pin of the LED goes in the square pad. As for the accompanying 10kΩ resistors (R1 and R2), orientation does not matter.

I use a higher resistance here for the white LEDs because they tend to be too bright for me personally. Feel free to lower the resistance if you want them brighter, or if you choose a different color.

Option #2: LCD display

a) Display headers

Mount headers for on the PCB facing down (PCB position J1) and right angled headers on the display facing towards the right

b) Cut display window

Turn on your display, and measure the physical height and width of the display area. This will be the size of your case "window". Use masking tape to mark the edges of the window on the top of your case and cut the hole out.

I believe the best tool for this job is with a CNC router. Since I didn't have access to one, I first used a dremel with a cutting disk to cut the hole out. Then I smoothed the edges with a file, and then with fine grit sand sand paper wrapped around a flat piece of plastic. I found that adding a chamfered edge makes it look more "finished".

c) Mounting display

I found that the easiest thing to do here is to first connect the display to the PCB with the ribbon cable and power it up. Center the displayed image within the window, and while holding it firmly in place, place hot glue in each corner of the display's PCB, allowing some to flow through the mounting holes.

Continue with main build

7) Stabilizers

Install your stabilizers of choice onto the PCB. For the vertical stabs, in order to counteract the curvature of the PCB, I used adhesive stabilizer pads and cut them in half lengthwise (band-aids would work as well). I then placed them on the inside half of where the stabs would sit. The idea here is to angle the stabs back outwards so that they remain parallel.

Note that I made all the stab holes a tad larger in the vertical direction to allow for some wiggle room.

8) Install PCB standoffs

Starting with the steel backplate, insert a screw from the back and screw a standoff on from the other side. Keep it loose enough so that the standoff can rattle around a bit. Do this for all the mount holes on the steel plate, even if you end up not using them because they're still good for support. Omit any standoff that interferes with your stabilizers.

Slip the steel backplate back into the bottom of the case. You'll need to slide the bottom into the slots first, and then place the plastic case posts into the top-left and top-right corners of the steel backplate.

9) Case foam (optional)

If you opted for the 2mm EVA case foam, you'll need to place it over the steel plate before installing the PCB. The holes in the foam should line up over the standoffs. (Filename: case/case-foam.ai)

10) Center and Install PCB

Line up the PCB over the holes and place 2 or 3 screws positioned horizontally from each other near the center of the PCB. Push the center firmly down onto the standoffs to force the PCB to bend (this part is a bit nerve racking, especialy when you hear creaking noises), and secure it with the screws while holding it in place.

Shift the steel backplate all the way to the top until it can't move anymore. This is the correct position of the plate, so I'd recommend wedging strips of 2mm foam between the case the bottom edge of the case.

Now place a switch and keycap combo at the corner of every section of the keyboard. Put the top of the case on, making sure it's aligned and fully seated with no gaps. Carefully shift the PCB around slightly to get the keycaps to be in the correct position with equal amounts of spacing from the keycap to the case walls. Basically you're trying to center the PCB by eye-balling the keycap gaps.

With the PCB now centered, remove the top of the case and begin screwing in all the mounting screws. I'd suggest starting near the center and spiral outwards towards the edges. This is where you'll probably need to shift the loose standoffs around to line the holes up. Also, if you run into the problem where the top and bottom screws bump into each other inside the standoff, you'll need to add an insulated washer to the bottom screw. Place the top case back on every once in a while to make sure the PCB didn't shift and is still centered. After you're done, remove the steel backplate from the bottom of the case and tighten all the screws on the back. If you feel that the standoffs are just spinning while you're turning the screw, just squeeze the PCB and backplate together so that it pinches the standoff and keeps it from spinning.

Assembly photos

Firmware

Binaries are located in the firmware directory.

Source code is located in the missioncontrol branch of my QMK fork:

https://github.com/dcpedit/qmk_firmware/tree/mission-control/keyboards/dcpedit/missioncontrol

The LCD build requires it's own separate firmware because it uses the solenoid/buzz/LED pins.

Change graphic

Copy your 240x320 image (320x240 image rotated counter-clockwise 90 degrees) into the following QMK directory:

text
keyboards/dcpedit/missioncontrol/lcd/image/background.png

Then run the following command from that directory

text
qmk painter-convert-graphics -f rgb565 -i background.png -o ./

That will generate a new *.c and *.h file. You can now compile the firmware:

text
make dcpedit/missioncontrol/lcd:via

Parts

286
QtyValueFootprintReferences
115MX-NoLEDMX_Only:MXOnly-1U-HotswapMX000, MX001, MX002, MX003, MX004, MX005, MX006, MX007, MX009, MX012, MX013, MX014, MX015, MX016, MX017, MX018 +99
68MountingHoleMountingHole:MountingHole_3mmH1, H2, H10, H11, H12, H13, H14, H15, H16, H17, H18, H19, H20, H21, H22, H23 +52
64BAV70Keebio-Parts:SOT-23_HandsolderingD1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +48
6MX-NoLEDMX_Only:MXOnly-1.5U-HotswapMX031, MX061, MX064, MX117, MX131, MX133
2470Keebio-Parts:Resistor-Hybrid-BackR1, R2
2MX-NoLEDMX_Only:MXOnly-2U-Hotswap-ReversedVerticalStabilizersMX089, MX109
2MX-NoLEDMX_Only:MXOnly-2.75U-HotswapMX062, MX127
2MX-NoLEDMX_Only:MXOnly-2.25U-HotswapMX047, MX051
2MX-NoLEDMX_Only:MXOnly-2U-HotswapMX063, MX066
110UMX_Only:MXOnly-10U-Hotswap-ReversedStabilizers10U1
11N4001Diode_THT:D_DO-41_SOD81_P10.16mm_Horizontal1N1
1BuzzerBuzzer_Beeper:Buzzer_TDK_PS1240P02BT_D12.2mm_H6.5mmBZ1
1CaseHoleMountingHole:MountingHole_3mmH69
1Conn_01x02_FemaleConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ2
1Conn_01x08_SocketConnector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_VerticalJ1
1LOGOmc:controlG***
1LOGOmc:missionG***
1LOGOmc:mc-logoG***
1MX-LEDMX_Only:MXOnly-1.25U-Hotswap-LEDMX041.125
1MX-LEDMX_Only:MXOnly-1U-Hotswap-LEDMX008
1MX-LEDMX_Only:MXOnly-1.75UMX041
1MX-NoLEDMX_Only:MXOnly-7U-HotswapMX132
1MX-NoLEDMX_Only:MXOnly-2U-Hotswap-ReversedStabilizersMX087.200
1MX-NoLEDMX_Only:MXOnly-1.75U-HotswapMX127.175
1MX-NoLEDMX_Only:MXOnly-ISO-HotswapMX047.200
1MX-NoLEDMX_Only:MXOnly-1.25U-HotswapMX051.125
1MX-NoLEDMX_Only:MXOnly-2.25U-Hotswap-ReversedStabilizersMX132.225
1R_2.2KKeebio-Parts:Resistor-HybridR4
1R_22KKeebio-Parts:Resistor-HybridR3
1TIP120Package_TO_SOT_THT:TO-220-3_VerticalTIP1
1YAAJ_WeAct_BlackPill_Part_Like_SWD_BreakoutFootprints:YAAJ_WeAct_BlackPill_SWD_2U1
1solenoidredherring:solenoidSolenoid

Questions

How big is the Mission control PCB?

It measures 489.6 × 170.7 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Mission control use?

286 parts, built around the BAV70 and TIP120. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Mission control KiCad files?

From the dcpedit/mission-control repository on GitHub, at the commit this page was made from: the board is pcb/pcb.kicad_pcb and its schematic pcb/pcb.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Mission control design in my own project?

Its repository publishes it under the CC-BY-4.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers364.4 × 167.3 mmRedherring, the printed circuit board in 3D

    Redherring

    dcpedit/redherring

    Red Herring Keyboard PCB and case files

    226 parts253CC-BY-4.0
  • 2 layers148.8 × 132.2 mmUsbflashprog, the printed circuit board in 3D

    Usbflashprog

    robsonsmartins/usbflashprog

    A memory device programmer (Flash/EPROM/E2PROM) board and software, connected to PC by USB port.

    125 parts36
  • 2 layers168 × 123 mmV2 - 2, the printed circuit board in 3D

    V2 - 2

    RudgeLab/FluoPi

    Code and teaching materials for UC/BackyardBrains raspberry pi "macro" scope.

    131 parts26
  • 2 layersCatozap, the printed circuit board in 3D

    Catozap

    jones139/catocam

    Uses a custom trained YoloV8 model on a Raspberry Pi to Detect Cats in CCTV images and Unleash a Cat Deterrent

    3 parts18GPL-3.0
  • 2 layers32.5 × 21.2 mmTaptap, the printed circuit board in 3D

    Taptap

    dcpedit/taptap

    TapTap is a solenoid breakout board for those who are interested in adding a solenoid to their existing project. All you need are the following components, and an extra data pin on your microcontroller.

    9 parts13CC-BY-4.0
  • 2 layers323.8 × 169.8 mmAegis, the printed circuit board in 3D

    Aegis

    Koumbaya/Aegis

    unibody CRBKD-compatible PCB and cases.

    110 parts12
  • 2 layers57.1 × 102.9 mmSynthwave, the printed circuit board in 3D

    Synthwave

    alexose/synthwave

    An open-source experiment in carbon removal based on the electrochemical pH swing of seawater.

    70 parts10CERN-OHL-P-2.0
  • 2 layers423.3 × 249.2 mmErgodonk pico, the printed circuit board in 3D

    Ergodonk pico

    JellyTitan/ErgoDonk

    ErgoDox variant using standard SA keycaps, FDM case, and blackpill MCU

    345 parts10MIT