intro
This page is a build & usage log of the Corne keyboard.
goal
A bluetooth + battery setup for ergonomics, portability, and software development use. Make it as silent as feasible. Do not support lighting and screen miscellany.
disclaimer
The information presented here is intended to be more "hints and notes" rather than "instructions to be followed"; please heed the information at your own risk. I am neither an electrical engineer nor experienced in keyboard building.
reference
material
main
PCB Corne v3.1 Choc
MCU nice!nano v2.0
keyswitch Kailh Choc red, black
battery 3.7V 400mAh
accessories
hotswap MCU Mill-Max 315 sockets
hotswap keyswitch Kailh Choc sockets
- SMD diodes
- SPDT (power); SPST (reset); JST
- standoffs; screws; nuts
look & feel
case low-profile aluminum
cap MBK Choc
foot adhesive silicone
pad sorbothane
o-ring 1.5mm 70A silicone
tape-mod scotch tape
lube 207g2
tools & setting
airflow fume extractor or good ventilation to displace fumes
soldering iron; tip cleaner; solder; flux; desolderer
adhesion heatshrink tubing; strong, medium, weak adhesive (eg. resp. loctite, framing tape, electrical tape)
hand tweezers, pliers
clean isopropyl alcohol, q-tips
flash & test
build: hardware
0. !!! safety !!!
- Do not breathe in solder fumes! It's bad for you.
- Work on a single battery wire at a time! Do not short battery by letting wires touch or by closing a loadless circuit!
- Make sure any and all liquid on/in the keyboard (or any of its components) is completely dry before powering on the keyboard! For example, after cleaning the board.
1. prepare
- Wrap and insulate battery wires.
- Estimate placement of all parts and accessories, making sure the dimensions will work out.
2. power switch & battery (prep, no power yet)
- House battery wires in JST (battery-side) connector.
- Alternatively, solder-join the battery wires to the JST wires.
- Situate JST (board-side) connector on PCB or case.
- Situate power switch on PCB or case.
- Lop off one of the two power
throws.
- Connect JST
- to power throw.
- Connect JST
+ to MCU +.
- Connect power
pole to MCU -.
3. PCB (main board)
- Solder keyswitch diodes.
- Solder keyswitch hotswap sockets.
- Solder reset switch.
- Solder MCU hotswap sockets.
4. MCU
- Connect MCU; load firmware & check operation; disconnect MCU.
- Apply scotch tape over MCU hotswap socket.
- Poke holes in scotch tape using pins, inserting them into their sockets.
- Place MCU over the tape and pins; solder pins to MCU.
- Connect MCU; check each key; disconnect MCU.
- Remove MCU; remove tape.
5. keyswitch
- Disassemble keyswitches.
- Tape-mod keyswitches.
- Lube keyswitches.
- Reassemble keyswitches.
6. assembly
- Check that power is off: battery unplugged, power switched off.
- Affix keyswitches to top plate.
- Affix PCB to keyswitches (which themselves have been affixed to top plate).
- Situate dampening pad to bottom plate
- Requires fitting and poking holes.
- Warning: If the vertical fit is too tight/dense, the adhesive quality of some pads (like sorbothane) might strip off PCB padding during keyboard disassembly.
- Adjoin top portion (top plate + keyswitches + PCB) to bottom portion (dampener + bottom plate).
- Use minimum-length standoffs so the unit is as snug as possible. But beware of the adhesion between PCB and padding, noted above.
- Affix bumper feet.
- Ensure each half rests completely securely and at the desired angle. Keyboard should not wobble when pressing hard on any of the keys.
- Affix dangling components.
- Use medium adhesive for power switch.
- Use medium or strong adhesive for battery.
- Use weak adhesive for JST connector and any floating wires.
- Install keycaps.
- Homing keycaps where middle fingers rest.
- 1.5U keycaps for thumb-reach keys.
- Different colors for modifier & layer keys.
- Install MCU on PCB; install MCU cover.
- Plug in battery, switch on power.
build: software
github.com/blobject/zmk-config
boot
- (First boot:) Load firmware onto each half by connecting it to computer via USB.
- Mount/Open the half (recognised as a USB storage device) in a file manager.
- To enter bootloader mode, double-tap the reset switch.
- Copy firmware onto USB storage device.
- Unmount/Eject USB storage device, then disconnect half.
- Before pairing to any computer, let halves pair to each other.
- Power on, or single-tap halves' respective reset switches, simultaneously.
- Pairing between halves should happen automatically.
- Pair and connect board (left half is primary) to computer.
- Note that, with ZMK, TRRS is ignored by default and the halves always pair wirelessly.
bluetooth troubleshoot
- If dual-booting OSes, or connecting to two logical bluetooth devices that share the same physical address, then the older profile must be cleared for the new profile to be able to pair/connect. Exact steps:
- (Before attempting pairing) Select the profile in question (
BT_SEL n).
- Press
BT_CLR to clear out that profile.
- Switch off the board.
- Switch back on so that the halves pair with each other and the board advertises itself.
- Start scanning on the computer and pair with the board.
reset
- If firmware ever gets borked, try resetting the nice!nano MCU using joric's
erase_flash.uf2 (https://github.com/joric/nrfmicro/releases/) first and then flashing the configured ZMK firmware.
- MCU storage might be powered by "external power". If this has been disabled in the ZMK configuration, and then the ZMK firmware is flashed with something else, the flashing may not be clean. Not really sure if any of this bullet point is true, but I encountered this and reflashing (previous bullet point) helped.
test
- power switching ... OK
- keys, basic functionality ... OK
- keys, full functionality ... OK
- wireless, bluetooth communication between halves ... OK
- wireless, bluetooth pairing & connecting ... OK
- wireless, bluetooth on multiple devices ... OK
- wired, recharging ... OK
layout
.---. .----.----.----.----.----.----..----.----.----.----.----.----.
|1 2| | |1 f1|2 f2|3 f3|4 f4|5 f5||6 f6|7 f7|8 f8|9 f9|0f10| \d|
|a A| | \t |q Q|w W|e E|r R|t T||y Y|u U|i I|o O|p P|\b |
:---: |----|----|----|----|----|----||----|----|----|----|----|----|
|***| |****|! m3|@ m2|# mu|$ m1|%f11||^f12|& uu|* u|- dd|= || \|
|mod| | ct |a A|s S|d D|f F|g G||h H|j J|k K|l L|; :|' "|
:---: |----|----|----|----|----|----||----|----|----|----|----|----|
|=h=| |****|` |~ ml|( md|[ mr|{ lk||} <-|] l|) d|_ r|+ ->|=sh=|
|-t-| | sh |z Z|x X|c C|v V|b B||n N|m M|, <|. >|/ ?|-\n-|
'---' '----'----'----|----|----|----||----|----|----|----'----'----'
layers: |****|****| || |****|****|
ONE | al | su | \e || \s |ONE |TWO | <--- thumb
+ TWO '----'----'----''----'----'----'
= TRI ^------------------ left ---^ ^--- right -----------------^
= .--.--.--.--.--. .--.--.--.---.--. .---.--. .--. .---.
|l-|l+|vx|v-|v+| |b1|b2|b3|clr|bt| |usb|pr| |in| |GCS|
|q |w |e |r |t | |z |x |c | v |b | | u |i | |h | | n |
'--'--'--'--'--' '--'--'--'---'--' '---'--' '--' '---'
- Resemble traditional ANSI layouts (wrt. general positioning and subset choice).
- Forgo (scroll, caps, num) locks, sysrq, pause/break, and many multimedia keys.
- Note: Mapped to QWERTY, but use a healthier layout and switch them on the OS/software-level.
default layer (highest priority): All 5x3x2 symbols accessed by fingers in default positions (ie. lowercase letters and some punctuation). Then include quote, tab, backspace, return, escape, space.
one layer: numeric symbols and the rest of the traditional ANSI symbols.
two layer: functional and navigational keys.
tri layer (lowest priority): keys related to keyboard configuration, connectivity, and multimedia.
- fixed layers: application-optimised layouts that may move any symbols around.
- These skip
one/two/tri and fallback to default.
- Holding
one & two keys together yields the tri layer.
- Modifiers (ie. control, shift, alt, super) are fixed across the major layers.