ACM Style Project Paper PDF link : http://www.sfu.ca/~hllee/IAT320-Abafando-Report.pdf
Initial Project concept link: https://www.behance.net/gallery/IAT-320-Final-Project-Concept/14860823
Technical Prototype
Our goal in this interactive wearable is to reflect and extend the internal struggle an individual feels when they’re being verbally abused. The garment will make both the victim and the abuser see the effect. For example: when someone is being verbally abused they will run into different kinds of emotions. one of which is anger. When an individual becomes angry, they experience some form of physiological sign and they differ from one person to another. However, anger is usually coupled with internal reactions such as an increase in the heartbeat and the breathing becomes shallow. It's much like the fight-or-flight response; where the body is preparing for a fight against what has been committed against the person.
Since we’re focusing on the effect of verbal abuse on a person, we thought of using a volume sensor that would detect high sounds and the dress would react to it. However, high sounds are not necessarily abusive words. Thus, we decided to scrap that idea and focus on the emotions of the person being abused and to reflect that on the dress. Furthermore, as for detecting the shallowness of the breathing and reflecting it on the dress, we wanted to use a conductive rubber band that would detect the rib cage movement when the user is breathing. However, because when a person breathes their rib cage doesn't contract and expand in a large range and the sensitivity of the rubber band is not accurate. Thus, using the conductive rubber band was not a successful approach for detecting breathing.
We decided to reflect the increase of the individual’s breathing via contracting and expanding an origami shape attached to the dress. This will illustrate how abuse can affect the person internally. Also, based on the user’s heartbeat rate LEDs will light up in a different pattern. These two different inputs and the outputs are explained in detail in the programming and circuit section.
Programming and Circuit
Mechanism 1: Contraction
Sensor: Microphone Amplifier
Detection: Airflow on the microphone when breathing.
Input: Airflow noise which comes from the user mouth when breathing.
Output: The value read from the microphone will control the rotation of a servo motor. The volume detected will determine rotation angle and speed of the servo motor. Bigger volume gives bigger rotation angle and constant speed. Smaller volume gives smaller rotation angle and rapid speed.Technical Diagram:
Mechanism 2: Lighting
Sensor: Pulse sensor.
Detection: heart pulse.
Input & computing: record each pulse from the sensor and compute BPM (beats per minute) from the raw data.
Output: based on the BPM, LEDs will have three different phases based on the different heart beat rate/speed.
Phase1: LEDs grow and dim with slow speed=Normal heartbeat rate.
Phase2: LEDs grow and dim with fast speed= Medium Heartbeat rate.
Phase3: LEDs lights up randomly with a inconsistent rhythm= Fast heartbeat rate.
Technical Diagram:
Code
int analogPin = 4;
int DC_OFFSET = 0;
int val = 0;
boolean soundRead = true;
#include <Servo.h>
Servo myservo;
int pos = 0;
int timer_servo = 0;
int i = 0;
void setup()
{
Serial.begin(9600); // setup serial
}
void loop() {
//myservo.detach();
if (soundRead) {
val = analogRead(analogPin);
val = abs(val - 512 - DC_OFFSET);
} else {
val = 300;
}
Serial.println(val);
//Serial.print(" ");
//Serial.println(soundRead);
if (val > 250){
//start spinning
myservo.attach(10);
for(int i=0; i<10000; i++){
//spin with this random int
myservo.write(10);
}
//stop the freaking spin
myservo.detach();
//wait for 500 ms
//delay(300);
//repreat the spin
myservo.attach(10);
for(int i=0; i<10000; i++){
//spin for 170 to go backward
myservo.write(170);
}
myservo.detach();
//delay(300);
}
if(val < 250){
//start spinning
myservo.attach(10);
//spin for 1000 ms
if(i<=40){
i++;
//for(int i=0; i<15000; i++){
//spin with this random int
myservo.write(20);
delay(30);
}
//stop the freaking spin
// myservo.detach();
//wait for 500 ms
//repreat the spin
//myservo.attach(10);
//spin for 1000 ms
if(i > 40 && i <= 80){
//spin for 170 to go backward
i++;
myservo.write(170);
delay(30);
}
myservo.detach();
if(i > 80){
i = 0;
}
}
}
int val = 0;
boolean soundRead = true;
#include <Servo.h>
Servo myservo;
int pos = 0;
int timer_servo = 0;
int i = 0;
void setup()
{
Serial.begin(9600); // setup serial
}
void loop() {
//myservo.detach();
if (soundRead) {
val = analogRead(analogPin);
val = abs(val - 512 - DC_OFFSET);
} else {
val = 300;
}
Serial.println(val);
//Serial.print(" ");
//Serial.println(soundRead);
if (val > 250){
//start spinning
myservo.attach(10);
for(int i=0; i<10000; i++){
//spin with this random int
myservo.write(10);
}
//stop the freaking spin
myservo.detach();
//wait for 500 ms
//delay(300);
//repreat the spin
myservo.attach(10);
for(int i=0; i<10000; i++){
//spin for 170 to go backward
myservo.write(170);
}
myservo.detach();
//delay(300);
}
if(val < 250){
//start spinning
myservo.attach(10);
//spin for 1000 ms
if(i<=40){
i++;
//for(int i=0; i<15000; i++){
//spin with this random int
myservo.write(20);
delay(30);
}
//stop the freaking spin
// myservo.detach();
//wait for 500 ms
//repreat the spin
//myservo.attach(10);
//spin for 1000 ms
if(i > 40 && i <= 80){
//spin for 170 to go backward
i++;
myservo.write(170);
delay(30);
}
myservo.detach();
if(i > 80){
i = 0;
}
}
}