martes, 17 de noviembre de 2009



reunidos from Cristobal Bayer on Vimeo.

aqui esta un videillo de la realizacion de reunidos.
la instalacion consiste en un disco metalico en el centro de la habitacion la cual al tocarla y calentarla
comienza el  desarrollo de unas secuencias de imagenes, en conjunto se aceleran las palpitaciones del corazon y comienzan a cambier de azul a rojo de las luces que acompañan estas palpitaciones.
aparte de esto hay un sensor de movimiento que segun los movimiento de los perzonajes va variando las frecuencias del sonido y mucho mas. bueno hay que verlo.


Invitacion 29 nov..





http://www.flickr.com/photos/instintovisual/4089241875/

Hola , aqui presento la descripcion de reunidos. obra a mostrar en la semana
de la fotografia mirados casa Lukas ¡¡¡ mi primera obra!!!, Valparaiso. el 29 de nov. todos invitados
durante el desarrollo ire subiendo mas info


Por: Cristobal Bayer InstintoVisual

Formato:
Instalación interactiva


Descripción: Re12s34...reunidos como concepto básico, es un juego, cuya única regla es experimentar, disfrutar y dejarse llevar. El lograr reunir muchas manos, nos posibilitará presenciar el clímax de esta experiencia.
Objetivos: Generales: El principal objetivo es que el participante disfrute. Y logre abstraerse por un instante de la realidad a la que esta sujeto. También se busca reunir personas, para que estas compartan una experiencia en común, e interactúen entre ellas para descubrir su entorno.
Particulares: La experiencia busca generar un viaje, que nos mostrará como, sin darnos cuenta, desequilibramos un sistema al interactuar con él. Todas nuestras acciones tienen una repercusión al entorno. El visitante al entrar en la instalación, tocando, respirando, moviéndose,etc, producirá reacciones en el sistema que lo desequilibrarán de su estado originario. Mientras más gente entre, el desequilibrio será mayor.
Esta instalación busca que el visitante se dé cuenta de que su existencia es parte de un todo, es parte del desequilibrio de la naturaleza.
Premisa: El equilibrio es solo un concepto. Todo sistema en particular tiende a un equilibrio. Pero al presentarse al entorno la interacción produce un desequilibro. Por eso decimos que tiende al equilibrio pero nunca es capaz de llegar.
Base Teórica: El proyecto esta basado en Arduino y Pure Data, dos proyectos de código abierto. Lo que nos da la libertad para que podamos hacer lo que queramos con ellos.
El proyecto Arduino, esta compuesto de 2 partes. La placa. Basada en el microcontrolador Atmega, y su lenguaje de programación ”Ide” basado en c++.
con Arduino ingresamos y procesamos los datos de los sensores para enviarlos al computador a través del protocolo serial. Y paralelamente manejamos la iluminación led.
Luego hay que hacer algo con la información entrante de los sensores.
Es convertida en señales MIDI, las cuales son procesadas por Pure Data.
Es aquí donde entra Pure Data, este proyecto es un entorno de programación visual, que nos permite la síntesis y el procesamiento de sonido e imágenes en tiempo real.
Re12s34...reunidos como concepto básico, es un juego, cuya única regla es experimentar, disfrutar

Fotos de prototipos para Re12s34......Reunidos






 

 
 
 
 
  

 Aqui les dejo el scktch de arduino para el geek que quiera entender que chucha estoy haciendo

/*  
             Scketch instalacion RE12S3....
             instalacion audiovisual interactiva
             Desarrollada por InstintoVisual
             Cristobal Bayer 
             vercion:1.01
             
             toma valores de 2 termistores y de un detector de movimiento
             y lo convierte en señales MIDI y hace parpadiar 2 led
             11 de nov 2009+
             
         */

//........................valor PMW que toman los led
int rojo=0;
int azul=0;

//......................... referencia tiempo retrazo 

int tiempo=0;

// .......................estavilisacion de señal
int medida=0;
int medidanterior=0;
int medida1=0;
int medidanterior1=0;

//..................... pines leds
int ledrojo=5;
int ledazul=6;

//......................valor promedio de los 2 termistores
int valPromedio=0;
unsigned long frecuencia=0;

//.......................toma de valores de referencia 
int refL=0;
int refR=0;

int valormap=0;
int valormap1=0;
int difReferencia=80;

//.........................variables para detector de movimiento
//.......................pin detector de movimiento
int bot=12;

//.......................valor promedio detector de movimiento
int boton=0;
int muestras=49;         // n° de muestras a promediar
int regVal[49];   //inisialisa variable que almasena el estado del detector de mov.
float promVal=0;     //valor promedio de los 60 estados almasenados en el array regVal
int cMovimiento=0;
float sumVal=0;
unsigned long tAnterior=0;
int contador=0;
int envioPromVal=0;  //....... variable aux para enviar promedio de mov mapeado de 0 a 100

//.......... ventilador 
int ventiPin=4;

//.........led retroiluminadosco segun movimiento

int retroLed=11;
int acontador=0;
//................................Setup>>>>>>>>>>>>>>{

Serial.begin (31250); 

pinMode (retroLed,OUTPUT);
pinMode (ventiPin,OUTPUT);
pinMode (bot,INPUT);     //define pin 12 como detector de movimiento
pinMode (ledazul,OUTPUT);     //define pin 6 com salida
pinMode (ledrojo,OUTPUT);     //define pin 5 com salida

for (int a=0;a<=muestras;a++) //inicialisa array que registra los estados del detector de Mov
{
regVal [a]=0;
}

