Giter VIP home page Giter VIP logo

mod-mmm's Introduction

Mod Mmm Logo

Mod Mmm PCB for the IBM Model M

This project is designed to replace all internal compoents of an IBM Model M keyboard. Only the curved steel backplate is needed for the PCB to be mounted on.

Typing test video: https://youtu.be/QOiLOHnEyzo

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

modmmm-18 modmmm-17

Features

  • Hotswap PCB for MX switches
  • Multiple layout support, including ISO, split spacebar, and 4x5 numpad. KLE link
  • PCB mount stabalizers
  • Under-switch LED for caps, scroll, and num lock
  • Supports up to 3 rotary encoders
  • Piezo buzzer
  • Solenoid
  • USB-C support via STM32F411 Blackpill.
  • Bluetooth support via PillBug.
  • Vial firmware
  • ZMK firmware (for BT PillBug)

Mod-Mmm-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.

Part Thickness (mm) Radius (mm) Radius Start 1u vertical spacing (mm)
Steel backplate 1.0 276.635 inner 20.617
Hex Standoffs 4.0 n/a n/a n/a
Mod Mmm PCB 1.0 272.135 center 20.560
Plate Foam 3.5 n/a n/a n/a
Switch Plate 1.5 267.385 center 20.201

modmmm-1-3

Parts List

Part Count Notes
Mod Mmm PCB 1 1mm FR4 thickness
Mod Mmm Daughterboard 1 1.2mm FR4 thickness
Blackpill (STM32F411) 1
M2.5x3mm Wafer Screw 116 Link
M2.5x4mm Hex Standoff 58 Link
M2.5x5.5 Insulated Washer 58 Probably not needed (step 8). Link
BAV70 Diodoe 55 Link
Piezo Buzzer 1 Link
5v Solenoid 1 Link
Kailh Hotswap Sockets 101 More needed if non-ANSI layout
FFC Cable (30 pos/1mm pitch) 1 Cable length: 30 inches Link
FFC Connector (30 pos/1mm) 2 Link
3mm LED (green) 3 For status panel. Link
2mm LED (white) 3 For keycap status. Link
470Ω Resistor 3 For panel LED
10kΩ Resistor 3 For keycap LED
22kΩ Resistor 1 Pullup for pin A10
TIP120 Transistor 1 For solenoid. Link
1N4001 Diode 1 For solenoid. Comes with above kit
2.2kΩ Resistor 1 For solenoid. Comes with above kit
Mill-Max 310 sockets (1x20) 2
Mill-Max 310 sockets (1x4) 1
Mill-Max round pin (¼in) 44 Link
2u plate mount stabalizer 7 Count varies based on layout
7u plate mount stabalizer 1 For 7u spacebar
EC11 Rotary Encoder 3 Optional Link
Rotary Encoder Knob (17mm) 3 Optional Link
Switch plate (9 piece set) 1 Optional 1.5mm acrylic
Case foam (under PCB) 1 Optional 2mm EVA
Plate Foam 1 Optional 3.5mm EVA foam (or 2mm + 1.5mm)

For the Mill-Max 310 series low profile 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.. The only thing is that the edges are rough after the cut, but it doesn't bother me.

You can probably use others ways to mount the Blackpill. Just make sure that final height of the USB port is somewhat centered inside the case port.

PCB Build Guild

To complete this build, you will need to get the main PCB and daughterboard manufactured. The main PCB will need to be 1mm thick FR4, and I made the daughterboard 1.2mm to match the thickness of the original one that came with the keyboard. I personally like using JLCPCB, so I've included a zip file in the each respective directory that you can upload to their service if you decide to go with them. (FYI, you will need to order a minimum of 5 boards each).

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. I followed this one from YouTube: https://youtu.be/VsIr8dl_7Kk.

The hardest part is removing the plastic rivets that holds the frame assembly against the steel backplate. I used a razor blade with a few pieces of electrical tape wrapped around the back for better grip and for safety (to easily tell which is the sharp side). I would then rock the blade around a rivet in a "see-saw" motion while putting pressure on the blade until it popped off. It'd be a good idea to place some type of "backstop" like tall box to prevent the rivets from flying everywhere.

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.

2) BAV70 Diodes

Flip the PCB over to the backside and solder on the BAV70 diodes (D1 - D55). 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.

3) Kailh Hotswap Sockets & Rotary Encoders

build-1

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.

You can replace any of the keys in the Print Screen cluster with a rotary encoder. Just make sure you don't place a hotswap socket there, and solder in the EC11 encoder instead.

