Party Platter Player

Members:

Sam Meyer
Nisha Pathak

Components:

  • 1 table
  • 1 tray (we will build a special tray which facilitates the capabilities we will need)
  • 1 disco ball
  • 1 LED diffuser (TBD)
  • 6 plates (will be made from a variety of materials – glass, paper, styrofoam)
  • 6 meals/snacks
  • 6 FSRs for plates
  • 20 light sensors for tray
  • 1 Windows Surface for tray sound (already owned)
  • 1 laptop for table sound

We will create a party tray which controls the start and end of a party through various light and sound effects. The tray, outfitted with light sensors, will react when plates are placed on top of it. When the tray is lifted, a disco ball starts spinning and LEDs on the table light up and move through a sequence of color combinations. Based on the number and location of plates, we will play a musical beat and/or melody. No music plays until the tray is lifted off the table or until the users take a plate off of the tray. Then, when the plates are replaced back on the tray, the music sounds are eliminated, one by one, plate by plate. Once the tray is placed back on the table, the LEDs turn off and the disco stops spinning, indicating the end of the event.

Cuckoo Clock Lab

Members:

Nisha Pathak
Leah Rosenbaum
Owen Hsiao
Daniel Chen

For this lab, our task was to build “Cuckoo Clock” mechanics. We first drew out specifications for the doors that would open and close using one mechanism. We also wanted the bird’s movement to come from that same force. Initially, our plan was to build sliding doors that would open after pulling a string that was attached to the doors using hooks we created. However, the sliding doors needed stability which we thought could be provided by placing the stationary and moving doors on the same track. But, we found that there was too much friction between the tracks and the bottom and tops of the doors and we couldn’t open the doors in a seamless fashion. What’s more, we found that the hooks we created weren’t stable enough to open the doors. We chose to reevaluate our plan and instead, built a mechanism that would simultaneously push the bird out and open the doors outward. We built stationary boards (supported by “L” shaped pieces of cardboard) to which we connected the doors that would actually open. Using rubber bands and push pins, we adjusted the elasticity of the bands so that the doors would open with ease and would close on their own. The bird was attached to a flat, triangulated piece of cardboard and both of these pieces were connected to a small, wood beam. Using a small hinge, we attached this beam to another piece of wood and created a lever to push the bird through the doors. The lever was attached to a stack of wood pieces and is held together with a rubber band. Finally, in order to get the height we needed, we placed this entire mechanism on top of a tissue box.

Components:

  •      4 wood pieces (6” x 4”)
  •      4 rubber bands
  •      2 small wood beams (1.2” x 6”)
  •      3 wood squares (4”x 3”)
  •      Push pins
  •      Masking tape
  •      Small hinge
  •      Tissue box
  •      Glue
  •      Saw

img_7470 img_7472

 

 

HTC Vive Experience

Using the HTC Vive was my first, true experience with VR. In the past, I’ve used makeshift sets like Google Cardboard but now realized that that was a simple introduction into the true power of VR. I was truly impressed by this technology’s ability to completely transform my world into an underwater shipwreck next to a Blue whale or into an artist’s canvas where I could paint and draw in the air around me. Perhaps what was more fascinating was how realistic and true to a real-world experience using the VR headset actually was. I played fetch with a robot dog and looked over the edge of a cliff all from the basement of South Hall.

To enhance this experience, I think could be helpful to be able to adjust how close or far text and the art canvas appear. For example, one of the screens with text was too close and too large and hurt my eyes to read it. If I had the ability to control the distance between myself and some text, it would have been a more pleasant experience.

The part of my experience I liked least was the weight of the headset. After some time, the weight became too much and I had to remove it. To address it, a design team could revisit the materials used to build the technology, remove the unnecessary components, and they could also design slimmer and more comfortable hardware.

A Colorful Creature of the Future

This lab presented unique challenges that I hadn’t met in earlier assignments. Because of the servo motor’s limited range of movement, I had to find a way to distribute weight in such a way that would encourage the motor to move forward. I researched how bugs and other animals move and the only animals that move in side-to-side fashions (like the servo motor) are sea creatures. That wouldn’t work for this project. I ultimately came up with a creature of the future whose feet are made of tack glides for furniture, a paper towel roll, a chip clip, and a plastic beam and hairclip to help distribute the weight. The creature of the future moves by turning the potentiometer left and right.

Components:

  1. 1 Arduino board
  2. 1 Breadboard
  3. Jumper wires
  4. 1 potentiometer
  5. 1 servo motor
  6. 1 USB cable
  7. 2 tack glides for furniture
  8. several hairclips
  9. 1 chip clip
  10. 1 paper towel roll
  11. Duct tape
  12. small plastic beam
  13. Pipe cleaners to create a Quidditch hoop to tie this back to Harry Potter.

