Skip to content

Instantly share code, notes, and snippets.

@wkjagt
Last active April 12, 2024 14:18
Show Gist options
  • Save wkjagt/814b3f62ea03c7b1a765 to your computer and use it in GitHub Desktop.
Save wkjagt/814b3f62ea03c7b1a765 to your computer and use it in GitHub Desktop.
How I built an audio book reader for my nearly blind grandfather

#How I built an audio book reader for my nearly blind grandfather

Tweet this - Follow me

Last year, when visiting my family back home in Holland, I also stopped by my grand-parents. My grand-father, now 93 years old, had always been a very active man. However, during the presceding couple of months, he'd gone almost completely blind and now spent his days sitting in a chair. Trying to think of something for him to do, I suggested he try out audio books. After finally convincing him -- he said audio books were for sad old people -- that listening to a well performed recording is actually a wonderful experience, I realized the problem of this idea.

####The problem with audio devices and the newly blind. After my first impulse to jump up and go buy him an iPod Touch, I soon realized that, to use an iPod, or any audio device for that matter, one needs to be able to see the tiny controls. So I started looking at existing audio book solutions for the blind. A couple of things exist, but this market seems to be mainly targeted at people that still have a whole life of being blind ahead of them and are willing to invest time into learning very specific technologies. However, this was not my grand-father's situation. I worried that he would lose his motivation (of which he didn't have much left anyway at that point), so I needed to come up with something better. And since I hadn't found anything suitable that I could go out and buy, I would need to build it myself.

####Requirements

First of all, of course, whatever I was going to build needed to have an interface that didn't require (much) vision. Second, the controls needed to be intuitive and not require learning any completely new concepts. And last, if my grandfather paused a book, for however long, it would need to continue where he left off, even if the player had been without power.

I will describe in more detail below, but I ended up building a player that used my grandfathers very limited vision. However, it could easily be adapted for someone able to read braille. The player is built using a box the size of a 3 or 4 DVD boxes stacked on top of each other. Each audio book that is stored on the reader has a corresponding DVD box with the title of the book printed in very large letters on the front. When a "book" is placed on top of the reader, the reader starts playing the book. The reader has four large, bright colored buttons on the front with the following functions: pause, rewind 20 seconds, and two buttons that control volume.

the reader

###The used technologies

####Raspberry Pi At the heart of the player is a Raspberry Pi running Debian Wheezy. Getting Linux to play audio is very easy, so getting to audio books to play wasn't that much of a challenge. For playing audio, I used mpd, which is a daemon that runs a server that plays audio and that is controlled by sending it commands over TCP, a very reliable and easy to use network protocol.

What makes the Raspberry Pi interesting is not only that it's a tiny computer that runs Linux, but also that it has lots of I/O pins let you connect anything you can imagine (buttons, LEDs, but also serial communication devices). When writing a program for the Raspberry Pi, you'll be able to read from these pins and change the behaviour of your program accordingly. The small program I wrote to control the audio book player (available here) uses these pins to know when one of the buttons is pressed, and to know which book is placed on the reader. Based on these inputs, it communicates with the mpd server to start, stop, change book etc. etc.

####RFID Each of the DVD boxes that corresponds to one book, contains an RFID card (I used these). To read these cards, I connected an RFID card reader (I used this one but any reader will do) to one of the I/O pins that is able to do serial communication so my program knows which book to play. Each RFID card has its own unique ID, and each audio book is a series of MP3 files that have names starting with this ID.

####Getting the books on the reader I built the reader when I was back in Montreal (which is where I moved from Holland). When I finished the reader, I loaded it with ten books and sent it to my brother who lives a 10 minute walk from my grandparents. My brother took it to my grandfather and explained how it worked. Every time my grandfather finishes his books, my brother takes the reader home with him to connect it to his router. The reader, when powered up, will check for an internet connection, and if it finds one, it sends a message to my phone using Pushover containing my brother's IP address. I then connect to the reader from my laptop over SSH and copy new books to it.

####One year later

I spoke to my grandmother today because it's her birthday, and almost one year after having finished the reader, my grandfather still uses it daily, and proudly shows it to anyone who's visiting. He started requesting for music on it too, and whenever the reader is at my brother's, he's having a hard time not being able to use it. I'm so happy that this little project was able to give some pleasure to a person that's been so enormously important in my life. It's harsh to say it with these words, but when I saw him last year, I was afraid he was close to being bored to death, literally.

EDIT : I got a lot of requests for more technicals details on how I built it. I started writing everything down on my blog

@jeroen94704
Copy link

Awesome build. I especially like the RFID tagged DVD cases to select which book he will hear. That's a great user interaction idea, usable in other settings too (As a dad with young kids: How about letting the kids play a movie by plonking the case on top of the player instead of scratching the discs trying to insert them).

@grushetsky
Copy link

Bravo!

@suvirbhargav
Copy link

Cool!

@farzd
Copy link

farzd commented Aug 15, 2014

amazing ! tear

@sundarseswaran
Copy link

Awesome job!! A wonderful masterpiece!

@regularlady
Copy link

Incredibly impressive. You are a good person and so is your brother.

