Main

December 16, 2006

Photo-Silhouette Booth

by
Kate Monahan
Daniel Soltis
Jeff Sable
Scott Varland

Created for Physical Computing & ICM Fall 2006 Finals

The photo booth represents a timeless icon of pop culture. It’s thought that the peak of their popularity came in the 1940’s, after the conclusion of World War II. Perhaps some 30,000 photo booths were installed at local dime stores, carnivals, bars, and anywhere else that people congregated. For many patrons, it was a rare opportunity to have a private moment with a camera. Photo booths predated the age of personal, ubiquitous and digital photography, captivating a society which was just beginning to discover its self-expression. It is an odd mix of private and public space which seems to invite even the shyest people to capture something that is revealing and personal. The photo booth produces a story, a narrative, about you in an unpredictable and intimate encounter with the camera.

warhol.jpg

I was excited to take on this project because – well, everyone loves a photo booth. I wondered whether anything worthwhile had been added to the experience since the days of the vintage booths where the likes of Andy Warhol shot self-portraits. I stuck my head inside one of the digital photo sticker kiosks in the local Kmart and thought otherwise. In fact, everything seemed wrong about it. The quality of the pictures was horrible, the cheesy clip art was – well, cheesy and the experience revealed absolutely nothing interesting about me. I believe people are perfectly capable of performing for the camera without the aid of some cookie cutter graphic - because we can - tack-on. Once you’ve used this machine once, there is absolutely no reason to go back because the output will always look basically the same. Artificial. What’s fantastic about the vintage photo booth is that every set of photos is unique to the specific moment when they were taken.

Fortunately, we were able to hop around to some east village bars which still sported the classic booth. As our ideas began to form, we stayed focused on what was intrinsically interesting about the experience:

- The booth created a quasi-private performance space.
- The photographs told a narrative.
- The experience could be shared with others.
- The output was quality, flattering and revealing

booth.jpg

Our solution was to focus first on the performance and narrative aspects of the photo booth. We wanted to create a space where the user would be caught in the act of doing something. We wanted them to forget about the actual moment of the photograph and become immersed in the telling of whatever story they had come inside the booth to tell. Within the small confines of the traditional photo booth there is not a lot of opportunity to use your entire body. Our structure would loose the chair and low ceiling to allow for as much movement as possible and for people to easily share the experience.

In order to inspire movement in the booth, we decided on a camera tracking system built with Processing which would allow the user to see their silhouette projected on a large screen in front of them. We would then introduce abstract virtual objects (particle showers, butterflies and bubbles) for them to play with on the screen. The framework was left loose so that there would be no requirements – no rules governing the experience.
The camera system utilizes both a video camera (Sony TRV-900) for motion tracking and a high quality digital SLR for stills (Canon 20D). Simply using the output from the video camera would not have provided a valuable result from the stills. The output, the reward of the system, had to be very high quality. If anything, better than what was available in traditional booths.

Using an Arduino to control the remote shutter release of the camera (see diagram), and some of the packaged Canon utilities, the SLR was able to communicate with Processing and be triggered at a specific interval in the visualization sequence. At the end of the session, the high resolution photo strip is displayed on a screen outside of the booth and then added to a community narrative telling the story of the visitors.

schematic-for-photobooth.gif

I believe our results were quite good. Not only did people engage inside the booth and enjoy the experience, they were impressed by the actual photographs after the session had ended. One unexpected result of the projected visualization was that it made the booth into a live performance space. Those standing on the outside could catch a glimpse of the activity on the inside while the user enjoyed the feeling of privacy that comes with closing the curtain.

Description of the project for the winter show

Website overview of project, Jeff's website

Description of the project, with Processing and Arduino code, Kate's blog

Processing code for the slide show

October 29, 2006

Color Code: A Redux of the game Mastermind

By

Daniel, Jeff, Kate & Scott

The object of Color Code is to break the code
set by the computer, revealing its corresponding image
in the form of an Exquisite Corpse.

The code is a random combination of four colors.
The player is given nine attempts to solve the code
with hints indicating progress after each guess.

----

At first, I wasn’t totally sure that a redo of this old (if not ancient) game was going to be significantly different or better than any other incarnation which has sprung up over the last century or so.

MasterMind, the board game, was created by Mordecai Meirowitz (an Israeli Postmaster and Telecommunications expert) and released in 1971 to claim a “Game of the Year” award in 1973; selling 50 million copies in 80 countries. Today, you can play MasterMind at hundreds of internet gaming sites.

