martes, 11 de octubre de 2011

Actividad N°1 "PARÁMETROS"


  • Autor: Patricio Bello Villalobos
  • Competencia :Desarrollo de software. Nivel : Desarrolla soluciones de software aplicando procesos de análisis, diseño y prueba a problemas simples; centrados en la programación, los datos y las Interfaces Humano/Computador (IHM).

  • Descripción de la actividad: 
  • Un robot se desplaza por una superficie blanca con puntos negros. La superficie es rectangular y posee paredes en sus bordes. Construya un robot que implemente las siguientes funcionalidades:
    1. Cada vez que el robot choca con una pared debe:
    1. retroceder un poco,
    2. girar 180° a la izquierda o derecha,
    3. disminur su potencia en 10,
    4. contar los choques con las paredes,
    5. y seguir su recorrido con la nueva potencia
    1. Al pasar por un punto negro debe:
    1. contarlo,
    2. girar en un ángulo aleatorio menor a 180° a la izquierda o derecha,
    3. aumentar su potencia en 10,
    4. y seguir su recorrido con la nueva potencia.
    1. El robot se desplaza por tiempo indefinido, deteniendo su recorrido ante una señal auditiva sobre 80 db.
    2. Al final del recorrido, informará en su visor el n° de choques y el n° de puntos negros detectados.


  • Solución: 
  • Diseño:

    En las siguientes fotografías aclararemos cada parte que compone nuestro robot.

    http://www.mediafire.com/imgbnc.php/1c7f1a8fdf623ea4ff38feb2ef7db207c0bdd0b09130f0b83896582f27649e534g.jpg

    -Los sensores: en nuestra actividad usaremos los siguientes sensores:

    Sensor de Tacto: el sensor de tacto está ubicado en posición frental, ya que al chocar con la pared éste será contabilizado y a la vez retrocederá siguiendo su recorrido.
    Sensor de Luz: el sensor de luz está ubicado en dirección hacia abajo, para que pueda reconocer el color de la base (blanca) y a su vez la de los puntos negros, estos últimos para ser contabilizados.
    Sensor de Ultrasonido: el sensor de ultrasonido esta ubicado en dirección hacia arriba, para que al emitir el sonido, para detenerse éste lo escuche con mayor facilidad


    -Las Ruedas:

    Ruedas Delanteras: usaremos 2 ruedas delanteras medianas, la cual facilitara el movimiento del robot.

    Rueda trasera: usaremos 1 rueda trasera, será de tamaño pequeño la cual nos facilitara que el robot a la hora de girar, gire con mayor precisión.

    Imagen 2
    http://www.mediafire.com/imgbnc.php/ba5095ea05dceb2f6f5b810871559e079a75fa3b57e1f39b3a7f4e6a6f3cf4d04g.jpg

    -Los Motores: en nuestro robot usaremos 2 motores los cuales serán usados para mover las ruedas traseras de nuestro robot.

    Imagen 3
    http://www.mediafire.com/imgbnc.php/b8931507065517c6f45652b5b30ef96a8f05dba0434d4efa78ab6e782ce4f0df4g.jpg

    Estas fotografías muestran el robot en todos sus ángulos y como realizo el recorrido de la actividad.

  •  -En el desarrollo de nuestro robot, tratamos de representarlo lo más claro posible, mostrando cada parte que compone nuestro robot para aclarar su parte física, sobre todo lo que es referido a los sensores por el lugar en que están ubicados. También mostraremos un video del robot funcionando, y aclaramos el código a través de comentarios.

    -El aprendizaje de las 2 nuevas instrucciones de lenguaje NXC fueron utilizadas con éxito, al aplicarlas y ver la reacción que tuvo el robot frente a estas, las 2 instrucciones utilizadas fueron: float (utilizado para que el robot se detenga lentamente), OnFwdReg y OnRevReg (utilizado para que el avance y/o retroceso del robot sea constante).


Código:


Video:



  • Reflexión: En esta actividad, pude realizar realizar la creación de un programa que realiza todas las funciones del robot en cuestión, esto me permitió ampliar mis conocimientos enormemente en la materia, con los cuales pude desarrollar un análisis mas completo de los futuros problemas propuestos, dando soluciones efectivas y rápidas, en todo lo relacionado con Arrays[].

Trabajo Laboratorio Nº2


  • Autor: Patricio Bello Villalobos
  • Competencia: DESARROLLO DE SOFTWARENivel: Desarrolla soluciones de software aplicando procesos de análisis, diseño y prueba a problemas simples; centrados en la programación, los datos y las Interfaces Humano/Computador (IHM). 

  • Descripción de la actividad: Analice y desarrolle un Programa que permita intercalar los dígitos de dos números enteros. Por ejemplo si se tiene 123 y 171 el número resultante debería ser: 112731.

  • Solución: 
Entrada:
Números enteros positivos.
Salida:
Número entero positivo.


