Implanting a custom USB brain and TrackPoint in an old Kinesis Advantage Classic contoured PS/2 keyboard

Similar projects worth following
My primary keyboard is an old Kinesis Advantage Classic PS/2 keyboard I got for about $100 off eBay a while back. I have to use it with a PS/2->USB adapter on pretty much any machine I use, and sometimes this doesn't work all that well - it would be better if it was just USB. There's also some other features I'd like to add to it, so - a great opportunity for hacking!

This involves replacing the basic PS/2 brain in the keyboard with a new USB-capable one. Additional features I'd like to add to the keyboard:

  • Multiple user-defined key maps that can be uploaded via USB and easily toggled between on the fly (I want this to replace my Orbweaver)
  • A TrackPoint module (below N and to the left of the up arrow) and some thumb-operated mouse buttons (below Enter and Space)
  • Possibly a scroll wheel or two (ideally a tilt-scroll wheel mounted to the left of H and N, or to the right of G and B; not sure which yet)
  • Media control keys - both transport control (Play/Pause/Stop/Next/Prev) and volume control
  • The ability to cut the keyboard in half and move the two pieces independently, with a tether between them
  • Maybe even replace/augment the thumb buttons with something more akin to the DataHand's thumb configuration (modifiers on the sides?)

  • 1 × Kinesis Advantage Classic The keyboard
  • 1 × Arduino Micro or SparkFun Pro Micro Microprocessors, Microcontrollers, DSPs / Microcontrollers (MCUs)
  • 2 × Arduino Pro Mini Microprocessors, Microcontrollers, DSPs / Microcontrollers (MCUs)
  • 1 × PS/2 TrackPoint module Harvested from an old IBM ThinkPad keyboard

  • Putting Contourboarding on hold

    David H. Bronke11/24/2020 at 15:37 0 comments

    This project has stalled once again, partly because I found a way to do something I've wanted to do, but didn't think was going to be as simple: designing and 3D-printing my own contoured keyboard case.

    A while back I came across the Dactyl keyboard, and it looked like it was pretty close to what I wanted - it was basically a somewhat minimized split-hand version of the Kinesis Advantage design I'm such a big fan of. However, I knew I'd want to make modifications, and learning both a new language (Clojure) and a new modeling system (OpenSCAD) in order to make those modifications was a bit daunting at the time.

    Recently, though, I took another look at it and realized that Clojure is really just Lisp on the JVM. Once I started digging into the source, things got clearer pretty quickly, and within a few days I had the chassis reworked to the basic design I want. That, coupled with the fact that you can use (a slightly modified version of) QMK to take care of the firmware aspect of these boards, means that this will be a much faster way for me to achieve my goal, and it should end with an end product that is not only much more polished, but also more customized to my personal preferences.

    Given that, I've started a new project, which is a fork of Dactyl: the Dactyl Lynx keyboard. I'll keep this project around, since it has a lot of my learnings from when I first started to understand keyboard construction, but I don't think I'll be pursuing this particular idea any further. (i.e., replacing the guts of a Kinesis)

  • More small updates

    David H. Bronke09/01/2019 at 14:35 0 comments

    In between preparing for our move (we're actually starting the move today!) I've been poking at this project some more. I've made some updates to the documentation to make it easier to follow, and even added some useful links to the README! I think I've also narrowed down what parts I want to use for this: the Arduino Micro or SparkFun Pro Micro for the master microcontroller, and the Arduino Pro Mini for the key matrix scanning controllers.

    One other big update is that I think I've settled on using SPI to connect the matrix scanning controllers to the master. I was initially planning on using I2C for this, but SPI gives me the ability to upgrade the firmware for the slave controllers directly from the master. This should make it much easier to update the board, without having to have 2 or 3 separate programming headers.

    I also revisited the key matrix designs, since the ones I had previously were all based on having one big matrix for the whole keyboard. The new design will have 2 separate matrices, one for each side.

  • Dusting off the board!

    David H. Bronke08/14/2019 at 00:14 0 comments

    In December 2011, I started this project because I was fed up with having to use a PS/2-to-USB adapter for my keyboard all the time. (as of this writing, I'm still using an adapter, though at least I found one that could handle the power draw of this keyboard without losing connectivity every so often) I also had a couple of other ideas I wanted to implement: Switchable keymaps that can be managed via USB mass storage, fast response times (sometimes I still end up getting stuck keys with this keyboard because of how fast I type), N-key rollover (which may or may not actually be achievable without replacing the original circuit boards), additional keys (like "media keys", etc.) and a built-in TrackPoint.

    The initial idea was to use a PIC18F4550 in order to implement a new USB-capable brain for the keyboard. After letting the project languish for several years only making periodic attempts at poking it, I finally picked it up again. Since I started, though, I've come to realize that PICs tend to require a bit too much legwork to get something working compared to Atmel/Arduino-based boards. I'm now in the process of slowly revisiting my old code and designs, and updating them to no longer require PICs.

    I've also realized that I'd like to do a bit more with this board than I initially envisioned. I've had ideas of cutting the board in half and allowing each half to be tilted and positioned independently, connecting them with a cable. (likely I2C) I'd also like to integrate a USB hub, and if possible have the host port be a USB-C port. I'd also like to keep the design extensible so I can come back and do more crazy things in the future. (maybe per-key RGB lighting?)

    So I'm finally dusting this project off, just in time for us to start packing to move to a new apartment. Hopefully I'll stick with it and eventually improve my keyboard!

    First order of business is going to be choosing hardware. I'm definitely not messing with PICs again for this (although I have plenty of them in tubes at the moment... I just don't relish the idea of how much time it would take to get back up to speed with those, not to mention troubleshooting time) but that doesn't actually narrow things down that much. I have some SparkFun Pro Micro clones, Arduino Pro Mini clones, DigiSpark clones, an MSP430G2152, and a few other random parts... but I'm also not opposed to purchasing new pieces if it makes sense.

    I'll need at least 2 controllers: One with USB HID support that can be an I2C master to act as the main "brain", and one that can be an I2C slave for the second half of the board. It may even make sense to have both sides have I2C slaves, and have the master only be concerned with USB communication. The controllers that will need to be doing key scanning will need a decent number of I/O pins in order to do their jobs. (I'd say at least 15 pins per side of the keyboard, going from memory) Aside from those requirements, I could probably use just about anything, but I'm leaning toward Atmel or TI parts because of how simple the Arduino/Energia system is to work with.

View all 3 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates