Bodies are cool, but finicky, and sometimes they don’t do what we want. A friend of mine has some unexplained nerve pain in their hands, and it hurts for them to type on a keyboard or swipe on a touchscreen. At their request, I made them a device which connects wirelessly to an iPad and reads their waved hand gestures to touchlessly navigate pages in an e-book, allowing for pain-free reading. I built this page turner from some electronic parts from Adafruit and a 3D printed enclosure.

A search for “gesture sensor” introduced me to Adafruit’s APDS-9960 breakout board. I wanted the page turner to be small and portable, so it can travel conveniently with the e-reader, so I selected the smallest microcontroller package and battery I wanted to work with: the QT Py S3 (an ESP32-S3 breakout) with a charger BFF and a 400mAh lipo. These all interconnect with JST cables, so all that needed soldering were some pin headers and an extra wire for the APDS-9960’s interrupt pin. The interrupt connection could be skipped, but it helps improve battery life by not requiring the QT Py to constantly poll the sensor.

Assembly

I cut a wire ~1.5” long and soldered it between the QT Py’s A3 and the sensor’s INT.

interrupt wire
Note that the wire enters through the back of each board.

I soldered pin headers onto the QT Py, skipping over A3,

pin headers

then finally soldered the charger BFF to those headers.

charger attached

The components were connected together via JST cables and the wires were carefully bent into shape to scrunch everything into the right orientations.

JST cables

I outsourced enclosure design to a friend who came up with this phenomenal first model:

first model

A cap fits over the charger BFF’s onboard power switch to make it usable through the enclosure.

switch cap

A light pipe, printed from translucent PCTG, brings the light of the status LED from the QT Py around to the same side as the switch.

light pipe

The battery charge indicator simply shines up through a hole.

charging

Some heat-set inserts were pressed in with a soldering iron to let the enclosure screw together. A spare pair on the back could be used to mount a clip, so the device could be clipped onto the side of the e-reader itself.

heat set inserts

The completed page turner:

page turner

Software

The software for this project ended up relatively simple. You can check it out at github.com/brushyfork23/page_turner.

Originally I had configured a right-to-left swipe to advance the page and a left-to-right swipe to go back, but some real world testing revealed that you mostly only want to go forward and it’s tiring to swing your hand back around the sensor. I changed from gesture sensing to simple proximity sensing, and now the device can be used in any orientation by passing a finger back and forth.

Basic battery monitoring is done by a scan at startup and the device flashes green, orange, or red to indicate the charge percentage remaining.

Struggles

The part of the enclosure where the sensor meets the face took a lot of iteration, because if there was any gap between the sensor and the enclosure aperture then the IR LED would flood the inside of the case and cause false positives.

final sensor
The final working design.

When I started this project, I didn’t have my own 3D printer, so each iteration required finding time on another available friend’s machine. It was impossible to adjust for the sensor gap because the tolerances of each person’s printer were different, so I finally decided I was ready and purchased my own. I bought a Prusa Core One and some Pro PCTG filament from 3D-Fuel, and was printing with fantastic results right away once I configured 3D-Fuel’s print profiles.

Having a printer allowed me to experiment with true rapid prototyping. I printed the specific section of the model I was having trouble with and iterated on it alone, using only a gram or so of filament each time and only taking 5 minutes between versions. A month of failed back-and-forth was solved in just a few hours!

sensor iterations