Talking Washing Machine Interface for the Blind AKA 'SOAP'




About: IT / CAD Professional with keen amateur interest in technology for the visually impaired.

The Short Version...

A recently purchased washing machine proved to be unusable to my wife, Sue, who is totally blind. Standard tactile markings did not work due to the use of LEDs to indicate the current wash programme. The LEDs do not have a fixed relationship to the selector control knob.

This Instructable describes the design and construction of a device that detects the currently illuminated LED and plays a recorded audio clip announcing the wash programme.

We have christened the device with the acronym 'SOAP' - Speech Output Announcing Programmes.

SOAP is non-invasive and requires no electrical connection to the washing machine.

This was my Grand Prize winning entry in the Arduino Contest 2019. Many thanks to everyone who voted from Pete (Wingletang), Sue and Milly!

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Detailed Description of the Problem

As Sue is totally blind we have to make sure that all of the equipment we purchase can be made accessible to her by tactile markings or audio feedback

Recently we purchased a Samsung Eco Bubble 8.0Kg washing machine. We chose this model as it is one of the few that still features a physical wash programme selector knob. Usually machines with this style of selector can be made accessible to the blind by the use of small adhesive rubber bumps called 'Bumpons' - one is attached to the knob as a pointer and others are placed at the locations of the different wash programmes. A simple code can be used - for example, one bump for 'Cotton', two bumps for 'Synthetics'. The operator then can select the right programme by lining up the pointer and the other bumps.

Unfortunately, after a few days it became apparent that Sue was not selecting the correct wash programmes.

The machine uses LEDs around the selector knob to indicate the currently selected programme. If the knob is rotated when the machine is off, the next time it is turned on the illuminated programme is still the last one that had been run to conclusion or part way through. Also, whilst the angular rotation of the knob is always the same from one programme to the next, the angular jump of the illuminated LED is not (the wash programmes are not spaced equally around the control due to a gap at the bottom).

Another problem is that there is no 'stop' to the rotation of the knob.

The Bumpons can thus become quickly misaligned, hence Sue's selection of the wrong programmes. See the attached video for a demonstration of this problem.

How to make the machine accessible by someone with no sight? Sue asked 'Why not make it speak?', and that is how 'SOAP' was born, a talking washing machine interface for the blind.

Step 2: Introduction to SOAP - Speech Output Announcing Programmes

SOAP consists of three basic components:

1. A ring shaped sensor consisting of 14 Light Dependent Resistors (LDRs) that is fastened to the washing machine to detect which one of the 14 wash programme LEDs is illuminated.

2. The 'Chatterbox' - this plays a recorded audio clip announcing the selected wash programme as detected by the sensor. The Chatterbox is mounted on a cupboard adjacent to the washing machine.

3. A ribbon cable connecting the sensor and Chatterbox.

The Chatterbox is not mounted on the washing machine due to space restrictions and to avoid the problem of vibration.

Light detection is used (rather than direct connection to the washing machine LEDs) so the system is safe, non-invasive and does not invalidate the warranty.

Whilst SOAP is designed specifically for a particular model of washing machine, the Chatterbox could be used with different sensors to make other appliances accessible to the visually impaired.

View the video for a demonstration of SOAP in action.

Step 3: SOAP - Schematic

The circuit of SOAP is shown above.

Each LDR is connected to 0V and to +5V via a dropper resistor. The connection point between the LDR and the resistor is connected to an input on the UNO R3. The values of the resistors were determined by experiment so that an illuminated LDR results in a voltage below 3V at the UNO input, while an LDR in darkness gives rise to a voltage of more than 3V.

14 inputs to the UNO R3 were required. This was achieved by using digital inputs D2 to D9 and analogue inputs A0 to A5. The analogue inputs are configured to operate as digital inputs.

The audio output is produced by a Velleman KA02 Audio Shield.

The unit is powered by a PP9 9V battery via a latching pushbutton. The UNO R3 code runs as soon as power is applied.

The resistors and LDRs are numbered to match the wash programme numbers.

Note that all of the drawings in this Instructable are also contained in the multi-page PDF attached.

Step 4: SOAP - General Arrangement

The photograph shows all of the components of SOAP connected together without the box and sensor covers.

The ribbon cable is 16 way with header plugs at both ends. 14 conductors are connected to the LDRs, and the other 2 are used for 0V.

Step 5: The Sensor - Overview and Materials

Sensor Overview

The core of the sensor is constructed from two pieces of stripboard - the Ring Board and the Support Board. These are joined together electrically and mechanically at the correct angle to position and fix the LDRs in close proximity to the washing machine LEDs.

The overall design of the sensor is shown in the diagram.


Stripboard: 95mm wide x 220mm long (strips running along the length)

14 off Light Dependent Resistors (LDRs) type 5537

1 off A4 black 1.5mm Plasticard

1 off 16 Way, 2 Row, Right Angle PCB Header

A4 Double-Sided adhesive film sheets

3 tubular plastic cotton bud stems.

Black, dense foam rubber: 95mm wide x 5.5mm thickness. I sourced this from a discarded mouse mat.

Step 6: The Sensor - Ring Board

Sensor Ring Board

Cut the stripboard to a length of 118mm.

Drill a small pilot hole 47.5mm from one end of the stripboard, centred across the width. This is centred between 4 existing holes.

Using this hole as the centre, cut the end of the strip board into a 95mm diameter semi-circle. I used a compass cutter. Score the stripboard from both sides until the board can be neatly broken away.

Using the same centre hole, cut a 58mm diameter circle from the stripboard. This is a sliding fit over the washing machine selector knob.

Cut the strips at the two locations shown in diagram.

Next, install the LDRs: Cut the cotton bud stems into 28 off 3mm tubes. These are used to space the LDRs from the stripboard. Thread a spacer on to each leg of an LDR before soldering it in place as shown in the photographs.

Populate the board with all jumper wires.

Step 7: The Sensor - Support Board

Sensor Support Board

This is a rectangular board that provides mechanical support and electrical connections to the sensor ring board. It includes a 16 pin right angled PCB header for connection of the ribbon cable to the Chatterbox.

Cut the board to a length of 97mm

Cut the strips at the eight locations shown in the diagram. These electrically separate the two rows of eight pins of the right angled header. I used a scalpel to carefully cut the copper strips as these were between adjacent holes in the board.

Fix the header in position with a small amount of Superglue and solder the pins.

Populate the board with all jumper wires.

Step 8: The Sensor - Final Assembly

Assembling the Sensor

The Ring Board and Support Board must now be joined together, mechanically and electrically.

Note that the copper strips on the ring board are on the outside whilst those on the support board are on the inside - see photographs.

Links consisting of short lengths of stiff wire are used to interconnect the boards along the 'hinge'. Initially solder just two such links at the outermost strips. These links provide the initial mechanical connection.

The sensor must be made as light-tight as possible to prevent stray light reaching the LDRs. To achieve this, cut the black foam rubber into three light shields / vibration absorbers as shown in the photograph. These are the same shape and dimensions of the two boards. The 'ring board inner' has a circular hole of a slightly larger diameter than the LDR circle. The 'ring board outer' has a circular hole slightly larger than the washing machine control knob.

Temporarily attach the foam rubber shields with double sided tape to the boards. Place the sensor with on the washing machine and adjust the angle between the boards by carefully bending the hinge until the support board lies horizontally on the top of the machine and the LDRs are correctly aligned over the LEDs. Small adjustments to the LDR positions can be made by carefully bending the legs of the LDRs.

Remove the foam shields.

Install the 16 electrical links being careful not to change the angle between the boards. These are 'back soldered' on the ring board and 'front soldered' on the support board.

Once complete, attach the foam shields permanently using the double sided adhesive film, cutting this to the same shape and size as the shields.

Sensor cover

A front cover for the sensor is cut from the black Plasticard and carefully bent into shape using a heat gun to soften the plastic along the bend location. Attach this to the sensor using double-sided adhesive film on the ring board front shield and by gluing to the right angle header.

Use black insulating tape to cover the edges of the sensor.

Attach the sensor firmly to the washing machine using double sided adhesive film cut to the shape of the foam rubber inners.

Future development could include a 3D printed cover for the sensor.

Step 9: Light Tight Control Knob Cover

The control knob on the washing machine is constructed from a transparent material. Early tests indicated that stray light passing through this caused false triggering of the sensor.

To overcome this, a light-tight control knob cover was constructed as follows:

The lid from an empty 125g tub of E45 skin cream proved to be of a suitable size ('Trash to Treasure' anyone?!).

As this is white I made it light tight by lining it with a disk of black Plasticard and a ring of dense black foam rubber. These were both cut out using the compass cutting tool.

The disk was fixed inside the lid using a disk of double sided adhesive film.

The foam ring fitted tightly over the programme selector knob so did not need adhesive.

The complete assembly is attached to the washing machine control knob using a disk of double sided adhesive film.

Step 10: Test and Simulation Board

A small test and simulation board was constructed as shown in the diagram.

This has two functions:

1. When connected to the sensor via the ribbon cable, the resistance of each LDR can be measured with the related wash programme LED on and off.

2. When connected to the Chatterbox via the ribbon cable, the playing of each audio clip can be triggered by grounding the relevant test pin.

Cut the strips at the eight locations shown in the diagram. These electrically separate the two rows of eight pins of the 16 way PCB header. I used a scalpel to carefully cut the copper strips as these were between adjacent holes in the board.

Populate the board with the jumpers, 16 way PCB header and header pins.

Note that the test pins are numbered with the Wash Programme numbers.

Step 11: Testing the Sensor - Determining the Resistor Values

The ribbon cable is connected to the sensor (which is now fixed in position on the washing machine).

The test board is connected to the other end of the ribbon cable.

14 of the conductors carry the signals from the LDRs while the remaining 2 conductors are used for the 0V ground connection.

With the washing machine turned on, the resistance of each LDR is measured with a multimeter as the relevant wash programme LED is on or off. The table of results is shown in the diagram.

During the tests it was clear that two of the LDRs gave very different resistance readings from the others. This could have been because they were of a different type. The LDRs did not have identifying markings to confirm this.

As it would have been difficult to remove and dismantle the sensor, I decided to sidestep the problem by selecting suitable dropper resistors. The values had to result in a voltage at the UNO R3 of less than 3V when the LDR was illuminated, and more than 3V when it was in darkness.

Suitable standard resistor values were found to be 12 x 100k Ohm and 2 x 470k Ohm.

Step 12: The Interface Board

The interface board contains all of the dropper resistors and connectors for the ribbon cable and the interconnection loom.

The board is made from a piece of stripboard 86mm x 46mm.

Cut the strips at the eight locations shown in the diagram. These electrically separate the two rows of eight pins of the 16 way PCB header. I used a scalpel to carefully cut the copper strips as these were between adjacent holes in the board.

Construct the interface board using the values of resistors determined in the sensor tests (12x100K and 2x470K).

Populate the board with the jumpers, 16 way PCB header and header pins.

Note that the resistors and connection pins are numbered in the diagram to match the wash programme numbers.

Step 13: The Chatterbox - Part 1


The Chatterbox is based on an Elegoo Uno R3 microcontroller (Arduino compatible) and a Velleman KA02 Audio Shield. Fourteen short audio clips are stored in the KA02, each being the number and name of one of the wash programmes. When one of fourteen inputs to the Uno R3 is triggered, the related audio clip is selected and played through a speaker.

As this was my very first microcontroller project I purchased a starter kit containing an Elegoo Uno R3 along with a comprehensive selection of sensors, actuators, components and interconnections. This included a set of 'Dupont' wires featuring sockets and pins to connect to PCB pins and sockets - these proved to be very useful in making the interconnection loom and speaker wires: Elegoo UNO R3 Starter Kit.


Elegoo Uno R3 microcontroller (Arduino compatible).

Velleman KA02 Audio Shield for Arduino.

Plastic enclosure 90mm x 50mm x 160mm.

