Archives for the month of: December, 2012

Hive 240 by Yin Liu, Michael Uzzi, Chris Egervary, and Alex Olivier

Constructing the Hive

We talked about several construction methods/materials including wood, acrylic, etc..  In the end, we settled on using light-weight materials that would be easy to mount on the wall in the lobby of 240 Central Park South.  To maximize reconfigurability, we decided to create “mini-hives” of three honeycombs, which we could then attach together on the wall.  Chris CNCed blue foam bases that could accommodate a hexagonal piece of acrylic while still providing some room for electronics in back.  He also CNCed some nice wooded frames to fit over the front of the honeycombs.

 Yin and I lasercut acrylic pieces of various colors (white, frosted) to give the hive a bit more organic, less uniform look.  We also cut pieces of orange acetate to fit over the acrylic.

Image

 

Yin and I also lasercut foam core backs to fit over each of the units, with a small hole to fit an LED.  We assembled all of the pieces using wood glue!

Lastly, we wirewrapped white LEDs to header pins so that we could plug them into our breadboard later.  Things got a little messy…

Image

Coding the Hive

To program the behavior of our hive, we had to do a few different things.  First, we had to somehow get data from our iDigi data stream (which comes in XML format) and extract out the relevant bits.  I modified another XML parser to allow our Arduino to extract important data points.  

We also needed to control the animation of our LEDs.  We used TLC 5940 LED drivers (wired according to the datasheet), which have PWM control.  Below is the code for the entire installation:

//////////////////////////////////////////////
// Get XML formatted data from the XIG. Use it to control LED Driver.
// Original Code from Bob S.
// Modified by Alex Olivier, 12/12/2012.
//////////////////////////////////////////////

// Include description files for other libraries used (if any)
#include <string.h>
#include “Tlc5940.h”
#include “tlc_fades.h”

TLC_CHANNEL_TYPE channel;

// Define Constants
// Max string length may have to be adjusted depending on data to be extracted
#define MAX_STRING_LEN 40

// Setup vars
char tagStr[MAX_STRING_LEN] = “”;
char dataStr[MAX_STRING_LEN] = “”;
char tmpStr[MAX_STRING_LEN] = “”;
char endTag[3] = {‘<‘, ‘/’, ”};
int len;
boolean getData = false;

// Flags to differentiate XML tags from document elements (ie. data)
boolean tagFlag = false;
boolean dataFlag = false;
unsigned long time;

//for leds
uint16_t duration =2000; //default LED speed

void setup()
{
Tlc.init(); //initialize LED Driver code
time = 0;
Serial.begin(115200);

}

void loop() {

if ((millis() – time > 30000)|| time == 0){ // sample every 30 s
Serial.println(“http://itpatnyu:Interact4u!@my.idigi.com/ws/DataPoint/dia/channel/00000000-00000000-00409DFF-FF521E03/XBee_4079C120/average_amplitude_front?rollupInterval=hour&rollupMethod=average&#8221;);
time = millis();
}

// code for controlling LEDs
if (tlc_fadeBufferSize < TLC_FADE_BUFFER_LENGTH – 2) {
if (!tlc_isFading(channel)) {
int maxValue = 4095;
uint32_t startMillis = millis() + 50;
uint32_t endMillis = startMillis + duration;
tlc_addFade(channel, 0, maxValue, startMillis, endMillis);
tlc_addFade(channel, maxValue, 0, endMillis, endMillis + duration);
}
if (channel++ == NUM_TLCS * 16) {
channel = 0;
}
}
tlc_updateFades();
}

// Process each char from web
void serialEvent() {
while (Serial.available()) {

// Read a char
char inChar = Serial.read();

if (inChar == ‘<‘) { // a tag is starting
//Serial.println(“tag!”);

if (getData == true){ // if we’re done getting the data chars
getData = false;
double dataNum = atof(dataStr); // convert chars to a double

// map sound data to LED animation speed
int clippedData = constrain(dataNum, 400, 800);
int lightDelay = map(clippedData, 400,800, 1000, 7000);
duration = lightDelay;;
clearStr(dataStr); // flush out data string

}else{

addChar2(inChar, tmpStr); // if it’s not data, start adding the chars to the other string
tagFlag = true;
}

}else if (inChar == ‘>’) { // we’re done with this tag

addChar2(inChar, tmpStr);
tagFlag = false;

if (strcmp(tmpStr, “<data>”)==0){ // is it a data tag
getData = true; // get data until the next < tag.
}
clearStr(tmpStr);

}else if (tagFlag == true){
addChar2(inChar, tmpStr);

}else if (getData == true){
addChar2(inChar, dataStr);
}
}
}

/////////////////////
// Other Functions //
/////////////////////

// Function to clear a string
void clearStr (char* str) {
int len = strlen(str);
for (int c = 0; c < len; c++) {
str[c] = 0;
}
}

//Function to add a char to a string and check its length (Alex version)
void addChar2 (char ch, char* str){

str[strlen(str)] = ch;
}

// Function to check the current tag for a specific string
boolean matchTag (char* searchTag) {
if ( strcmp(tagStr, searchTag) == 0 ) {
return true;
} else {
return false;
}
}

Installing the Hive

Luckily, we were able to install brackets on the walls of the lobby hallway.  Our piece was very light, so it wasn’t terribly tricky to hang out.

Image

Here’s the final piece, notice the laser-engraved label (which also hides our electronics!).

Image

Here’s the hive on the wall:

Image

 

Video coming soon!

 

Advertisements

bacon tbone

P1160253 P1160257 P1160260 P1160269 P1160287 P1160308 P1160314 P1160324

ImageImageP1020003

For my tech crafts final, I wanted to explore the idea of creating a modular, re-configurable ring oscillator circuit. I made 20 “barnacles”, each with an LED, a MOSFET, and an RC circuit.  These barnacles can be connected together to create larger ring oscillators.

Each circuit was made on a flat wood surface using copper tape.

ImageImageImage

In the end, my barnacles worked but ideally would be redesigned to be more intuitive.  I found that clipping the barnacles together was too awkward to accomplish the effect that I wanted.  Here’s an example of three hooked together.

For my Tech Crafts class, we were asked to experiment with EL Wire.  Originally, I wanted to make an word necklace with very fine “angelhair” EL Wire (inspired by this neon installation).  Not wanting to wait to order more parts, I decided to make a pillow instead, using some thicker gauge EL Wire I snagged from ITP’s junk shelf.

First step, I had to sew a pillow!  I used a thick black velvet and a sewing machine to sew three sides of my pillow.  I left the fourth side open so that I could secure the electronics and hand sew it closed later.

My EL Wire was already attached to a driver so there was no need to solder to it.  I added some heat shrink tubing at the end of the EL Wire to insulate where it had been trimmed.  I cut a tiny hole in the velvet and pulled the wire through.  I wrote a word on my pillow in chalk and carefully stitched the EL Wire to fit the chalk drawing.

Since I planned on putting this pillow on my bed, I didn’t want to have it on all of the time.  I decided to put a reed switch between a 9 volt battery and the power to the driver.  That way, I could turn the pillow off and on using a magnet.  Because my pillow says “bite”, I made a small felt apple with a magnet inside and attached it to the corner of the pillow.

For some reason, my reed switch occasionally sticks on.  I think it might be temporarily magnetized…but it seems to work well most of the time!  If I had to do this pillow again, I might switch to using fishing line to sew on the EL Wire to make it less visible.

.P1010134P1010136

Here‘s a video of the final project!