IEEE Spectrum August, 2015 - 25

DaviD schneiDer (4)

the answer turned out to be already in my
possession: A Kindle touch e-reader. It was
the perfect size-big enough to display a lot
of information at once in a large font and to
show me a decent chunk of a map without
scrolling. Its e Ink display is clear and crisp
even in bright light. And the price was right.
the only problem was that I couldn't hack its
software to make it do what I wanted.
this wasn't just a technical issue; it was a legal one. Modifying such a gadget to operate in
ways other than the manufacturer intended-
even if you own the device-flirts with provisions of the Digital Millennium Copyright Act,
bizarre as that may seem. the U.S. government (for odd reasons, specifically the librarian of Congress) doesn't want you to have full
control of the software on your phone, tablet,
or e-reader-even if it's open source. but after
some pondering, I realized that I could make
the Kindle serve my needs without touching a
single line of code running on it.
the trick was to use the Kindle's "experimental" Web browser, allowing me to put
the brains of the computer elsewhere, in this
case on a US $20 Raspberry Pi Model A. the
Raspberry Pi, being cheap and open, was
perfect for the job. by plugging a suitable
Wi-Fi dongle ($12) into its USb port, I could
make it into a Wi-Fi access point. Run a Web
server on the Pi and it can send htMl of your
choosing to the Kindle to display.
My system consists of three parts: the
Raspberry Pi and its battery (which reside in
the bike's saddlebag); a small PC board of my
own design (which carries a $30 GPS module and plugs into the Pi); and a Kindle touch
(mounted on the handlebars using bits of
foam pipe insulation and a few rubber bands).
two reed switches mounted to the frame
of my bike sense wheel rotation and pedal
cadence by virtue of magnets attached to
a spoke and to the inner chain ring. these
switches are electrically connected to pins
on the Raspberry Pi's GPIO (general purpose
input/output) port, allowing the Pi to know
how fast the wheels and pedals are turning.
the list of software that I needed to install
and configure on the Pi to make all this work
is not short. It includes hostadp, which allowed me to transform the Pi into a wireless

BIKE BYTEs

BuILDINg THE BIKE CoMpuTEr
required making hardware upgrades to a
raspberry Pi, adding gPs and Wi-Fi [top].
With its battery pack, the computer fits
easily into my rear saddlebag [second
from top]. reed switches and magnets
detect how fast the pedals and wheels are
turning [bottom two photos].

access point, thanks to some helpful online
instructions. I also installed Flask, a lightweight framework for writing Web applications in Python (again, following helpful leads
on the Web). but it didn't end there. For example, I needed another program, gpsd, to
parse the GPS data coming in from my little
add-on board. And there were JavaScript
libraries as well to load, including leaflet,
which allowed me to add a nifty mapping
feature to my cycling computer.
eventually, I was able to get my Flask app to
run automatically when the Pi powered up and
have the Pi act as a captive portal, meaning that
it served up my app's output no matter which
URl the Kindle's browser was pointed to.
Next, I had to write a cycling-computer Web
app that would look good on the Kindle's e Ink
display. there were two notable complications.
One arose because of the way e Ink works. It's
very susceptible to ghosting, where pixels don't
properly switch to a new state, so Amazon.
com's engineers arranged for the Kindle's
browser to cycle the entire displayfrom black to
white and back again when a new page loads.
this initially made for awkward flickering, because my initial app sent a new page with updated values every second. the solution was to
use what's known in Web-development circles
as Ajax techniques to update just the necessary
elements without sending a whole new page
and triggering a refresh.
Another twist peculiar to the Kindle is that
when it connects to a new access point, it immediately tries to reach Amazon. If it doesn't
get the right response, it won't treat the access point as valid. the solution was simple:
have the Pi supply the Kindle with the short
response it was expecting from Amazon.
In the end, I managed to pull together a system that shows distance, instantaneous speed,
average speed, cadence, elapsed time, and
clock time all at once, with digits large enough
to read without squinting. Swiping and pressing buttons brings up other screens that offer
such goodies as real-time mapping and logging. even if you have to buy a Kindle for this
project, the cost of the hardware involved is
probably less than half what you'd be paying
for a commercial unit with these capabilities.
-DAvID sCHNEIDEr

SPECTRUM.IEEE.ORG

|

nORTh aMERICan

|

aUG 2015

|

25


http://SPECTRUM.IEEE.ORG

Table of Contents for the Digital Edition of IEEE Spectrum August, 2015