-Obtener dos números enteros positivos vía Scanner PrimerNumero y SegundoNumero.
-Realizar una división por 10 a dichos números hasta reducirlos a 0, obteniendo numero de dígitos que este contiene:

While (PrimerNumero>0)                                                      While (SegundoNumero>0)
PrimerNumero/10;                                                                 SegundoNumero/10;
NumeroPri++;                                                                          NumeroSeg++;




-Obtener Dígitos de ambos números, mediante el modulo 10 de estos, e ir ubicándolos en la posición numérica correspondiente (Unidad, Decena, Centena, Unidad de mil…etc.)

M1=M1*100;                                                                M2=M2*100;


While (NumeroDigitos=Veces)                                   While (NumeroDigitos >Veces)
Digito=PrimerNumero%10;                                        Digito=SegundoNumero%10;
M1=1;                                                                             M2=10;                                                                 
Final=Final+(Digito*M1);                                            Final=Final+(Digito*M2);
PrimerNumero=PrimerNumero/10;                        SegundoNumero=SegundoNumero/10;
Veces++;                                                                         Veces++;      
Final=Final+(Digito*M1);                                            Final=Final+(Digito*M2);

Con esto obtenemos el Número entrelazado, y luego solo basta con imprimirlo en pantalla

Imprimir ("El numero Final es = "+Final);


CODIGO:

* @author Patricio Bello Villalobos - Daniela Muñoz Muñoz
 * Ejercicio Número 4
 */
import java.util.*;

public class Intercalar {

    public static void main (String[]args)

 {
     int primernumero;
     int segundonumero;
     int CantidadPrimerNumero=0;
     int CantidadSegundoNumero=0;
     int Final=0;

     System.out.println("Ingrese el primer numero a intercalar");
     Scanner L= new Scanner(System.in);
     primernumero=L.nextInt();

     System.out.println("Ingrese el segundo numero a intercalar");
     segundonumero=L.nextInt();

     int x=primernumero;
     int y=segundonumero;

      while(x>0)
     {
     CantidadPrimerNumero++;
      x=x/10;
     }
    
     while(y>0)
     {
     CantidadSegundoNumero++;
     y=y/10;
     }

     int Veces=0;
     int x1;
     int y1;
     int M1=1;
     int M2=10;

     while(Veces<=CantidadPrimerNumero || Veces<=CantidadPrimerNumero)
     {
     x1=primernumero%10;
     y1=segundonumero%10;
    
     Final=Final+(y1*M1);
     Final=Final+(x1*M2);

     primernumero=primernumero/10;
     segundonumero=segundonumero/10;
    
     M1=M1*100;
     M2=M2*100;
    
     Veces++;
     }

     System.out.println("El numero Final es = "+Final);
     }
}



  • Reflexión: Gracias a este trabajo, pude desarrollar una solución de software aplicando procesos de análisis, diseño y prueba al problema planteado; centrado en la programación JAVA, los datos del usuario y las Interfaces Humano/Computador, este trabajo me permitió desarrollar y ampliar mis conocimientos en ciclos anidados, los cuales sirven en muchos problemas comunes como una forma fácil y rápida de solución.

Actividad 3: Robot Ninja


  • Autor: Patricio Bello Villalobos
  • Competencia : DESARROLLO DE SOFTWARENivel: Desarrolla soluciones de software aplicando procesos de análisis, diseño y prueba a problemas simples; centrados en la programación, los datos y las Interfaces Humano/Computador (IHM).

  • Descripción de la actividad:
  • A continuación se detalla la tercera actividad de programación  de robot, en esta ocasión nuestro robot debió realizar complejas tareas utilizando la información obtenida por sus dos sensores incorporados, el sensor de tacto y el de luz, nuestro robot debía localizar cinco puntos distintos en una pared y colocar explosivos en cada uno de ellos avisando por medio de una alarma su detonación  y mostrar en la pantalla la cantidad restante de explosivos, a lo anteriormente mencionado también se le sumaba la dificultad de tener que esquivar círculos negros en el área de desplazamiento utilizando el sensor de luz, cada circulo simbolizaba un puesto de vigilancia del enemigo que el robot debía esquivar, luego de las 5 detonaciones, nuestro robot debía encontrar un puesto de vigilancia y quedarse en la posición para atraer la atención del enemigo.


  • Solución: Al realizar este tercer trabajo, nos vimos enfrentados a una serie de problemas que fueron los siguientes:
    Lo primero que se nos presento fue que teníamos que colocar el sensor de luz, pero el problema era que no había espacio suficiente enfrente del robot producto que el sensor touch estaba puesto, la  solución que le dimos al presente problema fue desarmar el robot para así darle una nueva configuración para que los sensores estuviesen puestos enfrente del robot.
    Y nuestro segundo y recurrente problema fue la programación del robot ya que se agregaron nuevos elementos, por lo cual tuvimos muchos problemas con ellos y la solución que le dimos fue leer el tutorial de NXC  que nos dio el profesor y de este modo nos quedó más claro y además de leer consultamos con nuestros compañeros quienes nos brindaron su ayuda.
    Y de este modo logramos darle una solución a cada uno de los problemas que se nos presentaron en el transcurso del desarrollo de nuestro trabajo y así logramos terminar nuestro trabajo de manera satisfactoria.
    Pseudocódigo:

    Avanzar
    Mostrar explosivos restantes en la pantalla
        Si choca con una pared debe
                Reproducir un sonido de alarma
                Mostrar la nueva cantidad de explosivos
                Retroceder medio segundo
                Esperar un segundo más
                Girar aleatoriamente a la derecha con un ángulo entre 90º y 270º
                Avanzar para detectar más puntos de la pared
         Si encuentra un punto negro debe
                Esquivar el punto utilizando alguna estrategia
    Y al detectar el 4º punto débil en la pared debe
                Alejarse de la última explosión por dos segundos
                Tocar una melodía
                Buscar un punto negro y quedarse ahí
                Detener todas las acciones y apagar el programa.

     Codigo:


    // Este programa hace que el robot ande en una base como infiltrado,
    // esquivando los puntos negros ( guardias) en la pista, en busca de detonar
    // las paredes, al detonar tiene un sonido (indica la detonación de la bomba
    // y un mensaje en la pantalla que indica la cantidad de bombas restantes,
    // al detonar las 5 bombas(con la ayuda del contador)que son las requeridas
    // ocurre un tono final de las explosiones y tiene que ir en busca del
    // punto negro (guardia) para llamar la atención  de él,  esto último
    // marca el final del programa.


    #define Color_Negro 40 // Rango de luz para considerar que es el negro
    int esquivar=400;   // Variable usada saltar los puntos negros
    int contador=0;                // indica el valor inicial del Contador
                   
    int bombas= 5;                 // Marca la cantidad de bombas a detonar

    task main()
    {
    SetSensorLight (IN_3);//Encender sensor de luz que hace desbliar la parte negra
    SetSensorTouch (IN_1);// Enceder sensor de tacto para detectar las paredes.
    OnFwd (OUT_AC,75); // Instruccion que valla hacia adelante
    while (contador < 5)
                    {
                    if(SENSOR_1 == 1)
                    {
                    esquivar = Random (1300) + 300 ; // Esto le da el valor cuando va a
                                                   // a darse vuelta al tocar una pared
                    OnRev (OUT_AC,75); // Retroceda por medio segundo
                    Wait (500);
                    Off (OUT_AC);// Apagar motores por 2 segundos.
                    Wait (2000);
                    PlayTone (3000, 800); // Tono que marca la detonación de una bomba.
                    Wait(1000);
                    bombas --;
                    NumOut (50,50, bombas); //  Es para colocar en la pantalla la cantidad
                                   // bombas restantes
                    Off (OUT_AC); // Apagar motor
                    Wait (1000);  // Espera de 1 segundo.
                    OnFwd(OUT_AC,75);
                    OnRev(OUT_A,75);  // Estas 2 instrucciones indica que se de una media
                                   // vuelta para retomar camino.
                    Wait (esquivar);
                    OnFwd (OUT_AC,75); // Esta indica que valla hacia adelante
                    contador ++;
                    }
                    if (Sensor (IN_3) < Color_Negro)             // Sensor de luz
                    {
                    OnRev (OUT_AC, 75); // Al encontrar un  punto negro va hacia atras
                    Wait (500);
                    OnFwd (OUT_AC, 75);//  Con la Segunda instruccion indica que se
                    OnRev (OUT_C, 75);//   doble un poco.
                   
                    Wait (esquivar);  //
                    OnFwd (OUT_AC, 75);// Hace que el robot valla hacia adelante
                    }
                    }
                    while (Sensor(IN_3) > Color_Negro)
                    {
                    if(SENSOR_1 == 1)
                    {
                    esquivar = Random (1300) + 500 ;  // Valor del giro RANDOM
                    OnRev (OUT_AC,75);  //  Retroce al chocar
                    Wait (500);
                    OnFwd (OUT_AC,75);// Con la segunda instruccion hace que se de
                    OnRev (OUT_A,75);// una vuelta en RANDOM en busca de otra pared.
                    Wait(esquivar);
                    }
                    Off(OUT_AC); // Apagar motor
                    PlayTone (2000,5000); // Sonido que marca el final de la actividad
                    Wait (2000); // Duracion del tono
                    StopAllTasks (); // Marca el final de todas las instrucciones.

                    }

      }

    Video:


  • Reflexión: En esta actividad, pude realizar realizar la creación de un programa que realiza todas las funciones del robot en cuestión, esto me permitió ampliar mis conocimientos enormemente en la materia, con los cuales pude desarrollar un análisis mas completo de los futuros problemas propuestos, dando soluciones efectivas y rápidas.