Talking Fabric Final Project: Love Always Wins in Triangle Identity

Date: 2018/5/14

Project Name: Love Always Wins in Triangle Identity

Documented by: Angelina Ye

Demo:

Inspiration:

  • I start this project with an idea to do something about Allyship
    • Allyship is not an identity—it is a lifelong process of building relationships based on trust, consistency, and accountability with marginalized individuals or groups of people.
    • Unlearning and re-evaluating beliefs and actions
  • In terms of the media to convey this message, I think of LED matrix. My first idea was to create some game on the LED matrix, such as Tetris and Snake game, however, after trying to work this idea for two weeks, I finally give up because of two reasons: 1) to create an interactive game on the LED matrix is beyond my own programming skills; 2) these two game settings do not match with the Allyship idea I want to convey and do not contribute to convey the key message. Later I came up with the LOVE flag idea, which is to raise a heart flag on the LED matrix by spinning the potentiometer and giving arduino different values.
  • Thanks to Antonius, he inspires me to discover the story behind Ally logo and the importance of triangle patterns. Then I find that the triangle patterns have some historic meanings and they were used to indicate prisoner identity in WWII, then I start my idea of reconstructing the triangle identity
    • Triangle Badge has been used in Nazi concentration camp as part of the system of identification in Nazi camps. They were used to identify the reason the prisoners had been placed there.
    • The use of a triangle being a sort of visual shorthand to symbolize all camp victims.           Source: https://en.wikipedia.org/wiki/Nazi_concentration_camp_badge
    • I want to do a project in response to the camp identification system, and I want to create triangles with different color and different shapes to stand for different identities. The users can define what the triangles mean to them by themselves and choose the ones to “pin” on their T-shirt, and they can change their identity combination at their will and wish at any time. The “pin” is actually the stick of the potentiometer, which can be used not only to control the LOVE flag to raise up on the LED matrix, but also “pin” the colorful triangles on the T-shirt.

Key Message:

Your pride will “empower” the love.

  • I hope everyone to be proud of their identity
    • Wearing different Triangle Identity on the Ally T-shirt
    • Put on different identity combinations
    • No identity discrimination any more
  • Love will always wins
    • Press the “Pin” to light up the LOVE flag
    • More identities pinned, easier to light up the LOVE flag
    • Love is Love

Process:

Actually I struggled a lot in the whole process of identifying my idea and programming for the LED matrix, and great thanks to Antonius for continuous support and guidance along the way.

  1. LED Matrix testing

Two important lessons to learn here: 1) Understand the version of LED matrix you will use before searching for sample codes and do the programming; 2) If you still have no idea what to do with your LED matrix, search for the instruction book with the exact version online, and it will be your best friend! From this instruction, I understand how it works and connects my circuit based on that:

I tried the sample code to test my display a test pattern:

 

Tried to use potentiometer to change the LED patterns:

Then I did the programming to create the heart flag pattern raised up in the LED matrix by using potentiometer to send different values:

After the code worked well to raise the love flag, I removed the two breadboards from the LED Matrix and redesign the circuit and use male wires to connect, in order to make it less bulky and more wearable on the T-shirt.

2. Sewing the LED matrix and the circuit onto the T-shirt and design the T-shirt:

I sewed the LED matrix and the circuits all inside the T-shirt, and started to work on how to design the front side of the T-shirt. At first I was thinking of putting a upside-down triangle in front of the T-shirt and put decorations on it. But when I put them all on, I found the upside-down triangle seem unnecessary and too noisy to convey the idea of Allyship, at that time I realized the concept that “Less is More”.

 

 

So I removed this triangle and looked for other possibilities. Antonius inspired me to discover the meaning of triangle patterns here and take advantage of the stick of potentiometer. Therefore I came up with the idea of using triangles of different color and size to indicate different identities, and use the stick of the potentiometer as the pin to stick the triangle on the T-shirt. Although it is not by design and might be the magical power of nature, I found that the more identity triangles “pinned” to the T-shirt, the easier it is to raise the love flag by simply pressing the top of the stick, which I think is also a beautiful metaphor.

 

Improvement:

  1. The circuit inside the T-shirt is still bulky, so next time I will try to use the Lilypad to reduce the size of these components.
  2. I will try to place a soft button on the “pin” stick, and hope it will provide users a better sense of pressing to raise the lOVE flag.
  3. So far there are too many wires inside the T-shirt, which might be not safe when people wear it, especially when it is raining. Therefore I hope to find a new way to have less wires and make this T-shirt more wearable.


/*
   Example Code for an 8 x 8 LED Matrix
   For More Details Visit http://www.tinyurl.com/yhwxv6h

   Displays a test pattern lighting one LED after another
   To Play around with modifying the bitmap, un comment Example #2
*/


int speed = 5; //the delay time in milliseconds

int pauseDelay = 1;    //the number of milliseconds to display each scanned line

//Pin Definitions
int rowA[] = {9, 8, 7, 6, 5, 4, 3, 2};   //An Array defining which pin each row is attached to
//(rows are common anode (drive HIGH))
int colA[] = {17, 16, 15, 14, 13, 12, 11, 10}; //An Array defining which pin each column is attached to
//(columns are common cathode (drive LOW))