8 Ohm loudspeaker (2" diameter).

9V battery clip.

Interface board constructed in previous step.

Latching on/off button.

White Plasticard.

Dense foam rubber (sourced from various items of packaging).

Step 14: The Chatterbox - Part 2 - Velleman KA02 Audio Shield for Arduino - Recording the Audio Clips

This was purchased as a kit: CPC - KA02 Audio Shield

It is a digital recorder / playback device based on the ISD1700PY chipcorder.

The board has a built-in microphone to record messages. The shield has a 60 second total recording time and can be rewound, fast forwarded, and erased using small push buttons on the board. In this project, playback is via a speaker.

It uses the ICSP pins on an Arduino as a serial connection to the shield.

It also uses pin 10 on the Uno R3 board for control.

The selection and playback of audio recordings can also be controlled by a microcontroller, in this project the Elegoo Uno R3.

The construction manual for the KA02 including the full circuit diagram is available from the Velleman web site: Velleman KA02 Assembly Manual


Assemble the KA02 kit and fit it to the Uno R3.

Connect the 8Ohm speaker to the audio board. I used two cut 'Dupont' wires that feature sockets that connect to the KA02 speaker pins.

Connect a USB cable to the Uno R3 and to a PC (to provide power to the Uno R3 and KA02).

Recording the Audio Clips

Using the on board microphone and the control push buttons record the audio clips as follows:

1. Press and hold the record button.

2. Say the first clip ("1 Cotton").

3. Release the record button.

4. To check the clip press the play button.

5. If not happy with the clip, repeat from step 1.

6. If all is OK, press the forward button to go to the second recording slot.

7. Press and hold the record button.

8. Say the second clip ("2 Eco Cotton")

9. Release the record button.

10. To check the clip press the play button.

11. If not happy with the clip, repeat from step 7.

12. If all is OK, press the forward button.

Repeat until all 14 audio clips have been recorded. The total available recording time is one minute.

Step 15: The Chatterbox - Part 3 - Setting the Audio Clip Addresses

The audio clips are stored in a continuous block of memory on the KA02 from address 0x010 to 0x2DF as shown in the diagram. It is necessary to determine the start and end addresses of each clip.

The example KA02 sketch downloaded from was adapted to allow each of the 14 audio clips to be played. The resulting ino file is attached.

The addresses are determined as follows:

The KA02 / UNO R3 is connected via a USB lead to a PC running Arduino.

1. The sketch is uploaded to the UNO R3.

2. In the Arduino Serial Monitor type 1 and press enter.

3. The first audio clip should play. Note if the whole clip and nothing else is played.

4. If not, adjust the start and end addresses of the first clip in the sketch (lines 14 and 15), upload the modified sketch to the UNO R3 and go back to step 2.

5. If all is OK, continue to the next step.

6. In the Arduino Serial Monitor type 2 and press enter.

7. The second audio clip should play. Note if the whole clip and nothing else is played.

8. If not, adjust the start and end addresses of the second clip in the sketch (lines 18 and 19), upload the modified sketch to the UNO R3 and go back to step 6.

9. If all is OK, continue to the next step.

Repeat this process until the addresses for clip 9 have been set.

For clips 10 to 14, instead of typing a number into the monitor, use the letters a to e.

Step 16: SOAP Code

The principle of the SOAP code is as follows:

1. Initialise variables including the start and end addresses of each audio clip.

2. Detect which wash programme LED is illuminated.

3. Set Start and End address for the audio clip associated with the selected wash programme.

4. Play the relevant audio clip.

5. Wait 3 seconds.

6. Repeat from step 2.

The Arduino ino file is attached. This should be uploaded to the UNO R3.

The text of the code is as follows:

SOAP Arduino Code

  1. // SOAP - Speech Output Announcing Programs
  2. // Talking Washing Machine Interface for the Blind
  3. //
  4. #include < ISD1700.h > // Library for Audio Shield (downloaded from Velleman website)
  5. ISD1700 chip(10); // Initialise chipcorder with SS at Arduino's digital pin 10
  6. //
  7. // Initialise Audio Shield variables
  8. int apc=0;
  9. int vol=0; //volume 0=MAX, 7=min
  10. int startAddr=0x10; //Start address of Audio Shield RAM
  11. int endAddr =0x2DF; //End address of Audio Shield RAM
  12. //
  13. //Set Wash Programme Audio Clips start and end addresses determined from tests
  14. int startAddr1=0x010; int endAddr1 =0x020; //Wash Programme 1 Cotton
  15. int startAddr2=0x025; int endAddr2 =0x03E; //Wash Programme 2 Eco Cotton
  16. int startAddr3=0x03F; int endAddr3 =0x054; //Wash Programme 3 Synthetics
  17. int startAddr4=0x056; int endAddr4 =0x066; //Wash Programme 4 Wool
  18. int startAddr5=0x068; int endAddr5 =0x078; //Wash Programme 5 Spin
  19. int startAddr6=0x078; int endAddr6 =0x090; //Wash Programme 6 Rinse + Spin
  20. int startAddr7=0x090; int endAddr7 =0x0AE; //Wash Programme 7 Eco Drum Clean
  21. int startAddr8=0x0AE; int endAddr8 =0x0CE; //Wash Programme 8 Super Eco Wash
  22. int startAddr9=0x0CE; int endAddr9 =0x0EE; //Wash Programme 9 15 Minute Quick Wash
  23. int startAddr10=0x0EE; int endAddr10 =0x105; //Wash Programme 10 Daily Wash
  24. int startAddr11=0x105; int endAddr11 =0x120; //Wash Programme 11 Delicates
  25. int startAddr12=0x123; int endAddr12 =0x133; //Wash Programme 12 Dark Garment
  26. int startAddr13=0x136; int endAddr13 =0x148; //Wash Programme 13 Bedding
  27. int startAddr14=0x149; int endAddr14 =0x167; //Wash Programme 14 Baby Care
  28. //
  29. const int inputPin2 = 2; // Digital inputs. DI 10 used by Audio Shield so cannot be used for sensor input
  30. const int inputPin3 = 3;
  31. const int inputPin4 = 4;
  32. const int inputPin5 = 5;
  33. const int inputPin6 = 6;
  34. const int inputPin7 = 7;
  35. const int inputPin8 = 8;
  36. const int inputPin9 = 9;
  37. const int inputPinA0 = 14; //Analogue inputs used as Digital Inputs
  38. const int inputPinA1 = 15;
  39. const int inputPinA2 = 16;
  40. const int inputPinA3 = 17;
  41. const int inputPinA4 = 18;
  42. const int inputPinA5 = 19;
  43. //
  44. // Define variables
  45. // for storing the state of the inputs
  46. // Inputs initialised HIGH as sensor input pulls the input LOW
  47. int inputState_Baby_Care = 1;
  48. int inputState_Eco_Drum_Clean = 1;
  49. int inputState_Rinse_and_Spin = 1;
  50. int inputState_Spin = 1;
  51. int inputState_Wool = 1;
  52. int inputState_Cotton = 1;
  53. int inputState_Eco_Cotton = 1;
  54. int inputState_Synthetics = 1;
  55. int inputState_Daily_Wash = 1;
  56. int inputState_15_Minute_Quick_Wash = 1;
  57. int inputState_Super_Eco_Wash = 1;
  58. int inputState_Delicates = 1;
  59. int inputState_Dark_Garment = 1;
  60. int inputState_Bedding = 1;
  61. //
  62. //
  63. // Setup
  64. void setup()
  65. {
  66. //
  67. //Initialise Audio Shield
  68. apc = apc | vol; // D0, D1, D2
  69. apc = apc | 0x100; // D8 SPK OFF, comment enable SPK
  70. apc = apc | 0x800; // D11 EOM ON, comment disable EOM
  71. //
  72. // initialize the pins as inputs:
  73. pinMode(inputPin2, INPUT);
  74. pinMode(inputPin3, INPUT);
  75. pinMode(inputPin4, INPUT);
  76. pinMode(inputPin5, INPUT);
  77. pinMode(inputPin6, INPUT);
  78. pinMode(inputPin7, INPUT);
  79. pinMode(inputPin8, INPUT);
  80. pinMode(inputPin9, INPUT);
  81. pinMode(inputPinA0, INPUT);
  82. pinMode(inputPinA1, INPUT);
  83. pinMode(inputPinA2, INPUT);
  84. pinMode(inputPinA3, INPUT);
  85. pinMode(inputPinA4, INPUT);
  86. pinMode(inputPinA5, INPUT);
  87. }
  88. //
  89. // Main Loop
  90. void loop()
  91. {
  92. //
  93. chip.pu(); //Chip Power Up
  94. //
  95. // Read the states of the inputs. Only one will be low:
  96. inputState_Baby_Care = digitalRead(inputPin2);
  97. inputState_Eco_Drum_Clean = digitalRead(inputPin3);
  98. inputState_Rinse_and_Spin = digitalRead(inputPin4);
  99. inputState_Spin = digitalRead(inputPin5);
  100. inputState_Wool = digitalRead(inputPin6);
  101. inputState_Cotton = digitalRead(inputPin7);
  102. inputState_Eco_Cotton = digitalRead(inputPin8);
  103. inputState_Synthetics = digitalRead(inputPin9);
  104. inputState_Daily_Wash = digitalRead(inputPinA0);
  105. inputState_15_Minute_Quick_Wash = digitalRead(inputPinA1);
  106. inputState_Super_Eco_Wash = digitalRead(inputPinA2);
  107. inputState_Delicates = digitalRead(inputPinA3);
  108. inputState_Dark_Garment = digitalRead(inputPinA4);
  109. inputState_Bedding = digitalRead(inputPinA5);
  110. //
  111. // Set correct start and end address for the relevant audio clip
  112. // based on which programme LED is illuminated
  113. // InputState is LOW for an illuminated LED
  114. if (inputState_Baby_Care == LOW)
  115. {chip.set_play(startAddr14,endAddr14); }
  116. if (inputState_Eco_Drum_Clean == LOW)
  117. {chip.set_play(startAddr7,endAddr7); }
  118. if (inputState_Rinse_and_Spin == LOW)
  119. {chip.set_play(startAddr6,endAddr6); }
  120. if (inputState_Spin == LOW)
  121. {chip.set_play(startAddr5,endAddr5); }
  122. if (inputState_Wool == LOW)
  123. {chip.set_play(startAddr4,endAddr4); }
  124. if (inputState_Cotton == LOW)
  125. {chip.set_play(startAddr1,endAddr1); }
  126. if (inputState_Eco_Cotton == LOW)
  127. {chip.set_play(startAddr2,endAddr2); }
  128. if (inputState_Synthetics == LOW)
  129. {chip.set_play(startAddr3,endAddr3); }
  130. if (inputState_Daily_Wash == LOW)
  131. {chip.set_play(startAddr10,endAddr10);}
  132. if (inputState_15_Minute_Quick_Wash == LOW)
  133. {chip.set_play(startAddr9,endAddr9); }
  134. if (inputState_Super_Eco_Wash == LOW)
  135. {chip.set_play(startAddr8,endAddr8); }
  136. if (inputState_Delicates == LOW)
  137. {chip.set_play(startAddr11,endAddr11); }
  138. if (inputState_Dark_Garment == LOW)
  139. {chip.set_play(startAddr12,endAddr12); }
  140. if (inputState_Bedding == LOW)
  141. {chip.set_play(startAddr13,endAddr13); }
  142. //
  143. {;} // Play the clip
  144. //
  145. delay(3000); //Wait 3 seconds before repeating loop
  146. //
  147. }

Step 17: Building the Chatterbox

The Chatterbox is constructed as follows:

Step 1: Drill one end of the plastic enclosure for the pushbutton and speaker 'grill'. The holes were laid out in an AutoCAD drawing and the final design was printed onto an adhesive label at full size. The label was attached to the box and the holes were drilled using a Dremel 4000 fixed to a Dremel bench stand.

Step 2: Cut a slot a few millimetres deep and slightly wider than the ribbon cable at the top of the opposite end of the box.

Step 3: Cut the ridge under the lid to match the ribbon cable slot. This is necessary so the lid can be fully screwed into position without crushing the ribbon cable.

Step 4: Construct the 'power loom' by soldering wires to the pushbutton, PP9 battery clip and the UNO R3 power plug. The latter was taken from a 'universal' laptop power supply kit as the correctly sized plug is right angled so it fits neatly in the Chatterbox. Take care to ensure the correct polarity of the power plug.

Step 5: The speaker connections are created from Dupont wires featuring suitable sockets for attachment to the KA02 speaker pins.

Step 6: Cut a divider from white Plasticard. This is cut to fit in the box firmly and has a corner cut off to allow wires to pass through.

Step 7: Install the speaker, pushbutton, power loom and the divider as shown in the photograph. The divider is slightly bowed by the speaker - this helps to keep the speaker in position. A piece of foam rubber is pushed between the speaker and the pushbutton to stop any sideways movement.

Step 8: Check that the wires pass under the cut corner of the divider.

Step 9: Cut a second divider. This also has a cut corner for the wires, but also has cut-outs for the UNO R3 USB socket and power plug.

Step 10: Install the second divider into the case routing the wires as shown in the photograph. The separation of the two dividers is the thickness of a PP9 battery as the gap forms the battery compartment.

Step 11: Cut a piece of dense white foam rubber to form the base of the battery compartment. A cut-out will also have to be made to accommodate the UNO R3 USB socket. Install the foam rubber between the dividers.

Step 12: Cut another piece of dense white foam rubber to fill the end section of the battery compartment. This will need a cut-out to accommodate the UNO R3 power plug. Install the foam rubber between the dividers.

Step 13: Temporarily attach the clip to the PP9 battery and install it in the battery compartment to ensure it is held firmly. The battery wires pass neatly under the battery. Adjust the foam rubber as necessary.

Step 14: The Velleman KA02 Audio Shield should be fitted to the Uno R3 as shown in the photograph.

Step 15: Temporarily install the UNO R3 / KA02 in the enclosure. The power plug should fit so that the UNO is held loosely in position. The speaker leads should be connected the to pins on the KA02. If all is well, disconnect the boards from the plug and leads and remove them from the enclosure.

Step 16: Using the Dupont wires from the Elegoo kit, fashion a 17 way interconnection loom.

Step 17: Connect the loom to the interface board as shown in the photograph.

Step 18: Connect the loom to one side of the KA02 / UNO R3 as shown. Take care that the connections are made to the correct pins.

Step 19: Connect the remaining connections of the loom to the other side of the KA02 / UNO R3 as shown. Take care that the connections are made to the correct pins. See the diagram for the interconnection details.

Step 20: Carefully fold the interconnection loom so that it fits neatly in the enclosure.

Step 21: Fit the whole assembly into the box.

Step 22: Connect the ribbon cable to the interface board, guiding the cable over the top of the board and into the slot cut in the top of the case. Some excess cable should be left in the gap between the interface board and the end of the box, forming a downward bend.

Step 23: Insert a piece of white foam rubber to hold the UNO R3 firmly against the side of the case. Insert another piece of foam rubber between the interface board and the end of the case to fix the ribbon cable in place. In this photograph the foam rubber between the speaker and the pushbutton can also be seen.

Step 24: Screw the lid into place, being careful not to crush the ribbon cable.

The Chatterbox is complete!

Step 18: Testing the Chatterbox

Connect the Chatterbox to the test board using the ribbon cable.

Turn the box on.

Connect a test pin to the 0V pin. Note that the pins are numbered in the diagram to match the wash programme numbers. The relevant audio clip should play, repeating every 3 seconds.

Test all clips in this way.

Turn the box off.

If all is well, mount the Chatterbox in the required location. This will require some dismantling of the Chatterbox to allow mounting holes to be drilled in locations that do not foul the internal components.

Step 19: Completing the Installation

The first photograph shows the three mounting holes with suitable nuts glued in position.

Mounting holes are drilled through the cabinet and bolts used to mount the Chatterbox.

Carefully connect the ribbon cable to the sensor.

The ribbon cable is fixed underneath the worktop above the washing machine ensuring there is slack to take account of washing machine movement and vibrations.

SOAP is now complete!

Step 20: Final Thoughts...

SOAP has been in use for almost a year with no sign of the battery dying. As SOAP is only powered up for a few minutes each day, the battery should last a good while yet.

The system has proved to be reliable and has helped Sue to retain her independence, an important consideration for any blind person. Watch the video to see her using SOAP.

SOAP has been thoroughly 'Lab' tested by Guide Dog Milly, a pure black Labrador - see attached photos. Milly would be known as a Seeing Eye Dog in the USA.

I would love to see other Instructables describing novel devices for the visually impaired, maybe using elements of this project.

All of the diagrams in this Instructable were created using AutoCAD 2019 LT.

This was my entry in the Arduino contest - and it won the Grand Prize! Many thanks to everyone that kindly decided to Vote for SOAP!

Arduino Contest 2019

Grand Prize in the
Arduino Contest 2019

Be the First to Share


    • Made with Math Contest

      Made with Math Contest
    • Multi-Discipline Contest

      Multi-Discipline Contest
    • Robotics Contest

      Robotics Contest

    76 Discussions

    Shashikanth SS

    3 months ago

    What an amazing and simple project you have done, i really appreciate your idea and effort.


    1 reply
    WingletangShashikanth SS

    Reply 3 months ago

    Thank you Shashi. Hopefully other people will pick up the idea of detecting visual display LEDs to drive speech devices to help the blind.

    Impressive work sir. I especially like the repurposing of the lid etc. in the design of your project. I try to do the same myself. On occasion I've found things in the street that were used in my projects. Good luck in the contest.

    1 reply

    4 months ago

    Greetings to Milly from Tika, my wife's own guide dog :) this particular instructable may be useful for us, as finding all kind of appliances WITHOUT relying solely on screen menus is starting to become increasingly difficult.

    1 reply

    Reply 4 months ago

    Woof, woof, woof! Maybe we need to train the Guide Dogs to operate the machines for their owners!

    My hope is that more and more appliances are created with Alexa connectivity (or any of the other AI assistants) - this would be useful for visually impaired and sighted people. Sue already operates our lights, heating and Blue Ray player through an Amazon Echo.


    5 months ago

    Well done sir!!! I have voted for your entry because when you make something for another person and succeed brilliantly, you get the vote! Do you realize that you could easily sell these through the institute for the blind? They offer any device that will help those with vision impairments to those that need them. You have an awesome business opportunity there. Don't worry about having shared this on Instructables, most people will not build this, and even less in your country, and None of them will be blind! You could make a big difference in People's lives. All you'd need is a model and make of the unit, and you could custom design it for the face of the model, and Bob's your Uncle! You could take orders at any pace you'd like, and you could also design it to work with both the washer and the dryer, say with a switch the switches between then, with auditory notification, of course! Others could do the same in their areas as well, with your permission, of course. These can really make a big difference! Thank you for sharing this, and I congradulate you for this design and I hope you win this contest!!!

    1 reply

    Reply 5 months ago

    Many thanks for the great feedback OculumForamen.

    I already run my own IT company (working for a number of clients including a several visually impaired people), and also work more-or-less full time for a company that connects generation projects (solar, wind, biomass, diesel, battery storage etc.) to the national grid. My time is thus pretty full! I enjoy dreaming up these devices and hope that they inspire others.

    I think that the real goal should be to get manufacturers to consider the visually impaired when designing their products. Built-in speech or a standard interface that can be used to communicate with external speech devices (such as Amazon's Alexa devices) would be great.

    Regarding the dryer, the low tech 'bumpon' solution works well as the control knob is a traditional type that has a fixed relationship between angular position and drying programme.

    We recently bought a dishwasher that has an individual button for each programme so it is accessible to Sue.

    Watch this space for my next device for the visually impaired...

    Dave th Rave

    5 months ago

    This is a great Arduino project.
    You should win just because it can help the blind in so many ways, washing machine is just one. The sensor ring could possibly be redesigned to fit many different applications and the rest of the build be pretty much the same. Well done for making and sharing this. Even if Samsung never gets back to you I hope your ideas, designs and plans go viral and help countless others. Pretty much that's the spirit of the online sharing community.

    1 reply
    WingletangDave th Rave

    Reply 5 months ago

    Many thanks Dave. Hopefully if the assistive tech competition goes ahead there may be some clones / developments of SOAP. Still no word from Samsung...


    5 months ago

    Well-done! Congratulations on making life easy for your dearest. You already earn my vote and an upvote here.

    Please, I need a guide on how your sensor could could be adapted to announce opening of a number of doors, let's say 14 doors as you are having 14 LDRs.

    1 reply

    Reply 5 months ago

    Hello oyeka. You would have to have a sensor on each door. I suggest something like this:

    Such a sensor would replace an LDR. As long as the input voltage to the UNO changes from <3V to >3V the system would be able to detect the open / close state of the door.

    The code would have to be modified - the SOAP code relies on the fact that only one of the fourteen LEDs is illuminated at a given moment. Maybe you are planning on a Chatterbox for each door?

    If you do build the door announcer, please post it as an Instructable! Reminds me of something:

    "All the doors in this spaceship have a cheerful and sunny disposition. It is their pleasure to open for you, and their satisfaction to close again with the knowledge of a job well done."

    " As the door closed behind them it became apparent that it did indeed have a satisfied sigh-like quality to it. “Hummmmmmmyummmmmmm ah!” it said."

    — Douglas Adams, The Hitchhiker's Guide to the Galaxy.


    6 months ago on Introduction

    Many thanks for this project. I have a friend working on a similar idea but nothing to do with a blind partner. You may well know this, but while a raspberry Pi would chew up a lot more millamps, it can readily aplay sound 'bytes' and espeak "text". I use the former to play train sounds and the latter to announce arrivals "The train on platform one is the 12:27 from Arnprior ..." I insert the actual time from an RTC into the text string prior to making a system call so it's always "ON TIME"'. I'm afraid this early movie only plays sounds taking cues from sensors under the track.:

    2 replies

    Reply 5 months ago

    Can you give a detailed procedure of this. Or an instructable would not be out of place.


    Reply 6 months ago

    Thank you DavidW742. I have never used Raspberry Pi - I am still exploring the Arduino world. Although this was my first ever Arduino project, I have many years experience in programming Programmable Logic Controllers in industry. The Arduino is amazing as it has more power than many of the expensive systems I used, all for around £7!

    I love your railway project - especially the steampunk control desk. Sue and I went to a steampunk concert by Professor Elemental last week - at one point he asked the audience what they would do if they ruled the world. I answered "Make all washing machines talk". The Prof then rapped several perfect lines about talking washing machines! I wish I could have recorded this - it would have been a great addition to the SOAP Instructable.


    5 months ago

    Hi; Congratulations for this Instructable!
    I specially appreciate that the interface doesn't need any electrical connection to the machine ('put on & use it'). Thanks for sharing it.
    Also, maybe you can propose it to Samsung factory, who knows...