3rd generation wheelchair interface

Prelude: Seattle Hardware Workshop

I recently attended Seattle Hardware Workshop and learned quite a bit. Thank you @marcbarros for considering our work here in Microsoft Research a 'startup' so we could benefit from the collective wisdom of the Seattle startup community.

Two thoughts I took away from the workshop are "iterate hardware rapidly, once a week if possible" and "stay in the easy prototyping space of Arduinos and 3D printing as long as you possibly can". With that in mind, we're continuing to focus on improving the wheelchair interface -- using Arduinos and 3D printing.

Third Generation Interface

What's changed?

  • We need to improve the durability of the connectors. Our first happy customer was, within days, able to pull the connectors off our second generation design. I saw this coming -- in my days prototyping robots the first thing to break is almost always an unsupported connector like a USB port with a hanging cable.
  • We moved to the Arduino Micro from the PJRC Teensy 3.1. The primary reason for this is that it's much easier to find an Arduino than the slightly less well known Teensy.
  • We added 'fifth switch' support to the design to allow future expansion in how we interact with the Omni.

Here's how you create this updated interface:

Parts List

Arduino Micro, USB 2.0 Micro connector cable, passthrough db9 serial cable
Parts Photo

Step 1, Splay the Cable

Cut off one DB9 connector and splay the cable. I use a sharp pocket knife for this.

Begin Splaying the Cable

Splayed Cable

Step 2, Strip the Wires

Strip the wires, about 2 mm, so you can solder them to the Arduino ports

Stripped Wires

Step 3, Map the DB9 pins

I use a multimeter to map which color wires go to which ports. I think create a map that looks like this:

DB9 Pins to Arduino Ports

From the PG Drives Omni documentation:

Omni Pinout

Step 4, Solder the wires

Solder the wires, leaving two pins (7 & 9) disconnected.

Soldered Side View

Step 5, Create mounting board

To keep wires from coming disconnected under strain, I quickly laser cut a little mounting board so I could hold down the Arduino and use cable ties to take the strain off the connectors. I have access to a laser cutter to make this part. Laser cutters aren't very common-place but 3D printers are, so for our next revision we'll be moving over to a 3D printed part instead.

Mounting Board Image

Mounted Top

Mounted Bottom


We're already at work on our fourth generation design. What will we do differently?

  • Create a 3D printed 'case' that you can print yourself or order from a printing house like Shapeways.
  • Add a DB9 connector to the case so you don't have to cut open a cable and strip its wires. There will still be a little soldering involved to wire up the connections from the Arduino to the DB9 connector.
  • Add a few status indicator lights to help diagnose when things go wrong.
  • Update the firmware (e.g. Arduino program) with more intelligence to help diagnose errors and drive the status lights.