transmission: A Creativity Measurement System

For my final project I created a wearable device and display system, called “transmission”.

It can be too easy to get stuck overthinking your ideas and letting your gears grind without making any progress. As makers, designers, engineers, hobbyists, etc. it is crucial for us to get out of our heads and sketch out our ideas as they come. It takes practice, but ultimately the more we sketch, the more we can create and the better we can share our ideas.

Inspired by Craighton Berman’s Pencil Sharpener, “transmission” allows you to measure your creativity based on how much you draw. The wearable tech form accommodates any tool preference – from pencil to sharpie to finger paint. This is a two part system including a wearable band that tracks your drawing and a desktop display of your progress.

The instructable to create this design can be found here: http://www.instructables.com/id/Transmission-a-Creativity-Measurement-System/

I really enjoyed this project and could see furthering it in a few ways. First I would work on the housing for the wearable. I attempted creating a 3D printed case but didn’t have time to iterate until the size was just right. I think the display could potentially exist in a variety of ways and would be interested in trying other less box-y forms. Finally, the code could definitely be more robust. Incorporating some type of reset for when you reach the top of the display and considering what happens when either the FLORA or the display is powered off are both potential considerations moving forward.

_X7A1171_edites

 

Jenna’s Instructable Draft

 

SECTION 1: Display Circuit

  1. First you’ll need to wire together all of the pixels. Attach 5V, ground, and a line for the pin through each pixel as shown, leaving about [dimension] of wire in between each one.
  2. Connect the end of the pixel strand to 5V and ground on the AC adapter as well as ground on the Arduino UNO. Connect the middle wire to pin 2.
  3. Test that the pixels light up using the Arduino sample code [name].
  4. If it doesn’t work, here are some troubleshooting tips:
  5. Next you’ll need to hook up one of the xbee modules. Place the xbee module on the xbee adapter, then attach the assembly to your breadboard.
  6. Reference the above circuit diagram to connect the xbee adapter pins on the breadboard to the Arduino UNO.
  7. That’s it for this circuit – next, constructing the display housing.

SECTION 2: Display Construction

  1. Cut out hole in [dimension] wooden back panel using laser cutter or jig saw. This is where the power supplies will attach to. See [file name] for location and dimensions.
  2. Use wood glue to attach the sides ([dimension]) of box to the back panel. Then use [length] wood screws to secure the top and bottom pieces ([dimension]).
  3. Mount the Arduino UNO and circuit to the inside of the base, as shown.
  4. Next it’s time to assemble the LED housing. Start by cutting out the LED holes in the cardboard back panel. It doesn’t need to be exact, but aim to place holes at [dimension] increments, as shown above.
  5. Assembly the cardboard box following the schematic above.
  6. Mount the pixels on the cardboard with [material].
  7. Take the [dimension] black cardstock and cutout [dimension] rectangles and the through holes at the corners.
  8. On the back side of the cardstock, glue on the [transparent material].
  9. Glue cardboard box onto the black cardstock, being sure to align the rectangular pockets for the LEDs with the rectangular cutours on the black cardstock.
  10. Cutout [dimension] holes into the acrylic piece.
  11. Screw the acrylic and cardboard assembly into the front face of the wooden box with [dimension] wood screws.
  12. Great! You’ve finished the display. Now it’s time to make the band.

SECTION 3: Band Circuit

  1. Start by attaching your other xbee module to the xbee adapter, as you did for the display module.
  2. This can be wired the your Flora as shown in the circuit diagram above.
  3. Next you’ll need to hook up the accelerometer to the Flora, connecting 3V, SDA, SCL, and GND.
  4. Solder the leads of the lipoly battery to the Flora.
  5. You’ll want to test that the accelerometer is functioning properly with [name] example code.
  6. At this time you can also test that the xbee modules are functioning with [name] example code.
  7. If all of this is in order, it’s time to build your band!

SECTION 4: Band Construction

  1. You can 3D print the housing for your band’s electronics using this STL file:
  2. Create the band by sewing [material] through the loops of the 3D printed housing as shown.
  3. Place the electronics in their respective spots, then cover them up with the 3D printed lid.

SECTION 5: Finishing and Testing

  1. Plug in the 5V adapter for the LEDs and the USB charger for the Arduino UNO to the back of the display.
  2. Load [name] code to Arduino UNO and [name] code to Flora.
  3. Start drawing! The code is set to increase one bar every 10 minutes of drawing. You can adjust this setting in the part of the code labeled [name].

 

Jenna’s Final Project Ideas

For my final project in making studio I have a few different ideas.

First, on the thread of my dance based projects, I wanted to explore movement and emotion. I would aim to be able to distinguish between different emotions or dance styles based on the movement data collected. One idea for an application would be movement-controlled music, in which the music is based off of how the dancer is moving, not vice-versa.

I have been fascinated by Craighton Berman’s pencil sharpener/ creativity measurement tool (http://studio.craightonberman.com/SHARPENER-JAR) for a couple years now. Though I would lose the beauty and simplicity of the current system, for my second idea, I was considering making a digital version. I use pens and markers when I sketch and therefore can’t use the pencil sharper tool. I would instead create a wearable device that measures how much you draw via accelerometry and is connected to via blutooth to a digital display on your desk.

Third, I am interested in the idea of wearable devices minimizing what you need to carry with you, and how much screen time you have. One of my favorite wearables, and one that I think is highly successful in minimizing, is the Disney Magic Band. It replaces plastic hotel cards, paper fastpass tickets, payment methods, and the need to have your reservation information handy. My idea is to design an attachment for the Magic Band (attaching via sliding on or through the through holes) that would further the utility of this band and ideally replace the need for cell phones in the parks. The most obvious idea for this is using the Adafruit camera module. Other ideas include incorporating SMS functionality, speakers, or vibration motors for notifications.

And the dancing continues (an innovative switch project)

For my innovative switch project, I wanted to continue with my illuminated dancewear theme. I decided to utilize the existing conductive surfaces on the bottom of tap shoes for my switch.

This concept uses each of the plates (front and back on each shoe) to close a switch with a conductive ground surface. It reads each of those switches separately, and uses the 16 possible combinations to control the LED color/effect.

Construction was relatively straightforward. I unscrewed the metal plates on the shoes and pinched a wire underneath them to form one side of the switches. I then sewed a sheet of conductive fabric to put on the floor for the other side of the switch. I used Adafruit NeoPixels RGB 60/m LED strip cut down to size for my illuminated shoe straps.

20151029_203154 20151104_151202 20151104_145310 20151104_112311

My code is also straightforward, but long and somewhat inefficient. It reads whether each switch (for each metal plates) is open or closed, then based on what the combination is, assigns a color value.

[code]
#include <EEPROM.h>

//variables
int inputPinRF = 2;
int inputPinRB = 3;
int inputPinLF = 4;
int inputPinLB = 5;
int valRF = 0;
int valRB = 0;
int valLF = 0;
int valLB = 0;
int r = 0;
int g = 0;
int b = 0;
int pause = 20;

//setup NeoPixel
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

#define PIN 6
#define NUMPIXELS 9
Adafruit_NeoPixel strip = Adafruit_NeoPixel(12, PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
pinMode(inputPinRF, INPUT);
pinMode(inputPinRB, INPUT);
pinMode(inputPinLF, INPUT);
pinMode(inputPinLB, INPUT);
pixels.begin(); // This initializes the NeoPixel library.
strip.begin();
strip.show(); // Initialize all pixels to ‘off’
}

void loop(){
valRF = digitalRead(inputPinRF);
valRB = digitalRead(inputPinRB);
valLF = digitalRead(inputPinLF);
valLB = digitalRead(inputPinLB);

//solid colors
if ((valRF==1) && (valRB==0) && (valLF==0) && (valLB==0)){ //Front Right Tap Only – Red
setColor(strip.Color(255,0,0), pause);

} else if ((valRF==1) && (valRB==1) && (valLF==0) && (valLB==0)){ //Right Foot Only – Pink
setColor(strip.Color(85,5,5), pause);

} else if ((valRF==0) && (valRB==1) && (valLF==0) && (valLB==0)){ //Right Heel Only – Blue
setColor(strip.Color(0, 0, 255), pause);

} else if ((valRF==0) && (valRB==1) && (valLF==1) && (valLB==1)){ //Left Foot and Right Heel – Green
setColor(strip.Color(0,255,0), pause);

} else if ((valRF==0) && (valRB==0) && (valLF==1) && (valLB==0)){ //Front Left Tap Only – Aqua
setColor(strip.Color(0,255,255), pause);

} else if ((valRF==0) && (valRB==0) && (valLF==1) && (valLB==1)){ //Left Foot Only – Yellow
setColor(strip.Color(255,255,0), pause);

} else if ((valRF==0) && (valRB==0) && (valLF==0) && (valLB==1)){ //Left Heel Only – Orange
setColor(strip.Color(85,5,0), pause);

} else if ((valRF==1) && (valRB==1) && (valLF==0) && (valLB==1)){ //Right Foot and Left Heel – White
setColor(strip.Color(255,255,255), pause);

} else if ((valRF==0) && (valRB==1) && (valLF==0) && (valLB==1)){ //Both Heels – Purple
setColor(strip.Color(37,0,75), pause);

} else if ((valRF==1) && (valRB==1) && (valLF==1) && (valLB==0)){ //Right Foot and Front Right Tap – Lime Green
setColor(strip.Color(124, 252, 0), pause);

} else if ((valRF==1) && (valRB==0) && (valLF==1) && (valLB==1)){ //Left Foot and Right Toe – Coral
setColor(strip.Color(255, 127, 80), pause);
}

//Chases

else if ((valRF==0) && (valRB==0) && (valLF==0) && (valLB==0)){ //Both Feet – Strobe Blue
theaterChase(strip.Color(0, 0, 255), pause);
}

//Duplex
else if ((valRF==0) && (valRB==1) && (valLF==1) && (valLB==0)){ //Front Left Tap and Back Right Tap – Duplex Yellow and Green
setColorHalf(strip.Color(255,255,0), strip.Color(0,255,0), pause);

} else if ((valRF==1) && (valRB==0) && (valLF==0) && (valLB==1)){ //Right Toe and Left Heel – Duplex Red and Purple
setColorHalf(strip.Color(255,0,0), strip.Color(37,0,75), pause);
}
//Rainbow
else if ((valRF==1) && (valRB==0) && (valLF==1) && (valLB==0)){ //Both Toes – Rainbow
rainbow(1);
}

//No Contact
else{ //No Contact
setColor(strip.Color(0,0,0), pause);
}

}

void setColor(uint32_t c, uint8_t wait){
for(uint16_t i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, c);
}
strip.show();
delay(wait);
}

