jueves, 15 de diciembre de 2011

Actividad 2: PitFinder

Autor: Gianinna Salazar.
Competencia: Aprendizaje Autónomo. (Nivel 1).
Asignatura: Proyecto de Robótica.
Palabras clave: Informe, lenguaje NQC, programa Bricx Command Center.





Descripción de la Actividad 


Les voy a compartir mi experiencia, como estudiante de 1er año de Ingeniería civil informática, sobre la vez que tuve que realizar un informe sobre el Actividad 2: PitFinder que realice con el Robot NXT de la Universidad.


Este trabajo se trata de un robot que recorre la meseta de una montaña, y su misión es detectar las alturas de los precipicios de ésta, información que servirá para escaladores, paracaidistas, deportes extremos en general.

Implementación:
  • La meseta de la montaña estará dada por la mesa de competición sin paredes.
  • Cada vez que el robot detecte el fin de la mesa, deberá detenerse, y medir la altura del “precipicio”. Este dato será registrado y guardado en un ARRAY de enteros. 
  • Después de medir, debe (al azar) buscar otro borde de la mesa, y realizar la misma operación.
  • El robot finaliza su trabajo de búsqueda cuando registró la medición del 4to “precipicio”.
  • Finalizada la búsqueda genera un reporte que guardará en un archivo (WriteLnString).

Un ejemplo del formato del reporte sería:

REPORTE PITFINDER
--------------------
Precipicio 1 ==> 20 mts
Precipicio 2 ==> 10 mts
Precipicio 3 ==> 30 mts
Precipicio 4 ==> 20 mts

Al final, deberá mostrar en el visor del NXT el reporte de los precipicios anteriormente guardado en el archivo, a través de la lectura del mismo (ReadLnString).




Solución

Grupo: Kmikse.
Jefe de grupo: Gianinna Salazar.
Productor multimedia: Erick Matus.
Staff de Apoyo: Hernán Espinosa.
Secretario: Jorge Muñoz.


Introducción:

La actividad calendarizada para esta semana lleva por nombre "Pit finder". Actividad que tiende a trabajar con el uso de arreglos y el de guardar estos datos en un archivo. Este material está enfocado en lograr desarrollar código en la cual se logre utilizar la creación y uso de archivos dentro de la programación NXC desarrollada en la actividad nombrada y explicada a continuación.

La principal función del robot a programar es detectar las alturas que existen de una mesa al suelo. El robot se desplaza durante un ciclo determinado, específicamente si encuentra o cuenta cuatro alturas detendrá las tareas. Las alturas serán guardadas en un Array o arreglo, en la cual, luego de tener contadas todas las alturas, guardará esta información en un archivo. Para finalmente mostrar en pantalla los resultados obtenidos. Esta actividad dará énfasis en el uso de Array y el manejo de archivos. Herramientas nuevas para la creación de código NXC
.




Estrategia de trabajo
:

La estrategia de trabajo desarrollado para poder dar solución al problema planteado fue de la siguiente manera:

Como jefe de grupo fue asignada Gianinna Salazar en ella quedó la responsabilidad de llevar las "riendas" del equipo conformado, así como orientar a tener todos el documento, pseudocódigo, código fuente, imágenes, video, de la actividad en la que se trabajaba, en los plazos establecidos.

El productor multimedia fue Erick Matus. Para poder lograr un informe completo de la actividad en la que se trabajaba, la producción multimedia es crucial. Es por ello, que Hernán Espinosa se encargo de tomar cada foto, en primer lugar, de la construcción del robot para poder dar detalles de los implementos necesarios para la actividad. Luego, el productor multimedia se encargo de grabar el video de la ejecución final del robot con todo lo programado.

Jorge Muñoz estuvo en la parte de los reportes escritos que debía entregar el grupo en los plazos establecidos con anterioridad. Jorge Muñoz se enfoco en dar al informe contenido completo de la actividad de acuerdo a la pauta entregada.

El Staff de apoyo recayó en las manos de Hernán Espinosa el cual fue decidido por Gianinna Salazar. El ayudó en la forma de diseñar el robot, dándole estilo, para que una vez armado llevarlo la actividad con el código correspondiente.