It’s similar to a 1960s computer game called “Moo,” and similar to the game Bulls and Cows which has been traced back a century or more. Mathematicians have studied this game. It has been proved “NP complete” – or “Intrinsically interesting to play.” http://arxiv.org/PS_cache/cs/pdf/0512/0512049.pdf

It’s all here:

http://en.wikipedia.org/wiki/Mastermind_%28board_game%29

So what was broken about this game?

After playing for a while on our cheapo plastic consumer unit we quickly realized that a quality board would be a huge improvement. It was a challenging and rich puzzle but not much to look at and the pieces were small and awkward to place. It lacked some extra measure of entertainment, some adventure – some mystique.

We had ideas from huge panels of buttons, dials and switches to a transposition from a game of visual cues to sound. We liked the idea of very tactile colored blocks with a clean interface where the player would work only with four slots.

This turned into a system with two components: A board of four cubed slots and a processing applet to track history and provide clues. One of the biggest questions was how to have the computer sense the guess entered by the player. There was no clear way to do this without a rather complicated switching / sensing mechanism to read the cubes.

We decided to take a leap of faith with photocells on the assumption that it would be possible to judge the color based on the differing opacities of each colored cube. Our first prototype used 1” glass cubes with translucent paint. The board was build with each socket having a white LED and a photocell opposite to each other.

It was very pretty but didn’t too work. Our paint job on the cubes wasn’t uniform; the sockets were not constructed identically; the sensor readings were all over the place. We needed to get each of the 24 cubes to read the correct color in each slot every time.

While RGB sensors would probably have been the most effective solution, there wasn’t the time or know-how to implement them within the deadlines we had been given. Instead, we doggedly pursued the photocell idea, this time with acrylic cubes and a more precise circuitry. Translucent paints wouldn’t provide enough difference in hue so we tried printing label covers for each cube, allowing them to match as closely as possible. After much trial and error, we coaxed it into working – though never at absolut 100% it's pretty damn close.

The Processing applet was at the same time evolving from a simple method for tracking the game’s progress into a visual puzzle inspired by the cadavre exquis (esquisite corpse). This brought the player more rewarding feedback and a goal separate from the central gameplay.

http://en.wikipedia.org/wiki/Exquisite_corpse

The end result was a re-invigorated, if not new, life for an old game. It seems to be fun to play both in the usual manner and in a new more tactile, more visually dynamic, and more inviting way. I’m quite happy with the results on this. Daniel, Jeff and Kate were most wonderful to work with so I hope we’ll do some more. Already, there’s talk about building our Color Code into a kiosk / photo both.


September 27, 2006

Intergalactic Love-O-Meter

My interpretation of the carnival classic….

(or maybe it belongs in a low-budget sci-fi film)

love_meter.jpg

The input comes from three thermistors under a brass finger pad that, when touched, change the color of a 6 LED array using a program written in Arduino. My proudest achievement with this project was the glass color orb. It’s a tea-light holder which I inverted and chromed to diffuse the light.

love_led_array.jpg

Ultimately, thermistors while easy to use are slow to repond and predictable. If I were to move this design beyond prototype I think it would be fun to try detecting changes in skin conductivity (e.g. lie detector).

crome_paint.jpg

code follows

int hotPin = 0; // Analog input pin that the thermistor is attached to
int hotValue = 0; // value read from the thermistor
int hotRead = 0;
int hotChange = 100;
int roomTemp = 100;
int blue1 = 9; // PWM pin that the blue1 BLUE1 is on
int blue2 = 2;
int yellow1 = 3;
int yellow2 = 4;
int red1 = 5;
int red2 = 6;
long randNumber;

void setup() {
// initialize serial communications at 9600 bps:
Serial.begin(9600);
pinMode(hotPin, INPUT);
pinMode(blue1, OUTPUT);
pinMode(blue2, OUTPUT);
pinMode(yellow1, OUTPUT);
pinMode(yellow2, OUTPUT);
pinMode(red1, OUTPUT);
pinMode(red2, OUTPUT);
roomTemp = analogRead(hotPin); // records the ambient room temp
}