//The array used to hold a bitmap of the display
//(if you wish to do something other than scrolling marque change the data in this
//variable then display)
byte data[] = {0, 0, 0, 0, 0, 0, 0, 0};
int x;

//Setup runs once when power is applied
void setup()
{
  Serial.begin(9600);         //Open the Serial port for debugging
  for (int i = 0; i < 9; i++) { //Set the 16 pins used to control the array as OUTPUTs
    pinMode(rowA[i], OUTPUT);
    pinMode(colA[i], OUTPUT);
  }
  data[0] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
  data[1] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
  data[2] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
  data[3] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
  data[4] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
  data[5] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
  data[6] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
  data[7] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
  x = 0;

}

//repeats
void loop()
{
  //Example #1 - test pattern
  //Run a small test program which lights up each light in time
  //  test();

  //Example #2 - static image
  //Display a defined bitmap
  resetMatrix();

  x = map(analogRead(A4), 0, 1023, 0, 10);
  Serial.println('x' + x);
  // heart 
  if (x == 1) {
    data[0] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[1] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[2] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[3] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[4] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[5] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[6] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[7] = B00000000;
  } else if (x == 2) {
    data[0] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[1] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[2] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[3] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[4] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[5] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[6] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[7] = B00000000;
  } else if (x == 3) {
    data[0] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[1] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[2] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[3] = B00011000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[4] = B00111100; //row 1s bit mask (1 LED is on 0 LED is off)
    data[5] = B00111100; //row 1s bit mask (1 LED is on 0 LED is off)
    data[6] = B00011000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[7] = B00000000;
  } else if (x == 4) {
    data[0] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[1] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[2] = B01100110; //row 1s bit mask (1 LED is on 0 LED is off)
    data[3] = B11111111; //row 1s bit mask (1 LED is on 0 LED is off)
    data[4] = B11111111; //row 1s bit mask (1 LED is on 0 LED is off)
    data[5] = B01111110; //row 1s bit mask (1 LED is on 0 LED is off)
    data[6] = B00111100; //row 1s bit mask (1 LED is on 0 LED is off)
    data[7] = B00011000;
  } else if (x == 5) {
   data[0] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[1] = B01100110; //row 1s bit mask (1 LED is on 0 LED is off)
    data[2] = B11111111; //row 1s bit mask (1 LED is on 0 LED is off)
    data[3] = B11111111; //row 1s bit mask (1 LED is on 0 LED is off)
    data[4] = B01111110; //row 1s bit mask (1 LED is on 0 LED is off)
    data[5] = B00111100; //row 1s bit mask (1 LED is on 0 LED is off)
    data[6] = B00011000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[7] = B00000000;
  } else if (x == 6) {
    data[0] = B01100110; //row 1s bit mask (1 LED is on 0 LED is off)
    data[1] = B11111111; //row 1s bit mask (1 LED is on 0 LED is off)
    data[2] = B11111111; //row 1s bit mask (1 LED is on 0 LED is off)
    data[3] = B01111110; //row 1s bit mask (1 LED is on 0 LED is off)
    data[4] = B00111100; //row 1s bit mask (1 LED is on 0 LED is off)
    data[5] = B00011000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[6] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
    data[7] = B00000000;
  }
  

  showSprite(speed);
}

//An array to store power values to act as bit masks
const int powers[] = {1, 2, 4, 8, 16, 32, 64, 128};

////Runs a pattern where each LED is lit one after another
//void test() {
//  for (int i = 0; i < 8; i++) {
//    for (int ii = 0; ii < 8; ii++) {
//      data[i] = data[i] + powers[ii];  //Goes through each row of lights lighting each column one after another
//      showSprite(speed);
//    }
//  }
//
//  for (int i = 0; i < 8; i++) {
//    for (int ii = 0; ii < 8; ii++) {
//      data[i] = data[i] - powers[ii];   //Goes through each row of lights turning off each column one after another
//      showSprite(speed);
//    }
//  }
//
//}
void resetMatrix() {
  data[0] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
  data[1] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
  data[2] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
  data[3] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
  data[4] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
  data[5] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
  data[6] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
  data[7] = B00000000; //row 1s bit mask (1 LED is on 0 LED is off)
}
void showSprite(int speed2) {
  for (int iii = 0; iii < speed2; iii++) {               //show the current frame speed2 times
    for (int column = 0; column < 8; column++) {          //iterate through each column
      for (int i = 0; i < 8; i++) {
        digitalWrite(rowA[i], LOW);                      //turn off all row pins
      }
      for (int i = 0; i < 8; i++) { //Set only the one pin
        if (i == column) {
          digitalWrite(colA[i], LOW); //turns the current row on
        }
        else {
          digitalWrite(colA[i], HIGH);  //turns the rest of the rows off
        }
      }

      for (int row = 0; row < 8; row++) {                  //iterate through each pixel in the current column
        int bit = (data[column] >> row) & 1;
        if (bit == 1) {
          digitalWrite(rowA[row], HIGH);                   //if the bit in the data array is set turn the LED on
        }

      }
      delay(pauseDelay);                       //leave the column on for pauseDelay microseconds (too high a delay causes flicker)
    }
  }
}

Leave a Reply