With chronic back pain and a few major orthopaedic surgeries, I’ve been left with the unfortunate result of not being able to sit and read a book for very long without my upper back or shoulders locking up. Holding any object still for a length of time makes it all just seize up. For years, I didn’t read a single book.
Unfortunately, eBooks on their own haven’t helped as needing to hold the iPad and press to turn the page is basically the same as holding a real book. I’ve never got on with audiobooks, as for some reason my mind wanders, so I keep having to rewind over and over.
I solved the holding problem by building the GidTech iPad-Hold-A-Tron 2000™, an anglepoise stand to hold the iPad over my bed. This also means I can watch TV without sitting up and staring immobile at a screen for hours, but the problem of turning page was still there. I can exercise and work during the day, but when I switch off in the evening and want to read I really do need to allow my back to recover with the minimum of strain. So what I need is a comfortable handheld controller that lets me lie back and relax totally, and engage the minimum amount of muscle effort necessary to press a button.
Accessibility devices are expensive and usually fairly crude. For a while, I used an Apple Bluetooth Keyboard (and latterly, a third party handheld keyboard) but those actually left me with repetitive strain in my thumb. And, Apple iBooks.app on iPad didn’t even support keyboard control: I had to activate VoiceOver accessibility functions and manually select the page progress bar. Fortunately, since iOS 10 (I think) it supports left and right arrow buttons… but ironically not Page Up and Page Down. Ideally, iBooks would support Previous / Next from standard media remotes, with an option of whether to redirect those to iBooks or the Music or Podcasts app.
Regardless, there’s no ergonomic handheld Bluetooth controller I can find that supports left / right arrows.
My initial solution consisted of a Raspberry Pi with a Bluetooth dongle, a BlueSMiRF HID and a Nintendo Wiimote. The Wiimote would connect via the Bluetooth dongle to a Python script on the Pi, which would output HID commands (ie. Bluetooth Keyboard presses) to the iPad. It worked, but as Bluetooth on a Pi is temperamental to say the least, battery management was never adequate: if I left the Wiimote on overnight, it’d be drained by the next morning. Also, the Python scripts crashed a lot, so I’d always have to start by SSH’ing in and resetting everything.
This lasted me some time, but the chore of setup meant that I usually gave up and just watched TV instead.
GidTech Page-Turn-O-Matic 2000™
I decided to look at building my own Bluetooth controller, ideally using Bluetooth LE (Low Energy). This is easier said than done. Using AT-based devices like the HC-05 is a chore, and I’m not even sure it’s possible to use them as HID controllers. The equivalent for Bluetooth LE, eg. HM-10, is even harder.
For earlier projects (eg. the GidTech Posture-U-Like™) I’d tried to use NRF51822 devices, but the Nordic SDK is a nightmare to comprehend unless you really commit to it on a professional basis… very little decent example code that’s not either too trivial or immensely overcomplicated. Hunching over a keyboard for evening after evening trying to understand it would just trigger the same damn shoulder/neck problem I’m trying to solve in the first place.
I’ve tried Arduino on an Adafruit Bluefruit LE Micro and similar… Adafruit Feather, BLENano, RFduino and so forth. This had more success, and I was able to create a device that was worked relatively easily.
Even so, there are just too many problems to solve to make it a quick and easy project. Making a comfortable device with black ABS project boxes isn’t easy, and 3D printing a comfortable blob is doable, but it does need designing.
To start with, I build a fairly modest handheld box with a microswitch, but it just didn’t really satisfy. It was also too small to fit all the bits and pieces necessary.
After trying to build a relatively comfortable model in Blender and failing, I used Thermomorph / Polymorph moldable plastic to model a handgrip, and then Autodesk 123D Catch to scan it. Wrangling such an object in Blender isn’t for the fainthearted, but I managed to construct a simple polygonal model that somewhat matched the blob.
With a few rounds of tweaking and 3D printing I had a workable enclosure that could take the circuitry, battery and buttons. This worked for a little while, but the power drain was just too great, and it never really seemed right.
GidTech Page-Turn-O-Matic 4000™
In early 2017 I prepared for another round of major back surgery, knowing I’d be bed-bound for considerable time; possibly months. I had a big stack of books to read and a lot of time to waste. Fortunately, iOS now has rudimentary keyboard controls, so I picked up a cheap handheld Bluetooth keyboard which I dubbed the Page-Turn-O-Matic 3000™; an OEM re-brand, clearly.
Unfortunately, it’s fairly unergonomic, and the tiny pincer motion necessary has left me with a sore thumb again, requiring a thumb splint. I toyed with the idea of building a large blob-like enclosure for the keyboard, exposing the right button while filling the palm of my hand, but that would be too easy.
Fortunately, my surgery went a lot better than expected, so I’ve had the stamina to look at the next option… the Puck.js.
I’ve used Espruino boards before with success, so when the Espruino Pico was Kickstarter’ed, I jumped at the chance. Even so, I never got a usable HID mechanism working, as it’d still end up back at the problem of controlling a HM-10 or an NRF51.
When the Espruino Puck.js was Kickstarter’ed with built-in Bluetooth LE — as it’s an NRF52-based board — and HID support as a stretch goal, I was completely stoked. Even better, it’s a tiny board with a button cell and a nice silicone enclosure. This is exactly what I was waiting for.
So, I’ve now constructed GidTech Page-Turn-O-Matic 4000™. I’ve molded a combined thumb splint and hand controller platform from Thermomorph, and stuck a Puck.js under the index finger.
Initially, I’d built it as just a thumb splint before I realised it’d work well for the Page-Turn-O-Matic, so the Puck was located on the palm. This made for an awkward clench with poor leverage to activate the page turn, so I remolded it.
The code is simplicity itself. In fact, the example code given on the Espruino website does the trick just fine. My extended code is fundamentally the same in principle; I just added a few extra bells-and-whistles.
There have been some issues with the current firmware, but a quick forum conversation and a link to a newer build of the firmware has it working now.
I haven’t tested power drain yet, but as Espruino is event-driven and well-written, I expect it should be quite economical.
It also makes me feel like Iron Man.
Update: GidLabs Page-Turn-O-Matic™ Air
I decided that as long as the bottom joint doesn’t move, my thumb’s actually fine. So a tiny microswitch on the thumb might be less work than the index/middle finger click direct to the Puck that Iteration #3 of the 4000 used.
To do this, I’d embed a microswitch in the plastic under the pad of the thumb, and route tiny wires through the plastic to the Puck. Initially, I tried pogo pins, but getting them embedded and located correctly on the Puck proved difficult: a 3D print design would be required with several iterations. Finally I gave up and just soldered two tiny headers to a couple of the Puck’s GPIO lines and ran the wires through the base of the Puck holder. It’s less elegant: the battery change needed every few months now involves some wires that I totally believe will break off before too long. That’s a problem for tomorrow though.
The move of the switch allowed me to slim down the body of the unit considerably and relocating the Puck back to the palm allowing for a secondary click function, and eventually the addition of sorely-needed ventilation holes. In total, I probably removed more than half of the plastic weight, both by culling large areas and holes, but also by holding it up to the light to see the thicker parts and thinning them down.
Moulding the plastic and addition of the holes is made considerably easier now I have a soldering station with an SMD rework hot air gun, which has spent a grand total of zero seconds doing SMD rework, and a lot of minutes doing Thermomorph plastic melting and heatshrink tube warming.
It’s also caused a couple of burns. Quick tip: don’t get too enthusiastic with the heat and limit to 100ºC (the lowest mine will go); then, lick your thumb/fingers, and work fast. Otherwise you risk the hot plastic sticking to your dry skin, and it will blister. Oww.
Anyway, the newly remodelled device is in service and doing an excellent job. Luckily I burned my left thumb, not my right thumb, so I can use the new microswitch capability without pain.
Just in time to read the new Dan Brown novel.
Another Update: GidLabs Page-Turn-O-Matic™ Hot Air
With many small tweaks over the past few months, I’ve managed to shave almost half the weight of plastic from the Page-Turn-O-Matic™ Air. I’ll never get an ideal shape using Thermomorph though, and it seems unsatisfying to leave it there. Since Autodesk discontinued 123D Catch which I used to 3D scan the Page-Turn-O-Matic™ 2000 (Potato Edition), I hunted for an alternative. Qlone actually turns out to be much better, especially on my new iPhone 8.
In time I’ll be remodelling it from primitives in Fusion 360, using the scan as a guide. Then I’ll print a new handgrip from ABS on my CEL RoboxDual. When I get to that — after finishing off the GidLabs Volt-U-Like™ 2000 and the GidLabs Therm-O-Vision™ 2000 and the GidLabs Epoch-o-clock™ 2038 *— I’ll write another article dedicated to that process.
*: Yeah, yeah, I need to stop starting new projects and start finishing some.