Also realized the logo on the back is way too busy. I've changed it to be a small logo on the front in v2, which is the current repo version.

4) Status Panel LEDs and resistors

These three LEDs go under the status panel (NUM1, CAP1, and SCRL1). The short pin of the LED goes in the square pad. As for the accompanying 470Ω resistors (R4, R5, and R6), orientation does not matter. The LEDs here can be soldered in with extra height so that they sit closer to the "window" cutout on the case. I mesaured the space between the PCB and the window to be 10mm.

5) Switch LEDs and resistors (optional)

These LEDs go under the caps lock, scroll lock, num 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, R2, and R3), 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.

6) Stabalizers

Install your stabalizers of choice onto the PCB. For the vertical stabs, in order to counteract the curvature of the PCB, I used adhesive stabalizer 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.

build-3

7) FFC Connector

build-2

This can be a bit tricky to hand solder, so take it slow, and use plenty of flux. Place a dab of solder on one of the large pads on the side. Position the connector on top of the pads making sure that the small pins are centered relative to their respective pads. While holding the connector in place, melt the dab of solder that was placed earlier so that the one side is held in place. Now solder the other end of the connector so that it's held in position. Moving on to the the small pins, I initally tried "drag soldering", but I ended up bridging a lot of pins. If this happens, just clean it up with some solder wick.

I found that the better way to do this is to pull out the sharpest tip you have for your soldering iron, and placing a tiny dab of solder on each pad, while avoiding touching the adjacent pins with the iron tip. Again, make sure you use plenty of flux. This way, the solder will simply flow around the pin without bridging the neighboring pins.

There's probably other connectors out there that can do the same job at a cheaper price. I'm not an expert on FFC components, so all suggestions are welcome. (Same thing for the FFC cable)

8) Install PCB standoffs

build-circled

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. Make note of the holes that are left open in my photo above (circled red) and do the same to prevent interference with the case/components. You should also put a standoff in corner top-right hole beneath the plastic post (circled green) for added support.

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: pcb/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.

Now place a switch and keycap combo at the corner of every section of the keyboard (ex: Esc, F1, ~, Ctrl, Print, Num-Lock, Num-Enter, etc). Put the top of the Model-M 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.

NOTE: I noticed that the vertical 2u stabs in the numpad were blocking some of the screw holes in rev 1 of the PCB. I flipped the stabs in rev 2 which is the version in the repo.

build-5

Daughterboard Build Guide

modmmm-15

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

The 2.2k resistor goes into the R2.2 spot (orientation does not matter). The 1N4001 diode goes in to the 1N4001 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) 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 R1 position. Orientation does not matter.

c) 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 310 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.

d) Piezo Buzzer

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

e) Assembly

modmmm-11 modmmm-10

Remove the steel backplate from the case if you haven't already. If you have a Model M that came with a smaller PCB, you will need to clip away the plastic bracket to make room for the larger footprint of the daughterboard. Make sure the clamp on the FFC connector is lifted up, insert the FFC cable, and press the clamp back down. Place the daughterboard into position inside the case bottom. I don't have a good way to secure it to the case (I'm reluctant to drill holes), so a piece of tape or double-sided adhesive foam will do for now.

Put the steel backplate with mounted PCB back into place, and connect the other end of the FFC cable to the main board. At this point, you can install your switches and keycaps, screw the case back together, and be done!

BUT, after some testing, I noticed that my Kailh Box White switches were not very stable. This is probably due to the fact they they were 3 pin switches instead of 5, and the hot swap sockets didn't grip the switch pins that tightly. This is why I opted to make a switch plate to better hold the switches in place. This also meant I had to cut 3.5mm thick foam (technically 2mm + 1.5mm) to act as a spacer between the PCB and the switch plate.

Unfortunately, there was not enough room in the case to house a single switch plate that spanned the entire board, so I had to break the plate up into smaller sections (9 total), which ended up working pretty well. The Esc key had its own little 1u switch plate, so the stability still wasn't great, but it'll have to do. I also messed up the foam spacing for the top row, so I had to cut it off as a separate piece. This is fixed in the repo version, which is in the plate-ansi directory (use v2 unless you have a v1 pcb). Plates for other layouts need to be created.

modmmm-9

Inspiration

Thanks to all the project/product creators who have inspired the creation of the Model Mmm:

  • Model-H: Open source USB controller for the Model M
  • Class 80 by MMStudio: Premium TKL retro-styled board with a solenoid and buzzer
  • Command 65 by Play Keyboard: Retro-styled wireless keyboard with buzzer based off the Commodore 64

mod-mmm's People

Contributors

dcpedit avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.