Homework – Innovative Switch Final

Create a blog post for your final switch prototype including description, final photos and process photos to the course blog by 8pm this Wednesday.

The final Arduino prototype does not need to: fit inside your model, be soldered or be miniaturised.

The critique this Thursday will focus on the interaction between you and your switch. So focus your efforts on refining this!

 

 

Nuzzle – Karen Vellensky

 

 

 

 

 

<p><a href=”https://vimeo.com/144718415″>Cutie hats – Proof of Concept</a> from <a href=”https://vimeo.com/user12975396″>karen vee</a> on <a href=”https://vimeo.com”>Vimeo</a&gt;.</p>

For my innovative switch project I knitted a pair of hats with conductive yarn. When the patches of conductive yarn in both hats touch, the arduino board sends a signal to the led to light up in a pattern of random colors. The blinking led signifies the wearers excitement about being nuzzled by their companion in the second hat.

I was pleasantly surprised by how well the yarn worked despite how thin it is compared to the yarn weight I used. Were I to do the project from the beginning, I would have knitted both patches of the conductive yarn into the brim. As it is now, one patch of conductive yarn is in the brim while the second is on the crown of the head. This make contact between the four patches a bit unreliable. I’d also like to see how it looks with 2 – 4 more leds.

I really enjoyed making this project, a big thank you to Jenna for helping me figure out the coding and circuit! (code source: http://ardx.org/src/circ/CIRC12-code-SPAR.txt)

 

DSC_1488IMG_0091 IMG_0092 IMG_0113 IMG_0123 IMG_0127

Ground-Breaking Holiday Tea Light

Starting November 1st, it is officially reasonable to start talking about Christmas! For my innovative switch project I decided to make a self-lighting holiday ornament. I really “broke ground” with this one. When hung on a conductive surface, the ornament lights up.

Here is how I started:

IMG_2003

IMG_2004

IMG_2005

IMG_2006

And here is how it turned out:

IMG_2013

But then…

I decided that wasn’t a good enough story. So, late last night I had an idea. Why not turn this into a REAL holiday ornament?!? I’ve always loved Charlie Brown’s Christmas Story, and I’ve always wanted a Charlie Brown tree of my own.

After a quick trip to Michael’s, I started fabricating…

IMG_2021

IMG_2025

IMG_2026

IMG_2027

IMG_2028

IMG_2030

IMG_2031

IMG_2032

And then, it was all done 🙂

IMG_2035

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.

#include &lt;EEPROM.h&gt;

//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 &lt;Adafruit_NeoPixel.h&gt;
#ifdef __AVR__
  #include &lt;avr/power.h&gt;
#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) &amp;&amp; (valRB==0) &amp;&amp; (valLF==0) &amp;&amp; (valLB==0)){                           //Front Right Tap Only - Red
    setColor(strip.Color(255,0,0), pause);
 
    } else if ((valRF==1) &amp;&amp; (valRB==1) &amp;&amp; (valLF==0) &amp;&amp; (valLB==0)){                  //Right Foot Only - Pink
    setColor(strip.Color(85,5,5), pause);
      
    } else if ((valRF==0) &amp;&amp; (valRB==1) &amp;&amp; (valLF==0) &amp;&amp; (valLB==0)){                  //Right Heel Only - Blue
    setColor(strip.Color(0, 0, 255), pause);    
      
    } else if ((valRF==0) &amp;&amp; (valRB==1) &amp;&amp; (valLF==1) &amp;&amp; (valLB==1)){                  //Left Foot and Right Heel - Green
    setColor(strip.Color(0,255,0), pause);
      
    } else if ((valRF==0) &amp;&amp; (valRB==0) &amp;&amp; (valLF==1) &amp;&amp; (valLB==0)){                  //Front Left Tap Only - Aqua
    setColor(strip.Color(0,255,255), pause);
      
    } else if ((valRF==0) &amp;&amp; (valRB==0) &amp;&amp; (valLF==1) &amp;&amp; (valLB==1)){                  //Left Foot Only - Yellow
    setColor(strip.Color(255,255,0), pause);
       
    } else if ((valRF==0) &amp;&amp; (valRB==0) &amp;&amp; (valLF==0) &amp;&amp; (valLB==1)){                  //Left Heel Only - Orange
    setColor(strip.Color(85,5,0), pause);
      
    } else if ((valRF==1) &amp;&amp; (valRB==1) &amp;&amp; (valLF==0) &amp;&amp; (valLB==1)){                  //Right Foot and Left Heel - White
    setColor(strip.Color(255,255,255), pause);
      
    } else if ((valRF==0) &amp;&amp; (valRB==1) &amp;&amp; (valLF==0) &amp;&amp; (valLB==1)){                  //Both Heels - Purple
    setColor(strip.Color(37,0,75), pause);

    } else if ((valRF==1) &amp;&amp; (valRB==1) &amp;&amp; (valLF==1) &amp;&amp; (valLB==0)){                  //Right Foot and Front Right Tap - Lime Green
    setColor(strip.Color(124, 252, 0), pause);
    
    } else if ((valRF==1) &amp;&amp; (valRB==0) &amp;&amp; (valLF==1) &amp;&amp; (valLB==1)){                  //Left Foot and Right Toe - Coral
    setColor(strip.Color(255, 127, 80), pause);
    }
  
//Chases
                    
    else if ((valRF==0) &amp;&amp; (valRB==0) &amp;&amp; (valLF==0) &amp;&amp; (valLB==0)){                  //Both Feet - Strobe Blue
    theaterChase(strip.Color(0, 0, 255), pause);                
    }
  
//Duplex
    else if ((valRF==0) &amp;&amp; (valRB==1) &amp;&amp; (valLF==1) &amp;&amp; (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) &amp;&amp; (valRB==0) &amp;&amp; (valLF==0) &amp;&amp; (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) &amp;&amp; (valRB==0) &amp;&amp; (valLF==1) &amp;&amp; (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&lt;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&lt;4; i++) {
      strip.setPixelColor(i, c1);
    }
  for(uint16_t j=5; j&lt;strip.numPixels(); j++){
    strip.setPixelColor(j,c2);
  }
    
    strip.show();
    delay(wait);
}

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

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

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

      delay(wait);

      for (int i=0; i &lt; 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 &lt; 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos &lt; 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

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

 

Josh Corn: Giant Battery for a Giant LED

For this innovative switch, I decided to take my plush LED project and change it into a table lamp. The concept was to create an equally proportioned coin cell battery to place between the legs of the LED to make it turn on. I began by ripping apart my plush project and prototyping the wiring for the circuit.
IMG_2666
IMG_2671
IMG_2672
IMG_2689
IMG_2690
After I got the circuit working, I decided to work on creating the battery. I ordered a 6″ diameter block of aluminum from McMaster Carr and decided I would CNC etch the lettering into the surface. In working with the staff at the VFL, we realized that the CNC costs would be prohibitive. I still wanted to move forward with the etching however so we decided to try a technique that they hadn’t attempted before: electroetching with salt water.

I began the process by cutting out the shapes I wanted to etch on the vinyl cutter.
IMG_2692
IMG_2693
IMG_2695
IMG_2696
After painstakingly cutting out the vinyl negatives for both sides of the LED, I sanded the block of aluminum to prepare it for etching.
IMG_2697
I used transfer paper to apply the vinyl onto the battery surfaces.
IMG_2698
IMG_2700
IMG_2701IMG_2702
I added a wire to the block to connect to the hot lead of the battery.
IMG_2706
And then I wrapped the rest of the block in electrical tape.
IMG_2708
A plastic tupperware was borrowed and filled with salt water. I grabbed a tiny scrap of galvanized steel and attached a wire that ran to the negative lead on the battery.
IMG_2709
IMG_2714
When we finally connected everything, the exposed galvanized steel immediately began bubbling.
IMG_2718
After a couple minutes, the water became pretty black and gross as the galvanized coating was removed.
IMG_2725
I checked on the etching multiple times and eventually moved to a larger trashcan so I could stand the block up during the process. We also tried using a scrap of aluminum as we feared that the fumes from the galvanized steel were toxic. As the bubbles became less frequent, I changed out the battery to a fresh one. This definitely made the process move along faster. After about 5 hours, I was happy with the state of the etch.
IMG_2740
IMG_2779
IMG_2790

IMG_2792
IMG_2793
After the battery was complete, I applied some conductive aluminum tape around the edge to complete a circuit also made from the same tape.

I realized that it was fairly silly to use “conductive aluminum tape” as the aluminum itself should be conductive enough to make the circuit work. Trying the circuit again with only aluminum rods as the LED leads and the battery to connect them, I got the project to work as I intended.

I then worked on refining the look of the LED and wiring it up for my presentation. I’m pretty happy with the final result.

IMG_2952
IMG_2989

I hope to continue working on this project and finish it up as a standing desk lamp.

Spin Switch

For my innovative switch I created a yarn tassle that triggers a LED strip when spun. The inspiration behind the switch came from my background in figure skating. I imagined this to be used when skaters spin and LEDs in their outfits would be activated.

img087DSC_0673

To start, I looked at Leila’s J-Lo spinning toy and did some experiments with springs to understand how to make a connection with centripetal force. Then I learned how to crochet with Natsuki and worked with her to create templates that made stretchy yarn tubes. To make the switch I crocheted conductive yarn into regular yarn and attached hex nuts to give weight at one end. When pulled the resistance in the yarn tube’s conductivity decreases because the yarn is more tightly held together.

DSC_0674 DSC_0665DSC_0492

From there I used the yarn tube as an analog switch to monitor the change in resistance. When pulled the resistance of the switch went from 1000 to under 900. I programmed the change to signal the turning on of an LED. Then I altered the code on a NeoPixels LED strip to create a color swipe.

int ledPin = 9;
int sensorPin = 0;
int threshold = 800;

void setup()
{
pinMode(ledPin,OUTPUT);
Serial.begin(9600);
}

void loop()
{
Serial.println(analogRead(sensorPin));
if (analogRead(sensorPin) < threshold) {
rainbow(20);
}
}

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));
}
if(analogRead(sensorPin) > threshold) {
// Set all LEDs to black
for(i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, 0,0,0);
}
strip.show();

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

The best part of this process was bringing together the NeoPixels LED strip and the analog stretchy switch. I learned to how for loops work and how to break them so that the LED strip turns off once the switch returns to its original, un-pulled state. Because my main goal for the class is to better understand code, I felt like this part of the process was the most challenging and rewarding.

DSC_0491DSC_0494

I also learned to hard wire my wires and switch, but ultimately failed to make the full connections. For the final demo, I ended up using masking tape to hold down all the wires on my breadboard and quickly sewed a pocket belt to encase the parts.

To move forward I’d have to find a way to make this switch wearable and stable so that the centripetal force from the spinner causes the switch to pull. For now, swinging the switch works just fine.

<p><a href=”http://vimeo.com/111701202″>Making Studio: Centripetal Force Switch</a> from <a href=”http://vimeo.com/edenlew”>Eden Lew</a> on <a href=”https://vimeo.com”>Vimeo</a&gt;.</p>

Light Slide (Oscar de la Hera Gomez)

Greetings !

Todays project concept was to create an innovative switch that activates when a ball passes by it. This idea was originally inspired by the following video, which incentivised me to create an electronic musical ball slide, which would activate when the ball would hit the step, causing the step to light up.

The initial project sketches for the musical slide are shown below and involved a series of components which would act as support for the slide. LED strips would be placed in a smaller inner piece, which would be activated via Arduino when the infrared sensors would be triggered. This inner piece was split into two parts to ensure that it could be supported by the inner structure. Additionally,  the components that would hold this inner piece would include a small hole at the bottom of the frame, to allow the wires to go through, with the intention of cloaking the majority of the design.

IMG_20141105_115232_edit1

Drawing

The components were then designed in Illustrator to the measurements from the sketches and were laser cut to ensure maximum accuracy. The results of this process is shown below !

IMG_20141105_115652_Edit1
Components

The next stage of the process was the most challenging of all. How would I bend the plastic to ensure that it would match the laser cut curve ? Although I admit that I should have first bent the plastic and then laser cut the curve, I must say that this experience was extremely rewarding and satisfying. The process shown below demonstrates how the curve was achieved and is the result of four attempts !

The ‘centerpiece’ was place between a jig in such a way that the curve start point would match the edge of the jig. The piece was duct taped to the jig to ensure that little movement would occur.

IMG_20141105_131452_edit1
Placing the Center Piece

The pipe was the attached to the jig and was placed in such a way that the centreline matches the line drawn of on the on the centrepiece. The piece was then heated up until it began to bend and was then adjusted very slowly, applying pressure from ‘centreline’-up to ensure a perfect bend.

IMG_20141105_131827_edit1
Heating the centrepiece

For those attempting to replicate this process, please be patient. One must heat up and cool down the component various times to ensure a perfect curve. The result of this process is shown below.

IMG_20141105_132551_edit1
That curve.

And as promised, the curves matches the bend !

 

IMG_20141105_130746_edit1
Aligned to perfection.

It was at this point that I had to redesign the slide as the initial components would not allow the infrared components to sit at the right points. So I decided to scrap the inner components and go for a hollow design. Additionally, due to budget issues I decided to use big LEDs instead of LED strips as they would not require an alternate 12 V power source and could run of my computer power. Finally, due to losing my code in the last second I could not include the musical effect when the lights were triggered.

The next step involved putting all the pieces together. This was done using a duct tape to hold the piece at the right place and a glue gun to stick the parts together.

IMG_20141106_121416_edit1 IMG_20141106_121423_edit1

 

The components were then soldered to wires and were taped onto the holes to ensure that I could reuse the components at a later date. The LEDs where then also soldered onto wires and taped on off the sensors to allow them to hang off in the air, in the middle of the design, allowing maximum illumination.

IMG_20141106_144645_edit1
Soldering the LEDs

Here is the final result!