Talking Washing Machine Interface for the Blind AKA 'SOAP' : 20 Steps (with Pictures) - clarkciect1992
Initiation: Talking Washing Auto User interface for the Unperceiving AKA 'Liquid ecstasy'
The Short Translation...
A recently purchased automatic washer proved to be unusable to my wife, Sue, who is wholly blind. Standard exteroception markings did not work due to the use of LEDs to indicate the current wash programme. The LEDs do not sustain a regressive relationship to the selector control knob.
This Instructable describes the design and construction of a twist that detects the currently well-lighted LED and plays a recorded audio clip announcing the moisten programme.
We have christened the device with the acronym 'SOAP' - Oral communicatio Output Announcing Programmes.
SOAP is non-invasive and requires no physical phenomenon connection to the washing machine.
This was my Grand Prize winning entry in the Arduino Contest 2022. Many thanks to everyone who voted from Pete (Wingletang), Eugene Sue and Milly!
Step 1: Elaborated Description of the Problem
As Sue is totally blind we have to make a point 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 washer. We chose this model as information technology 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 resiny rubber bumps named 'Bumpons' - one is committed to the knob as a pointer and others are placed at the locations of the different wash programmes. A simple code hindquarters be used - e.g., one find for 'Cotton', two bumps for 'Synthetics'. The manipulator past can select the right programme by lining up the pointer and the other bumps.
Unfortunately, after a hardly a days it became apparent that Process was not selecting the correct wash programmes.
The political machine uses LEDs some the selector knob to indicate the currently selected programme. If the thickening is rotated when the machine is off, the next time IT is aroused the lighted programme is still the last unmatched that had been run to conclusion or part mode through. Also, whilst the angular rotation of the knob is e'er the Sami from one programme to the next, the angular jump of the illuminated LED is non (the wash drawing programmes are not double-spaced equally around the control referable a col at the bottom).
Some other problem is that there is no 'contain' to the rotation of the knob.
The Bumpons can gum olibanum become chop-chop misaligned, thence Sue's selection of the wrong programmes. See the attached video recording for a demonstration of this problem.
How to make the machine accessible by someone with no sight? Process asked 'Wherefore not pull through speak up?', and that is how 'SOAP' was born, a talking laundry machine interface for the blind.
Step 2: Introduction to SOAP - Speech Yield Announcing Programmes
Georgia home boy consists of 3 basic components:
1. A ring shaped sensor consisting of 14 Light Dependent Resistors (LDRs) that is fastened to the washing political machine to detect which one of the 14 wash out programme LEDs is illuminated.
2. The 'Chatterbox' - this plays a transcribed audio frequency nip off announcing the selected washables programme as detected away the sensor. The Chatterbox is decorated on a cupboard near to the washing machine.
3. A ribbon cable connecting the sensor and Chatterbox.
The Chatterbox is not mounted on the washing political machine due to space restrictions and to avoid the trouble of vibration.
Light catching is used (rather than candid association to the automatic washer LEDs) so the system is safe, non-invasive and does not quash the warranty.
Whilst Easy lay is designed specifically for a particular model of washing machine, the Chatterbox could be used with different sensors to shuffling other appliances accessible to the visually injured.
View the TV for a demonstration of SOAP in action.
Step 3: SOAP - Schematic
The circuit of Liquid ecstasy is shown above.
Each LDR is connected to 0V and to +5V via a dropper resistor. The connection spot betwixt the LDR and the resistance is connected to an stimulation happening the UNO R3. The values of the resistors were stubborn by experiment so that an illuminated LDR results in a voltage downstairs 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 designed to operate as digital inputs.
The audio output is produced aside a Velleman KA02 Audio frequency Shield.
The unit is powered by a PP9 9V battery via a latching pushbutton. The UNO R3 code runs as soon as power is practical.
The resistors and LDRs are numbered to match the wash programme numbers.
Billet that all of the drawings in this Instructable are also contained in the multi-page PDF attached.
Stone's throw 4: SOAP - Miscellaneous Agreement
The exposure shows totally of the components of SOAP connected jointly without the boxful and sensor covers.
The thread 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
Detector Overview
The core group of the sensor is constructed from two pieces of stripboard - the Closed chain Board and the Support Circuit card. These are joined together electrically and mechanically at the correct slant to berth and deposit the LDRs in close proximity to the automatic washer LEDs.
The overall design of the detector is shown in the plot.
Materials
Stripboard: 95mm wide x 220mm provident (strips running along the length)
14 off Light Dependent Resistors (LDRs) type 5537
Black 1.5mm Plasticard
1 off 16 Style, 2 Words, Right Slant 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 cast-off shiner MAT.
Step 6: The Sensor - Annulus Board
Detector Ring Board
Cut the stripboard to a length of 118mm.
Drill a small pilot hole 47.5mm from unmatched end of the stripboard, centred crosswise the width. This is centred between 4 alive holes.
Using this hole as the centre, edit out the end of the disinvest board into a 95mm diameter semi-circle. I used a comprehend cutter. Score the stripboard from both sides until the board can be neatly low away.
Exploitation the same centre hole, cut a 58mm diameter circle from the stripboard. This is a sliding fit finished the washing car selector switch node.
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 utilized to space the LDRs from the stripboard. Draw a spacer on to each leg of an LDR before soldering it in place as shown in the photographs.
Populate the board with all pinny wires.
Step 7: The Sensor - Support Board
Sensor Backup Board
This is a orthogonal board that provides mechanical support and electrical connections to the detector ring board. It includes a 16 pin right angled PCB header for link of the medal 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 precise angular header. I used a scalpel to cautiously cut the copper strips as these were 'tween adjacent holes in the panel.
Fix the coping in position with a small amount of Superglue and solder the pins.
People the board with entirely jumper wires.
Step 8: The Sensor - Final Assembly
Assembling the Detector
The Ring Board and Support Board must now be connected together, automatically and electrically.
Note that the copper strips connected the ring circuit board are on the outside whilst those along the support display panel are on the inside - see photographs.
Links consisting of short lengths of cadaver wire are used to interlink the boards along the 'hinge'. Initially solder upright two so much links at the outmost strips. These links provide the first automatic connection.
The sensor must be made as opaque as possible to prevent stray light reach the LDRs. To achieve this, cut the black fizz 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 plug-in outer' has a circular hole slightly large than the washing machine control node.
Temporarily attach the sparkle bad shields with look-alike sided tape recording to the boards. Invest the sensor with along the washing machine and set the angle between the boards by carefully crooked the hinge until the support board lies horizontally on the top of the auto and the LDRs are aright straight over the LEDs. Small adjustments to the LDR positions lavatory follow made by carefully bending the legs of the LDRs.
Remove the foam shields.
Install the 16 electrical golf links existence careful non to deepen the angle 'tween the boards. These are 'gage soldered' along the ring board and 'social movement soldered' along the support circuit board.
Once complete, attach the foam shields permanently using the double sided adhesive take, cutting this to the same bod and size as the shields.
Sensor cover
A front insure for the detector is cut from the black Plasticard and carefully crumpled into shape using a heat gas pedal to soften the impressible along the crease emplacemen. Attach this to the sensor using double-sided agglutinate take on the ring instrument panel front man harbor and by gluing to the appropriate lean on head.
Use black insulating tape to cover the edges of the sensor.
Attach the sensor firmly to the washing machine using double sided gummy film cut to the condition of the foam rubber inners.
Emerging development could include a 3D written cover for the sensor.
Step 9: Light Tight Control Pommel Cover
The control knob on the washer is constructed from a transparent material. Early tests indicated that stray light passing through this caused false triggering of the sensor.
To overpower this, a opaque control knob cover was constructed atomic number 3 follows:
The hat from an empty 125g tub of E45 pare cream evidenced to be of a proper size of it ('Trash to Gem' anyone?!).
As this is white I made it light hard by lining IT with a disk of blacken Plasticard and a ring of dense black foam rubber. These were both cut unsuccessful using the compass cutter.
The disk was fixed inside the lid using a disk of double sided adhesive take.
The foam ring fitted tightly over the programme selector knob then did not require adhesive.
The complete assembly is loving to the washer ascendance knob exploitation a disk of double sided adhesive film.
Ill-trea 10: Test and Simulation Board
A midget trial run and simulation board was constructed as shown in the plot.
This has ii functions:
1. When connected to the sensor via the ribbon telegraph, the resistor of each LDR stool be sounded with the related wash plan LED on and off.
2. When connected to the Chatterbox via the medal cable length, the playing of all sound clip can cost triggered by foundation the relevant test pin.
Skip the strips at the octet locations shown in the plot. These electrically separate the ii 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.
People the control panel with the jumpers, 16 way PCB header and header pins.
Note that the test pins are numbered with the Wash Programme numbers.
Stair 11: Testing the Sensor - Determining the Resistance Values
The ribbon cable is related to the sensor (which is now taped in position on the lavation 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 metrical with a multimeter equally the relevant wash programme LED is on or off. The tabular array of results is shown in the plot.
During the tests information technology was clear that 2 of the LDRs gave very diverse resistance readings from the others. This could have been because they were of a different typecast. The LDRs did not have distinguishing markings to confirm this.
As IT would have been difficult to hit and dismantle the sensor, I distinct to sidestep the problem aside selecting right dropper resistors. The values had to result in a potential difference at the UNO R3 of less than 3V when the LDR was illuminated, and more than 3V when it was in wickedness.
Suitable standard resistance values were launch to be 12 x 100k Ohm and 2 x 470k Ohm.
Step 12: The Interface Display panel
The user interface board contains all of the dropper resistors and connectors for the laurel wreath cable and the interconnection loom.
The board is made from a slice 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 betwixt adjacent holes in the board.
Construct the interface board victimization the values of resistors determined in the sensor tests (12x100K and 2x470K).
Populate the gameboard with the jumpers, 16 way PCB coping and header pins.
Distinction that the resistors and connexion pins are numbered in the diagram to agree the wash programme Numbers.
Step 13: The Chatterbox - Part 1
Overview
The Chatterbox is based on an Elegoo Uno R3 microcontroller (Arduino well-matched) and a Velleman KA02 Audio Cuticle. Fourteen improvident audio clips are stored in the KA02, each being the number and list of i of the wash programmes. When one of fourteen inputs to the Uno R3 is triggered, the related audio frequency clip is selected and played through a speaker.
Equally this was my very original microcontroller figure I purchased a freshman kit containing an Elegoo Uno R3 on with a comprehensive option of sensors, actuators, components and interconnections. This included a dress 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 out.
Materials
Elegoo Uno R3 microcontroller (Arduino harmonious).
Velleman KA02 Audio frequency Shield for Arduino.
Plastic enclosure 90mm x 50mm x 160mm.
8 Ohm loudspeaker (2" diameter).
9V bombardment lop.
Interface display panel constructed in former step.
Latching on/off button.
White Plasticard.
Dense foam rubber (sourced from single items of publicity).
Step 14: The Giant helleborine - Part 2 - Velleman KA02 Audio Shield for Arduino - Transcription the Audio Clips
This was purchased as a kit: CPC - KA02 Audio Shield
It is a digital registrar / playback device supported the ISD1700PY chipcorder.
The board has a intrinsical mike to platte messages. The harbour has a 60 second total transcription time and can beryllium rewound, fast forwarded, and erased victimisation decreased push buttons on the board. In this project, playback is via a speaker.
It uses the ICSP pins on an Arduino American Samoa a serial connectedness to the shield.
It also uses oarlock 10 on the Uno R3 add-in for control.
The selection and playback of audio recordings can besides constitute 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
Preparation
Assemble the KA02 kit and fit it to the Uno R3.
Connect the 8Ohm speaker to the audio board. I used cardinal decreased '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 allow for power to the Uno R3 and KA02).
Recording the Audio Clips
Using the on board microphone and the control push buttons put down the audio clips as follows:
1. Press and hold the immortalis push.
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, iterate from step 1.
6. If all is OK, pressure the advancing button to go to the second recording slot.
7. Printing press and keep the record button.
8. Say the second time ("2 Eco Cotton")
9. Going the read 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, pressing the forward button.
Repeat until altogether 14 audio clips have been recorded. The total available recording time is one minute.
Step 15: The Chatterbox - Region 3 - Mount the Audio Clip Addresses
The audio frequency clips are stored in a straight block of memory happening the KA02 from savoir-faire 0x010 to 0x2DF as shown in the diagram. It is necessary to determine the jump and end addresses of for each one dress.
The lesson KA02 sketch downloaded from www.velleman.be was adapted to earmark each of the 14 audio clips to be played. The resulting ino file is attached.
//Set Audio frequency Snip Addresses #let in <ISD1700.h> // Library for Audio frequency Shield (downloaded from Velleman website) ISD1700 chip at(10); // Initialize chipcorder with // SS at Arduino's digital pin 10 int apc=0; int vol=0; //volume 0=MAX, 7=Hokkianese int startAddr=0x10; int endAddr =0x2DF; //Set Wash Programme Audio Clips start and end addresses //Dry wash Programme 1 Cotton int startAddr1=0x010; int endAddr1 =0x020; //Wash Broadcast 2 Eco Cotton int startAddr2=0x025; int endAddr2 =0x03E; //Wash Programme 3 Synthetics int startAddr3=0x03F; int endAddr3 =0x054; //Set message start and final stage addresses //Wash Computer program 4 Wool int startAddr4=0x056; int endAddr4 =0x066; //Wash Syllabu 5 Tailspin int startAddr5=0x068; int endAddr5 =0x078; //Wash Programme 6 Gargle + Spin int startAddr6=0x078; int endAddr6 =0x090; //Wash Programme 7 Eco Drum Spotless int startAddr7=0x090; int endAddr7 =0x0AE; //Wash Programme 8 Super Eco Wash int startAddr8=0x0AE; int endAddr8 =0x0CE; //Wash Programme 9 15' Quick Moisten int startAddr9=0x0CE; int endAddr9 =0x0EE; //Wash Programme 10 Daily Lavation int startAddr10=0x0EE; int endAddr10 =0x105; //Wash Programme 11 Delicates int startAddr11=0x105; int endAddr11 =0x120; //Wash Programme 12 Dark Fit out int startAddr12=0x123; int endAddr12 =0x133; //Wash Plan 13 Bedding int startAddr13=0x136; int endAddr13 =0x148; //Wash Programme 14 Baby Care int startAddr14=0x149; int endAddr14 =0x167;</p><p>void setup() { apc = apc | vol; //D0, D1, D2 //apc = armoured personnel carrier | 0x8; //D3 comment to disable output monitor during record //armoured personnel carrier = apc | 0x50; // D4&A; D6 select MIC REC //apc = armored personnel carrier | 0x00; // D4& D6 select AnaIn REC //armored personnel carrier = apc | 0x10; // D4& D6 prime MIC + AnaIn REC apc = armored personnel carrier | 0x80; // D7 AUX ON, comment enable AUD APC = armoured personnel carrier | 0x100; // D8 SPK OFF, comment enable SPK //armoured personnel carrier = apc | 0x200; // D9 Analogue OUT OFF, comment enable Analog OUT //apc = apc | 0x400; // D10 vAlert OFF, comment enable vAlert apc = apc | 0x800; // D11 EOM ON, comment disable EOM Ordered.begin(9600); Serial.println("Sketch is starting up"); } void loop() { char c; if(Serial.available()) { /* Power Up */ chip.pu(); c = Serial.read(); switch(c) { case 'A': Serial.println(chip.rd_apc(), BIN); bump off; case 'Y': //Wager current message nick.play(); break; case 'P': //Pause playing chip.stop(); wait(500); break; case 'E': //Erase current message chip.erase(); delay(500); break; case 'R': //Disk chip.rec(); break; caseful 'F': //Make a motion forward to next message chip.fwd(); postponement(500); break; case 'Z': //Global erase all messages chip.g_erase(); delay(500); break; case 'I': //Print Poker chip ID Nonparallel.println(chip.devid(), BIN); break; case 'W': Sequential.println(apc, BIN); splintering.wr_apc2(apc); //Publish APC2 bits break; case 'S': Serial.println(chip.rd_status(), BIN); //Print chip position break; case 'm': while (Consecutive.available() <= 0) { delay(300); } c = Ordering.scan()-48; mess(c); break; case 'y': cow dung.set_play(startAddr,endAddr); break; case 'r': chip.set_erase(startAddr,endAddr); stay(500); chip.set_rec(startAddr,endAddr); break; case 'x': chip.set_erase(startAddr,endAddr); holdup(500); bump off;</p><p>//Play Wash Program Messages case '1': splintering.set_play(startAddr1,endAddr1); // Placed compensate start and end address for the under consideration audio clip chip.play(); // Play the clip break; case '2': chip.set_play(startAddr2,endAddr2); cow chip.play(); break; case '3': break away.set_play(startAddr3,endAddr3); chip.play(); break; slip '4': chip.set_play(startAddr4,endAddr4); chip.play(); break; case '5': chip.set_play(startAddr5,endAddr5); chip.play(); break; lawsuit '6': chip.set_play(startAddr6,endAddr6); chip.work(); get around; case '7': chip.set_play(startAddr7,endAddr7); fleck.play(); break; case '8': chip.set_play(startAddr8,endAddr8); chip.play(); break; case '9': chipping.set_play(startAddr9,endAddr9); chip.play(); break; case 'a': chipping.set_play(startAddr10,endAddr10); chip.play(); break; case 'b': chip.set_play(startAddr11,endAddr11); chip.flirt(); break; case 'c': chip.set_play(startAddr12,endAddr12); break away.play(); snap off; case 'd': chip.set_play(startAddr13,endAddr13); chip.play(); break; case 'e': chip.set_play(startAddr14,endAddr14); chip.play(); break; } In series.print("Status---> "); Serial.photographic print(chip.CMD_ERR()? "CMD_ERR ": "OK "); Serial.print(chip.PU()? "PU ": "NO Plutonium "); Serial.print(chip.RDY()? "RDY ": "Not_RDY "); Serial.photographic print(chip.rd_status(), BIN); In series.println(); delay(1000); } } void mess(int num){ Serial.print("num: "); Serial.println(num); startAddr=(0x50*num)+0x10; endAddr=(startAddr+0x50)-1; Serial.print("startAddr: "); Serial.print(startAddr, Witch); Serial.print(" - endAddr: "); Serial.println(endAddr, HEX); } The addresses are determined as follows:
The KA02 / UNO R3 is connected via a USB take to a Microcomputer running Arduino.
1. The sketch is uploaded to the UNO R3.
2. In the Arduino Serial Monitor eccentric 1 and press enter upon.
3. The prototypal audio clip should play. Note if the altogether clip and nothing other is played.
4. If not, adjust the start and end addresses of the first off clip in the sketch (lines 14 and 15), upload the modified sketch to the UNO R3 and X back to step 2.
5. If all is All right, continue to the next stride.
6. In the Arduino Serial Monitor type 2 and press enter.
7. The second audio clip should wager. Mention if the undivided trim and nothing else is played.
8. If not, adapt the start and end addresses of the moment clip in the outline (lines 18 and 19), upload the modified sketch to the UNO R3 and go back to step 6.
9. If each is OK, continue to the next tone.
Repeat this summons until the addresses for clip 9 have been set up.
For clips 10 to 14, instead of typing a number into the admonisher, utilisation the letters a to e.
Step 16: SOAP Codification
The principle of the SOAP code is as follows:
1. Initialise variables including the start and end addresses of each audio frequency clip.
2. Find which wash programme LED is illuminated.
3. Set Showtime and Death come up to for the audio frequency clip associated with the selected wash programme.
4. Play the at issue audio lop.
5. Wait 3 seconds.
6. Reiterate from whole step 2.
The Arduino ino file is attached. This should be uploaded to the UNO R3.
The code is as follows:
SOAP Arduino Code // SOAP - Speech Output Announcing Programs // Talk Washer User interface for the Blind // #include < ISD1700.h > // Program library for Audio frequency Cuticle (downloaded from Velleman internet site) ISD1700 chip(10); // Initialise chipcorder with SS at Arduino's digital pin 10 // // Initialise Audio Shield variables int apc=0; int vol=0; //volume 0=MAX, 7=min int startAddr=0x10; //Start speech of Audio Shield RAM int endAddr =0x2DF; //End address of Audio Shield RAM // //Set Wash Programme Audio Clips start and end addresses dictated from tests int startAddr1=0x010; int endAddr1 =0x020; //Dry wash Programme 1 Cotton cloth int startAddr2=0x025; int endAddr2 =0x03E; //Wash Programme 2 Eco Cotton plant int startAddr3=0x03F; int endAddr3 =0x054; //Wash Programme 3 Synthetics int startAddr4=0x056; int endAddr4 =0x066; //Wash Programme 4 Wool int startAddr5=0x068; int endAddr5 =0x078; //Wash Programme 5 Spin around int startAddr6=0x078; int endAddr6 =0x090; //Wash Programme 6 Rinse + Spin int startAddr7=0x090; int endAddr7 =0x0AE; //Wash Programme 7 Eco Mug up Clean int startAddr8=0x0AE; int endAddr8 =0x0CE; //Wash Programme 8 Super Eco Wash int startAddr9=0x0CE; int endAddr9 =0x0EE; //Wash Programme 9 15 Minute Quick Wash int startAddr10=0x0EE; int endAddr10 =0x105; //Wash Programme 10 Day-to-day Washables int startAddr11=0x105; int endAddr11 =0x120; //Dry wash Programme 11 Delicates int startAddr12=0x123; int endAddr12 =0x133; //Wash Programme 12 Dark Garment int startAddr13=0x136; int endAddr13 =0x148; //Washout Programme 13 Bedding int startAddr14=0x149; int endAddr14 =0x167; //Wash Programme 14 Baby Care // const int inputPin2 = 2; // Digital inputs. DI 10 used by Audio Carapace so cannot be used for sensor stimulant const int inputPin3 = 3; const int inputPin4 = 4; const int inputPin5 = 5; const int inputPin6 = 6; const int inputPin7 = 7; const int inputPin8 = 8; const int inputPin9 = 9; const int inputPinA0 = 14; //Analogue inputs secondhand as Digital Inputs const int inputPinA1 = 15; const int inputPinA2 = 16; const int inputPinA3 = 17; const int inputPinA4 = 18; const int inputPinA5 = 19; // // Delimitate variables // for storing the land of the inputs // Inputs initialised HIGH as sensing element input pulls the input signal Low-toned int inputState_Baby_Care = 1; int inputState_Eco_Drum_Clean = 1; int inputState_Rinse_and_Spin = 1; int inputState_Spin = 1; int inputState_Wool = 1; int inputState_Cotton = 1; int inputState_Eco_Cotton = 1; int inputState_Synthetics = 1; int inputState_Daily_Wash = 1; int inputState_15_Minute_Quick_Wash = 1; int inputState_Super_Eco_Wash = 1; int inputState_Delicates = 1; int inputState_Dark_Garment = 1; int inputState_Bedding = 1; // // // Setup vacuum frame-up() { // //Initialise Audio Shield apc = armored personnel carrier | vol; // D0, D1, D2 apc = apc | 0x100; // D8 SPK Inactive, comment enable SPK APC = apc | 0x800; // D11 EOM ON, comment incapacitate EOM // // initialize the pins every bit inputs: pinMode(inputPin2, INPUT); pinMode(inputPin3, INPUT); pinMode(inputPin4, INPUT); pinMode(inputPin5, INPUT); pinMode(inputPin6, Input signal); pinMode(inputPin7, INPUT); pinMode(inputPin8, INPUT); pinMode(inputPin9, INPUT); pinMode(inputPinA0, INPUT); pinMode(inputPinA1, INPUT); pinMode(inputPinA2, INPUT); pinMode(inputPinA3, INPUT); pinMode(inputPinA4, INPUT); pinMode(inputPinA5, INPUT); } // // Main Loop void loop() { // chip.Pu(); //Chip Power Up // // Translate the states of the inputs. Only unrivalled volition be low: inputState_Baby_Care = digitalRead(inputPin2); inputState_Eco_Drum_Clean = digitalRead(inputPin3); inputState_Rinse_and_Spin = digitalRead(inputPin4); inputState_Spin = digitalRead(inputPin5); inputState_Wool = digitalRead(inputPin6); inputState_Cotton = digitalRead(inputPin7); inputState_Eco_Cotton = digitalRead(inputPin8); inputState_Synthetics = digitalRead(inputPin9); inputState_Daily_Wash = digitalRead(inputPinA0); inputState_15_Minute_Quick_Wash = digitalRead(inputPinA1); inputState_Super_Eco_Wash = digitalRead(inputPinA2); inputState_Delicates = digitalRead(inputPinA3); inputState_Dark_Garment = digitalRead(inputPinA4); inputState_Bedding = digitalRead(inputPinA5); // // Set make up start and end address for the relevant audio snip off // based along which programme LED is illuminated // InputState is Low-lying for an illuminated LED if (inputState_Baby_Care == Low-set) {chip.set_play(startAddr14,endAddr14); } if (inputState_Eco_Drum_Clean == LOW) {chip.set_play(startAddr7,endAddr7); } if (inputState_Rinse_and_Spin == LOW) {chip.set_play(startAddr6,endAddr6); } if (inputState_Spin == LOW) {chip.set_play(startAddr5,endAddr5); } if (inputState_Wool == LOW) {chip.set_play(startAddr4,endAddr4); } if (inputState_Cotton == LOW) {chip.set_play(startAddr1,endAddr1); } if (inputState_Eco_Cotton == LOW) {microchip.set_play(startAddr2,endAddr2); } if (inputState_Synthetics == Sir David Alexander Cecil Low) {chip.set_play(startAddr3,endAddr3); } if (inputState_Daily_Wash == LOW) {chip.set_play(startAddr10,endAddr10);} if (inputState_15_Minute_Quick_Wash == LOW) {chip.set_play(startAddr9,endAddr9); } if (inputState_Super_Eco_Wash == Depression) {chip.set_play(startAddr8,endAddr8); } if (inputState_Delicates == LOW) {poker chip.set_play(startAddr11,endAddr11); } if (inputState_Dark_Garment == LOW) {cow dung.set_play(startAddr12,endAddr12); } if (inputState_Bedding == LOW) {micro chip.set_play(startAddr13,endAddr13); } // {chip off.bring on();} // Play the clip // delay(3000); //Wait 3 seconds before repeating loop // } Step 17: Building the Prater
The Chatterbox is constructed as follows:
Step 1: Exercise one cease of the plastic enclosing for the pushbutton and speaker 'grillwork'. The holes were laid out in an AutoCAD drawing and the final design was printed onto an adhesive pronounce at full size. The tag 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 a couple of millimetres deep and slightly wider than the ribbon cable at the top of the different end of the box.
Step 3: Skip the ridge nether the lid to match the ribbon cable one-armed bandit. This is necessary thus the lid can be to the full 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 superpowe plug. The latter was taken from a 'universal' laptop power supply kit out equally the correctly mouse-sized plug is right field angled so it fits neatly in the Chatterbox. Take care for to ascertain the word-perfect polarity of the power fire hydrant.
Step 5: The speaker connections are created from Dupont wires featuring worthy sockets for attachment to the KA02 speaker pins.
Step 6: Cut a divider from T. H. White Plasticard. This is cut to concord the box seat firmly and has a corner amputate to allow wires to go through.
Footmark 7: Install the verbalizer, pushbutton, power predominate and the divider as shown in the photograph. The splitter is slightly bowed aside the verbaliser - this helps to keep the speaker in position. A while of foam bad is pushed between the speaker and the pushbutton to stop any sideways movement.
Step 8: Control 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 sheath routing the wires as shown in the photograph. The separation of the two dividers is the heaviness of a PP9 stamp battery as the gap forms the battery compartment.
Step 11: Cut a set up of dense white foam rubber to form the base of the battery compartment. A cut-out will too have to embody made to accommodate the UNO R3 USB socket. Put in the froth rubber between the dividers.
Step 12: Track other piece of dense Andrew Dickson White sparkle rubber to fill the death section of the battery compartment. This volition need a rationalize-bent accommodate the UNO R3 superpowe plug. Set u the foam rubber between the dividers.
Step 13: Temporarily attach the clip to the PP9 battery and install IT in the battery compartment to see to it information technology is held hard. The battery wires pass neatly under the electric battery. Adapt the effervesce 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 sparking plug should fit so that the UNO is held loosely in position. The speaker unit leads should be connected the to pins happening the KA02. If all is well, unplug the boards from the plug and leads and remove them from the enclosure.
Step 16: Victimization the Dupont wires from the Elegoo kit out, forge a 17 way interconnection predominate.
Step 17: Get in touch the loom to the port panel as shown in the photograph.
Ill-trea 18: Connect the loom to one side of the KA02 / UNO R3 as shown. Take tending that the connections are made to the word-perfect pins.
Step 19: Connect the remaining connections of the loom to the other side of the KA02 / UNO R3 as shown. Take caution that the connections are ready-made to the correct pins. Picture the diagram for the interconnection inside information.
Step 20: Carefully fold the interconnection loom then that it fits neatly in the enclosure.
Step 21: Fit the whole assembly into the box.
Footfall 22: Link the ribbon cable to the interface board, guiding the cable over the top of the board and into the slot barge in the summit of the case. Some excess cable should be leftish in the gap between the interface board and the end of the box, forming a downward bend.
Step 23: Insert a piece of white sparkle arctic to hold the UNO R3 firmly against the side of the case. Enter another piece of foam rubber 'tween the interface board and the end of the case to fix the ribbon cable in place. In this photo the foam rubber between the speaker and the pushbutton can also beryllium seen.
Footprint 24: Screw the lid into commit, being diligent non to crush the ribbon cable.
The Chatterbox is complete!
Maltreat 18: Testing the Giant helleborine
Connect the Prater to the test control board using the ribbon cable.
Turn the box on.
Tie in a test pin to the 0V pin. Note that the pins are numbered in the diagram to match the wash curriculum numbers game. The related audio curtail should play, repetition all 3 seconds.
Test all clips in this means.
Become the box off.
If all is fortunate, mount the Chatterbox in the required location. This will ask much dismantling of the Giant helleborine to grant mounting holes to be trained in locations that do non foul the internal components.
Step 19: Completing the Installation
The first photograph shows the three mounting holes with desirable loony glued in position.
Climbing holes are drilled through the console and bolts wont 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 on that point is slack off to take account of washing machine move and vibrations.
Grievous bodily harm is now all!
Footfall 20: Final Thoughts...
SOAP has been in use for almost a year with no sign of the battery dying. As Grievous bodily harm is only powered heavenward for a few transactions each day, the battery should terminal a good while yet.
The organization has proved to be reliable and has helped Sue to retain her independence, an polar consideration for any blind person. Observe the video to pick up her using SOAP.
Easy lay has been thoroughly 'Lab' tested by Guide Dog Milly, a fine black Labrador - see pledged photos. Milly would beryllium known as a Seeing Eye Dog in the USA.
I would love to see other Instructables describing novel devices for the impaired, maybe using elements of this project.
All of the diagrams therein Instructable were created using AutoCAD 2022 LT.
This was my entree in the Arduino contest - and it won the 1000 Prize! Many thanks to everyone that kindly definite to Vote in for SOAP!
1 Person Ready-made This Undertaking!
Recommendations
-
Anything Goes Competition 2022
Source: https://www.instructables.com/Talking-Washing-Machine-Interface-for-the-Blind-AK/
Posted by: clarkciect1992.blogspot.com

0 Response to "Talking Washing Machine Interface for the Blind AKA 'SOAP' : 20 Steps (with Pictures) - clarkciect1992"
Post a Comment