Get Back! Brooch


1. Team Ahaar – The Get Back! Brooch
Oomung, Phuong Anh, Tzu-Ching and André

2. Ideal Product:

Get Back! is a brooch/pendant that visually and audibly shows the comfortable amount of personal space by the user. It uses a built-in infrared sensor to judge distance, and a Neopixel to show different colors. With these pieces, the product would judge the distance between the user and another person, and glow green to indicate acceptable, yellow to indicate discomfort, red to indicate anxiety, and pulsing red to indicate panic depending on distance. Ideally, it can also:

  • Produce sounds when others are getting too close to the wearer
  • Have an on/off switch
  • Allow the wearer to set his/her own comfortable distance

Ideal User Scenario:

We envision this product as a discreet, daily wearable for those with crowd anxiety disorders, personal space issues, or women subject to subtle harassment by unknowingly aggressive people. This product would be switched on continually throughout the day, and act as a social advocate of sorts, alerting others to their behavior in a subtle way without pressuring the user to do so themselves.

A user scenario could be a young man with anxiety who wears the product as a lapel pin on his suit jacket. During a normal day at the office, whenever a colleague got uncomfortably close, the product would flash and alert them to slightly back away, at once restoring personal space for our young man and avoiding embarrassment for his colleague.

Where the Product Would Be Sold:

This product would be marketed as a “smart” fashion accessory, and could be sold at premium menswear clothiers, women’s fashion boutiques, and department stores.

3. The technical steps to our prototype:

  1. Design the look
    IMG_6177 copy.jpg
  2. Design the circuit diagram
  3. Code it
  4. Get the materials: Sharp IR Distance Sensor, Neopixel ring (12 x WS2812 5050 RGB LED Ring), plastic case for the dome, 3D model design and some wires
  5. Construct the device
    • Solder wires
    • 3D model and printed case
    • Attach everything together


We had some run-ins with the sensor not working properly as it was placed behind the transparent dome. Thus, we decided to sawed the front off. And it worked!!


Our circuit

4. If given more time on this project, we would:

Work out a way to hide all of the wires and it would have a small battery pack encased with the Neopixel.

5. By building this project, we learned:

How to design a form with the intention of a circuit board inside. We also learned to troubleshoot and try to fix the problems that came up along the way (both in coding and the process of making the casing and attaching all the parts together.

Oomung’s experience: Every time the code was iterated upon to solve old problems, new ones arose. This experience reaffirmed the difficulty and importance of coding and bug-testing. The key element for me was understanding the use of arrays to generate an average ‘smooth’ input from the raw and glitchy analog input. Also, understanding the circuit board and electronic components helped in form development, wherein our design fit together all the pieces while maintaining our core sense of aesthetics.

6. Other potential applications

  • Mounted on a wall next to paintings in a gallery, to let people know if they’re being too close
  • Late night protection wear on the back: warning people with bad intention that the wearer is aware they are there.
  •  Don’t touch my hairpin

7. Our code

/this code requires the Sharp.IR code libary and a sharp ir sensor, the VFL has them to lend out
//this specifies what model and pin the sensor is on, i called it sensor
SharpIR sensor(GP2YA41SK0F, A2);

#ifdef __AVR__
#include <avr/power.h>

#define NUM_LEDS 12

#define BRIGHTNESS 5

const int numReadings = 50;

int readings[numReadings]; // the readings from the analog input
int readIndex = 0; // the index of the current reading
int total = 0; // the running total
int average = 0; // the average

//you all know what this is

#define PIN 6

//specify the which type of neopixel strip this is, RGBW
Adafruit_NeoPixel strip = Adafruit_NeoPixel(12, PIN, NEO_GRB + NEO_KHZ800);

void setup()
strip.begin();; // starts with all the pixels off
// initialize all the readings to 0:
for (int thisReading = 0; thisReading < numReadings; thisReading++) { readings[thisReading] = 0; } } void loop() { // subtract the last reading: total = total - readings[readIndex]; // read from the sensor: readings[readIndex] = sensor.getDistance(); // add the reading to the total: total = total + readings[readIndex]; // advance to the next position in the array: readIndex = readIndex + 1; // if we're at the end of the array... if (readIndex >= numReadings) {
// ...wrap around to the beginning:
readIndex = 0;

// calculate the average:
average = total / numReadings;
// send it to the computer as ASCII digits

delay(1); // delay in between reads for stability

//an if+else reacting to 3cm-10cm distance with a specific color for every individual pixel

//first led
if (average >22) {
strip.setPixelColor(0,strip.Color(0, 217, 0));;
} else {
strip.setPixelColor(0, 0);;

//second led
}if (average == 22) {
strip.setPixelColor(1,strip.Color(10, 217, 0));;
} else {
strip.setPixelColor(1, 0);;

//third led
}if (average == 21) {
strip.setPixelColor(2,strip.Color(30, 190, 0));;
} else {
strip.setPixelColor(2, 0);;

//fourth led
}if (average == 20) {
strip.setPixelColor(3,strip.Color(60, 150, 0));;
} else {
strip.setPixelColor(3, 0);;

//fifth led
}if (average == 19) {
strip.setPixelColor(4,strip.Color(150, 120, 0));;
} else {
strip.setPixelColor(4, 0);;

//sixth led
}if (average == 18) {
strip.setPixelColor(5,strip.Color(150, 100, 0));;
} else {
strip.setPixelColor(5, 0);;

//seventh led
}if (average == 17) {
strip.setPixelColor(6,strip.Color(150, 70, 0));;
} else {
strip.setPixelColor(6, 0);;

//eighth led
}if (average == 16) {
strip.setPixelColor(7,strip.Color(150, 60, 0));;
} else {
strip.setPixelColor(7, 0);;

//ninth led
}if (average == 15) {
strip.setPixelColor(8,strip.Color(150, 40, 0));;
} else {
strip.setPixelColor(8, 0);;

//tenth led
}if (average == 14) {
strip.setPixelColor(9,strip.Color(180, 20, 0));;
} else {
strip.setPixelColor(9, 0);;

//eleventh led
}if (average == 13) {
strip.setPixelColor(10,strip.Color(217, 0, 0));;
} else {
strip.setPixelColor(10, 0);;

//twelvth led
}if (average <=12) {
strip.setPixelColor(11,strip.Color(0, 217, 0));;
} else {
strip.setPixelColor(11, 0);;



Shhhhhhhhhh! ambient sound sensor

Team: Xuan, Rhea, Hannah, Micah


The code is working and the lights are reactive to sound. Unfortunately, the fill lights in the background are not working, there may be a wiring issue. It will have to be looked into later.


It doesn’t quite work, but it will soon! We were pretty ambitious with the design of this project and perhaps aimed a bit too high for the “rough prototype” level. But it’s just so pretty and we’re pretty proud. Below are the pictures of the prototype of the model:


Continue reading “Shhhhhhhhhh! ambient sound sensor”

Bubble Experience Fail? 😰

Team 👻 Group Member Names: John Boran, Evie Cheung, Eugenia Ramos, Yangying Ye


In an Ideal World: An Uplifting, Immersive Bubble Experience

If our project had worked as planned, this motion-sensor bubble machine would be great in multiple settings. It could be used for the following:

+ To bring delight to children at a hospital and be an uplifting reminder against the typical, drab hospital environment Continue reading “Bubble Experience Fail? 😰”

North Studio Temperature Reader

Hello fellow makers!

Two weeks ago, the CANduit group proposed three concepts for sensing an undesired behavior or environment. Our four group members all belong to the North Classroom at SVA Products of Design, which is notoriously known for being the coldest of studios, and although cannot solve this temperature problem, we are choosing to bring attention to the drastic range of temperatures one experiences in the studio.

To do this, we created a hanging lighting device that emits sound when the room’s temperature exceeds and dips below a particular degree. The device consists of a red and blue light, of which represent “warm” and “cold”. Warm temperatures trigger the red light to shine while Johnny Cash’s “Ring of Fire” plays for 10 seconds. Similarly, cold temperatures trigger the blue light to shine while “Cold Cold Cold” by Cage The Elephant plays for 10 seconds.

To start our process, we explored how our temperature sensor worked when exposed to heat and ice.

An ice cube being applied to the temperature sensor
Our LED and Temperature Sensor set-up

To add sound, we purchased a soundboard (Adafruit Audio FX Mini Sound Board – WAV/OGG Trigger – 2MB Flash) and amplifier (Adafruit Mono 2.5W Class D Audio Amplifier) This particular soundboard does not have any code, and works like a standard USB drive – you can drag and drop your files onto the soundboard.

Soundboard, speaker, and LED setup. The LEDs were quite dim when we tried to light 6, so we decided to use only one red and one blue LED.


In order to hang our device with little mess, we used a tubed-netting fabric to keep our wires together. These wires will be soldered to each of our LEDs and to the speaker. Our Arduino board and other bulky parts will be mounted on a sheet of plexiglass, as to be concealed. LEDs will inhabit a small plastic sphere that will hang from the ceiling.

The hanging cord will run from the LEDs, through the plexiglass mount, and along the wall until it reaches an outlet/power source.

Screen Shot 2017-11-06 at 1.01.57 PM.png

Currently, we are having a hard time completing our code in the way that we would like our system to work. Adjusting the temperature does trigger our songs to play, but in a loop. We would only like for our song to play only once, not continuously until the temperature is triggered in the opposite direction (hot –> cold).

Because our DigitalWrite statements, the ones that trigger music to play, exist within our loop, once the trigger has started, the music is repeated. Despite telling our code to stop playing after one time, our trouble still lies in figuring out how to stop the music from playing after the audio clip has finished.

Team Sense – Sound Snitch

Team Sense:
Gustav, Zihan, Sophie and Antya
What the ideal finished version of this product would be like/who’s it for:
Our ideal version of the product would have a different microphone; it would need to be more powerful to be able to catch when you are loud more precisely. Our light output could also be more potent so you could be able to see it from across the room or have the materials expand the light. It would also be important for the user to have access to change the threshold range so that they could select what they considered as unacceptable noise.
Regarding the materials, it would need to be made out of some plastic, maybe ABS or a similar one and it should have an opaque part and a transparent one so that the light can shine through. Ideally, it would be integrated with the speakers or even to your phone.
It would be focus towards young people who live in apartments or live in proximity to their neighbors, or teenagers even as they tend to be the loudest.

The technical steps you took to achieve your prototype:

We first came up with the idea to make a product which helped let someone know when they are playing music too loud.

The first step was to figure out the coding and try to understand the mic and coding for the mic. Once we got the mic to work with coding found from Becky’s recommendation, we decided to use a pixel stick as it would be bright enough to send off a visual sort of alarm to the person playing music too loud.

We played around with the coding for many hours and finally were able to figure out the right “if statements” and the right threshold for the volume of sound we wanted the sensor to react to.

We decided we wanted the design of the product to look somewhat like a fire alarm, where it would be white and mounted on the wall. We built our prototype for this out of wood and painted it white and made it so that the breadboard and circuit could fit nicely inside of the box with a transparent plastic on top for the light to shine through. Below are some of our process photos:

SoundSnitch2 from Antya Waegemann on Vimeo.


What did you learn from building this project?

Even though the whole mechanism is quite simple, there are still details needed to be work on very well in order for it to work properly. For example, we needed to transfer the measurement volume of the sound from the numbers in the Arduino code to the decibel in real life. This was something what we did not fully expect. How we completed that was to using a sound measuring app to measure the volume of some music we thought to be on a level exceeded which would be annoying. So even to make a very simple ideas into application, many unexpected details will need to taken care off.

What you would do next/differently if given more time on this project:

If we had had more time, then we would have incorporated an app remote into our project.

This would have allowed for the user to adjust the threshold. Thereby, the user would be able to customize the product to their need and linking.

Furthermore, it would be interesting to explore the input sensor our product and utilizing the output possibilities build within the smartphone.

Maybe, we could make the phone vibrate, when the threshold was reached?


 // NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// released under the GPLv3 license to match the rest of the AdaFruit NeoPixel library

#ifdef __AVR__
#include <avr/power.h>

// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1
#define LED_PIN1            (5,6)
// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS      16
// Defining the mic
#define SAMPLE_WINDOW 33 // Sample window width in mS (33 mS = ~30 Hz)
#define MIC_PIN       A1 // ANALOG pin # where microphone "OUT" is connected
#define THRESHOLD     625

// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals.
// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest
// example for more information on possible values.
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, LED_PIN1, NEO_GRBW + NEO_KHZ800);

  int delayval = 200; // delay 

  void setup() {
  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
  #if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  // End of trinket special code
  // Start mic setup
  pinMode(LED_PIN1, OUTPUT);
  // initialize serial communication at 9600 bits per second:
  // make the pushbutton's pin an input:
  pinMode(MIC_PIN, INPUT);

  pixels.begin(); // This initializes the NeoPixel library.

  void loop() {
int inputaudio = analogRead(MIC_PIN);
  // For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.
if (inputaudio > THRESHOLD){
  Serial.println("Threshold has been exceeded");
  for(int i=0;i<pixels.numPixels();i++){

  // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
    pixels.setPixelColor(i, pixels.Color(255,0,0)); // Moderately bright green color.

  //; // This sends the updated pixel color to the hardware.
  //delay(delayval); // Delay for a period of time (in milliseconds).
  //pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
  //pixels.setPixelColor(i, pixels.Color(0,0,0)); // Moderately bright green color.
  //; // This sends the updated pixel color to the hardware.

  //delay(delayval); // Delay for a period of time (in milliseconds).

  }; // This sends the updated pixe
  delay(delayval); // Delay for a period of time (in milliseconds).
  for(int i=0;i<pixels.numPixels();i++){

   // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
   pixels.setPixelColor(i, pixels.Color(0,0,0)); // Moderately bright green color.
}; // This sends the updated pixe
  delay(delayval); // Delay 

//  // Listen to mic for short interval, recording min & max signal
//  unsigned int signalMin = 1023, signalMax = 0;
//  unsigned long startTime = millis();
//  while((millis() - startTime) < SAMPLE_WINDOW) {
//    int sample = analogRead(MIC_PIN);
//    if(sample < signalMin) signalMin = sample; //    if(sample > signalMax) signalMax = sample; 
//    { 
//    int peakToPeak = signalMax - signalMin; // Max - min = peak-peak amplitude
//  int n = (peakToPeak -1) / 4;          // Remove low-level noise, lower gain
//  if(n > 50)    n = 50;                 // Limit to valid PWM range
//  else if(n < 0) n = 0;
//  analogWrite(LED_PIN1, n);   // And send to LEDs as PWM level
//  // read the input pin:
//  int buttonState = digitalRead(MIC_PIN);
//  // print out the state of the button:
//  Serial.println(buttonState);
//  delay(1);        // delay in between reads for stability 
//  }
//  }

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=”″>Cutie hats – Proof of Concept</a> from <a href=”″>karen vee</a> on <a href=””>Vimeo</a>.</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:


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:





And here is how it turned out:


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…









And then, it was all done 🙂


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;

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;

#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();; // 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);


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);

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);
else if ((valRF==1) &amp;&amp; (valRB==0) &amp;&amp; (valLF==1) &amp;&amp; (valLB==0)){ //Both Toes – Rainbow

//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);

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++){

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));

//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


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.



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.
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.
After painstakingly cutting out the vinyl negatives for both sides of the LED, I sanded the block of aluminum to prepare it for etching.
I used transfer paper to apply the vinyl onto the battery surfaces.
I added a wire to the block to connect to the hot lead of the battery.
And then I wrapped the rest of the block in electrical tape.
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.
When we finally connected everything, the exposed galvanized steel immediately began bubbling.
After a couple minutes, the water became pretty black and gross as the galvanized coating was removed.
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.

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.


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