@brianjester
Copy link

Inspirational and touching. Nicely done!

@chanux
Copy link

chanux commented Aug 16, 2014

impressive and inspiring.

@alexxv
Copy link

alexxv commented Aug 16, 2014

Good job 👍

@M3kH
Copy link

M3kH commented Aug 16, 2014

Sweat Engineering Story. Respect.
Better then any HackADay tutorial.

@leomelzer
Copy link

Great idea and execution, thanks for sharing!

@lucascaton
Copy link

Fantastic! Great job Willem! ツ

@wkjagt
Copy link
Author

wkjagt commented Aug 17, 2014

I got a lot of requests for more technicals details on how I built it. I started writing everything down on my blog

@lucascaton
Copy link

The "Tweet this" link is without a link to this gist!

@dainasoja
Copy link

Hi Willem, great solution! You might be interested in Kolibre, another online solution (image available for the Raspberry Pi) supporting the international digital talking book standards (used by many national libraries for the print disabled) by the Daisy Consortium http://www.daisy.org. You'll find a presentation of our solution at http://www.kolibre.org/en/demo. All open source at https://github.com/kolibre

@cybermascot
Copy link

That an excellent effort. stay blessed :)

@Vandborg
Copy link

Amazing work! I love it. And don't get me wrong, but I nearly wished having a person with bad eye sight in my life which I could build this for. (All my grandparents are deceased, and my grandmother actually had a very bad eyesight, it's just that is 10 years ago now, but I would have loved to build this for her.)

@wkjagt
Copy link
Author

wkjagt commented Aug 19, 2014

@lucascaton thanks, updated!

@gcapiel
Copy link

gcapiel commented Aug 20, 2014

Very cool. You might want to check out if you can get a membership for your grandfather for Bookshare (www.bookshare.org), which has a very large selection of audio books (mp3) that are free with a membership. Bookshare has an API that you could integrate your project with:
http://developer.bookshare.org

The API doesn't yet support mp3 download, but you could download the text and convert it to audio using a TTS library on the RPI.

@mambocab
Copy link

This is amazing.

I, too, have a grandfather with very little vision -- his macular degeneration started degrading his sight about 10 years ago. Here in the United States, the Library of Congress, a central federal library system, has a fantastic program that provides free audiobook readers and audiobooks to blind people. I think he's read more since he went blind than he did before 😄

Your grandfather is very lucky to have your care and attention. Your design is great for an older person -- the physical manipulation of objects is, I think, a good metaphor for reading a book for someone who didn't grow up with computers, and a great interface for someone with very little vision.

@Beloit
Copy link

Beloit commented Aug 21, 2014

Full Respects and Honours

@PontusO
Copy link

PontusO commented Aug 22, 2014

An excellent example where our community based technology is put to good use. I congratulate you Sir (and your Grandfather) on a project well executed.

@eburggraaf
Copy link

I may be a bit biest as a 32 year old blind man. On an academic level, this project looks awsome. On a practical level, it really works and helps some one. Like most things built to help the blind though, it's a bit overkill. For example, the IPod touch would have wirked very well for this purpose. Every single feature of the IPod touch speaks and the touch screen is fully accessible. You can put the audiobook player in a prominant place on the screen, such as one of the corners. A double tap on the player and up it comes. flick to or move a finger around on the screen to find a new book, then double tap to start. To pause or resume, do a two finger double tap. Alternatively, choose a new book by long pressing the home button, waiting for the double beep, and saying play title by author. Again, two finger double tap to pause or resume.

My Grandma likes audiobooks. She got herself a CD player that plays mp3's and I ocasionally drop off a new stack of CD's for her. Sometimes two or three books fit on one CD, and she's in her element.

I do training for seniors who lose their vision, and I understand how it goes. I just think their are simpler solutions than building a player from scratch, though I definitely enjoyed reading up on how you did it.

Have fun,

@knoever
Copy link

knoever commented Mar 12, 2015

Hi Willem:
I really like your approach on the file selection procedure. My complements on your development!
I wanted to build an audioplayer which makes the file selection out of a larger archive fast and reliable for the blind user. So I looked into text to speech controlled navigation using a IR command and came up with a solution I explained on http://knoever.github.io/audioplayer-for-blind-people/ .
Klaus

@wkjagt
Copy link
Author

wkjagt commented Mar 19, 2015

@knoever excellent job! It's so good to see people using technology to help other people.

@edudeleon
Copy link

edudeleon commented Aug 13, 2016

Amazing story Willem! Very good job and most important, you improved someone else life!
Best.

@voidabhi
Copy link

👍

@BrianKFriesen
Copy link

This is a truly inspiring story. Thanks for all these tips with the end goal of helping impaired loved ones. I'm keeping this article in my back pocket. Thanks! -Brian K Friesen - https://goo.gl/nwMCcS

@fbownz
Copy link

fbownz commented Aug 11, 2017

Truly inspiring. Good work

@Alwiz79
Copy link

Alwiz79 commented Aug 30, 2017

Very nice project !!
Which changes would be necessary to use a USB RFID reader instead? Mine behaves like a keyboard..it writes the ID of the swiped card and presses enter.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment