Overall:

There is a saying by Virginia Satir, a respected family therapist, “We need four hugs a day for survival. We need eight hugs a day for maintenance. We need twelve hugs a day for growth.” The T-shirt can provide attention through lights in different colours. It is able to count the hugs from 0 hugs to 4 hugs throughout the IR proximity sensor.

.

Product Images:

Hugging Process

Overall Photo

Lighting Aesthetics

Close Shot

Process Images and Review

Decision Moment 1: aesthetics

I put the LED strips vertically on the T-shirt and I changed my original lighting design idea.

After I decided using LED strips to be my lighting component, I was playing with the strips and trying to find a way to design with the T-shirt but not looking cheap. The original idea was bending the strips horizontally and input the lights to the back of the T-shirt. However, that made the graphic of heart looking not continuous by the individual lights. It would also be very difficult to bend that way to be a heart shape. While I was testing the LED strips colour and I put the LED strips vertically on the T-shirt. I actually liked the way how the lights formed the heart and it was much easier to bend this way. Then, I decided to put the LED strips in the front of the shirt and decorated them with different colour felts matching to the individual strips lighting colours.

Decision Moment 2: colour coding

Found the code could test and control the individual strip lighting colour with the colour chart behind the codes.

I was having a hard time to find a simple individual colour changing code on the Internet. There are more LED strip users are using it with three transistors or doing some fancy rainbow lighting effects. Zac helped me to find the better code from the Arduino library so I could control the colour from the chart with the numbers for the individual strip. This code helped me to maintain the original idea of how I would like the lighting strips performing on the shirt.

Other Process Photos

Early Stage Design Rough Sketch

Using the yarns to place the design on the shirt to get the individual LED strips rough measurements.

Covering the strips with the felts and placing on the shirt before sewing them on.

Transferring the wires from the breadboard to the plastic connecting board.

Discussion

I got some positive comments like:

“The concept inspiration is super cool and cute. I really like how the colours came together on the shirt – nice aesthetics.”

“Amazing aesthetics! A very interpersonal approach to an “assistive device”

I was a little bit surprised a lot of people very liked and appreciated this idea. I was concerned this device did not match the prompt as a functional product but I did feel the concept was very interesting and it linked to quote and bring another definition of “function” than the practical meaning. I think it is a successful balance between my personal preference and the project requirement. From the aesthetics aspect, I knew it was easy for me to reach the good artist vision if I thought through from the beginning. I am glad it did not look cheap like a lot of wearable device with LED and it also brought a positive atmosphere from the visual to match the initial idea.

There are few negative comments like:

“All the electronic components were still visible and wasn’t very aesthetically pleasing, so it would have been nice with a box or something”

“It is a bit too bright.”

I have calculated and left long wires for all sections so I could hide the wiring board and Arduino inside my pocket when I demonstrated the device. However, the wires were too fragile than I expected. It could disconnect the parts and made shortcuts if I squeezed inside my pocket. The way to improve is finding a box or sewing another independent pocket to store those components.
Some classmates suggested me to input the lights underneath the T-Shirt so it will not be that bright. I actually like the current outside revealing version more. What I can do is find the code that could allow me to change the brightness. It will still maintain my
artistic version and solve the problem.

During the process, I knew I only had a little time for this project because I was in the middle of my production. I am glad I made this project at this level. However, the wiring took me much longer time than I thought. (like most of the costume craft works) In the end, the product turned out quite nice with the design. I was surprised there was a disconnection when I presented the product. I think the wearable device needed a longer time to test because the movements could easily destroy the connections. However, I embraced the fact and I will try to use more protections to reduce the risk next time.

For my background, coding is the most difficult part for me. During the process, I learnt the process of setting up small goals, making each step worked and accumulated to be one big project. I also practised the research and problem-solving skill. Even though I had a lot of costume and craft making experiences but the way to develop things in electricity and the making resources are different. What I would like to do differently next time is I will leave some time for the failure. I think there are so many unexpectedly wiring problems that I needed to find out during the process. When I make my plan of the action, I should leave more time for that and be careful to approach to every step.

In conclusion, I think this work is more like a philosophical conceptual project. I think it could possibly extend to be a bigger art piece. I would like to realise the quote of 12 hugs display on the T-shirt and make the clear effects when it reaches 4 hugs for survival and 8 hugs for maintenance. Maybe the shirt eventually links with an organization to practice and really express the idea through the device I make.

Schematic

Code

/*
   Project Title: Survival Hugging T-Shirt
   Name: Meng-Han Yeh
   Description: Control the 4 LED strips with the IR proximity sensor.

   Pin Mapping:
   Digital Pin 12 is connecting to Red Strip and controlling the Blue light;
   Digital Pin 11 is connecting to Blue Strip and controlling the Yellow light;
   Digital Pin 10 is connecting to Yellow Strip and controlling the Purple light;
   Digital Pin 8 is connecting to Purple Strip and controlling the Red light;
   Analog Input 0 (A0) is reading the IR proximity sensor.
   Coding Credit: LedStripColorTester - for LED strips colour changing

*/


int photocell = A0; // A0 is reading the IR proximity sensor
bool everHugged = false;
unsigned long timer = 0; // set up the timer

int hugCount = 0;

#include <PololuLedStrip.h>

/* Create names for each of the LED strips and set up the digital pins:
   Digital Pin 12 = ledStrip (the outer LED strip) is connecting to Red Strip and controlling the Blue light;
   Digital Pin 11 = ledStrip2 (the second LED strip from outside) is connecting to Blue Strip and controlling the Yellow light;
   Digital Pin 10 = ledStrip3 (the third LED strip from outside) is connecting to Yellow Strip and controlling the Purple light;
   Digital Pin 8 = ledStrip4 (the forth LED strip from outside, the central inside heart) is connecting to Purple Strip and controlling the Red light
*/

PololuLedStrip<12> ledStrip; // the biggest heart
PololuLedStrip<11> ledStrip2;
PololuLedStrip<10> ledStrip3;
PololuLedStrip<8> ledStrip4; // the smallest heart

// set up how many LEDs on the strip you would like to control
#define LED_COUNT 60
rgb_color colors[LED_COUNT];

void setup()
{
  pinMode(photocell, INPUT); // set up the IR proximity sensor
  Serial.begin(115200); // set up the Serial Monitor

}

void loop() {

  int readVal; // initialize a new integer to store the photocell value
  readVal = analogRead(photocell); // do the analog read and store the value


  rgb_color color;

  // if (it has been at least 10 seconds since the last hug)
  if (millis() >= 10000 + timer) {
    if (readVal > 500) { // if the sensor detects the volumne above 500
      timer = millis();
      hugCount++; // the hugCount will plus one when the sensor detects the volumn above 500
      Serial.println (hugCount); // Showing the hugCount in Serial Monitor

    }
  }
  
// if (hugCount == 0) => the beginning setting
  if (hugCount == 0) {

// ledStrip => blue light
    color.red = 51;
    color.green = 255;
    color.blue = 255;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip.write(colors, LED_COUNT);

// ledStrip2 => yellow light
    color.red = 255;
    color.green = 255;
    color.blue = 0;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip2.write(colors, LED_COUNT);

// ledStrip3 => purple light
    color.red = 255;
    color.green = 0;
    color.blue = 204;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip3.write(colors, LED_COUNT);

// ledStrip4 => red light
    color.red = 255;
    color.green = 0;
    color.blue = 0;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip4.write(colors, LED_COUNT);

  }

// if (hugCount == 1) => first hug
  else if (hugCount == 1) {

// ledStrip => turns off
    color.red = 0;
    color.green = 0;
    color.blue = 0;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip.write(colors, LED_COUNT);

// ledStrip2 => yellow light
    color.red = 255;
    color.green = 255;
    color.blue = 0;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip2.write(colors, LED_COUNT);

// ledStrip3 => purple light
    color.red = 255;
    color.green = 0;
    color.blue = 204;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip3.write(colors, LED_COUNT);

// ledStrip4 => red light
    color.red = 255;
    color.green = 0;
    color.blue = 0;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip4.write(colors, LED_COUNT);

  }

// if (hugCount == 2) => second hug
  else if (hugCount == 2) {

// ledStrip => turns off
    color.red = 0;
    color.green = 0;
    color.blue = 0;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip.write(colors, LED_COUNT);

// ledStrip2 => turns off
    color.red = 0;
    color.green = 0;
    color.blue = 0;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip2.write(colors, LED_COUNT);

// ledStrip3 => purple light
    color.red = 255;
    color.green = 0;
    color.blue = 204;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip3.write(colors, LED_COUNT);

// ledStrip4 => red light
    color.red = 255;
    color.green = 0;
    color.blue = 0;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip4.write(colors, LED_COUNT);


  }


// if (hugCount == 3) => third hug
  else if (hugCount == 3) {

// ledStrip => turns off
    color.red = 0;
    color.green = 0;
    color.blue = 0;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip.write(colors, LED_COUNT);

// ledStrip2 => turns off
    color.red = 0;
    color.green = 0;
    color.blue = 0;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip2.write(colors, LED_COUNT);

// ledStrip3 => turns off
    color.red = 0;
    color.green = 0;
    color.blue = 0;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip3.write(colors, LED_COUNT);

// ledStrip4 => red light
    color.red = 255;
    color.green = 0;
    color.blue = 0;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip4.write(colors, LED_COUNT);

  }

// if (the sensor detects more than 3 hugs), all lights turn off
  else  {

    color.red = 0;
    color.green = 0;
    color.blue = 0;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip.write(colors, LED_COUNT);

    color.red = 0;
    color.green = 0;
    color.blue = 0;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip2.write(colors, LED_COUNT);

    color.red = 0;
    color.green = 0;
    color.blue = 0;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip3.write(colors, LED_COUNT);

    color.red = 0;
    color.green = 0;
    color.blue = 0;
    for (uint16_t i = 0; i < LED_COUNT; i++)
    {
      colors[i] = color;
    }
    ledStrip4.write(colors, LED_COUNT);

  }


 // Update the colors buffer
  for (uint16_t i = 0; i < LED_COUNT; i++)
  {
    colors[i] = color;
  }


}