Cada persona del grupo se le asignó tareas específicas. Pero, esto no quiere decir que cada quien, solo se enfoco en su tarea. Todo se distribuyo de acuerdo a etapas que se iban desarrollando durante la actividad. Por lo que, los integrantes en todo momento estuvieron trabajando para dar solución al problema. Ya que, si esto se desarrolla por asignación absoluta nada funciona con lo que se tiene planeado para desenvolverse de manera optima en lo que se tiene como solución final. 




Modelo de la Solución:

La solución de la actividad esta determina por 2 cosas de gran importancia: el diseño físico del robot, y un código adecuado para el diseño del robot. Es por ello, que se hará una descripción de cada parte empezando por el diseño físico.




Armado del robot:

Para lograr que nuestro robot estuviera en las óptimas condiciones durante la prueba a realizar. Este fue diseñado y adaptado a la actividad en que debía desempeñarse, para ello, el diseño implementado se mostrará a continuación:



Se tomó la decisión de armar un robot que tuviera las piezas adecuadas y precisas para la actividad. Se implementó un robot con el uso de tres ruedas, dos de ellas son medianas y la otra es pequeña (puesta en la parte de atrás del robot). Esta última es utilizada para que el robot tenga equilibro a la hora de desplazarse por la pista como también para dar vueltas con mayor eficacia.






El sensor utilizado en esta ocasión fue el de ultrasonido, ya que, la actividad lo requería. Este sensor fue implementado en la parte delantera del robot, apuntando directamente hacia el piso, ya que, una vez que saliera de la pista encontrándose específicamente en la orilla de esta hiciera una serie de suceso definidos en la actividad a realizar.



















Llegando al diseño final de nuestro robot listo para poder desempeñarse en la actividad encomendada por los programadores.



Código fuente:

Integrante grupo = Gianinna Salazar - Erick Matus - Hernán Espinosa - Jorge Muñoz

Programa en el cual un robot luego de encontrarse a la orilla de una mesa cuenta la altura que hay desde su posición hasta el piso, guardando los datos en un arreglo para luego llevar estos registro a un archivo txt.

#define Distancia_mesa 10  // define la distancia entre el sensorUS y la mesa

int Altura[5];                     // arreglo que guardara la medida del precipicio
int i=0;                              // declara la variable i
int k=0;                             // declara la variable k
int a=0;                             // declara la variable a
byte punteroarchivo;       // declara la variable punteroarchivo
string cadena;                 // declara la variable cadena
byte bytesescritos;         // declara la variable bytesescritos
int aumenta;                    // declara la variable aumenta
string escri="Abismo";  // declara la variable escri="Abismo"
string nun;                       // declara la variable nun
string raya=" =";             // declara la variable raya=" ="
int tamano;                     // declara la variable tamaño
string leer;                      // declara la variable leer
mutex dejar;                   // declara la variable dejar


sub GuardarDatos()         // subrutina que guarda el archivo
{
  CreateFile("reporte.txt",tamano,punteroarchivo);    // crea el archivo
  WriteLnString(punteroarchivo, "REPORTE PITFINDER", bytesescritos);
  aumenta++;
  nun= NumToStr(aumenta);
  cadena=NumToStr(Altura[k]);
  cadena=  escri +  nun + raya + cadena;
  WriteLnString(punteroarchivo, "--------------------", bytesescritos);
  for(k=0;k<ArrayLen(Altura);k++)  // for para guardar los arreglos
  {
    WriteLnString(punteroarchivo,cadena,bytesescritos);
  }                                                      //fin for
  CloseFile(punteroarchivo);
}                                                        //fin subrutina GuardaDatos



sub Guarda_altura()                      // subrutina que guarda altura
{
  Altura[i] = SensorUS(IN_2);       // guarda la distancia en el arreglo
  NumOut(0, i*10, Altura[i]);          // imprimir la altura por pantalla
  i++;
}                                                      //fin subrutina Guarda_altura



task avanzar ()                             // tarea principal avanzar
{
  while(i < 5)
  {                                                   // cuando la accion buscar se repita 4 veces
    OnFwd(OUT_B,55);
    OnFwd(OUT_A,80);
    if(SensorUS(IN_2)> Distancia_mesa)    // si la distancia es mayor a la mesa
    {
     a++;
     Acquire(dejar);                                //aumentara en uno la variable i
     Off(OUT_AB);                                 // se apagaran los motores
     Wait(2000);                                     // esperara por  2 segundos
     Guarda_altura();
     TextOut(50,5,"Centimetros");       //en conjunto muestra el texto cm
     NumOut(20,30,a);
     TextOut(30,30,"Precipicio");         // muestra el texto 1,2,3 & 4 de precipicio
     Off(OUT_AB);                                 //mantiene los motores apagados
     Wait(1500);                                     // para mostrar los datos imprimidos
     OnRevReg(OUT_AB,80,OUT_REGMODE_SPEED); //retrocede
     Wait(2200);                                    //por un segundo
     OnRev(OUT_B,70);                         //realiza giro
     OnFwd(OUT_A,90);                        // realiza giro
     Wait(Random (100)+600);              //random giro
     Release(dejar);
    }                                                        //fin if
  }                                                         //fin while


   int co=50;
   bool val = false;
   Off(OUT_AC);
   GuardarDatos();
   ClearScreen();
   OpenFileRead("reporte.txt", tamano, punteroarchivo);
   while (val == false)
   {
    if(ReadLnString(punteroarchivo,leer) != NO_ERR) val = true;
    TextOut(LCD_LINE8,co,leer);
    co= co-10;
    Wait(500);
   }                                                                 //fin while
    Wait(5000);
    CloseFile(punteroarchivo);
}                                                                   //fin tarea principal



task main()                                                 // main principal
{
 SetSensorLowspeed(IN_2);                   // se inicia el sensorUS
 Precedes(avanzar);                                 //realiza las tareas
}



Video de la Actividad:







Reflexión


Esta actividad nos sirvió mucho para trabajar con el uso de arreglos y manejo de archivos, puestos que, estas herramientas fueron fundamental para el funcionamiento de nuestro robot y para la creación del código. Los nuevos conceptos adquiridos durante el desarrollo de este proyecto son de gran ayuda al estar programando.

Para que todo el equipo pueda adquirir por igual estos instrumentos de programación los primero que todo, es que debe haber un fuerte compromiso con el equipo de trabajo, ya que, si no hay interés de las cosas nada se puede lograr. Para enfatizar en ello, los integrantes del grupo deben estar dispuestos a ayudar, para que, así se lograra de gran forma la solución al problema.

Nuestros resultados durante la actividad fueron óptimos y precisos a la hora de trabajar, pues, mediante el trabajo bien distribuido y asignado, y dispuesto a estar en constante evolución, de los saberes de la programación. Se alcanza la solución al problema planteado.

Quedando como grupo muy conforme con la actividad desarrollada.

Proyecto 1: Dribbler

Autor: Gianinna Salazar.
Competencia: Aprendizaje Autónomo. (Nivel 1).
Asignatura: Proyecto de Robótica.
Palabras clave: Informe, lenguaje NQC, programa Bricx Command Center.





Descripción de la Actividad 


Les voy a compartir mi experiencia, como estudiante de 1er año de Ingeniería civil informática, sobre la vez que tuve que realizar un informe sobre el Proyecto 1: Dribbler que realice con el Robot NXT de la Universidad.



Reglas del juego:

La idea de la competencia es que un robot autónomo encuentre la mayor cantidad de “zonas de puntaje” en la pista, sin chocar con los obstáculos presentes (paredes, bloques, etc), ya que cuando pase esto, termina el juego.


Cuando el robot vaya a chocar, el jugador debe indicarle que existe peligro de choque, a través de una señal audible (grito, pitazo, aplauso, etc), de modo que el robot no colisione.


Cada vez que el robot encuentra una zona de puntaje irá aumentando su velocidad.


Gana el jugador que logre pasar por la mayor cantidad de zonas de puntaje antes de chocar con algún obstáculo.



Especificaciones:


El robot debe iniciar su recorrido con una potencia de 10%.


La potencia de movimiento se aumentará en 10% cada vez que el robot detecte una zona de puntaje (círculo negro) hasta el máximo de 100%.


Mientras el robot busca zonas de puntaje se emitirá constantemente una música ad-hoc.


Cuando se detecte una zona de puntaje, el robot emitirá una música de anotación de puntos, registrará el puntaje obtenido, girará aleatoriamente sobre su eje, seguirá su rumbo con la nueva velocidad, y volverá a su música de recorrido.


Cuando el robot choque contra algún obstáculo se detendrá, finalizará todas las tareas y mostrará por pantalla el puntaje acumulado en el visor.





Solución


Grupo:
 Robotek2.0
Jefe de grupo: Jorge Muñoz
Productor multimedia: Gianinna Salazar
Staff de Apoyo: Hernán Espinoza
Secretario: Erick Matus



Introducción:

A través de este informe se proporcionará toda la información recabada en el Proyecto Nº1 Dribbler, estrategias de solución, conocimientos empleados y las dificultades que se presentaron en el transcurso de esta actividad, además indicaremos la responsabilidad de cada integrante del grupo y organización del mismo.

Además de esto mostraremos de forma audiovisual el resultado, de este quehacer.
Les invitamos a disfrutar de un trabajo realizado con mucha dedicación y responsabilidad.



Estrategia de trabajo:

Jefe de Grupo (Jorge Muñoz): Se encarga de desarrollar y designar las actividades a realizar para cada integrante del grupo.

Productor Multimedia (Gianinna Salazar): Alumna delegada a grabar y registrar cada movimiento de robot, administrar los registros visuales.

Staff de Apoyo (Hernan  Espinoza): Persona que colabora en todos los procesos de la actividad ya sea en la programación y el registro audiovisual, como la confección del informe.

Secretario (Erick Matus): Registro escrito y apoyo audiovisual.

Cada integrante del grupo se encargó de ayudar en la programación del robot (lenguaje NXT) y en realizar las pruebas.



Código Fuente:

Alumnos: Jorge Muñoz – Hernán Espinoza – Gianinna Salazar –Erick Matus.


Objetivo: Programar un código NXC que en primera instancia busque puntos negros (para sumar puntaje) y que al recibir un sonido superior al umbral estipulado, esquiva los obstáculos propuestos (pared y bloques).Finalmente debe mostrar todas las estadísticas por la pantalla del ladrillo.


#define Umbral 40

#define db 50
int potencia=20;
int i =0;
int k;
int tiempo;
int acumula_puntos[];
int t_actual;
int t_anterior;
int suma=0;
mutex avanzarMutex;


task buscar()
{
 while(true){
 OnFwd(OUT_AB, potencia);
 }
}


task puntos() 
{
  while (true) 
{
  if(Sensor(IN_3) < Umbral)
  {
    t_actual=CurrentTick();
    PlayTone(100,100);
    Wait(1000);
    tiempo =(t_actual-t_anterior)/1000;
    t_anterior=t_actual;
    i++;
    if(tiempo<=10)
    {
     acumula_puntos[i] = -5*tiempo+50;
     }
     if(tiempo>10){
     acumula_puntos[i]=0;
    }
    potencia+=10;
    if(potencia>=100)
    {
     potencia=100;}
     OnFwd(OUT_B,potencia);
     Wait(Random(1000));
    }
  }
}

  
task musica_busqueda()
{
while(true){
  PlayTone(100,80);
  Wait(120);
  PlayTone(200,80);
  Wait(115);
  PlayTone(300,80);
  Wait(115);
  PlayTone(400,80);
  Wait(115);
  PlayTone(500,50);
  Wait(115);

 }
}


