We made one last prototype for the GSAPP Visual Studies/CAD show today (Friday the 22nd in the basement of Avery).
We simplified our code substantially to highlight the variable output (using PWM Arduino pins to power our super-bright LEDs) and sensitive proximity sensor you can get using the capacitive sensing circuitry. There are three foil sensors and three LEDS (a red, blue and green) which respond to your hand within about six inches of the prototype. This is all enclosed in a frame covered with white T-shirt cloth, creating a smooth glowing effect. When no one is interacting with the device, it blinks every 20 seconds to entice people passing by to play.
It's best in the dark.
Thursday, January 21, 2010
Thursday, December 17, 2009
Final Prototype and Installation
After a long day and night's work, we got basically everything working.. the play/record sound module, the foil sticker, conductive paint, and metal flashing capacitive sensors, some cool new super-bright LEDs. Of course it didn't quite work at the review today, but what can you do. We put together a more polished ala graffiti research lab video of the whole process... enjoy!
The review was fantastic. We got great feedback and advice and everyone had their own take on how to develop and use the prototypes we'd developed. Thanks, all!
The review was fantastic. We got great feedback and advice and everyone had their own take on how to develop and use the prototypes we'd developed. Thanks, all!
Saturday, December 12, 2009
Starting Final Prototype and Installation
The major work today was on our prototype installation. First, the armature for the metal flashing, and secondly, testing the conductive paint.
The conductive paint turned out to be quite easy to work with. It goes on very thin (we applied 3 coats - it comes in an aerosol can) and dries quickly. We just used a scrap piece of foam core for now.
We were able to calibrate the flashing and conductive paint (about the same area of material for both) to give good results. The output is the dimming LEDs using the PWM pins on the Arduino - the recording module is in the photos but doesn't have power so it's not functioning.
Here are our components so far.
The conductive paint turned out to be quite easy to work with. It goes on very thin (we applied 3 coats - it comes in an aerosol can) and dries quickly. We just used a scrap piece of foam core for now.
We were able to calibrate the flashing and conductive paint (about the same area of material for both) to give good results. The output is the dimming LEDs using the PWM pins on the Arduino - the recording module is in the photos but doesn't have power so it's not functioning.
Here are our components so far.
Here's a video of the working prototype. Watch the red and green LEDs in the lower-left corner change brightness based on proximity. (The recording module is wired in but doesn't have power.)
We'll be presenting our project with the Living Architecture review this Thursday, and hope to install the prototype in the school at the Visual Studies/CAD show early next semester. Stay tuned!
Monday, December 7, 2009
Prototype 9 - Flashing on the Wall
Prototyping, and armature development this week.
The working prototype on the wall:
We were having trouble with grounding. With this big a piece of metal, we needed to run the Arduino off of and AC plug rather than the 9V battery. This is definitely more of an 'installed' than on-the-go solution.
Wood ribs attached to a backbone will hold the flashing in a wave shape off the wall.
Design sketch:
The ribs and nailer in the shop:
- Prototyping:
- We brought back the LEDs to indicate proximity using the PWM pins on the Arduino. There's a green one for the 'play' sensor, and a red one for the 'record' sensor. This functionality is independent of the play/record function, but it's based on the same sensed value.
- Armature/Installation Development:
- We're making a 'wave' of flashing (sheet metal) attached to the wall. This will be portable enough to install practically anywhere, but at 4' long it's still a substantial piece of material. This in combination with foil stickers and/or paint will show the variety of ways we can use (cheap) metals as proximity sensors.
The working prototype on the wall:
We were having trouble with grounding. With this big a piece of metal, we needed to run the Arduino off of and AC plug rather than the 9V battery. This is definitely more of an 'installed' than on-the-go solution.
Wood ribs attached to a backbone will hold the flashing in a wave shape off the wall.
Design sketch:
The ribs and nailer in the shop:
Monday, November 30, 2009
Prototype 9 - Portable Speaking Wall
After an evening of prototyping, we have some refinements to the prototype.
Here it is installed again:
Improvements:
And here it is in use... what a flirt!
Still to do:
Here it is installed again:
Improvements:
- Circuitry Enclosure
- We cleaned up a lot of the wiring, and got the Arduino and other components into our plastic project enclosure.
- Foil Stickers
- We made foil 'play' and 'record' stickers out of contact (shelf-liner) paper and our trusted friend, aluminum foil (the contact paper costs about $4.50 per roll).
- Speaker Enclosure
- Like the Arduino, the speaker/mic got its own box - made out of foam core - for a much cleaner look.
- Power Supply
- Everything runs on 2 9V batteries so it's very portable.
And here it is in use... what a flirt!
Still to do:
- Stickers/foil refinement
- We need to find something that's a little stickier. We're thinking the vinyl graphics that the print shop offers will be a good place to start. We also need to work on our graphics. While we're running foil behind the sticker, it might as well also replace the wiring so that can be flat too.
- Conductive paint test
- We still want to see how this works with conductive paint. This is related to the next point...
- System Integration/Armature Fabrication
- We're thinking that whether we install this in a public place for a while, or just for our presentation, we'll make a roughly 2'x3' (or slightly bigger) panel that can hang on a wall, and provide a flush smooth surface so all you see are the graphics and the little microphone/speaker.
- Amplification/Component Separation
- We will try a quick feasibility check to see what it would take to amplify the range of the microphone and speaker, especially if there could be a cheap and simple swap-out for our current recording module.
Wednesday, November 25, 2009
Wall as a Boombox
We were able to get both the record and play functions of the RadioShack recording module to work, controlled by the Arduino board. We have two foil sensors - a 'play' and 'record' button - which we will refine further in the final installation, either with conductive paint or foil stickers. The Arduino board is portable and could be installed briefly with the stickers or paint - when it's removed, and the paint or stickers could potentially remain, leaving a trace of the interaction.
The speaker is used as the microphone also, and it's very quiet. We're considering whether we want to upgrade and/or separate these components.
We simplified our code a lot this week:
#include
CapSense cs_4_2 = CapSense(4,2); // PLAY FOIL CONNECTED TO PINS 4 and 2, 2 is sensor pin
CapSense cs_5_3 = CapSense(5,3); // REC FOIL CONNECTED TO PINS 5 and 3, 3 is sensor pin
int recPin = 12;
int playPin = 13;
long start, recLength = 1000;
float threshold = 0.35;
float playTotal, recTotal;
void setup()
{
// cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example
Serial.begin(9600);
pinMode(recPin, OUTPUT);
pinMode(playPin, OUTPUT);
}
void loop()
{
// GET RAW SENSOR DATA; TUNE POTENTIOMETER/RESISTOR FOR 0-60 RANGE:
start = millis();
playTotal = (float)cs_4_2.capSense(30) / (float)60; // PLAY FOIL
recTotal = (float)cs_5_3.capSense(30) / (float)60; // REC FOIL
// DEBUG SCREEN
Serial.print("PLY: ");
Serial.print("\t");
Serial.print(playTotal);
Serial.print("REC: ");
Serial.print("\t");
Serial.println(recTotal);
// IF WITHIN THRESHOLD
if(playTotal >= threshold || recTotal >= threshold) {
// IF PLAY, PLAY
if(playTotal > recTotal) {
play(recLength);
}
// OTHERWISE, RECORD
else {
recLength = record();
}
}
}
long record() {
long startTime = millis();
while (recTotal > threshold) {
digitalWrite(recPin,HIGH);
recTotal = (float)cs_5_3.capSense(30) / (float)60; // REC FOIL
}
long endTime = millis();
digitalWrite(recPin,LOW);
Serial.print("REC - Length:\t");
Serial.println(endTime-startTime);
return endTime - startTime;
}
void play(long howLong) {
Serial.print("PLAY - Length:\t");
Serial.println(howLong);
digitalWrite(playPin,HIGH);
delay(10);
digitalWrite(playPin,LOW);
delay(howLong);
}
So, there is a 'record' foil and a 'play' foil. When you put your hand within the 'threshold' distance from the record foil, it starts recording and counts how long you kept your hand there. When you put your hand near (within the same threshold) the 'play' foil, it plays (and ignores input for the length of the recording).
Here it is in action. It's quiet, but it works!
The speaker is used as the microphone also, and it's very quiet. We're considering whether we want to upgrade and/or separate these components.
We simplified our code a lot this week:
#include
CapSense cs_4_2 = CapSense(4,2); // PLAY FOIL CONNECTED TO PINS 4 and 2, 2 is sensor pin
CapSense cs_5_3 = CapSense(5,3); // REC FOIL CONNECTED TO PINS 5 and 3, 3 is sensor pin
int recPin = 12;
int playPin = 13;
long start, recLength = 1000;
float threshold = 0.35;
float playTotal, recTotal;
void setup()
{
// cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example
Serial.begin(9600);
pinMode(recPin, OUTPUT);
pinMode(playPin, OUTPUT);
}
void loop()
{
// GET RAW SENSOR DATA; TUNE POTENTIOMETER/RESISTOR FOR 0-60 RANGE:
start = millis();
playTotal = (float)cs_4_2.capSense(30) / (float)60; // PLAY FOIL
recTotal = (float)cs_5_3.capSense(30) / (float)60; // REC FOIL
// DEBUG SCREEN
Serial.print("PLY: ");
Serial.print("\t");
Serial.print(playTotal);
Serial.print("REC: ");
Serial.print("\t");
Serial.println(recTotal);
// IF WITHIN THRESHOLD
if(playTotal >= threshold || recTotal >= threshold) {
// IF PLAY, PLAY
if(playTotal > recTotal) {
play(recLength);
}
// OTHERWISE, RECORD
else {
recLength = record();
}
}
}
long record() {
long startTime = millis();
while (recTotal > threshold) {
digitalWrite(recPin,HIGH);
recTotal = (float)cs_5_3.capSense(30) / (float)60; // REC FOIL
}
long endTime = millis();
digitalWrite(recPin,LOW);
Serial.print("REC - Length:\t");
Serial.println(endTime-startTime);
return endTime - startTime;
}
void play(long howLong) {
Serial.print("PLAY - Length:\t");
Serial.println(howLong);
digitalWrite(playPin,HIGH);
delay(10);
digitalWrite(playPin,LOW);
delay(howLong);
}
So, there is a 'record' foil and a 'play' foil. When you put your hand within the 'threshold' distance from the record foil, it starts recording and counts how long you kept your hand there. When you put your hand near (within the same threshold) the 'play' foil, it plays (and ignores input for the length of the recording).
Here it is in action. It's quiet, but it works!
- Next steps:
- Pick a site on campus, probably in Avery Hall
- Build/Refine a housing for the Arduino board, including power (9V battery or wall-plug)
- Design and test the stickers/conductive paint
- Look into the speaker sensitivity/microphone power issue
Sunday, November 22, 2009
Prototype 6.1 - Recording Module Hack
We can now control the 'play' function of the RadioShack recording module. There was a simple piezo-type switch on the board, so we just traced the foil circuitry back to a point where we could solder two leads. We now have a switch that we can control with a relay from the Arduino. We tested that wiring using a simple on/off program before soldering. There's also a 'record' switch that is set up in a similar way, so we may wire into that too.
The green wires at the bottom of the photo are our new leads:
Possible input/output logic could be:
Put your hand 24-12" away, we record you.
Move your hand <12" away, we play back what we recorded.
This could be a self-contained device, run off of 9V batteries and mounted to the wall, but it could also be put on the street or in an unexpected location.
Subscribe to:
Posts (Atom)