Dementia Friendly Media Player




Introduction: Dementia Friendly Media Player

About: Retired software engineer, DIY Noisenik

Music can have a profound benefit for people with dementia. In addition to it's entertainment value it can provide a link to the past, unlocking memories and is increasingly forming part of dementia care. Sadly, many modern home entertainment products are not dementia friendly having complex user interfaces.

The media player described here behaves like a basic radio with just two controls - a 'tuning dial' that selects the 'station' and a volume control. In this case a 'station' is a folder of audio files stored on a memory card. The idea is that the user simply turns the dial until they hear something they like. The 'station' files are then played in a random sequence.

It's just like a radio that only plays good music with no adverts!


The dementia friendly media player requires only a handful of components costing around £20 :-

  1. Arduino single board micro-controller. I used an Arduino UNO but any compatible model should work.
  2. DFPlayer compatible MP3 module. I used the low cost Sodial MP3-TF-16P
  3. MicroSD card for music storage
  4. Rotary encoder for 'tuning'
  5. 10K ohm potentiometer for volume control
  6. 1K ohm resistor
  7. Perfboard for assembly
  8. External power supply (9-12V @2A recommended)
  9. Loudspeaker (3ohm @ 5W or similar)

A basic electronics toolkit will also be required together with a PC running the Arduino IDE to upload the sketch.

Step 1: The Hardware

The heart of the media player is the DFPlayer MP3 module. This combines an MP3 decoder, SD card reader and a 3 Watt mono amplifier in a small, low cost package. The MP3 module is controlled by an Arduino microcontroller. Only a few connections are required to the DFPlayer module:-

  1. +5V (pin1)
  2. Serial receive (pin2)
  3. Serial transmit (pin 3)
  4. Output to speaker (pins 6 and 8)
  5. Ground (pins 7 and 10)
  6. Busy (pin 16)

The Arduino takes input from a rotary encoder (the tuning control) and a potentiometer (volume control). The Busy pin from the DFPlayer module is connected to Digital pin 6 of the Arduino.

The breadboard prototype wiring is shown above. Note the 1K resistor between the Arduino and the Serial RX pin of the MP3 module. This is required to interface the 5V Arduino to the 3.3V DFPlayer.

Also note that the DFPlayer module requires a stable power supply and is unlikely to work correctly using just USB power. I took the 5V supply from the Arduino which, in turn, is powered via an external PSU. While this worked you may wish to consider a separate supply for the MP3 module.

Step 2: The Software

The Arduino sketch that controls the media player is relatively straightforward. The main loop is executed 100 times per second and performs three functions:-

  1. Check the status of the 'tuning' encoder
  2. Check the status of the volume pot
  3. Check whether the playback of the current track has finished.

The playback status is determined by polling the 'busy' pin of the DFPlayer module which is linked to digital pin 6 of the Arduino Uno.