task sonido()
{
if(Sensor(IN_2)> db)
{
 OnRev (OUT_AB, potencia);
 Wait(1000);
 OnFwd(OUT_A,potencia);
 Wait (2000);
  }
}


  task detener()
  {
    if(Sensor(IN_1)==1
    {
      for (k=0; k<i; k++)
      {
       NumOut(5,80-k*5,acumula_puntos[k]);
       suma=acumula_puntos[k]+suma;
       }  // del for
           }// de la subrutina

        Wait(10000);
        StopAllTasks();
     } //del if } //del task detener



task main()
{
  t_anterior=CurrentTick();
  SetSensorLight(IN_3);
  SetSensorSound(IN_2);
  SetSensorTouch(IN_1);
  Precedes(buscar,musica_busqueda,puntos,sonido,detener);
}



Video de la Actividad:






Reflexión

En conclusión utilizar tareas paralelas permite desarrollar comportamientos más complejos y hacer en el caso particular de nuestro robot una detección de elementos externos más efectiva y rápida (sensores), pero además de ser más efectivo el uso de concurrencia, también necesita de mayor trabajo, en relación a el uso de recursos paralelos, como por ejemplo los motores que de no usar un semáforo de uso, hubiesen recibido varias órdenes al mismo tiempo.

Los problemas particulares con los que nos topamos fueron en primer lugar, que el robot al girar sobre su eje en el momento de detectar un punto seguía detectando el mismo punto ya que la tarea paralela de detección seguía funcionando mientras el robot giraba, lo que corregimos con una bandera simple, en segundo lugar nunca fue posible detener una tarea desde otra, por lo que nos vimos en la obligación de utilizar banderas globales.

Y por último nos topamos con el problema de mantener la pantalla funcionando después del termino del programa, cosa imposible por lo que al dejar una tarea corriendo y las demás con sus respectivas banderas en falso solucionamos el ultimo problema.

miércoles, 14 de diciembre de 2011

Informe sobre el ámbito informático de una empresa.

Autor: Gianinna Salazar.
Competencia: Actuación Ética (Nivel 1).
Asignatura: Mantención y administración de sistemas.
Palabras clave: Investigar sobre el ámbito informático de una empresa, trabajo grupal.




Descripción de la Actividad


Les voy a compartir mi experiencia, como estudiante de 1er año de Ingeniería civil informática, sobre la vez que tuve que realizar un informe sobre el ámbito informático de la empresa Google.

El trabajo consistía en una evaluación grupal en el cual había que realizar un informe buscando una empresa u organización, como caso real, para exponer su ámbito informático en frente de mis compañeros.

Este trabajo podía contener los siguientes temas:
  • Rubro de la empresa y servicios que presta.
  • Cantidad de servidores y estaciones de trabajo.
  • Sistemas operativos usados y su función dentro de las máquinas.
  • Servicios que corren en los servidores de la empresa.




Solución

Nombres:

                    Gianinna Salazar
                    Jorge Muñoz





Introducción:


Hoy en día, la tecnología de la informática y el internet nos facilitan la realización  nuestras tareas en distintos ámbitos tales como el trabajo el estudio, la vida cotidiana entre otras cosas, mediante el uso de diversos programas de computadora. Estos pueden ayudarnos a comunicarnos con personas a la distancia, entretenernos o mejorar el trabajo en la oficina o el estudio. En este informe nos enfocaremos en estas últimas, las herramientas ofimáticas, más específicamente, en el software de presentaciones multimedia de Google docs.

Existen muchos software que nos brindan la posibilidad de hacer una exposición explicativa sobre algún tema de una forma dinámica y llamativa, pero la más utilizada y conocida es el Software PowerPoint, de Microsoft office. Es por eso que el objetivo de este informe es dar a conocer las características que posee Google docs, analizando sus ventajas, desventajas y funcionalidad, para interiorizar y educar a quien esté interesado en descubrir nuevas opciones al momento de crear una presentación novedosa y llamativa, brindando los links a los cuales se deben acceder para utilizar el software además de indicar aspectos básicos de su uso.




Características:


Google docs es un software hecho en web desarrollado por el Writely Team de Google Inc. Fue liberado para todos los usuarios de Google Apps. En el año 2007, pero solo el 17 de septiembre del mismo año se lanza el programa para crear presentaciones. Es de acceso gratuito, y además de contar con el creador de presentaciones, posee un procesador de textos y una hoja de cálculos. Al ser online permite que varias personas puedan colaborar con un solo documento de forma simultánea, además de tener almacenamiento online de hasta 1 Gb y evitar una instalación en el disco duro local.
Posee compatibilidad con archivos estándar, de hecho a partir de enero del 2010 ha empezado a aceptar cualquier archivo subido a los servidores de Google Docs y funciona en cualquier sistema operativo que posea un navegador web (son soportados Google Chrome, Mozilla Firefox, Internet Explorer, Opera y Safari). También es posible acceder a Google docs mediante telefonía Móvil, e incluso hay algunos dispositivos que permiten realizar cambios en los documentos.
En Cuanto a las limitaciones que presenta esta el problema de que al ser online si o si se requiere conexión a internet y pueden importarse presentaciones de hasta 10 Mb solamente.
Se puede insertar una mini presentación cuando se publica en alguna pagina web de una forma dinámica y de facis uso.



Iniciando en Google Docs:


Primero que nada debemos recordar que Google docs funciona online, es decir que el servicio se puede usar solo si contamos con una conexión a internet.
Para utilizar Google docs debemos ir al siguiente link:


Nota: debemos poseer una cuenta de Google, como por ejemplo Gmail.





Como nos muestra la imagen, nos vamos a la pestaña “Crear Nuevo” y seleccionamos la opción de “presentación”.
















Al entrar podemos ver que en la parte superior encontramos los botones de iniciar presentación, compartir y guardar, y a la izquierda el nombre que hemos dado a nuestra presentación.

La columna a la izquierda corresponde a las diapositivas que hemos creado (en este caso esta en blanco porque no se ha modificado nada). Sobre esta encontramos botones para añadir y borras diapositivas. El cuadro grande a la derecha es la diapositiva en la que trabajamos actualmente, y podemos añadir texto e imágenes.







Esta es la barra de herramientas, aquí tenemos opciones para darle formato a nuestra diapositiva y los botones se activaran de acuerdo al elemento que tengamos seleccionado, en este caso la opción de tamaño de la fuente se activara si estamos sobre un cuadro de texto.


Ahora, para hacer una diapositiva de una forma rápida debemos seguir los siguientes pasos:

  1. Acceder a la pantalla inicial de Google Docs.
  2. Desplegar el menú Nuevo y seleccionar Presentación.
  3. Pulsar en el texto que dice "Haz clic para añadir un título".
  4. Escribir un titulo para nuestra diapositiva.
  5. Pulsar en el texto que dice "Haz clic para añadir un subtítulo".
  6. Escribir la información que queremos exponer.
  7. Pulsar el menú Archivo → Guardar.




Reflexión


El desarrollo de este informe me dio un punto de vista más real de cómo saber acerca de los sistemas operativos, ya que anteriormente solo investigamos de él en internet, pero ahora dentro de una empresa podemos ver a modo real los servicios que este entrega.

La utilización de un sistema operativo dentro de una empresa pasa a tomar un rol fundamental a la hora de administrar correctamente y proporcionar un servicio al cliente en torno a este, ya que  es un software que actúa de interfaz entre los dispositivos de hardware y los programas usados por el usuario para utilizar un computador y para a ser una herramienta de uso general dentro de una empresa.

sábado, 10 de diciembre de 2011

Presentación Capítulo 8: JOIN MULTI OP.

Autor: Gianinna Salazar.
Competencia: Creatividad e innovación (Nivel 1).
Asignatura: Desarrollo y Aplicación Cliente Servidor.
Palabras clave: Presentación, lenguaje SQL y manual Oreilly Head First SQL.




Descripción de la Actividad 



Les voy a compartir mi experiencia, como estudiante de 1er año de Ingeniería civil informática, sobre la vez que tuve que realizar una presentación sobre el Capítulo 8 del manual Oreilly Head First SQL.

La presentación consistía en realizar una tabla de la vida cotidiana del Capítulo 8, incorporar todos los contenidos que se encuentran en este, explicando cada uno de ellos, realizando sentencias en SQL y evidenciando imágenes de salida de las sentencias.




Solución 






























































































Reflexión


Este trabajo me sirvió para darme cuenta lo fácil que es poder mesclar dos tablas y poder unirlas de cualquier forma, permitiendo ver más datos en dos tablas.

Este tipo de sentencias fueron importantes a lo largo de mi carrera ya que en otros ramos fueron muy útiles, como el caso de Interfaces Graficas de Usuario,  Desarrollo de Aplicación Cliente Servidor, entre otras.