Keyglove API (KGAPI) Protocol Features

Keyglove API (KGAPI) Protocol Features

For those not already aware, I’ve been working on a straightforward protocol that you can use to control the Keyglove. This (or at least the initial version of it) is now complete. This Keyglove API, or “KGAPI”, is made up of the following basic types of communication:

  • Commands: sent to the Keyglove to make stuff happen
  • Responses: sent back from the Keyglove after commands are sent, acknowledging or reporting errors
  • Events: sent from the Keyglove when things happen that aren’t directly triggered by commands, such as touch sensor changes or new motion data

This is the same kind of structure that you will find in many protocols used by hardware peripherals, so there’s nothing particularly special here.
Read more

Shiny New Keyglove Firmware on Github

Shiny New Keyglove Firmware on Github

The development between now and my last post has been pretty significant. I published a new Kickstarter project update a few days ago, but I don’t want to fragment the news updates, so I’m (mostly) reproducing that content here.

The biggest news is the updated and largely rewritten Arduino firmware source code that powers the microcontroller at the core of the Keyglove design. Since this is an open-source project, it has always been my intention to publish the complete source so that anyone can understand or modify the functionality however they might wish to. However, I am a bit of a neat freak when it comes to code. Well, “a bit” may be an understatement. It’s hard for me to work with or around code that isn’t organized, and/or formatted, and/or documented well, and it’s even harder for me to publish it knowing that others may need or want to use it in their own designs. Before I feel good about handing something to the world, it must pass my own tests for organization, readability, and documentation.
Read more

Digital I/O Touch Detection Code Improvements

Digital I/O Touch Detection Code Improvements

I have been working with the same basic approach to digital touch detection since the inception of the Keyglove. That process goes something like this:

  1. Pull all touch points to logic high
  2. Select possible combination [X, Y] from touch definition array
  3. Set point [X] low
  4. Measure the level of point [Y], and if it is low, then touch combination [X, Y] is active
  5. Increment test combination index and go back to step #2 until complete

At first, this method of scanning to detect connectivity between arbitrary I/O pins without mechanical switches seemed wonderfully functional and easily implemented. I used Arduino’s built-in digitalWrite() and digitalRead() functions, which was the simple solution. It was also plenty fast enough at the time. However, it has a couple of now-obvious shortcomings, plus another not-so-obvious one which I am hoping that I diagnosed correctly.
Read more

VIDEO: Prototype D Autodesk Inventor COM API Demo

VIDEO: Prototype D Autodesk Inventor COM API Demo

Keyglove #10 – Prototype D Autodesk Inventor COM API Demo from Jeff Rowberg on Vimeo.

This video demonstrates Keyglove Prototype D and the Keyglove Kit v0.4 PCB (v0.5 still pending design completion) along with the alpha Keyglove Manager app integrated with Autodesk Inventor using the COM API for true 3D input. This is just a sample of the kind of thing that can be done with the Keyglove. And, honestly, this isn’t even a very good demo due to the early stage of development of the Manager app and the loose mounting of the older revision of the PCB on the glove.
Read more

Keyglove Interface Options

Keyglove Interface Options

As I continue building the code to support all the necessary aspects of the configuration and control protocol for the Keyglove, I am also thinking about the various ways the protocol will be used, and how to keep everything as predictable and flexible as possible. There are both wired and wireless methods of interfacing with this device, but it turns out to be a little more complex than that.
Read more

ATTiny44 I2C Slave Feedback Module

ATTiny44 I2C Slave Feedback Module

Some time ago, I made the decision to move all of the feedback elements of the prototype Keyglove design to a separate I2C-controlled module, instead of using direct I/O pin connections. I did this because I also added three new touch sensors and better Bluetooth link and mode detection, and I simply didn’t have enough I/O pins to satisfy everything at the same time. The I2C bus was already being used by other modules anyway, so adding an additional slave device didn’t reduce the number of available pins anywhere else. At the same time, I freed up five whole pins for other functionality (Red, Green, Blue, Vibe, and Piezo). Not bad.
Read more

VIDEO: Wireless Mouse Movement Demo

Keyglove #09 – Wireless Mouse Movement Demo from Jeff Rowberg on Vimeo.

Finally! I have managed to incorporate the Bluegiga WT12 sufficiently into the current prototype hardware, along with the still-in-progress iWRAP code library to control it easily and transparently. This video demonstrates the first true combination of Bluetooth wireless functionality and the actual Keyglove code, rather than just a proof-of-concept Arduino sketch. This is a major milestone; wrapping up the remaining core Bluetooth functionality should be pretty straightforward now.
Read more

VIDEO: Orientation Demo

VIDEO: Orientation Demo

Keyglove #08 – Orientation Demo from Jeff Rowberg on Vimeo.

NOTE: For the uber-eager, the actual rotation starts at the 1:00 mark. There’s some introductory explanation of what’s happening and the hardware in use that occurs on before that.

This video is a demo of the IMU algorithm results (a.k.a. sensor fusion) achieved with SparkFun’s 6DOF motion sensor board, which uses an ADXL345 digital 3-axis accelerometer and ITG-3200 digital 3-axis gyroscope. The readings from the board are raw from each device, and combined on the Teensy++’s MCU to create a quaternion representation of the orientation.
Read more