lunes, 15 de mayo de 2017

Proyecto Final Drinkduino - Día 9

Finalmente, hoy es nuestro último día de clase y por lo tanto de proyecto. Hoy hemos actualizado lo que nos quedaba de los blogs, y para entregar el trabajo de forma más clara hemos decidido realizar el esquema de la protoboard en fritzing, con el fin de facilitar el consiguiente montaje.

Este es el esquema eléctrico:

 

viernes, 12 de mayo de 2017

Proyecto Final Drinkduino - Día 8

Penúltimo día de proyecto. Hoy hemos acabado el código fuente, añadiendo cuatro estados más a la programación (estado5, estado6, estado7, estado8); de tal manera que tendremos cuatro botones para seleccionar bebidas por individual, y otros cuatro botones para seleccionar cuatro combinaciones diferentes.
Así ha quedado la programación de los estados añadidos:

 


Este vídeo muestra el funcionamiento final del programa:


Proyecto Final Drinkduino - Día 7

Hoy hemos terminado la programación principal del proyecto, corrigiendo errores anteriores. Hemos conseguido que la válvula que abre el depósito de los líquidos lo haga cuando el sensor de proximidad detecte que el vaso está a la distancia requerida y cuando se apriete el botón del líquido o mezcla de requerido. De este modo, aseguramos que aunque se apriete el botón del líquido, este no salga a menos que esté el vaso.
A la hora de trabajar con la protoboard, hemos tenido que poner un pulsador en vez de todo botones de cuatro patas, ya que no hemos encontrado más.

Aquí adjunto un video para ver el como va evolucionando el proyecto:


viernes, 5 de mayo de 2017

EXTRA BALL - SIMULADOR DE ONDAS

Como proyecto adicional he conseguido plasmar una idea que lleva tiempo queriendo llevar a cabo: un simulador de ondas en processing. Tras algunos días he conseguido hacer que funcione. Para dibujar las ondas, el programa dibuja un círculo de radio 1 (un punto) en la posición (x,y) que le corresponde.

Los cálculos que he debido hacer han sido arduos, ya que los ordenadores procesan datos con una frecuencia del orden de GHz y, por esto, el abanico de frecuencias que se pueden usar es muy reducido, si se quiere conseguir una sola onda y no dibujos que siguen un patrón sinusoidal. Para solventar estos problemas, he usado una librería que permite añadir interfaces interactivas que cambian los parámetros del programa, restringiendo el mayor y el menor valor que se les puede dar a los parámetros que el usuario puede cambiar.

La librería se llama ControP5. En el programa, se pueden cambiar la amplitud y la frecuencia de la onda que se dibuja, y pulsando espacio, se borra la onda y se comienza a dibujar de nuevo.


Si se quiere probar el código, es necesario instalar la librería, ya que de lo contrario el programa no funcionará integramente. Descarga la librería aquí.
Mi código fuente es:

import controlP5.*;
ControlP5 MyController;

float t=0;
float x=0;
float y=0;
float frec=0;
float faseInicial;
float amplit;


void setup(){
  size(500,500);
  t = 0;
  amplit = 50;
  frec = 0.005;
  background (255);
  MyController = new ControlP5(this);
  MyController.addSlider("frec",0.001,0.02,0.005,300,50,100,10);
  MyController.setColorCaptionLabel(0);
  MyController.addSlider("amplit",0,100,50,300,60,100,10);
  MyController.setColorCaptionLabel(0);
  textSize(10);
  fill(0);
  text("Pulsa el espacio para borrar",300,30);
}

void draw(){
 
  tiempo();
  x = t;
  y = amplit * sin((2 *PI*frec*t));
  noStroke();
  fill(0);
  ellipse(x,y + height/2,1,1);
  if (keyPressed && key == ' '){
    t = 0;
    background(255);
    textSize(10);
    fill(0);
    text("Pulsa el espacio para borrar",300,30);
  }
 
}

void tiempo(){
  t = t + 0.5;
}

Proyecto Final Drinkduino - Día 6

El día anterior acabamos la clase con el problema del sensor de proximidad. Lo que queremos conseguir es que una vez pulsado el botón, el LED que indica si sale el líquido solo se active si además, el sensor de proximidad detecta que el objeto esta a la distancia requerida. Además, el LED permanecerá encendido el tiempo que nosotros le asignemos.

El anterior día no conseguimos que funcionase, ya que el LED se encendía sólo si pulsábamos el pulsador, independientemente de que el sensor de proximidad detectase o no objeto próximo a él.
Para solucionarlo, hemos modificado el algoritmo, de modo que hemos introducido un else al if(estado) de cada válvula. Así hemos modificado el algoritmo:

En un primer momento tenía esta forma la función salida;

Finalmente hemos añadido el else y la función tiene esta forma;

El algoritmo de la función puedes verlo haciendo click aquí;

Proyecto Final Drinkduino - Día 5

Hoy hemos avanzado mucho respecto otros días. El proyecto ya va cogiendo forma, hemos añadido una protoboard más para que el montaje del circuito quede mucho más claro y ordenado. Además, hemos realizado algunos cambios en el algoritmo del proyecto; entre ellos, hemos añadido un nuevo comando ("digitalRead") con el fin de que nos permita leer la señal de un botón.

Hasta ahora, ya tenemos que a una distancia adecuada del sensor de proximidad funcione y que pulsando el botón consiga encenderse el LED que indica si el líquido sale. Sin embargo, nosotros queremos que solo pueda salir cuando también este a la distancia requerida y ahora el LED luce aunque no este cerca. Para el próximo día queremos solucionar este problema.

Proyecto Final Drinkduino - Día 4

Hemos seguido montando el circuito, aunque nos ha dado algunos problemas con las resistencias. Además, hemos intentado introducir los botones que activaran la salida del líquido, lo cual ha acabado en un intento fallido ya que no cuenta con suficiente resistencia. Ante esto, hemos decidido que debemos introducir una placa más, para tener el circuito más claro y ordenado, además de una resistencia mayor que las que tenemos.

Nuestra intención para el próximo día es tener prácticamente terminado el montaje del circuito, o por lo menos que todos los componentes de él nos funcionen correctamente por separado para que luego podamos juntarlos todos y que funcionen bien.