An individual I was working with who has significant loss of hand function asked if I could set up their talking-book player to be voice activated. Without first doing research it looked like many button operated devices I’d hacked before and I believed I only had the 2 usual options when no remote control exists: wire into the buttons directly, or setup a robotic button pusher. Since these players are from the National Library Service and are property of the U.S. Government, I figured maybe I should not open one up and wire into it, even if it appeared straight forward. Then as I started to size up the device for mounting a robotic button pusher on it I noticed a plastic cover over what looked like a USB port. Still being stubborn and not looking online for a manual I decided to find out what happens if I plugged a keyboard into that USB port. Turns out that the numpad keys can control all the player’s functions. That meant I could plug in an MCU acting as a keyboard and it could control the player directly. Below is a video of this solution in action.
After I had seen that the keyboard was able to control player I finally decided that I should read the manual to save some time and find out if there were any other surprises in store. The manual of course showed all outer features of the player including the “Assistive Technology USB Socket”:
Further it gave the default mapping of the keys and alluded to the option to create new mappings, detailed in another section:
So now I figured this would be a very simple and quick job. I just needed to pair a WiFi enabled MCU with Amazon Alexa, have it simulate a keyboard and send the right keys in response to the corresponding voice command. My initial plan was to use a Particle Photon board triggered by voice commands via IFTTT, but there were a few issues.
First, the player would not recognize the Photon as a keyboard. Nor would it recognize an Arduino Micro (my other keyboard goto device) as one. It did however recognize a Teensy as one. Not sure yet if it has to do with the bootloaders on the other devices slowing down how fast they enumerate as a USB keyboard (Teensy’s bootloader does not automatically run at power-up), or if it has to do with the other devices also presenting themselves as a Serial device (this can be disabled with the Teensy).
Second, the player would glitch sometimes, skipping to the end of the book, even if my code wasn’t sending any key presses. My guess is that the Photon would occasionally pull too much current from the player’s USB port for the WiFi, causing the system to glitch. After using an external power supply for my device I did not see this behavior anymore.
So the final version had a Teensy 3.2 wired to a Particle Photon. The Teensy’s USB connected to the player to send the key presses. The Photon’s USB was connected to an external power supply. The VIN and GND pins of both boards were connected together and the USB to 5V trace was cut on the Teensy to isolate the player’s power supply. For communication between the 2 boards, since the user was only interested in 2 buttons (Play/Stop and Sleep), I used a wire for each button. On the Teensy side the pins were set to input w/ internal pull-ups enabled, and on the Photon side the pins drive low to trigger the Teensy when requested. If many more buttons were needed I might instead setup a serial communication between them. Below are some pictures of the assembly.