Last active

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

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

View audio-book-reader.md

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

Awesome.

great story!

This is really cool.

An improvement I think would be to have the reader when it has internet connection, sync it's books with a cloud storage bucket that you can drop books into ( Google Drive, S3, Dropbox.. ect.). That way you wouldn't have to manually update the books on the Pi over SSH.

Absolutely fantastic story.

I'm so happy for you; doing something this great for your grandfather is amazing.

Cool! Amazing!

What about sharing the specs and code? Many people are good learners by example. I myself have a grandmother (who lives with me) who [almost] could benefit from it.

You are the reason grandchildren are awesome.

This is so great! Thank you for sharing, but most of all, thank you for doing this for your grandfather!

Awesome job.

Awesome project. Your grandpa must be so proud of you.

Awesome!

Impressive! Huge respect!

Nice Project. :+1:
Do note that not "any reader will do". You have a lot of choice, true, but be sure to match the operating frequency of the reader and the RFID tags. A 125KHz reader cannot communicate with 13.56MHz tags, and vice-versa. Those are the 2 most common frequencies, and I recommend you get one that supports those as the RFID tags are a lot easier to obtain.
Also, if you are only using the RFID as an 'identifier' you can obtain RFID inlays or stickers which also contain Unique IDs and some space for data for significantly cheaper prices than for the Credit-card type tags. (ie. Mifare/Mifare Ultralights, or something like this: http://nl.farnell.com/texas-instruments/ri-i16-112a-03/rfid-transponder-13-56mhz-2kbit/dp/1740417)

Respect !! You are a very good person.

This is great! It's always nice to see people going through all this to take care of their grand-parents/parents :).

Nice work, indeed. There's another way to do this. The Library of Congress offers a free, similar device and an extensive lending library of audio books available via mail (free postage).

http://www.loc.gov/nls/reference/factsheets/playback.html

Neat. This is what learn-to-code movement should be about. Technology empowers people.

:+1: Much respect. Technology applied to these kind of situations makes the best engineer merit.

Amazing work man. :+1: x :100:

But I din't liked this "I spoke to my grandmother today because it's her birthday". They are so important for you so you must be calling them frequently. May be once in every 2-3 days or max one week. They will love your call more than audio book player :

You're an inspiration!

Very cool! I love the DIY approach, had many situations where older relatives also have difficulty with technologies and wish I could tackle more of the problems myself.

nice!

Awesome!

Fuck yeah

This is just great. (y)

very nice!

:heart: :thumbsup: thats awesome!

Owner

@cjjuice yes, I wanted to do that. But it took me a bit longer than expected to build the reader, and I knew my grandfather was getting more depressed so I didn't want to wait any longer before sending the reader to him.

Owner

@henvic I actually linked to code above. But here it is again: https://github.com/wkjagt/BookPlayer. If you're interested in building it, let me know and I can share more details.

Owner

@MauriceAarts Yes you are right. And thanks for the information on the stickers!

Amazing work, which truly embodies the hacker spirit. It has the cachet of a true craftsman, and legitimately makes a person's life better.

Please keep doing this sort of thing, and please keep writing about your work.

very cool

Very cool man! This is what it's all about in my opinion.

Impressive!

rdrr commented

Amazing. Going to learn from you mpd code. thanks.

Very impressive and inspiring work!

Now that is techonology scratching a real itch. Well done man. Keep up the good work :)

Bravo.

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).

Bravo!

Cool!

amazing ! tear

Awesome job!! A wonderful masterpiece!

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

Inspirational and touching. Nicely done!

impressive and inspiring.

Good job :+1:

M3kH commented

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

Great idea and execution, thanks for sharing!

Fantastic! Great job Willem! ツ

Owner

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

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

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

That an excellent effort. stay blessed :)

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.)

Owner

@lucascaton thanks, updated!

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.

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 :smile:

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.

Full Respects and Honours

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.

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,

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

Owner

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.