Pcomp – midterm project documentation

Finding Words

My midterm project for physical computing is an ongoing project. I’m creating a performative poem about a cyborg bird who died in the middle of the city. Where the bird died, a tree grew, because the bird had an invisible seed inside their belly. What is this seed made of and how does this tree look like?

The first version of the wearable LED strip

To tell this story I will use gestures (Dance), Light (LED), Words and Sound (Voice, and maybe other effects). To do so, I want to create a wearable for my hands with LED’s that change its colors according to the gesture I do with my hands. I’m going to start with two words:gestures: Fire, Bird, Tree, Seed and Death.

The video below shows how far I got by my midterm deadline. Using Arduino, I created a physical interface with two switches and a led strip containing the number of LEDs I’ll have in my hands. Using serial communication, the code is connected to a p5.js interactive interface that I designed.

  • The initial state of the strip is blinking white and on the screen you see random letters floating and vibrating around the canvas.
  • If you press 1 button, the strip turns blue and you can read bird on the screen;
  • if you press another button, the strip turns green and you can read tree on the screen;
  • if you press both switches together, the strip turns red and you can read fire on the screen.
Video showing the switches changing simultaneously the color of the LED strip and the words on the screen

Arduino code

To communicate with the LEDs I started studying the Neopixel library. Some of my fellows advised me to use the FastLED instead, so I may study that option too. Thanks to Max da Silva, who helped me a lot with this code.

##Arduino Code for the project finding words

#include <Adafruit_NeoPixel.h>

// Which pin on the Arduino is connected to the NeoPixels?
#define LED_PIN     6

// How many NeoPixels are attached to the Arduino?`
#define LED_COUNT  8

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

const int indexSwitch = 2; //define the normally opened switch activated by the index finger in the PIN 2
const int thumbSwitch = 3; //define the normally opened switch activated by the thumb finger in the PIN 3

void setup() {


  pinMode(indexSwitch, INPUT); //define the PIN as an INPUT
  pinMode(thumbSwitch, INPUT); //define the PIN as an INPUT

  strip.begin(); // Initialize NeoPixel strip object
  strip.setBrightness(10); // Set BRIGHTNESS to about 1/5 (max = 255)
  strip.show(); // Initialize all pixels to 'off'


void loop() {

  if (digitalRead(indexSwitch) == HIGH && digitalRead(thumbSwitch) == HIGH) { //if both switches are pressed

    //fire led effect - color red
    uint32_t red = strip.Color(255, 0, 0);
    colorWipe(red, 0);

    Serial.println(4); //write the number 4 in the serial monitor

  } else if (digitalRead(indexSwitch) == HIGH) { //if the index finger button is pressed
    //tree led effect - color green
    uint32_t green = strip.Color(0, 255, 0);
    colorWipe(green, 0);
    Serial.println(2); //write the number two in the serial monitor

  } else if (digitalRead(thumbSwitch) == HIGH) {
    //bird led effect - color blue
    uint32_t blue = strip.Color(0, 0, 255);
    colorWipe(blue, 0);
    Serial.println(3); //write the number 3 in the serial monitor

  } else {
    blink(); //blink white if none of the buttons are pressed
    Serial.println(0); //write zero in the serial monitor


//define how the blink function works
void blink(){
  uint32_t white = strip.Color(255, 255, 255);
  colorWipe(white, 0);
  uint32_t off = strip.Color(0, 0, 0);
  colorWipe(off, 0);

void colorWipe(uint32_t color, int wait) {
  for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
    strip.setPixelColor(i, color);         //  Set pixel's color (in RAM)
    strip.show();                          //  Update strip to match
    delay(wait);                           //  Pause for a moment

Wearable and other materials research

Materials used during the process

In general, I had a lot of trouble trying to build my wearable. First of all, I chose to work with reflective fabric, which is very complicated to sew because its to thick, although it’s beautiful and connects perfectly with my concept that will try to explore themes around mineral extractivism. Thus, I will continue working with it, but need to find a more sewable version of it.

After not being able to sew the reflective fabric, I used a general fabric that we have in our soft lab at ITP to build the first prototype. By the way, Idith, who is responsible for this space, helped me a lot with advice and lending me some materials such as conductive fabric and thread. The thread that I had bought had a really bad quality – it is important to check its conductivity before using it and sewing every line two times to improve the quality of the current you get.

I chose to work with individual sewable Neopixels by Adafruit to have more freedom to place the LEDs as I wanted, and to have a more flexible and more convenient base for them, comparing to general LED strips. Therefore, I’ll have a more organic and adaptable format for my hands and gestures.

Myself presenting the project in class. Photo by Tianjun Wang s2

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: