Showing posts with label Dailey. Show all posts
Showing posts with label Dailey. Show all posts

Tuesday, December 13, 2011

More Videos from Crit

Documentation of Lin's piece


Documentation of Sam's piece


Documentation of Netalia's piece



Documentation of Dailey's piece

Saturday, December 10, 2011

Crit Day Movies

These are a couple of videos from crit day.

Monday, November 28, 2011

And Gas Class

You can't see the numbers too well...but it increased every time Netalia or Dailey breathed on it. I just sat back in a dignified position making sure they breathed well.
 
And...ALCOHOL! And again, you can't see the numbers, but they fluctuate upwards as the alcohol napkin is waved  by the sensor.

Monday, November 21, 2011

Wednesday, November 9, 2011

Wednesday, November 2, 2011

Jim Campbell

We looked at a couple of his works that used light bulb LED grids, including the Madison Square Park one that showed humans, another that showed more recognizable figures in a gallery setting and another gallery piece with birds. An article says he thinks about pixels and about expanding images out from their original forms- so conceptually, the Madison Square piece was about describing human movement in a city setting in a highly urban medium, light, but also, technically, about translating flat footage captured with a camera into an unexpected, three-dimensional image installation. So, we think it's art that isn't immediately understandable to the general public, but still fun, who doesn't like lights :)

Project 21 and 22







Here are our attempts at the LED matrix Projects 21 and 22. We seem to have everything set up correctly, however, there must be a problem somewhere in our wiring as the LED Matrix keeps shutting off at different intervals. We got the scrolling text to work to an extent, but the Pong one was a lost cause (for today).

Temperature Sensors



Man, this thing is touchy....

Monday, October 17, 2011

Touch Button's Colin Style- Our Sensor Video

Some success... and some epic failure

This past Friday, Natalie and I were all set to go with installing our bench at an actual bus stop. We set out with our Arduino and speakers that we put in a nice little box to fit underneath the bench. We had decided to install at a smaller bus stop along Museum road, and we had gone out right after a class change, so there were not a whole lot of people out, which was perfect for installing. After asking an angry Asian girl on her cell phone to move off of our prospective bench and after some wrestling, we finally got everything into place and we supposedly set to go.

And that was when the problems began.

Our apparatus is brown, which matches the paint on the benches pretty closely. However, we did not take into account that some of the benches were not in good repair and that the paint was chipped off, making our apparatus much more conspicuous that we had originally hoped.

Natalie sat on the other bench about 15 feet away with her video camera hidden in her backpack while I sat on the bench with a voice recorder. I was sitting on the sensor, and... it wasn't going off, which was unfortunate, because some guy came and sat down on the bench next to me. When he sat down, he noticed the apparatus and started picking at it, so I tried to explain to him that it was a project, and that it wasn't working. I got up and checked the box with our equipment and noticed that the soldering on one of the battery terminals had broken. We quickly taped it up and fixed it.

Natalie resumed her position on the far bench while I sat on the sensor. This is when we realized we had another problem. The audio was playing, however, there was an error in the programming that caused the bench to continually play all the different clips while I was sitting on it and the contacts were touching. When I got up to tell Natalie, trouble arose...

In the five seconds that I had gotten off of the bench, some middle-aged dude came over to our bench to sit down. The apparatus came un-taped and rose up slightly. Instead of deciding not to sit on the bench, this guy proceeds to forcefully RIP our apparatus off of the bench, as if he were pulling some giant weed. Natalie and I watched in horror while this was happening, and we decided to pack up and call it a day.

The damage he did was not too extensive. One of our contacts became unglued and a little bit of the soldering had broken, however, we were able to repair the physical damage. We also went back to the code and fixed it.

So the main lesson that we learned was that our project is not public-proof. We are also trying to find a bus stop bench in better repair and plan to tape it down better next time. It is also important to supervise the project while it is on the bench. Unfortunately we didn't get the guy on film who destroyed our stuff, but I hope this account of it was amusing enough.

Needless to say, it was a failure, but we now have a few more considerations for our final project.

Saturday, October 15, 2011

Bench Fritzing Circuit


Here is the Fritzing diagram for our bench project. We relied on a wave shield for our project, and Fritizing doesn't have that part, so let's use our imaginations here and pretend that it's a wave shield. Otherwise, Fritzing is pretty neat.

Wednesday, October 12, 2011

And Just About Ready to Set Up At Bus Stop - Natalie, Netalia, Dailey

Finished circuit set up:
Finished Code:
/*
NOTES:
 contact1 to digital 6 and 5V
 contact2 to digital 7 and 5V
 contact3 to digital 8 and 5V
 speaker to digital 9
 
 do note: requires waveHC library
 
 !!all audio needs to be 22KHz 16-bit .wavs at the most!!
 */
int contact1 = 6;
int contact2 = 7;
int contact3 = 8;
#include <WaveHC.h>
#include <WaveUtil.h>

SdReader card;    // This object holds the information for the card
FatVolume vol;    // This holds the information for the partition on the card
FatReader root;   // This holds the information for the volumes root directory
FatReader file;   // This object represent the WAV file 
WaveHC wave;      // This is the only wave (audio) object, since we will only play one at a time

// time to play each tone in milliseconds
#define PLAY_TIME 61000

// Define macro to put error messages in flash memory
#define error(msg) error_P(PSTR(msg))
/*for test melody
 #include "pitches.h"  //this is just for testing noise
 int melody[] = {
 NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};
 int noteDurations[] = {
 4, 8, 8, 4,4,4,4,4 };  // note durations: 4 = quarter note, 8 = eighth note, etc.:
 */
void setup() {
  Serial.begin(9600);
  pinMode(contact1, OUTPUT);
  pinMode(contact2, OUTPUT);
  pinMode(contact3, OUTPUT);
  pinMode(9, OUTPUT);
  if (!card.init()) error("card.init");
  // enable optimized read - some cards may timeout
  card.partialBlockRead(true);
  if (!vol.init(card)) error("vol.init");
  if (!root.openRoot(vol)) error("openRoot");
}

void loop() {
  int val1 = digitalRead(contact1);     //this is technically unnecessary, but seems to work better, so whatever
  int val2 = digitalRead(contact2);  
  int val3 = digitalRead(contact3);
  if (val1 == HIGH | val2 == HIGH | val3 == HIGH){
    Serial.print("contact1:  "); //so we can see what's going on, but only if contact is made, otherwise it'd be a madhouse
    Serial.println(val1);  
    Serial.print("contact2:  ");
    Serial.println(val2);
    Serial.print("contact3:  ");
    Serial.println(val3);
  }
  delay(20);  //slight delay between contact and play
  if (val1 == HIGH | val2 == HIGH | val3 == HIGH){ 
    /*PgmPrintln("Index files");
    indexFiles();

    PgmPrintln("Play files by index");
    playByIndex();
*/
PgmPrintln("Play files by name");
playByName();

    /*test melody
     for (int thisNote = 0; thisNote < 8; thisNote++) {
     int noteDuration = 1000/noteDurations[thisNote];
     tone(8, melody[thisNote],noteDuration);
     int pauseBetweenNotes = noteDuration * 1.30;
     delay(pauseBetweenNotes);
     }
     */
    delay(500);   //this will make it so if two people sit down almost at the same time, only one sound will play, but who knows 
  }
  else {
  }
}
/*
 * print error message and halt
 */
void error_P(const char *str) {
  PgmPrint("Error: ");
  SerialPrint_P(str);
  sdErrorCheck();
  while(1);
}
/*
 * print error message and halt if SD I/O error, great for debugging!
 */
void sdErrorCheck(void) {
  if (!card.errorCode()) return;
  PgmPrint("\r\nSD I/O error: ");
  Serial.print(card.errorCode(), HEX);
  PgmPrint(", ");
  Serial.println(card.errorData(), HEX);
  while(1);
}
/*
char fileLetter[] =  {
  '0', '1', '2', '3', '4', '5', '6', 
  '7', '8', '9', 'A', 'B', 'C', 'D', 'P', 'S'};

// index of DTMF files in the root directory
uint16_t fileIndex[FILE_COUNT];
*/
/*
 * Find files and save file index.  A file's index is is the
 * index of it's directory entry in it's directory file. 
 */
/*void indexFiles(void) {
  char name[10];
   
   // copy flash string to RAM
   strcpy_P(name, PSTR("DTMFx.WAV"));
   
   for (uint8_t i = 0; i < FILE_COUNT; i++) {
   
   // Make file name
   name[4] = fileLetter[i];
   
   // Open file by name
   if (!file.open(root, name)) error("open by name");
   
   // Save file's index (byte offset of directory entry divided by entry size)
   // Current position is just after entry so subtract one.
   fileIndex[i] = root.readPosition()/32 - 1;   
   }
  PgmPrintln("Done");
}
 // Play file by index and print latency in ms
void playByIndex(void) {
  for (uint8_t i = 0; i < FILE_COUNT; i++) {
    // start time
    uint32_t t = millis();
    // open by index
    if (!file.open(root, fileIndex[i])) {
      error("open by index");
    }
    // create and play Wave
    if (!wave.create(file)) error("wave.create");
    wave.play();
    // print time to open file and start play
    Serial.println(millis() - t);
    // stop after PLAY_TIME ms
    while((millis() - t) < PLAY_TIME);
    wave.stop();
    // check for play errors
    sdErrorCheck();
  }
  PgmPrintln("Done");
}*/
#define FILE_COUNT 6      //change these two things for audio files
char fileLetter[] =  {'0', '1', '2', '3', '4', '5'}; 
int i = 0;
void playByName(void) {
  char name[10];
  // copy flash string to RAM
  strcpy_P(name, PSTR("ABBAx.wav"));
//  for (uint8_t i = 0; i < FILE_COUNT; i++) {
    // start time
    uint32_t t = millis();
    // make file name
    name[4] = fileLetter[i];
    Serial.println(name);
    // open file by name
    if (!file.open(root, name)) error("open by name"); 
    // create wave and start play
    if (!wave.create(file)) error("wave.create");
    wave.play();
    // print time
    Serial.println(millis() - t);
    // stop after PLAY_TIME ms
    while((millis() - t) < PLAY_TIME);
    wave.stop();
    // check for play errors
    sdErrorCheck();
    i++;  //this was me, so it plays next file next person
    if (i == FILE_COUNT) {
      i = 0;
    }     //this will make it start over when it hits last defined file
//  }
  PgmPrintln("Done");
}