Introduction: Interactive Sculpture : Externalizing Data
Externalizing Data is a sensitive sculpture that performs lights and sound when feeling presence of people.
It was developed during the The School of Machines, 2014 in Berlin. Machines provided by Fablab Berlin.
The music was done by Chicks on Speed.
Step 1: Modeling the Head
I want a shape that reminds a head. An abstraction of a head.
I first got a 3d model of a human head and modified it to an abstract geometrical, symmetric shape.
I used Meshmixer from Autodesk to edit.
Step 2: Laser Cutting
I imported the model to 123d Make and selected radial slices as construction technique.
1st axis: 6
Radial : 18
Then I exported in eps and cut using the laser cut of FabLab Belrin
Step 3: Controlling Leds Strips With Arduino
The interactive of the piece was done using Arduino, a presence sensor Max Botix (1 x Ultrasonic Range Finder – Maxbotix LV-EZ0) and a Mp3 shield.
1. Controlling leds strip 12v with Arduino:
The leds strips can be controlled by use any power NPN or N-Channel MOSFET, make sure the transistor is rated to be able to pass as much current as you need. For example, since we draw about 0.2Amps per channel per meter, if you have a 5 meter strip you will need to pass up to 1 Ampere per transistor. Get the beefy "TO-220" packages, not the dinky little guys. Make sure they look like this:
For basic, low-cost usage we suggest using N-channel MOSFETs such as the STP16NF06 - they are very popular and inexpensive. If you can't get those, TIP120 are also good but there is more voltage loss in a transistor than in a MOSFET which is why we suggest those first (less heat loss, more light!).
In this project I used 1 TIP120 for each color. The project had 5 colors. So, I used 5 TIP120 in a circuit as the forth image.
Step 4: Presence Sensor Activate the Led Strips and the Mp3 Shield
In this project, the presence sensor Max Botix (1 x Ultrasonic Range Finder – Maxbotix LV-EZ0) activates the led strips and also the mp3 shield.
I connected the presence sensor in the pin number 5 of Arduino and each light was connected in the analog pins A5, A2, A3, A1, A4. The MP3 Shield was just placed above Arduino. I bought a speaker and connected in the jack entrance of mp3 shield.
This is the final code:
#include "Maxbotix.h"
#include
#include
#include
#include
SdFat sd;
SFEMP3Shield MP3player;
int16_t last_ms_char; // milliseconds of last recieved character from Serial port.
int8_t buffer_pos; // next position to recieve character from Serial port.
char buffer[6]; // 0-35K+null
int ledPins[] = {
A5, A2, A3, A1, A4 };
int pinCount = 5;
int timer = 40;
Maxbotix rangeSensorAD(A0, Maxbotix::AN, Maxbotix::LV);
float distancia=40;
void setup() {
initSD(); // Initialize the SD card
initMP3Player(); // Initialize the MP3 Shield
MP3player.setVolume(0,0); //this is to setup volume MAXIMUM. Thanks victor
for (int i = 0; i < pinCount; i++) {
pinMode(ledPins[i], OUTPUT);
uint8_t result; //result code from some function as to be tested at later time.
Serial.begin(115200);
}
}
void loop() {
//-------------------------- NEW CODE FROM HERE
int mp3isplaying=0;
while(1){ // this is the new program loop
distancia=rangeSensorAD.getRange();
Serial.print("cm - ");
Serial.println(distancia);
// if (distancia<200){
if (distancia<150){
if (mp3isplaying==0) {
MP3player.playMP3("track001.mp3");
mp3isplaying=1;
}
for (int i=0; i < pinCount; i++){
digitalWrite(ledPins[i], HIGH);
delay(timer);
digitalWrite(ledPins[i], LOW);
Serial.println("encendido");
}
}
else{
if (mp3isplaying==1) {
MP3player.stopTrack();
mp3isplaying=0;
}
digitalWrite(ledPins[0], LOW); // turn the LED off by making the voltage LOW
Serial.println("apagado");
}
}
}
// initSD() initializes the SD card and checks for an error.
void initSD()
{
//Initialize the SdCard.
if(!sd.begin(SD_SEL, SPI_HALF_SPEED))
sd.initErrorHalt();
if(!sd.chdir("/"))
sd.errorHalt("sd.chdir");
}
// initMP3Player() sets up all of the initialization for the
// MP3 Player Shield. It runs the begin() function, checks
// for errors, applies a patch if found, and sets the volume
/ stero mode.
void initMP3Player()
{
uint8_t result = MP3player.begin(); // init the mp3 player shield
if(result != 0) // check result, see readme for error codes.
{
// Error checking can go here!
}
//MP3player.setVolume(volume, volume);
//MP3player.setMonoMode(monoMode);
}
Step 5: Laser Cutting the Skin for the Project
The last step was to build a skin protection for the project.
I cut various shapes in the laser cut and fixed them all together.
First I prototyped using paper to get in the better shape for the several cuts.
The result is what you can see in the images