Code:

/*
 * Servo with Potentiometer control
 * Theory and Practice of Tangible User Interfaces
 * October 11 2007
 */

int servoPin = 7; // Control pin for servo motor
int potPin = 0; // select the input pin for the potentiometer

int pulseWidth = 0; // Amount to pulse the servo
long lastPulse = 0; // the time in millisecs of the last pulse
int refreshTime = 20; // the time in millisecs needed in between pulses
int val; // variable used to store data from potentiometer

int minPulse = 500; // minimum pulse width

void setup() {
 pinMode(servoPin, OUTPUT); // Set servo pin as an output pin
 pulseWidth = minPulse; // Set the motor position to the minimum
 Serial.begin(9600); // connect to the serial port
 Serial.println("servo_serial_better ready");
}

void loop() {
 val = analogRead(potPin); // read the value from the sensor, between 0 - 1024
 
 if (val > 0 && val <= 999 ) {
 pulseWidth = val*2 + minPulse; // convert angle to microseconds
 
 Serial.print("moving servo to ");
 Serial.println(pulseWidth,DEC);
 
 }
 updateServo(); // update servo position
}

// called every loop(). 
void updateServo() {
 // pulse the servo again if the refresh time (20 ms) has passed:
 if (millis() - lastPulse >= refreshTime) {
 digitalWrite(servoPin, HIGH); // Turn the motor on
 delayMicroseconds(pulseWidth); // Length of the pulse sets the motor position
 digitalWrite(servoPin, LOW); // Turn the motor off
 lastPulse = millis(); // save the time of the last pulse
 }
}

 

Thoughtless Acts – The Multipurpose Bike

For this assignment, I wanted to find a unique instance of a thoughtless act. I was searching around for an interesting use of everyday objects and it wasn’t until I was at my friend’s house that I found what I was looking for. They keep their bikes stored inside and while it’s in the house, the bike is also used as a paper towel holder, a bike helmet holder, a U-lock holder, a drying rack for damp dish towels and an oven mitt rack. They also keep their bike close to the kitchen so all of the objects it stores are readily available.

 

 

img_7449

The Coffee Cup That Stirs Itself

For this lab, I chose to make a coffee cup that stirs itself. I used the DC motor to power the spinning/mixing of the spoon within the coffee cup and I programmed the potentiometer to control how quickly the spoon stirs the coffee.

Components:

  • Arduino board
  • Breadboard
  • Jumper wires
  • 1 DC motor
  • 1 potentiometer
  • 1 1k resistor
  • 1 diode
  • 1 battery pack

Code:

/*
 * one pot fades one motor
 * modified version of AnalogInput
 * by DojoDave <http://www.0j0.org>
 * http://www.arduino.cc/en/Tutorial/AnalogInput 
 * Modified again by dave
 */

int potPin = 0; // select the input pin for the potentiometer
int motorPin = 9; // select the pin for the Motor
int val = 0; // variable to store the value coming from the sensor
void setup() {
 Serial.begin(9600);
}
void loop() {
 val = analogRead(potPin); // read the value from the sensor, between 0 - 1024
 Serial.println(val);
 analogWrite(motorPin, val/4); // analogWrite can be between 0-255
}

 

img_7446 img_7447

Harry Potter & the Photocell

For this lab, I chose to incorporate Harry Potter into my project once again. This time, I chose to trigger the Harry Potter theme song when you wave your magic wand over the Sorting Hat. When you do, the main song from the movie will play from the hat.

Components:

  1. 1 Arduino Board
  2. 1 Bread board
  3. 1 Piezo speaker
  4. 4 wires
  5. 1 photocell
  6. 1 USB cord
  7. 1 Sorting Hat

 

Code:

/*
 Melody

 Plays a melody

 circuit:
 * 8-ohm speaker on digital pin 8

 created 21 Jan 2010
 modified 30 Aug 2011
 by Tom Igoe

This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/Tone

 */

/*************************************************
 * Public Constants
 *************************************************/

#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978

int potPin = 0;
int val = 0;
int speakerPin = 7;


void setup() {
 pinMode(speakerPin, OUTPUT); 
 Serial.begin(9600);
 Serial.println("ready");

}

void loop() {
 digitalWrite(speakerPin, LOW); 
 val = analogRead(potPin); // read value from the sensor
 Serial.println(val);

 if (val > 750) {
 tone(speakerPin, 493.88, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 659.25, 1500/3);
 delay(1500/3);
 tone(speakerPin, 783.99, 500/3);
 delay(500/3);
 tone(speakerPin, 739.99, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 659.25, 2000/3);
 delay(2000/3);
 tone(speakerPin, 987.77, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 880.00, 3000/3);
 delay(3000/3);
 
 tone(speakerPin, 739.99, 3000/3);
 delay(3000/3);
 
 tone(speakerPin, 659.25, 1500/3);
 delay(1500/3);
 tone(speakerPin, 783.99, 500/3);
 delay(500/3);
 tone(speakerPin, 739.99, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 622.25, 2000/3);
 delay(2000/3);
 tone(speakerPin, 698.46, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 493.88, 5000/3);
 delay(5000/3);
 tone(speakerPin, 493.88, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 659.25, 1500/3);
 delay(1500/3);
 tone(speakerPin, 783.99, 500/3);
 delay(500/3);
 tone(speakerPin, 739.99, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 659.25, 2000/3);
 delay(2000/3);
 tone(speakerPin, 987.77, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 1174.66, 2000/3);
 delay(2000/3);
 tone(speakerPin, 1108.73, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 1046.50, 2000/3);
 delay(2000/3);
 tone(speakerPin, 830.61, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 1046.50, 1500/3);
 delay(1500/3);
 tone(speakerPin, 987.77, 500/3);
 delay(500/3);
 tone(speakerPin, 932.33, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 466.16, 2000/3);
 delay(2000/3);
 tone(speakerPin, 783.99, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 659.25, 5000/3);
 delay(5000/3);
 tone(speakerPin, 783.99, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 987.77, 2000/3);
 delay(2000/3);
 tone(speakerPin, 783.99, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 987.77, 2000/3);
 delay(2000/3);
 tone(speakerPin, 783.99, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 1046.50, 2000/3);
 delay(2000/3);
 tone(speakerPin, 987.77, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 932.33, 2000/3);
 delay(2000/3);
 tone(speakerPin, 739.99, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 783.99, 1500/3);
 delay(1500/3);
 tone(speakerPin, 987.77, 500/3);
 delay(500/3);
 tone(speakerPin, 932.33, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 466.16, 2000/3);
 delay(2000/3);
 tone(speakerPin, 493.88, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 987.77, 5000/3);
 delay(5000/3);
 tone(speakerPin, 783.99, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 987.77, 2000/3);
 delay(2000/3);
 tone(speakerPin, 783.99, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 987.77, 2000/3);
 delay(2000/3);
 tone(speakerPin, 783.99, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 1174.66, 2000/3);
 delay(2000/3);
 tone(speakerPin, 1108.73, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 1046.50, 2000/3);
 delay(2000/3);
 tone(speakerPin, 830.61, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 1046.50, 1500/3);
 delay(1500/3);
 tone(speakerPin, 987.77, 500/3);
 delay(500/3);
 tone(speakerPin, 932.33, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 466.16, 2000/3);
 delay(2000/3);
 tone(speakerPin, 783.99, 1000/3);
 delay(1000/3);
 
 tone(speakerPin, 659.25, 5000/3);
 delay(5000/3);

 } 

 
}

 

 

Sorting Hat

Kitchen Choreography & the Kitchen Workspace

Our main goal is to help those who want to learn how to cook and prepare beautiful meals, improve their skills. We want to help choreograph meals so that all components associated with cooking culminate simultaneously. For example, we will have several timers so you can track and time individual items separately. There’s also a digital display of the recipe on the board and a progress indicator which rewards the cook as they achieve milestones. Finally, another important component of presenting a meal is its plating. We also intend to provide suggestions to the cook so that they can prepare for and present their guests with a well-choreographed meal.

Product goals:

  • To educate someone who wants to learn how to cook how to do it well and to enjoy the process
  • Provide a guide to cooks so that they can plate their meals well

img_20161002_161313 img_20161002_163017 slack-for-ios-uploadkitchen-surface

Truly Experiencing “Noise Cancelling”

Noise cancelling headphones have changed my life for the better and at this juncture, there’s no turning back. However, when I was first introduced to them, I thought they were outrageously priced, not worth the investment, and that they, quite frankly, looked very strange. I even tried on a pair to try to better understand what their benefit was and why anyone would want to invest in them. Even after that, I wasn’t convinced. It wasn’t until I borrowed a pair to use on a cross-country, red-eye flight that I realized their utility. By being able to eliminate a majority of the noise around me on the plane (the engine, nearby conversations, loud children, the loudspeaker), I was able to sleep more deeply and I was also less distracted by the commotion around me. As a result, my red-eye flight was no longer a completely draining experience. I was actually able to enjoy my flight and once I landed, I felt more awake and I was more productive.