void loop() {
hotValue = analogRead(hotPin); // read the pot value
hotRead = (hotValue - roomTemp);
if (hotRead >= 2)
{
if (hotRead <= 3) {
analogWrite(blue1, 10);
digitalWrite(blue2,HIGH);
digitalWrite(yellow1,LOW);
digitalWrite(yellow2,LOW);
digitalWrite(red1,LOW);
digitalWrite(red2,LOW);
}
if (hotRead > 3 && hotRead < 6)
{
analogWrite(blue1, 0);
digitalWrite(blue2,HIGH);
digitalWrite(yellow1,HIGH);
digitalWrite(yellow2,LOW);
digitalWrite(red1,LOW);
digitalWrite(red2,LOW);
}
if (hotRead >= 6 && hotRead < 9)
{
analogWrite(blue1, 0);
digitalWrite(blue2,LOW);
digitalWrite(yellow1,HIGH);
digitalWrite(yellow2,HIGH);
digitalWrite(red1,LOW);
digitalWrite(red2,LOW);
}
if (hotRead >= 9 && hotRead < 12)
{
analogWrite(blue1, 0);
digitalWrite(blue2,LOW);
digitalWrite(yellow1,LOW);
digitalWrite(yellow2,HIGH);
digitalWrite(red1,HIGH);
digitalWrite(red2,LOW);
}
if (hotRead >= 12 && hotRead < 14)
{
analogWrite(blue1, 0);
digitalWrite(blue2,LOW);
digitalWrite(yellow1,LOW);
digitalWrite(yellow2,LOW);
digitalWrite(red1,HIGH);
digitalWrite(red2,HIGH);
}
if (hotRead >= 14)
{
analogWrite(blue1, randNumber);
digitalWrite(blue2,LOW);
digitalWrite(yellow1,LOW);
digitalWrite(yellow2,LOW);
digitalWrite(red1,HIGH);
digitalWrite(red2,HIGH);
}
}
else
{
randNumber = random(1,10);
analogWrite(blue1, randNumber);
digitalWrite(blue2,LOW);
digitalWrite(yellow1,LOW);
digitalWrite(yellow2,LOW);
digitalWrite(red1,LOW);
digitalWrite(red2,LOW);
delay(300);
}
hotChange = analogRead(hotPin);
Serial.println(hotRead);
}

September 20, 2006

Observation: Using Technology

I was asked to conduct some observations of New Yorkers interfacing with technology. Initially, I just needed to “hang-out” and watch people using some sort of kiosk. Well, I thought, I could just copout and monitor a set of pay phones at 48th and Broadway over webcam. Interesting but not very fruitful. Mostly people checking for returned change and an assortment of other suspicious transactions. The next day, I made the trip of to Tower Records and found a smallish line gathered at the “scan and listen stations.” These kiosks are advertised all over the store. The idea is that you can just pick up any CD in the store and then stroll over to a station, scan it with the bar code reader and preview the album. Brilliant. The problem is: this is a particularly terrible implementation. To be sure, these machines produced a lot of interest – when someone else was using them. I scanned a few of my own CD selections and found several people looking over my shoulder studying my every move. Perhaps they had tried to use the machine before and failed. As it turned out, the first machine I used was broken (or at least I declared it so and moved on). The next machine I tried did eventually work. The combination of a convoluted, busy and blinking interface and a finicky bar code reader presented a challenge. Again, people were watching – So I listened to my selections (staying well within the 10 minute time limit) and moved back to observe. Slowly and carefully people would creep up (with or without an actual disc to scan). Some would just study the machine, some would push a few buttons, and some would just grab a random CD from the selection in front of the machine. Some users managed to call up the CD and listen; others struggled, gave-up and resumed their isle browsing. Those who had a positive experience would often return with more CDs with a new found confidence in themselves and what could be a rather useful selection tool.

Human meets technology (stages)

- Observe other human using
- Envy human; want technology
- Approach
- Play, pretend, experiment
- Discovery
- Operate

Other common consumer electronics I observed over the course of a day:

Mobile Phones and PDA

100s - Razors(23), Blackberries (5), Sidekicks (2): It’s not a revelation that they’re everywhere. If you pause and try to count them all you won’t be able to. Or rather, you’ll stand and count indefinitely. Unfortunately, they are not transparent to us as most people seem to have trouble even walking while in use – especially text messaging. I believe text messagers have become the scourge of the sidewalk; followed by the people counting them.

Phone and PDA users are:

- Stupid. Make stupid faces at their device – like babies drooling.
- Walk slow
- Are separate from this plane of reality (even when walking with someone else)
- Talk loudly

Music Players