void setColorHalf(uint32_t c1, uint32_t c2, uint8_t wait){
for(uint16_t i=0; i<4; i++) {
strip.setPixelColor(i, c1);
}
for(uint16_t j=5; j<strip.numPixels(); j++){
strip.setPixelColor(j,c2);
}

strip.show();
delay(wait);
}

void rainbow(uint8_t wait) {
uint16_t i, j;

for(j=0; j<256; j++) {
for(i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel((i+j) & 255));
}
strip.show();
delay(wait);
}
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
for (int j=0; j<10; j++) { //do 10 cycles of chasing
for (int q=0; q < 3; q++) {
for (int i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, c); //turn every third pixel on
}
strip.show();

delay(wait);

for (int i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, 0); //turn every third pixel off
}
}
}
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r – g – b – back to r.
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 – WheelPos;
if(WheelPos < 85) {
return strip.Color(255 – WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 – WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 – WheelPos * 3, 0);
}

[/code]

What is most exciting for me about this project is the number of possibilities for future iterations. This round I chose to focus on changing colors for each foot position. However there are many potential variations, just from changing the code. These include color based on combinations or patterns of foot motion and educational tools that change color based on “correctness” of a step. Further, more work could be done to consolidate the wiring and electronics to eventually make this a wireless product.

20151104_195039

 

