jueves, 7 de febrero de 2008

tic...tac...no hay tiempo.....no hay tiempo

bastante abandonado tenemos el blog... la verdad. hicimos la presentacion en clase del estado en que conseguimos tener el prototipo a finales de enero (29.01.08) nos falta colgar las transparencias de nuestra presentación. nos hubiera gustado que finalmente se escapara el reloj, pero no lo conseguimos.... tic ... tac... tic ...tac

sábado, 26 de enero de 2008

[de cara a la presentación..] Contextualización del proyecto.

De cara a las presentaciones de los proyectos de curso de PSEM del día 29, nos vemos condenados a contextualizar nuestro proyecto. En la asignatura hemos hecho hincapié en el desarrollo de aplicaciones para dispositivos empotrados basados en microcontroladores, sensores, actuadores,.. Para ello empleamos soluciones de prototipado específicas y entornos y lenguajes de programación basados en Java, como por ejemplo Wiring y Mobile Processing. De hecho, el trabajo de documentación también lo basamos en ello.
La idea original nos la sugirió Marco. Un despertador con ruedas que siguiera una ruta previamente especificada. El prototipo incorporaba los ejes y motor de un coche teledirigido, y el circuito y display de un despertador digital. Solamente utilizábamos la tecnologia Wiring en el proceso de almacenaje de la ruta que recorrería el rejojcochecito. Después descubrimos que ya existía un prototipo comercial que se parecía [demasiado para nuestro gusto] a nuestro pr
oyecto, por lo que nuestro trabajo simplemente consistiría en incorporarle la placa Wiring. Finalmente la idea original se transformó en el que resultará nuestro "clocky" particular [que presentaremos el 29]

Producto comercial parecido a nuestro prototipo:

Clocky



  • Dimensiones: 5.25" x 3.5" x 3.5" [12,7cm x 7,62cm x 7,62cm]
  • Colores: blanco almendra, agua, coco y mostaza.
  • Advierte de bateria baja.
  • Señales sonoras aleatorias.
  • Se pueden inhabilitar las ruedas, para mantenerlo fijo.
  • Repetición de alarma configurable, de 0 a 9 minutos.
  • Puede saltar desde más de 90 cm.
  • Se mueve sobre madera y alfombra.


Página web:
http://www.nandahome.com/

Videos YouTube:
_demo:
http://es.youtube.com/watch?v=3zYO7HNbPl4&eurl=http://www.thinkgeek.com/homeoffice/lights/91f2/
_My Idea will make Milions:
http://es.youtube.com/watch?v=hLS20pWMs6Q&feature=related

lunes, 21 de enero de 2008

Parte de Mobile Processing

Todavía no conseguimos la detección del módulo de bluetooth de la placa wiring, pero hemos conseguido crear el software que tendrá que instalarse en el móvil mediante el que transmitiremos a la placa wiring la orden de inicio.

Por el momento, el programa es un simple reloj con alarma. Pones la hora de la alarma y empieza una canción cuando coinciden alarma y reloj. Aquí teneis unas capturas y el código para mobile!


Imagen: capturas de pantalla del emulador en diferentes momentos del código
CÓDIGO MOBILE PROCESSING:
import processing.sound.*;

Sound cancioncilla = new Sound("alarma.wav");

PFont pFont; //fuente
PButton button; //botón
boolean control_alarma; //control de si está activada o no la alarma

//variables donde se guarda la alarma
String [] alarma = new String[2]; //donde guardaremos alarma
String [] alarm = new String[2]; //string editable
void guarda_alarma()
{
alarm[0]=""; //horas
alarm[1]=""; //minutos
int num=2;
alarma[0]=textInput("introduce hora", alarm[0], num);
alarma[1]=textInput("introduce minutos", alarm[1], num);

}

void setup()
{
background(204);
button = new PButton("Alarma");
// coge y mostrará la fuente por defecto del sistema
button.calculateBounds(0,0,width,height);
button.setBounds((width-button.width)/2,height-button.height,button.width,button.height);

button.initialize();

pFont = loadFont();
textFont(pFont);
//alinea el texto en el centro
textAlign(CENTER);

}

void draw() {
background(204);
//inicializamos variable de diferencia horaria respecto la máquina
int diferencia =1;

int s = second(); // Values from 0 - 59
int m = minute(); // Values from 0 - 59
int h = diferencia + hour(); // Values from 0 - 23
//ellipse(width/2,height/2-10, width-30,height-70); //esfera del reloj
String horas = str(h);
String minutos = str(m);
//muestra hora actual por pantalla
fill(0);
textAlign(LEFT);
text("EL RELOJ-ALARMA DEFINITIVO", 30,40);
text("hora actual--> "+horas+":"+minutos, 80,80);

button.draw();
if (!control_alarma)
{
fill(180,0,0);
textAlign(LEFT);
text("alarma NO activada", 80, 100);
}
if (control_alarma)
{
fill(0,180,0);
textAlign(LEFT);
text("sonará a las "+alarma[0]+":"+alarma[1], 80, 100);

}

// compara hora actual con la de la alarma
if(horas.equals(alarma[0])&& minutos.equals(alarma[1]) == true)
{
cancioncilla.volume(100);
cancioncilla.play();
//conectar con cochecito
fill(0,0,180);
textAlign(LEFT);
text("ahora suena", 80, 120);
}

}

void keyPressed()
{
//// let the button handle any keypresses
button.keyPressed();
}

void keyReleased()
{
//// let the button handle any keyreleases. this is
//// important as PButton sends its event on release!
button.keyReleased();
}

void libraryEvent(Object library, int event, Object data) {
if (library == button) {
//// if the button sent a library event, it was pressed!
guarda_alarma();
control_alarma = !control_alarma;
}
if (library == cancioncilla) {
text("suenas", 80,140);
}
}

Debemos añadir la parte de la transmisión bluetooth del programa y solucionar la excepción de java cuando acaba el archivo de audio. Estamos en ello!!!

viernes, 18 de enero de 2008

pausado....

.... por examenes

miércoles, 16 de enero de 2008

Módulo bluetooth (II)

Ejecutamos código y montaje y no obtenemos ningún resultado, el pc no detecta el dongle de la wiring. así que la pregunta es: puede conectarse un dongle? no será necesario un modem bluetooth como en el tutorial de wireless??

martes, 15 de enero de 2008

Módulo Bluetooth

Antes de tratar de conectar la placa wiring con el móvil, efectuaremos una prueba con Processing desde un ordenador portátil con Bluetooth. Vincularemos el dongle con el portátil mediante una conexión de puerto serie del ordenador (por defecto un COMx). Una vez esten vinculados los dispositivos y sepamos que puerto COM usa nuestra máquina, modificamos esta variable en el código de processing. [ver punto 3]

Requisitos de Hardware

Necesitamos conectar un Dongle de bluetooth a la placa Wiring. Como el dongle se conecta mediante un USB, conectaremos un adaptador de usb a la placa Wiring.

¿Cómo?

1. Usaremos las posibilidades de los puertos serie de wiring. Usamos el puerto serial1 (situado en los pins 2 y 3).

2. Buscamos cuales son las conexiones y requisitos de un USB. En resumen:
Pin Nombre Color del Cable Descripción
1 VCC Rojo +5V
2 D− Blanco Data −
3 D+ Verde Data +
4 GND Negro Tierra


3. Partiendo del tutorial de wireless de wiring y del ejemplo de serial input. Hemos basado nuestra primera versión del código en estos 2 ejemplos.


----------------------------------------------------------------CÓDIGO EN PROCESSING
import processing.serial.*;

Serial port;

void setup()
{
size(200, 200);
noStroke();
framerate(10);

// Listamos todos los puertos series disponible en el panel output
// Debemos escoger a que puerto tenemos conectada la placa wiring.
//En esta máquina habiamos conectado el usb en el puerto COM4 normalmente,
//ahora que pasamos a vincular el dongle con nuestro bluetooth debemos indicarle //al programa por qué puerto tx y rx. Normalmente los COM de bluetooth se me crean en el COM40
// verificar con la siguiente instrucción
println(Serial.list());

// Debemos abrir el puerto al que la placa se conecta
// Debemos poner a la misma velocidad el puerto y la placa !!!! (9600bps)
port = new Serial(this, Serial.list()[?], 9600);
}


void draw() //simplificamos el ejemplo con un simple ENTER
{
background(#222222);
if(keyPressed)
{
if(key == 'o' key == 'O')
{
port.write('O'); //ENVIAMOS O DE ON PARA EMPEZAR
}
}
}

---------- CÓDIGO EN PLACA WIRING

char val; // variable para recibir datos del puerto serie
int outpin0 = 0; // roda dreta conectada al pinPWN0
int outpin1 = 1; // roda esquerra conectada al pinPWN1

void setup()
{
//pinMode(ledpin, OUTPUT); //crec q les PWN ja estan configurades com sortida // pin 48 (on-board LED) as OUTPUT
Serial.begin(9600); // start serial communication at 9600bps
}

void loop() {
if( Serial.available() ) // si está disponible para leer
{
val = Serial.read(); // lee el puerto serie y lo guarda en val
}
if( val == 'O' ) // si recibimos O = ON empezamos programa
{
Empezar el código del prototipo!!!!!!!!!!!!!!!!
}
delay(100); // espera 100ms para la siguiente lectura del puerto
}

  • Empezaremos las pruevas esta tarde y colgaremos posteriormente la versión de código definitiva, también los puertos y un esquema.

domingo, 13 de enero de 2008

Cogiendo impulso!!

Incorporamos al proyecto dos jumpers gentileza de Xavi Costa, que estañamos a los servos, consiguiendo una buena conexión de los exservosaramotorsDC a la placa Wiring:

Cuando le intentamos dar autonomía al invento, advertimos que con una alimentación de 9V no tenemos suficiente. Desechamos la idea de poner dos pilas de 9V en serie, ya que la placa Wiring sólo soporta 13V de alimentación, por lo que le conectamos en serie el portapilas de 4x1,5V, previamente adaptado para 2x1,5V. El resultado és el siguiente:


Dado los precios abusivos de las cajas de metacrilato, decidimos darnos un capricho y utilizar de carcasa la caja de una famosa marca de bombones...El resultado es tan cuco como se muestra a continuación[tacháaaaaan] :