IEEE Spectrum August, 2015 - Cover1
IEEE Spectrum August, 2015 - Cover2
IEEE Spectrum August, 2015 - 1
IEEE Spectrum August, 2015 - 2
IEEE Spectrum August, 2015 - 3
IEEE Spectrum August, 2015 - 4
IEEE Spectrum August, 2015 - 5
IEEE Spectrum August, 2015 - 6
IEEE Spectrum August, 2015 - 7
IEEE Spectrum August, 2015 - 8
IEEE Spectrum August, 2015 - 9
IEEE Spectrum August, 2015 - 10
IEEE Spectrum August, 2015 - 11
IEEE Spectrum August, 2015 - 12
IEEE Spectrum August, 2015 - 13
IEEE Spectrum August, 2015 - 14
IEEE Spectrum August, 2015 - 15
IEEE Spectrum August, 2015 - 16
IEEE Spectrum August, 2015 - 17
IEEE Spectrum August, 2015 - 18
IEEE Spectrum August, 2015 - 19
IEEE Spectrum August, 2015 - 20
IEEE Spectrum August, 2015 - 21
IEEE Spectrum August, 2015 - 22
IEEE Spectrum August, 2015 - 23
IEEE Spectrum August, 2015 - 24
IEEE Spectrum August, 2015 - 25
IEEE Spectrum August, 2015 - 26
IEEE Spectrum August, 2015 - 27
IEEE Spectrum August, 2015 - 28
IEEE Spectrum August, 2015 - 29
IEEE Spectrum August, 2015 - 30
IEEE Spectrum August, 2015 - 31
IEEE Spectrum August, 2015 - 32
IEEE Spectrum August, 2015 - 33
IEEE Spectrum August, 2015 - 34
IEEE Spectrum August, 2015 - 35
IEEE Spectrum August, 2015 - 36
IEEE Spectrum August, 2015 - 37
IEEE Spectrum August, 2015 - 38
IEEE Spectrum August, 2015 - 39
IEEE Spectrum August, 2015 - 40
IEEE Spectrum August, 2015 - 41
IEEE Spectrum August, 2015 - 42
IEEE Spectrum August, 2015 - 43
IEEE Spectrum August, 2015 - 44
IEEE Spectrum August, 2015 - 45
IEEE Spectrum August, 2015 - 46
IEEE Spectrum August, 2015 - 47
IEEE Spectrum August, 2015 - 48
IEEE Spectrum August, 2015 - 49
IEEE Spectrum August, 2015 - 50
IEEE Spectrum August, 2015 - 51
IEEE Spectrum August, 2015 - 52
IEEE Spectrum August, 2015 - 53
IEEE Spectrum August, 2015 - 54
IEEE Spectrum August, 2015 - 55
IEEE Spectrum August, 2015 - 56
IEEE Spectrum August, 2015 - 57
IEEE Spectrum August, 2015 - 58
IEEE Spectrum August, 2015 - 59
IEEE Spectrum August, 2015 - 60
IEEE Spectrum August, 2015 - 61
IEEE Spectrum August, 2015 - 62
IEEE Spectrum August, 2015 - 63
IEEE Spectrum August, 2015 - 64
IEEE Spectrum August, 2015 - Cover3
IEEE Spectrum August, 2015 - Cover4
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1217
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1117
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1017
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0917
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0817
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0717
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0617
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0517
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0417
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0317
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0217
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0117
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1216
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1116
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1016
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0916
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0816
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0716
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0616
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0516
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0416
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0316
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0216
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0116
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1215
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1115
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1015
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0915
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0815
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0715
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0615
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0515
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0415
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0315
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0215
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0115
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1214
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1114
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1014
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0914
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0814
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0714
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0614
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0514
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0414
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0314
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0214
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0114
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1213
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1113
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1013
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0913
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0813
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0713
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0613
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0513
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0413
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0313
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0213
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0113
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1212
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1112
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1012
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0912
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0812
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0712
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0612
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0512
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0412
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0312
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0212
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0112
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1211
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1111
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1011
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0911
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0811
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0711
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0611
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0511
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0411
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0311
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0211
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0111
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1210
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1110
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1010
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0910
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0810
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0710
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0610
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0510
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0410
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0310
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0210
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0110
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1209
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1109
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1009
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0909
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0809
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0709
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0609
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0509
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0409
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0309
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0209
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0109
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1208
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1108
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1008
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0908
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0808
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0708
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0608
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0508
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0408
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0308
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0208
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0108
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1207
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1107
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1007
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0907
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0807
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0707
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0607
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0507
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0407
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0307
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0207
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0107
https://www.nxtbookmedia.com