Laser Keyset

For my final project, I returned to my idea from week 1 of merging a keyset with a pointing device. I made a hand-held laser-pointer that incorporates three data buttons in addition to the laser on/off button. It interfaces to a computer over a wired connection (FTDI serial) - the next iteration will be wireless.

The key challenge turned out to be making everything compact. I had a strong sense from the beginning of the proper handle size, no more than 1 inch, and I wanted the wires and electronics nicely sealed inside.

My first step was in software though. I spent longer than I'd like to admit getting serial communication running round-trip between my ATtiny44 and a python script on my computer. I kept mixing up Tx and Rx, for one. I got it going eventually though.

The next challenge was fitting a shell tightly onto the laser diode. I printed about a dozen small half-shells to work out the best dimensions for gripping the thin ridge in the diode to hold it in place.

I generalized the diode shell into a larger handle, first printing a half-length handle to test a few concepts. At the faster print rate I wanted to use for the handle, the diode shell had too little resolution to function, so instead of baking the shell straight into the handle halves I made handle depressions that would accept diode shell inserts.

For the keyset buttons, I built a sideways extension that was comfortable to rest one's fingers on. The extension was made from a wooden dowel into which I hand-drilled a 45-degree cylindrical hole to fit the shape of the primary handle. I placed a button on the extension handle for fingers three, four, and five.

I had planned to attach an FTDI cable straight to the board and run it out the base of the handle, but I measured the wrong cable radius and ended up with too little space to fit the cable. I ran a ribbon cable extension out the bottom instead, which turned out to be a lucky call - I later ended up gluing the shell together (not something I'd originally planned), and this way I can quickly plug and unplug from the long and heavy FTDI cable.

Many of my wires ended up being soldered directly onto copper pads on my board. The external buttons were soldered onto copper tape that I'd run around the exteriors of the handles. In both cases, I'd test with a multimeter that an electrical connection had been made, then I'd hot-glue over the wire join to hold it in place. Getting the electrical connection sometimes took multiple tries, especially for the buttons - the copper tape didn't stay down very well, and the rounded surface was difficult to join to the legless buttons.

I ran end-to-end tests of each component - the four input buttons and the laser diode and serial outputs - and each part worked. This was great news!

Fitting the various pieces together was a bit jammed since I'd kept the tolerances tight to keep total size down, but I got things together. I tested each component again with everything packaged up to confirm it worked, then glued the wooden handle in place and sealed everything in. It continues to work.

Here are various pictures:

If you're interested in the code, here are the python, c, and make files. Here is the Antimony CAD file.