Also 100s (14 users) (31 confirmed IPODs) – A lot of people have something in their ears (myself included). They were almost as numerous as the people with phones. Eventually, I tried to count only the people that I actually saw interfacing with their player. Most activity was quick and seemingly fruitful. People rarely actually remove their devices from its bag, pocket, or holster to use it. Next song.

Mobile Music Mavens are:

- Smart
- Scheming
- Walk fast
- Talk to themselves (or sing)
- Look around a lot – people watch
- Think different

ATMs

There were 8 people who came into the bank (Citibank) while I was there. All of them going about their transactions privately; almost ignoring the fact that other people were in the room. Deliberate. I’d say most of them had been there before and knew what they were doing.

Bank Patrons Are:

- Wealthy
- Private
- Deliberate
- Practiced

Computers (Laptops)

28 (24 Apple) - All over the ITP floor. Easily half the floor has their face in one at any moment. Also at the coffee shops. Starbucks patrons seem especially fond of their laptops and expensive coffee beverages.

Other Stuff

Cameras (14)
Video Cameras (3)


September 19, 2006

Combination Lock (though 'lock' may be a bit of an overstatement...)

This is my first real breadboard project, and my first Arduino program - with modest results. Regrettably, I have not yet produced a stylish enclosure for it as I spent too much time fiddling with code which proved slightly beyond my present capabilities…

Problems include the use of the delay function and that the program does not generate an error when an incorrect button is pressed. As a result, simply pushing all the buttons will foil the lock. I think the best approach will be to poll all of the swithes using an array to store the digits (as Gian suggested). A few helpful 2nd year ITPers provided some helpful tips which I will attempt to develop as my programming abilities improve. Their comments are posted below.

It looks like this:

The program is as follows:

int switchPin1 = 2; // switch 1
int switchPin2 = 4; // switch 2
int switchPin3 = 3; // switch 3
int switchPin4 = 5; // switch 4
int greenLedPin = 6; // green led
int redLedPin = 7; // red led
int switchState = 0; // first switch state

void setup() {
pinMode(switchPin1, INPUT); // switch 1 set to input
pinMode(switchPin2, INPUT); // switch 2 set to input
pinMode(switchPin3, INPUT); // switch 3 set to input
pinMode(switchPin4, INPUT); // switch 4 set to input
pinMode(greenLedPin, OUTPUT); // green LED pin set to output
pinMode(redLedPin, OUTPUT); // red LED pin set to output
}

void loop() {
switchState = digitalRead(switchPin1); // monitor first switch in sequence

if (switchState == 1) { // when pressed check next switch in sequence
delay(900); // requires a rather precise human
if(digitalRead(switchPin2) == HIGH) {
delay(900);
if(digitalRead(switchPin3) == HIGH) {
delay(900);
if(digitalRead(switchPin4) == HIGH) {
digitalWrite(greenLedPin, HIGH); // green LED on
digitalWrite(redLedPin, LOW); // red LED off
delay(5000); //savor the victory
}
}
}
}
else {
digitalWrite(greenLedPin, LOW); // green LED off
digitalWrite(redLedPin, HIGH); // red LED on
}
}


Some feedback:

---- Thanks to Christopher Paretti

I would set up the correct sequence ahead of time.
So the combo might be 4231 or something.
If you don't hit 4 first, throw an error and reset.
If you hit 4, trigger a boolean to be true ( lock1 = 1 ), then check the other buttons against this variable.

So a button 2 press might say

int lock1 = 0;
int lock2 = 0;

// button press code here
if( lock1 == 1)
{
lock2 = 1;
else {
digitalWrite(errorLight, HIGH);
// and then reset all the booleans back to 0.
lock1 = 0;
lock2 = 0;
}

then button 3 might say

if ( lock1 == 1 && lock2 == 1)
// blah blah

---- Thanks to Gian Villamil

The way I coded mine (it's a simon game, but not so different) is like this:

I basically poll each switch in sequence and see if it is down. If a
switch is down, I save its number in an array, and move to the next
digit. When all the digits are entered, I compare against the
combination.

By doing the compare when the entire combo is entered, I defeat
attempts to guess the code by testing permutations.

---- Thanks to Andrew Schneider

Since "delay" is a blocking function, you might look into using
"millis":

http://www.arduino.cc/en/Reference/Millis

and an example from Tom that works as a non-blocking delay:

void loop() {
if (millis() - lastTimeVar > 500) {
//do something
lastTimeVar = millis();
}