Glowing Dance Top

For my LED diffusion project I created a dance performance top with accentuated shoulders. Dancers are no longer limited to dancing in the daytime or in lighted environments – now they can bring the light anywhere they go. I created a simple crop top with illuminated shoulders so the dancers shoulder movements are accentuated.

In selecting my diffusion method, I was particularly inspired by this image I found on Pinterest. Unfortunately the link redirected and I could not find the original source but I loved the look of the light through the faceted beads.

af058fc99f3919d4e34c790d39d8f214

I originally was going to sandwich my LEDs between two shoulder pad batting pieces and then cover the top with beads but this dimmed the LEDs too much. Instead I put the LEDs on top of the two layers of shoulder padding and then covered them with mesh and the beading.

I used five red 10 mm LEDs for each shoulder, adding up to 10 LEDs in parallel. I used a 3 AA battery pack with Ni-MH 1.2 V batteries. With a source voltage of 3.6 V, a LED forward voltage of 3.3 V, and an LED current of 20 mA, this requires a 15 Ohm resistor per LED. I used 22 Ohm resistors to meet this requirement.

20151014_162357 20151014_165356 20151014_173537 20151014_180200 20151014_210524 20151014_210853

If I were to do this differently I would definitely try to include a few more LEDs per shoulder to get a more uniform glow. I would also try to make the shoulder pads a little more fixed and constrained, as they moved quite a bit when I danced with them.

 

Jenna’s Updated Circuit 6

For my revision to circuit 6, I edited the music and added a little LED flair.

Special shout out to Disney/MiceChat for the sweet it’s a small world character graphics.

 

The full edited code can be found below:

//Edited Arduino Code 6 – it’s a small world version

int speakerPin = 9;
int LED1 = 10;
int LED2 = 11;
int LED3 = 12;

int length = 36; // the number of notes
char notes[] = “ffafggg ggbgaaa aaCabbbagcef “; // a space represents a rest
int beats[] = { 4, 1, 2, 2, 4, 1, 3, 0, 0, 0, 4, 1, 2, 2, 4, 1, 3, 0, 0, 0, 4, 1, 2, 2, 4, 1, 3, 1, 1, 6, 6, 6, 0, 0 , 0, 0 };
int tempo = 100;

void playTone(int tone, int duration) {
for (long i = 0; i < duration * 1000L; i += tone * 2) {
digitalWrite(speakerPin, HIGH);
delayMicroseconds(tone);
digitalWrite(speakerPin, LOW);
delayMicroseconds(tone);
}
}

void playNote(char note, int duration) {
char names[] = { ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘a’, ‘b’, ‘C’ };
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1070, 956 };

// play the tone corresponding to the note name
for (int i = 0; i < 8; i++) {
if (names[i] == note) {
playTone(tones[i], duration);
}
}
}

void setup() {
pinMode(speakerPin, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);

}

void loop() {
for (int i = 0; i < length; i++) {
// Turn on LEDs
if (notes[i] == ‘c’ || notes[i] == ‘f’ || notes[i] == ‘b’){
digitalWrite(LED1, HIGH);}
else if (notes[i] ==’d’ || notes[i]==’g’ || notes[i]==’C’) {
digitalWrite(LED2, HIGH);
}
else
digitalWrite(LED3, HIGH);

//Play notes
if (notes[i] == ‘ ‘) {
delay(beats[i] * tempo); // rest
} else {
playNote(notes[i], beats[i] * tempo);
}

digitalWrite(LED1, LOW); //turn LEDS off
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);

// pause between notes
delay(tempo / 2);

}
}

 

 

 

** REVISION:

I realized after posting that the part of the code to include rests in between notes is incorrect. In the notes vector, it should only include one space per rest and the length of the rest should be modified by the corresponding number in the beats vector. I tried to edit and reupload, but my piezo speaker lost a leg in the process! 🙁