PROYECTO ÁRBOLES Centro: IES Vicente Aleixandre. Curso: 4º ESO. Grupo: Grupo 6. Trabajo realizado por: Pablo Guerrero Huerga y Ana Rodríguez Pappalardo. Fecha de realización: 12/06/2016 1
Índice 1. Finalidad del proyecto 2. Búsqueda de información 3. Subsistemas 4. Planificación 5. Hardware 6. Software 7. Funcionamiento 8. Análisis del proyecto 9. El equipo 2
1. Finalidad del proyecto Queremos realizar una animación en la pantalla de árboles que se vayan moviendo en función de nuestro movimiento en una zona delante del ordenador. Ampliaciones: Una vez que hayamos conseguido el correcto movimiento de estos, podemos hacer reproducir sonidos e incluso cambiar la velocidad con la que los árboles crecen y la cantidad de ramas que tienen dependiendo de la zona en la que estemos. Esquema de entradas y salidas: 2. Búsqueda de información En esta página hemos encontrado como realizar las curvas de las que están formadas los árboles en processing con la función bezier : https://processing.org/reference/bezier_.html Hemos buscado información sobre cómo trabajar con la librería de sonidos minim : http://dunadigital.com/processing/2014/01/14/como reproducir un sonido/ 3
3. Subsistemas Hemos dividido el proyecto en dos subsistemas funcionales: Arduino y Processing. Arduino es el encargado de conectarse con el sensor de distancia a través de la placa Arduino Genuino Uno. Se encarga de leer los valores que da el sensor y eliminar los erróneos. Processing es el encargado de la creación de los árboles en sí. Se encarga por una parte de crear la animación, de hacer la detección conectándose con el programa Arduino y leyendo los datos que envía el sensor de distancia y por último se encarga de reproducir el sonido. 4
4. Planificación Materiales: Placa de Arduino Uno y cable Basic shield Kiwibot Sensor de distancia (ultrasonidos) También hemos necesitado un proyector para mostrar el resultado. Presupuesto: Materiales: Descripción: Unidades : Precio/Unidad: Placa Arduino Uno Placa Kiwibot Sensor de distancia Proyector Es el medio de comunicación entre el ordenador y el sensor. Nos sirve en este caso de adaptador para conectar el sensor de distancia a Arduino. Percibe la distancia a la que estamos. Se usa para que el proyecto sea más real y visible. 1 21,78 1 29,95 1 7,15 1 58,78 Total: 117,66 5
5. Hardware Esquemas electrónicos Lista de componentes: Placa Arduino Genuino Uno Placa Kiwibot Sensor de distancia por ultrasonidos HC SR04 6. Software Código Arduino: // Conexion pines del sensor de distancia const int triggerpin = 11; // Pin donde conectamos el emisor 6
const int echopin = 12; // Pin donde conectamos el receptor // variables para almacenar datos int duration = 0; // Variable para almacenar el tiempo int distance = 0; // Variable para almacenar la distancia unsigned long current_time = 0; unsigned long previous_time = 0; void setup () { Serial. begin (9600); // Abrimos el puerto serie pinmode (triggerpin, OUTPUT ); // Configuramos trigger como salida digital pinmode (echopin, INPUT ); // Configuramos echo como entrada digital void loop () { current_time = millis (); if (current_time previous_time > 100) { previous_time = current_time; distance = distancia (); //Serial.println (distance); if (distance > 0) { Serial. write (distance); int distancia() { //Inicializamos el sensor digitalwrite (triggerpin, LOW ); delaymicroseconds (5); // Enviamos una señal activando la salida trigger durante 10 microsegundos digitalwrite (triggerpin, HIGH ); delaymicroseconds (10); digitalwrite (triggerpin, LOW ); // Medimos el ancho del pulso, cuando la lectura sea HIGH // devuelve el tiempo transcurrido en microsegundos duration = pulsein (echopin, HIGH, 15000); // Calculamos la distancia en cm int distance = duration * 0.01715; // Enviamos los datos medidos a traves del puerto serie return distance; 7
Código Processing: import ddf.minim.*; //ANIMACION ARBOLES // clase Arbol 10 objeto miarbol Arbol[] miarbol= new Arbol[10]; //VARIABLES PARA LA MUSICA Minim minim; AudioSample musica; import processing.serial.*; Serial myport; // Create object from Serial class int val; // Data received from the serial port void setup () { String portname = Serial. list ()[0]; myport = new Serial( this, portname, 9600); size (1000, 750); //hay que borrar esta linea al incluir algun sonido smooth (); nofill (); // creamos los diez objetos arbol for ( int i=0; i< miarbol. length ; i++) { miarbol[i]= new Arbol(i*100+50); //PARA CARGAR LA MUSICA: // minim=new Minim(this); //musica=minim.loadsample("lluvia.mp3"); //musica.trigger(); //size(1000, 750, P3D); //con musica es necesario borrar la linea de size arriba void draw () { if ( myport.available() > 0) { // If data is available, val = myport.read(); // read it and store it in val val=val*4; println (val); background (230); // llamamos a las funciones for ( int i=0; i< miarbol. length ; i++) { miarbol[i].deteccion(); miarbol[i].dibujar(); //println (miarbol[0].velocidad_ramas); 8
class Arbol { // variables float posicion; //posicion de cada arbol float velocidad_tronco; // velocidad de crecimiento float grosor; //grosor de las ramas (cada uno tiene diferente grosor) float color_rama; //los colores de cada arbol tambien son diferentes float crecimiento_restante; // representa crecimiento a 0 no crece mas float velocidad_ramas; //velocidad con la que las ramas se mueven dependiendo de si estamos en la posicion del arbol float ramas; //numero de ramas por arbol float curva_ramas; //define el patron de movimiento aleatorio que sigue cada arbol // constructor Arbol( float tempposicion) { velocidad_tronco=4; color_rama= random (30, 100); grosor= random (1.8, 3); curva_ramas= random (1, 7); crecimiento_restante=1000; posicion=tempposicion; velocidad_ramas=100; ramas=0; // FUNCIONES // funcion dibujar arbol void dibujar() { stroke (25, color_rama, 5); //color de las ramas strokeweight (grosor); //grosor de las ramas float t= framecount / velocidad_ramas; // t es la velocidad de las ramas del arbol 1 for ( int i=0; i<ramas; i++) { bezier ( posicion, crecimiento_restante+ height, //posicion del tallo x e y posicion, noise (2, i, t)* height 50, posicion, noise (5, i, t)* height 50, posicion width /2+ noise (curva_ramas, i, t)* width, crecimiento_restante+ noise (6, i, t ) * height 200 ); // funcion deteccion de movimiento de la persona void deteccion() { //si estamos en la posicion del arbol if (val>=posicion 45 && val<=posicion+45) { //el movimiento disminuye hasta 100 (va a moverse mas rapido) //velocidad_ramas=100.0; // manera antigua // de forma progresiva if (velocidad_ramas>100) { velocidad_ramas=velocidad_ramas 0.05; 9
// si el arbol no ha crecido del todo if (crecimiento_restante>0) { crecimiento_restante=crecimiento_restante velocidad_tronco; //esta es la velocidad con la que crecen los arboles if (ramas<20) { //las ramas van aumentando hasta 20 como maximo ramas=ramas+0.05; else { // si no esta en la posicion //el movimiento aumenta hasta 1000 (va a moverse mas lento) // velocidad_ramas=1000; if (velocidad_ramas<1000) { velocidad_ramas=velocidad_ramas+0.05; 7. Funcionamiento Aquí queda adjuntado el video explicativo del proyecto: https://youtu.be/uek2qe0iltg 8. Análisis del proyecto Análisis del funcionamiento del proyecto: En nuestra opinión, el proyecto lo hemos sabido llevar bastante bien a cabo después de su dificultad, ya que siempre nos hemos echado una mano cada uno Ampliaciones del proyecto: (como se podría seguir desarrollando el proyecto) Se podría hacer aumentar el sonido a medida que nos movemos o nos quedamos parados. Se podría crear un paisaje detrás de la animación, como por ejemplo el Sol pasando de un lugar a otro, haciéndose de día y de noche. También incluso como último recurso, se podría hacer mover las ramas de los árboles con la velocidad dependiendo de lo rápido que te estés tú moviendo en la realidad. 10
9. El equipo Constitución: Pablo Guerrero Huerga Ana Rodríguez Pappalardo Normas: Respeto entre los compañeros Trabajo en equipo Escuchar y tener en cuenta las ideas de los otros componentes Dar lo mejor de uno mismo Roles: Ana Programadora Pablo Programador Canales de comunicación: Gdrive: carpeta compartida Correos de gmail Grupo de whatsapp 11