void loop () {
  boolean busy = false;
  delay (10);    
  if (myDFPlayer.available());     // needed to keep ack buffer clean 
  busy = digitalRead(busyPin);                        // check if current track is finished 
  if (busy == 1) { playStation();    
    delay(300);                                        // wait for busy pin  }

Extensive debugging code is included in the sketch. This sends regular status messages via the IDE serial port to assist troubleshooting. It can be switched on or off by editing line 14.

boolean serialDebug = false;                     // enable/disable troubleshooting     

Similarly, the order in which the tracks are played can be changed from random to sequential by editing line 15

boolean randomTrackPlay = true;                  // randomise the track order

Two external libraries must be included for the sketch to compile correctly - SoftwareSerial.h and DFRobotDFPlayerMini.h

The complete sketch can be found on my GitHub page.

Step 3: Organising the Music

The music files are copied to an SD card which is placed in the DFPlayer card slot. This project treats each directory on the SD card as a 'station' that can be selected via the tuning control.

The files must be organised in a specific manner to be recognised. Files are stored in directories named 01, 02, etc. The directory names must be two digits long with a leading 'zero' i.e. 01 up to a maximum of 99.

Within each directory the audio files must be named 001.mp3, 002.mp3 up to 999.mp3. Each file name is three digits long with leading 'zeros' and an mp3 file extension. The DFPlayer module will also replay .WAV files though I have not tried this.

The file naming convention used by the module makes it difficult to identify which track is which but this does not matter for this application as files are played randomly.

I ripped my mothers CD collection to 128kbs MP3s and organised the music by genre, placing all opera, orchestral, soundtrack etc. tracks in their own directories. This resulted in a small number of stations each with a large number of tracks - similar to a real radio.

Step 4: Final Assembly

For this build I used an old Bakelite radio case that has been sitting on my bookshelf for several decades waiting for a suitable project. Not only is it a nice looking item but it is instantly recognisable as a radio and has just the two controls making it perfect for this project. The biggest problem I faced was getting the old fashioned knobs to fit the modern pot and encoder. Some filing and heat shrink tubing solved the problem.

The simple circuitry didn't warrant making a PCB so I hand wired the unit using a UNO prototype breakout board as shown above.

Future enhancements will include a switched volume control to turn the unit on and off. This is currently done at the power socket. Some internal LEDs will be added to show whether the unit is powered.

The media player works as intended and my mother instinctively knew how to operate it, which was the main aim of the project. Not having to navigate an incomprehensible remote control means that her musical memories are always to hand.

The random, radio style interface also provides a refreshingly immediate way to listen to any music collection - next job is to make one for myself and load it up with Classic Rock!

Assistive Tech Contest

Second Prize in the
Assistive Tech Contest

1 Person Made This Project!


  • Arduino Contest

    Arduino Contest
  • Colors of the Rainbow Contest

    Colors of the Rainbow Contest
  • Furniture Contest

    Furniture Contest



4 months ago

Love this. I am in the process os making a 1940's radio and have a lot of serials and shows from that era. I will be making a case based on the Philco cathedral and this fits in well. It worked straight off and is exactly what I was after. Thank you so much for saving me the hastle of re-inventing it, it is greatly appreciated. Perth Western Australia.


Question 1 year ago on Step 4

Love the idea and am planning to build 1 for my self (74years old newbie to Arduino), would have loved to see the circuit diagram also...what's confusing is the encoder and 10k pot connections.. could you please help?


1 year ago on Step 4

This is a good project which will have many uses.
One use I can and will put it to, is to store Morse Code in not only single characters in one file, but differing speeds in consecutive files. Plus other files of words in Morse, again in different speeds.etc..


Tip 1 year ago

I really like the idea my dad could have used this. Btw, Jameco and Mouser sell 10k pots with switches.


Reply 1 year ago

Some rotary encoders have a momentary push switch. A flip/flip to latch the output can turn it on or off. I currently use an internet radio to stream a country station, 24/7 to mask my tinnitus. I am considering this, to hold my collection of over 90,000 old time radio programs. Build a wood cabinet, with a cutout for a LCD to display the show names?


1 year ago

Love the idea and really love the case you used. I think I might make something very similar but have the rotary encoder just flick through a list of pre-defined streaming radio stations on or similar. An even more 'radio like' experience.


1 year ago

This is a great idea! Thank you for this excellent instructable. Think I'll make one for Mum and one for me. We all benefit from a lower cognitive load sometimes.


1 year ago

Nice. Couple add tweaks, put a simple display in that shows the station number, reminiscent of a radio frequency dial. That way, a directory could be printed that shows the station # for a particular genre for quick tuning.
A little more elaborate audio amp that has a tone controller would send it over the top.

I've gotta all the parts and I am going to make one.


1 year ago

Excellent. Before my father passed away we got him a Google Alexa device and tried to teach him how to use it. He couldn't. The modern concept of voice commands was so alien to him that I think he simply couldn't understand how a puck-like device could do all the things it claims to do. However, a Japanese company has invented a cute human-like robot for seniors to talk to and they seem to find that comforting. The simplicity and homey feel of an old-fashioned radio is a great idea. I hope someone thinks of it for me when I get old and feeble.


1 year ago

Nice idea, clean execution.