Visualización de datos de Squidbee en OpenSim
From SquidBee
Connecting Squidbee + Ruby + FTP + lindenScript + OpenSIM
Instalamos un servidor de OpenSim (el software liberado que corre en los servidores de Second Life), y empezamos a jugar con lindenScript, el lenguaje de scripting de este motor, sintaxis similar a C… sin problema. Asi, encontramos el llHTTPRequest… la mitad ya estaba hecho.
Con un SquidBee, recogemos los datos de luminosidad, humedad y temperatura del entorno real, y despues de transformarlos en valores “humanos” (% de luminosidad y humedad, y ºC de temperatura) los enviamos por el puerto USB/Serie a un PC, ejecutando un script en Ruby, que crea un archivo de texto con estos datos y lo sube a un ftp cada 10 segundos.
Luego desde el mundo de OpenSim, tenemos un scrip asociado a un objeto, que cada 10 segundos también, hace un HTTPRequest a la url donde se sube el fichero, lo descarga y lo parsea extrayendo los datos que usamos para modificar el estado de este objeto. En este caso, es la “Farola” (palo con una bola roja encima), que cambia de color con la temperatura (de negro si es menor de 15º a 100% rojo si es superior a 30º), y de opacidad con la luminosidad (transparente a 0% de luminosidad a opaco con el 100%). El sensor de humedad se nos estropeó, asi que no hicimos nada con el.
David Pello, extraido de http://ladecadence.net/blog/
Descripción del proyecto Water4bits
Water 4 bits, una segunda vida para el Pabellón de Europa consiste en una instalación sincronizada (y visitable) en el espacio físico y en el espacio digital que trata sobre los sueños, las pesadillas y las realidades de la posmodernidad tecnológica en el corazón del Parque Tecnológico de Sevilla.
El espacio físico será el Pabellón de Europa en el Parque Tecnológico de la Cartuja de Sevilla. El parque es el resultado del reciclaje urbano de la Exposición Universal Sevilla 92. Aunque es un entorno productivo exitoso algunos de los pabellones se encuentran aún sin uso. Uno de estos casos es el del Pabellón de Europa, que se presenta actualmente como una ruina ballardiana: subterráneo, vacío, parcialmente inundado. La intervención consiste en acondicionarlo para su visita como una exploración arqueológica del futuro.
El espacio digital es un clon tridimensional del espacio físico construido en un mundo sintético o metaverso, Open Simulator, que puede describirse como una versión libre y distribuida de Second Life. Este espacio digital visualiza datos ambientales del pabellón recogidos en tiempo real por medio de sensores (arduino-squidbee / luminosidad, humedad relativa, temperatura) a la vez que presenta un proyecto de transformación del pabellón en un medialab ciudadano experimental, según los modelos del Medialab Prado y Hangar (Madrid y Barcelona).
El proceso se documenta en el CAAC (Centro Andaluz de Arte Contemporaneo) mediante dos pantallas que funcionan a modo de espejo; en una se muestra el espacio físico con los detalles del proceso de proyecto; en la otra la versión en Open Simulator del pabellón proyectado hacia el futuro, que puede ser recorrida por los visitantes.
El proyecto llama la atención sobre el lugar como espacio de oportunidad para Sevilla y explora su futuro uso como medialab ciudadano experimental. Artistas digitales, arquitectos, estudiantes y el público en general serán invitados a incorporarse a un espacio de debate para la construcción participativa del proyecto.
hackitectura.net
LEER LOS DATOS YA CONVERTIDOS DE SQUIDBEE CON ARDUINO
// variables declaration
int sens0 = 0; //sensors int sens1 = 1; int sens2 = 2;
int val0 = 0; //aux var int val1 = 0; int val2 = 0;
int count = 0;
void setup(){ Serial.begin(19200); //inicializa el puerto serie }
// function to send data
void sendData(int id,int num, int luminosidad,int humedad,int temperatura){
float l, h, t;
Serial.print("@"); Serial.print(id); Serial.print("|");
Serial.print(num);
Serial.print("|luminosidad-"); l = (100.0 / 950.0) * luminosidad; Serial.print((int)l);
Serial.print("|humedad-"); h = (humedad * 5.0 / 1024.0) * 32.25 - 25.81; Serial.print((int)h);
Serial.print("|temperatura-"); t = (temperatura * 5.0 / 1024.0) / 0.01; Serial.print((int)t);
Serial.println("#\r"); // end of message }SQUIDBEE
void loop(){ while (count <= 10000){ val0 = analogRead(sens0); val1 = analogRead(sens1); val2 = analogRead(sens2);
sendData(1,count, val0,val1,val2);
delay(5000); count++; }
count = 0;
}
OPEN SIMULATOR
key http_id;
// convertir la temperatura en un vector de colores SL. vector colorTemp(integer temp) { float intermedio;
if(temp < 15) return <0.0,0.0,0.0>; if(temp > 30) return <1.0,0.0,0.0>;
intermedio = (temp-15.0)/15.0;
return <intermedio,0.0,0.0>;
}
default
{
state_entry() { llSetTimerEvent(10.0); // ponemos el timer a 10 segundos
}
//funcion llamada por el timer timer() { //hacemos la peticion http; http_id = llHTTPRequest("http://ladecadence.net/datos.txt", HTTP_METHOD, "GET",""); }
//funcion que se llama automaticamente cuando recibe la respuesta del HTTP
http_response(key request_id, integer status, list metadata, string body)
{
if (request_id == http_id)
{
string temperatura, luminosidad, humedad;
list listavalores = llParseString2List(body," ",".");
luminosidad = llList2String(listavalores, 0); humedad = llList2String(listavalores, 1); temperatura = llList2String(listavalores, 2);
llSay(0, "Luminosidad: " + luminosidad); llSay(0, "Humedad: " + humedad); llSay(0, "Temperatura: " + temperatura);
vector color = colorTemp((int)temperatura); //convertimos la temperatura en vector de color
llSetColor(color, ALL_SIDES); // ponemos el color del objeto
integer lum = (int) luminosidad; if (lum == 0) lum = 1;
float lumf = lum / 100.0;
llSetAlpha(lumf, ALL_SIDES);
} }
}


