Introducción
En el siguiente ejercicio se desarrolló la simulación de un Ventilador Auto-ajustable a la temperatura del ambiente haciendo réplica del ejemplo visto en clase en la Unidad 1 "Algoritmos Adaptativos".
Desarrollo
El lenguaje que se utilizó fue JAVA y se utilizaron 2 Threads que se conectaban e interactuaban constantemente para mostrar el cambio de temperatura y estado del ventilador.
En la clase Reconocedor.java se fija una temperatura inicial de 25º C para comenzar la simulación e instanciamos el HiloTemperatura para que comience a evaluar la temperatura e irla ajustando dependiendo del estado actual del Ventilador.
A continuación se presenta un fragmento del código
while(true) { long end = System.currentTimeMillis(); //Se obtiene la hora del sistema en milisegundos (final) long dif = end - start; //Se calcula el tiempo transcurrido entre la hora del sistema final e inicial if(dif >= 20000) { //Genera una temperatura aleatoria cada 20 segundos temp = ((genRand.nextInt(10000) % 30) + 17); //Se genera un numero aleatorio entre 17 y 30 temperatura = (double)temp; // Se hace la conversion de tipo de dato entero a double /*Se pasan los valores de temperatura y velocidad en la clase Hilo Temperatura*/ hiloTemp.setTemperatura(temperatura); hiloTemp.setVelocidad(velocidad); start = System.currentTimeMillis(); if (temperatura > 24) { estadoVentilador = true; setEstado(estadoVentilador); } else { estadoVentilador = false; setEstado(estadoVentilador); } velocidad = hiloTemp.getVelocidad(); temperatura = hiloTemp.getTemperatura(); } else { if (temperatura > 24) { estadoVentilador = true; setEstado(estadoVentilador); } else { estadoVentilador = false; setEstado(estadoVentilador); } velocidad = hiloTemp.getVelocidad(); temperatura = hiloTemp.getTemperatura(); } for(int r=0;r<20;r++){System.out.println("\n");} System.out.println("\t\t----------------------------------"); System.out.println("\t\t~Sistema Control de un Ventilador~"); System.out.println("\t\t----------------------------------"); System.out.println("\n\t\t\t~Estado del Ventilador~"); System.out.println("\n\tTemperatura Ambiental -> "+temperatura+" ºC"); System.out.println("\n\tVelocidad -> "+velocidad); System.out.println("\n\tEstado -> "+state); temperatura = hiloTemp.getTemperatura(); hiloTemp.setTemperatura(temperatura); Thread.sleep(5000); } //Fin del while
En la clase HiloTemperatura.java se hacen validaciones para ajustar la velocidad del ventilador y reducir o aumentar la temperatura dependiendo del estado actual del mismo.
Si el ventilador se encuentra prendido, dependiendo la velocidad del mismo, irá bajando la temperatura del ambiente en un intervalo de 500 milisegundos del hilo de la clase Ventilador, es decir, que para fines prácticos, cada 500 milisegundos disminuirá la temperatura del Ventilador dependiendo de la velocidad del mismo y el estado del Sistema.
A continuación se presenta un fragmento del código:
while(true) { /*Se ira reduciendo la temperatura ambiental dependiendo de la velocidad del ventilador cada 500 milisegundos*/ if ( (temperatura >= 25) && (temperatura <= 28) ) { velocidad = 1; hiloVent.setVelocidad(velocidad); temperatura = temperatura - 0.10; hiloVent.setTemperatura(temperatura); } else if( (temperatura >= 29) && (temperatura <=34) ) { velocidad = 2; hiloVent.setVelocidad(velocidad); temperatura = temperatura - 0.05; hiloVent.setTemperatura(temperatura); } else if( temperatura >= 35 ) { velocidad = 3; hiloVent.setVelocidad(velocidad); temperatura = temperatura - 0.02; hiloVent.setTemperatura(temperatura); } else if (temperatura <= 24) { velocidad = 0; hiloVent.setVelocidad(velocidad); temperatura = temperatura + 0.12; hiloVent.setTemperatura(temperatura); } Thread.sleep(500); }
Para ver el código completo:
http://gist.github.com/4067869
Video
Conclusiones
Una vez visto los resultados de la aplicación se observa que hay un ligero retardo en el ajuste de la velocidad en pantalla, pero aún así se ajusta y se va aumentando o disminuyendo dependiendo de la velocidad.
Para fines de simulación, cada 20 segundos se cambia la temperatura del ambiente aleatoriamente para poder observar en las corridas diferentes ajustes.