//......................  tomamos referencia antes de entrar al la funcion Loop
medida= analogRead (0);
medida1= analogRead (1);
normalizar();  // lee y estaviliza la entrada analoga 0
normalizar1();  // lee y estaviliza la entrada analoga 1
promedio();     // calcula el promedio de los termistores
refL=valPromedio;
refR=valPromedio+difReferencia;

}

//...............Loop principal>>>>>>>>>>>{

detectorMovimiento();   // FUNCION DE DETECCION DE MOV actualiza los valores

if (promVal>0.20 || valPromedio>=(refL+(difReferencia/2))){digitalWrite (ventiPin, HIGH);}     // prendido y apagado del ventilador pin 3 
else {digitalWrite (ventiPin, LOW);}                                                        //si el promedio es 0 el ventilador se apaga
//o si la temperatura supera un umbral

//..............................................................

medida= analogRead (0); normalizar();  // lee y estaviliza la entrada analoga 0
medida1= analogRead (1) ;normalizar1();  // lee y estaviliza la entrada analoga 1

medidanterior=constrain(medidanterior,refL,refR);
valormap=map(medidanterior,refL,refR,0,127);
valormap=constrain(valormap,0,127); 

medidanterior1=constrain(medidanterior1,refL,refR);
valormap1=map(medidanterior1,refL,refR,0,127);
valormap1=constrain(valormap1,0,127);

promedio();     // calcula el promedio de los termistores
mapeo();        // se mapea a los valores de referencia

palpito ();   // palpita segun las lecturas de la funcion narmalizar()

//.................................Toma refetencia de los valores de temperatura
//....cuando el detector de movimiento esta mas de 60 
if (promVal==0)                                        //....ciclos en estado 0
{
cMovimiento++;
if( cMovimiento>=60) { tomarReferencia(); cMovimiento=0;}
}
if (promVal!=0){cMovimiento=0;}

//............................esta seccion ensiende un led que retroilumina el disco
if (promVal>=0.01||valPromedio>=(refL+5))
{
if (acontador!=255)
{
for (acontador;acontador<=255;acontador+=1)
{
analogWrite (retroLed,acontador);
delay (3);
}
acontador=255;
}
else {analogWrite (retroLed,255);}
}
else
{
if  (acontador!=0)
{
for (acontador;acontador>=0;acontador-=1)
{
analogWrite (retroLed,acontador);
delay (3);
}
acontador=0;
}
else {analogWrite (retroLed,0);}
}

}

//----------------------------fin loop-----------------------------------------

//...................... funcion de filtro de ruido para la lectura analoga

int normalizar ()
{
if (abs(medida-medidanterior)>=3)
{
medidanterior=medida;
}
}

int normalizar1 ()
{
if (abs(medida1-medidanterior1)>=3)
{
medidanterior1=medida1;
}
}

//..........................funcion que calcula el promedio de los 2 termistores

int promedio()
{
valPromedio=(medidanterior+medidanterior1)/2;

}

//............................... funcion de mapeo de valores para asignarlos 
//.....al valor pmw de cada led
int mapeo()
{
valPromedio=constrain(valPromedio,refL,refR);
rojo= map (valPromedio,(refL+15),refR,0,255);
rojo=constrain(rojo,0,255);
azul= map (valPromedio,refL,(refR-35),255,0);
azul=constrain(azul,0,255);

}

//.....................................................................funcion toma referencia de temperatura

int tomarReferencia()
{
if (valPromedio<=(refL+5))                //impide que tome referencia  si uno esta variando la t° y no se mueve.
{

refL=valPromedio;
refR=valPromedio+difReferencia;
}
}

//................funcion que hace palpitar los led  su ritmo lo determina la temperatura registrada

void palpito ()
{
valPromedio= constrain(valPromedio,refL,refR);
tiempo= map(valPromedio,refL,refR,3000,300);
tiempo= constrain (tiempo,300,3000);

NotaMIDI(0x91,0x3f,valormap);

NotaMIDI(0x91,0x40,valormap1);
NotaMIDI(0x91,0x41,envioPromVal);

//Primer palpito

analogWrite (ledazul,azul);
analogWrite (ledrojo,rojo);
delay (50);
for (int aux=250;aux>=0;aux--)
{

analogWrite (ledazul, (aux*azul) /250);
analogWrite (ledrojo, (aux*rojo) /250);

delayMicroseconds (800);
}

detectorMovimiento();
normalizar ();

delay (tiempo/10);

normalizar ();
detectorMovimiento();

//segundo palpito

if (azul>40){azul-=40;}
if (rojo>30){rojo-=30;}

for (int aux=100;aux>=0;aux--)
{

analogWrite (ledazul, (aux*azul) /100);
analogWrite (ledrojo, (aux*rojo) /100);

delayMicroseconds (2000);
}

delay (tiempo*0.5);

}

//..............envia nota midi 62 activa sonido corazon y envia valor referencial de temp tomado por pure data

void NotaMIDI(byte a,byte b,byte c)
{
Serial.print(a,BYTE);
Serial.print(b,BYTE);
Serial.print(c,BYTE);

}

//--------------------- funcion detector de movimiento u promedio de este toma 20 muestras 
//  2 por segundo.
int detectorMovimiento()
{

sumVal-=regVal[contador];
regVal[contador]=digitalRead(bot);
sumVal+=regVal[contador];
promVal=sumVal/(muestras+1);
contador++;

if (digitalRead(bot)==0)
{
sumVal--;
}
sumVal=constrain(sumVal,0,muestras);
promVal=constrain(promVal,0,1);
envioPromVal = promVal*100;
if (contador>=muestras)
{
contador=0;
}


}

No hay comentarios:

Publicar un comentario

Seguidores