The efficacy of these headphones changed the way that I view products that I may not initially understand. For example, if someone had presented me with a cargo cult mock-up of noise cancelling headphones, I would not have understood their utility nor would I have ever thought about buying them. By showing me a representation of the headphones, I would not have been able to understand what kind of noise they eliminate and to what extent. What’s more, because I had no prior knowledge of the power of noise cancelling headphones, I would have doubted their ability to function in the way they promised. In my case, I had to actually experience them in order to fully understand their functionality.

Headphones are ubiquitous in modern day culture. Whether they’re Apple’s signature in-ear white buds, Beats by Dre’s over-ear noise cancelling headphones, or on-ear types, we see them everywhere we go. The fact that I’m able to describe a large variety of headphones indicates that philosopher Jean Baudrillard was right. This product, like many others, has a “sign value” (Blauvelt, 16) and was largely impacted by growth and changes to the design field. These products are no longer used just for listening to music or to mute airplane engines; They also indicate status, brand loyalty, or not wanting to be disturbed.

As our world continues to grow and change, I believe that proper design will play a critical role in improving how we communicate with others and interact with our world. As Andrew Blauvelt said, “Without this ability to integrate objects into our environment, the world would seem a daunting place – an ever-changing visual cacophony” (Blauvelt, 15).

Dots and Dashes with FSR

For this lab, I chose to take a modern approach to Morse Code and where the input signals come from. For my project, the dots come from keyboard inputs and the dashes come from FSR presses and together, you get a visual of the dots and spaces for the dashes. The blue LED also flashes in accordance with the FSR presses.

Components:

  • Arduino Uno
  • Breadboard
  • 1 force sensor
  • 1 220Ω resistors
  • 1 10Ω resistor
  •  wires

 

Arduino code #1:

int photocellPin = 0; // select the input pin for the potentiometer
int fsrPin =11;
int bPin = 11; // select the pin for the LED
 
int fsrVal;
int photocellVal; // variable to store the value coming from the sensor
 
int counter;
 
int THRESHOLD = 500;
 
void setup() {
 photocellVal = 0;
 fsrVal = 0;
 counter = 0; 
 Serial.begin(9600);
}
 
void loop() {
 fsrVal = analogRead(fsrPin); // read the value from the sensor, between 0 - 1024
 
 analogWrite(bPin, fsrVal/4);
 
 photocellVal = analogRead(photocellPin);
 
 if(photocellVal>THRESHOLD)
 {
 analogWrite(bPin, photocellVal/4);
 if(counter%300==0)
 {
// Serial.print(photocellVal);
 Serial.print("1");
 }
 }
 else
 {
 analogWrite(bPin, 0);
 if(counter%300==0)
 {
 Serial.print("0");
 }
 }
 
 counter++;
}

 

Processing code:

adapted from :http://courses.ischool.berkeley.edu/i262/s13/content/stlim/lab-submission-4-photocell-and-fsr?destination=node%2F909
import processing.serial.*;
 
// Change this to the portname your Arduino board
String portname = "/dev/tty.usbmodem1411";
Serial port;
String buf="";
int cr = 13; // ASCII return == 13
int lf = 10; // ASCII linefeed == 10
 
int radius = 50;
int gapX = 1;
int gapY = 3;
int windowX = 1000;
int windowY = 720;
int marginX = 40;
int marginY = 40;
int x = marginX;
int y = marginY;
 
boolean gap = false;
boolean init = true;
 
void setup() {
 size(1200, 720);
 frameRate(10);
 smooth();
 background(255, 200, 200);
 noStroke();
 port = new Serial(this, portname, 9600); 
}
void draw() {
}
 
void keyPressed() {
 if(key == ' ') {
 background(40,40,40); // erase screen
 }
 else {
 int x = int(random(0,width));
 int y = int(random(0,height));
 drawball();
 }
}
 
// draw balls
void drawball() {
 ellipse(x,y,radius,radius);
 x+=3;
// x += 2*radius + gapX;
 
 if(x>windowX-marginX) {
 x = marginX;
 y += 2*radius + gapY;
 }
}
// called whenever serial data arrives
void serialEvent(Serial p) {
 int serialVal = 0;
 int c = port.read();
 // called whenever serial data arrives
 if (c != lf && c != cr) {
 buf += char(c);
 }
 if (c == lf) {
 serialVal = int(buf);
 println("val="+serialVal); 
 buf = ""; 
 }

if(serialVal==0 && init) {
 
 }
 else if(serialVal == 0) {
 if(!gap) {
 x += 2*radius + gapX;
 }
 
 gap = true;
 }
 else {
 init = false;
 gap = false;
 drawball();
 x+=radius/5;
 }
}

 

Dots & Dashes