lunes, 14 de noviembre de 2011

Movimiento Rectilineo Uniforme

 Título de la Entrada : MRU

Autor: Martin Berkhoff Jerez

Competencia (Nivel):
      Implementa y opera con modelos matemáticos de la ingeniería y de las    
      ciencias básicas, que contribuyan al mejoramiento de procesos vinculados a   
      los problemas de las ciencias de la ingeniería     
      Nivel: Opera con modelos matemáticos de la ingeniería y de las ciencias básicas.

Palabras clave: MRU, aceleración, velocidad.

Descripción de la actividad:

Los materiales que se usaron para el desarrollo de la actividad está compuesto por un 
robot programable NXT, código NXC  desarrollado por el profesor encargado de la actividad, un 
equipo computacional encargado de comunicador entre el grupo que desarrolla la actividad y el 
robot, una superficie ya demarcada con cinta negra, huincha de medir, calculadora y un software 
de planillas para ingresar los datos y graficar.
Con el fin de obtener los objetivos se plantearon 4 actividades. La primera era identificar la 
ecuación de MRU y velocidad para una potencia de programación determinada, para esto se usó la 
superficie plana marcada con cintas negras, las cuales estaban distanciadas a 0,35[m] una de otra. 
Además de un código NXC, entregado por el profesor.  Este código permitía ver en pantalla el 
tiempo que demoraba el robot en cruzar entre cada línea a una velocidad constante.


Solución:


Ejecutado el programa se obtuvieron los siguientes datos:

 
Gráficamente se obtiene: 


Mediante este gráfico se puede obtener la ecuación de itinerario, que está dada por x(t) = vt 
+ x0, siendo para este caso particular x(t)=0,2869t+0,0023 [m] la que nos entrega la velocidad en 
función del tiempo (0,2869t) y la posición inicial (0,0023), esta posición inicial pude interpretarse 
como un error en el calculo, pues se considera como posición inicial la primera cinta negra, sin 
embargo al ser una cantidad tan pequeña, en comparación a la escala del experimento, ésta es
despreciable.
Obtenida esta ecuación de itinerario, es posible determinar la posición del robot para 
cualquier instante de tiempo t, dando paso a la segunda actividad. A modo de verificar esta 
ecuación, se dio un tiempo t=10[s], para este tiempo reemplazamos en la ecuación de itinerario y 
vemos que:
                                                    x(10)=0,2869*10+0,0024 [m]
                                                    x(10)=2,8714 [m]

Esto significa que el robot avanzara 2,9 [m] aprox. En un tiempo de 10 segundos, lo cual 
fue demostrado implementando en el código NXC el tiempo deseado.

Para el desarrollo del cuarto objetivo se usó un código NXC, en el cual el robot avanzaba a 
una velocidad inicial constante, pero que a medida que avanzaba el tiempo se incrementaba la 
potencia para simular un incremento de aceleración, nuevamente el robot entregaba en pantalla 
tiempos cuando pasaba sobre las cintas negras


Al Gráficamente se obtiene: 


Mediante este gráfico se puede obtener la ecuación de itinerario considerando la 
aceleración, esta ecuación está dada por x(t)=0,5 at2 + v0t + x0 ,para este caso en particulares debe considerar que la expresión 0,0116 t2 considera a la aceleración y la multiplicación por la constante  0,5, quedando la aceleración en 0,0232 al ser despejada. Quedando finalmente como :
                                                   x(t)=0,5*0,0232*t2+ 0,0636*t + 0,0018.

Al igual que el caso anterior, el programa reconoce una posición inicial, pero al ser una 
cantidad pequeña en proporción al ejercicio, ésta es despreciable


Reflexión 

El implementar la teoría a la práctica presenta muchas complicaciones, pues en la física se 
trabaja sobre condiciones ideales inexistentes, pero que acercan mucho sus resultados a la 
realidad. Para el caso del MRU resultó práctico que con tan solo la recolección de tiempo por parte del robot se llegara a la ecuación de itinerario apoyado por la medición de distancias. Y a raíz de esto obtener la velocidad.

Para el caso de MRUA, al tener conocimiento de los valores pertinentes de la velocidad 
inicial y aceleración es posible determinar la posición para cualquier instante de tiempo.






Programacion

Título de la Entrada : Buscador de números amigos

Autor: Martín Berkhoff Jerez

Competencia (Nivel):
      Implementa y opera con modelos matemáticos de la ingeniería y de las    
      ciencias básicas, que contribuyan al mejoramiento de procesos vinculados a   
      los problemas de las ciencias de la ingeniería     
      Nivel: Opera con modelos matemáticos de la ingeniería y de las ciencias básicas.

Palabras clave: For, if, ciclos

Descripción de la actividad:

 Crear un programa que ingresemos dos números  y verificar si estos son amigos.
¿A que se refiere que sean amigos?, a que si la suma de todos los números divisores de el sean A iguales a el segundo numero ingresado B , y que la suma de todos los números divisores de B sean iguales a el número A

Solución: 


      Ingresamos dos números cualquiera de tipo INT, y dos contadores:




Luego creamos dos ciclo que dividiera todos los números menores que A hasta que sea la mitad de el mismo numero, para así buscar los divisores de A hasta la mitad.


Dentro de cada ciclo preguntamos si el numero que esta dividiendo A y B es divisor de el, si lo es lo guardamos en un contador, este mismo ira sumando todos los números divisores de A y B.

Después de tener los divisores sumados de A y B preguntamos si estos son amigos o no, esto lo hacemos de la siguiente manera:


Si el contador de A es igual al numero de B     Y  el contador de B es igual al numero de A, nos dirá por pantalla que son amigos. En caso de que esto no sea así nos mostrara por pantalla que no son amigos.



Reflexión :
Es importante aprender lógica matemática para poder programar de buena manera, y optimizar cada ves mas  los programas.

domingo, 13 de noviembre de 2011

Título de la Entrada : Proyecto Robotica

Autor: Martin Berkhoff

Competencia (Nivel): Gestión de TI

Palabras clave: android, app inventor, lenguaje NXC

Descripción de la actividad:

Dirty Lock, el nuevo sistema de seguridad; que con su novedosa tecnología mantendrá seguras nuestras viviendas, aplicando novedosas tecnologías: app inventor, bluetooth, lego mindstorm , programación en nxc y twitter. Una nueva herramienta que nos permitirá dejar una de las más comunes de las preocupaciones: la seguridad de nuestras viviendas.
El desarrollo de este sistema de seguridad fue pensado de manera estricta y rigurosa para que bajo ningúna circunstancia se pueda vulnerar la seguridad de nuestros hogares.
¿Cómo logramos esto?:
Hacer un sistema de seguridad de este tipo toma tiempo; pero aquí podrán ver el proceso, paso a paso de la creacion del sistema de seguridad DIRTY LOCK.

Solucion y Estrategia de trabajo:

Al comenzar el Proyecto tuvimos la claridad de lo que queríamos hacer como proyecto, esto nos llevó como grupo a dividir las funciones: 

Lo primero, luego de dividir el trabajo, fue pensar en las tecnologías que tenemos a nuestro alcance para poder hacer un eficiente sistema de seguridad.
Aquí seleccionamos básicamente cuatro tecnologías, sin contar los sensores: twitter, bluetooth, app inventor y lenguaje nxc. 


APP INVENTOR: Es una parte de Google Labs, un parque infantil para lo ingenieros de Google y aventureros usuarios de Google, con este programa para celulares Android es posible crear muchos tipos de aplicaciones; Con app inventor es posible crear aplicaciones que quedaran guardadas en la nube.
Para mas informacion ir a esta pagina http://www.appinventor.es/ aquí encontraran video de presentacion, tutoriales y manual de como descargar app inventor.


Creación de el software en app inventor:

La aplicación que logramos hacer pudo conectarse con el nxt via bluetooth y coordinar acciones mediante sensores. Esta es la base de la aplicación, cada ves que cualquier tipo de sensor detecta algo, la aplicación enviaba un twitter dando cuenta de que el sensor estaba activo, este también podia llamar a la persona dueña del hogar si esto era necesario; o si el nivel de alarma que marcaron los sensores era demasiado alto.
El uso de los sensores está especificado en el anexo de lego mindstorm. Como también la programación en nxc.
Aquí les presentamos imágenes de el programa junto con la aplicación en el celular android.

Asi queda finalmente la aplicación, donde los botones cambian de color según sea la alerta.



Creación de la interfaz de la aplicación, es sólo la interfaz app inventor


Aquí podremos crear la interfaz, osea arrastrar ventanas, imágenes textos, sonidos y muchas cosas mas.


Ahora les mostrare el interior o lo que no se ve que es la programación de todo lo que pusimos gráficamente, donde le damos la funcionalidad al sistema de alarma.



En paralelo nuestro sistema de seguridad utilizando las tecnologias: Lego mindstorm y programacion en nxc, registra y genera un archivo de todas las actividades sospechosas que ocurren en el transcurso de la noche o en el tiempo que el usuario considere dentro de su hogar, ya sea forzar la puertas o ventanas, movimientos dentro de su casa y sonidos sobre lo normal.

Uso de sensores: Utilizamos del quit de legos mindstorm los siguientes sensores: Sensor de Sonido, encargado de detectar los sonidos que sean poco comunes. Sensor tacto, este cuida las puertas y ventanas del hogar y también verifica si estas se abren. Sensor Ultrasonido, encargado de ver si algo se mueve dentro de el hogar.

Aquí esta el código comentado que genera un informe de todos los eventos que verifican los sensores, mientras la alarma este ativa:


/Simulación de un sistema de seguridad en un hogar




int verConexion;   //1 activo desconectado, 3 activo conectado
int evento[16];   //arreglo para almacenar tipo de evento
int tiempo[16];  //almacena el tiempo transcurrido desde inicio
int tiempoInicial;
int tiempoTranscurrido;
int j=0;
int i=0;
int muevemotor=0;

#define SONIDO 97
#define DISTANCIA 50

sub traspasaArchivo()
{
    byte fileHandle;
    short fileSize;
    short bytesWritten;
    string write;
    string cadena;
    DeleteFile("Registro.txt");
    CreateFile("Registro.txt", 512, fileHandle);
    WriteLnString(fileHandle,"Reporte de eventos", bytesWritten);
    WriteLnString(fileHandle,"------------------", bytesWritten);
    WriteLnString(fileHandle,"Sensor",bytesWritten);

    for(j=0; j<i; j++ )
    {
        if(evento[j]==2)
        {
           cadena = "Puerta";
        } 
        if(evento[j]==3)
        {
           cadena = "Ventana";
        }
        if(evento[j]==1)
        {
            cadena = "Ruido";
        }
        if(evento[j]==4)
        {
            cadena = "movimiento";
        } // depedendiendo del valor de evnto[j], se identifica la procedencia del evento
        string tiem = NumToStr(tiempo[j]);
        write = StrCat(cadena,"     ",tiem); //concatena tipo de evento con el tiempo de éste
        WriteLnString(fileHandle, write, bytesWritten);
    }

    CloseFile(fileHandle);
    StopAllTasks(); //cierra todo proceso
} //sub rutina para crear archivo

sub llenaarreglos(int x, int y)
{
    evento[i] = x;
    tiempo[i] = (y - tiempoInicial)/1000;
    i++;
    if(i==10)
    {
        traspasaArchivo();
    }//el valor de if, puede ser cambiado en función de la cantidad de eventos a registrar.
}//subrutina para llenar arreglos, si eventos es 10, llama a subrutina para crear archivo

task conexion()
{
    while(true)
    {
        verConexion = BluetoothState(); //verifica estado bluetooth y almacena en variable
        if(verConexion==1) //si estado es 1
        {
            PlayTone(400,400); //toca ruido
            TextOut(0,0,"BA - MD"); //muestra en pantalla Bluetooth Activadp- Movil Desconentado
            Wait(1000);
        } 
        if(verConexion==3)
        {
            TextOut(0,0,"BA - MC"); //Muestra en pantalla Bluetooth Activado-Movil Conectado
        }
    }
}//tarea muestra en pantalla estado conexión.

task sensorSonido()
{
    while(true)
    {
        if(SENSOR_1>SONIDO)//si ruido es mayor a SONIDO
        {
            tiempoTranscurrido = CurrentTick();//toma el tiempo actual y almacena
            llenaarreglos(1,tiempoTranscurrido);//se envian parametros a subrutina llenaarreglo
        }
        Wait(300);
    }
}//tarea detecta ruidos

task sensorTacto1()
{
    while(true)
    {
        if(SENSOR_2 == 0) //Si se abre puerta
        {
             tiempoTranscurrido = CurrentTick();//toma el tiempo actual y almacena
             llenaarreglos(2, tiempoTranscurrido);//se envian parametros a subrutina llenaarreglo
        }
        Wait(300);
    }
}//tarea detecta apertura puerta

task sensorTacto2()
{
    while(true)
    {
        if(SENSOR_3 == 1) //Si se abre ventana
        {
             tiempoTranscurrido = CurrentTick();//toma el tiempo actual y almacena
             llenaarreglos(3,tiempoTranscurrido);//se envian parametros a subrutina llenaarreglo
             if(muevemotor==0)//si el motor nunca se ha movido
             {
                 OnFwd(OUT_A,60);//mueve motor
                 Wait(150);
                 Off(OUT_A);//apaga motor
                 muevemotor=1;//se movio el motor
             }//usado para simular el encendido de un interruptor
        }
        Wait(300);
    }
}//tarea detecta apertura ventana

task sensorUltraS()
{
    while(true)
    {
        if(SensorUS(IN_4) < DISTANCIA)
        {
            tiempoTranscurrido = CurrentTick();//toma el tiempo actual y almacena
            llenaarreglos(4,tiempoTranscurrido);//se envian parametros a subrutina llenaarreglo

        }
        Wait(300);
    }
}//tarea detecta movimiento 


task main()
{
    SetSensorSound(IN_1);
    SetSensorTouch(IN_2);
    SetSensorTouch(IN_3);
    SetSensorLowspeed(IN_4);
    tiempoInicial=CurrentTick();//inicio de tiempo.
    Precedes(conexion,sensorSonido,sensorTacto1,sensorTacto2,sensorUltraS);
}


Aquí adjunto el vídeo de el trabajo:



conclusión 
El presente trabajo nos ha permitido implementar un sistema de seguridad, mediante la utilización de herramientas de la informática como lo son : app inventor, lenguaje nxc, bluetooth.
Para la creacion de una aplicación en android y la programacion en nxc.
Durante el proceso de investigacion fue necesario aprender sobre la creacion de archivos y arreglos en nxc y la programacion en app inventor. En este ultimo fue necesario buscar guias y tutoriales para poder aplicar una programacion adecuada a los requerimientos del equipo.
El trabajo en grupo no permitió avnazar sumando los aportes de cada uno de los integrantes, no obstante a medida que avanzabamos en el proceso se nos fueron presentando dificultades que nos llevaron a nuevas interrogantes, a la búsqueda de mayor información, a la consulta de nuevas fuentes de tal modo que el avanse se vio enrriquecido por el aprendizaje.
El resultado final de este proyecto, permite ver un sistema de Resguardo o de seguridad, funcionando a través de un equipo de tefelonía celular, con sistema Android en conjunto con la programación nxc y con la posibilidad de dar seguimiento de los eventos vía Twitter.





Calculadora Netbeans

Título de la Entrada : Calculadora

Autor: Martin Berkhoff

Competencia (Nivel):
        Opera con modelos matemáticos de la ingeniería y de las ciencias básicas.    

Palabras clave: Netbeans class, método

Descripción de la actividad:

Generar una calculadora que tome números aleatorios y  realizar múltiples operaciones, como la suma, resta multiplicación división  etc


Solucion:

Para realizar este programa generamos 2 clases una que contiene los métodos de sumar, restar dividir multiplicar etc, y otra donde llamamos a esos métodos y mostramos en pantalla los resultados.

En la primera captura mostrare el primer trozo de código de la clase calculadora.java esta contendrá los métodos que serán llamados en la otra clase programa.



Aquí está la segunda parte de el código de calculadora.java



Solo con la clase calculadora.java no haré mucho, entonces creamos otra clase, en la que crearemos el objeto ca1 y llamaremos a los métodos de calculadora.java desde programa.java

 
Aquí esta la segunda parte de el programa.java donde están mas de los métodos de calculadora.java


Al ejecutar programa.java nos arrojara los siguientes resultados:




Código fuente de calculadora.java y programa.java:


package martinberkhoff;

public class Calculadora { private double valor1, valor2;

Calculadora()
    {valor1=0;
     valor2=0;
     }
Calculadora(double valor1, double valor2)
    {this.valor1=valor1;
     this.valor2=valor2;
     }

double suma(){return (this.valor1+this.valor2);} // METODOS
double resta(){return (this.valor1-this.valor2);}
double multiplicacion() {return (this.valor1*this.valor2);}
double modulo(){return (this.valor1%this.valor2);}

double division()  // MÉTODO DIVICION 
 {this.valor1=this.valor1/this.valor2;
   double f= this.valor1;
   return f;}

double mayor()
{if(this.valor1>this.valor2)

    return this.valor1;
          
        else return this.valor2;

}

double getValor1(){return valor1;}
void setvalor1(int n){this.valor1=n;}

double getValor2(){return valor2;}
void setValor2(int d){this.valor2=d;}

@Override
public String toString(){return "valor1 = "+this.valor1+    " valor2 = "+this.valor2;}



Ahora de programa.java:

package martinberkhoff;


public class Programa {
    
public static void main(String[] args) {
   double a,b;
   a=(Math.random()*100);
   b=(Math.random()*100);
   
   
   Calculadora ca1 = new Calculadora(a,b);  // creamos el objeto calculadora
   

   System.out.println(ca1);
    
   
   ca1.multiplicacion(); // llamamos al objeto ca1. nombre metodo creado en calculadora.java
   System.out.print("multiplicacion = ");    
   System.out.println(ca1.multiplicacion()); // muestre pantalla la multiplicaicon
   
   ca1.suma();  // llama al objeto ca1.metodo de suma de calculadora.java
   System.out.print("suma = ");
   System.out.println(ca1.suma());

   ca1.resta();
   System.out.print("resta = ");   
   System.out.println(ca1.resta());

   ca1.modulo();
   System.out.print("modulo = ");    
   System.out.println(ca1.modulo());

   ca1.division();   
   System.out.print("division = ");    
   System.out.println(ca1.division());

   ca1.mayor();
   System.out.print("numero mayor = ");    
   System.out.println(ca1.mayor());

   }
}



Reflexion:
Aplicar los conocimientos de matemáticas a la programación en netbeans puede ser muy util para poder crear programas que nos faciliten las tareas cotidianas o de trabajo.

Programacion en Python, Perl y C

Nombre de la entrada:  programación en Python, Perl y C

Autor:
Martin Berkhoff Jerez

Competencia :
Gestión en TI (Nivel 1)
 

Palabras claves:  Perl, Python, C, Lenguaje , chmod +x, ./nombreArchivo

Descripción:
Crear un programa que genere 1000 números aleatorios y saque el promedio de estos.

Solución:

Antes de ejecutar el documento con el código fuente de este programa tenemos que darle permisos antes de ejecutarlos, y acceder la dirección donde se encuentra.

para acceder a la dirección donde se encuentra el documento con el código utilizamos el siguiente comando: ls: nos muestra todo, cd Escritorio nos lleva a esa dirección, nuevamente cd para ver que tenemos en escritorio.














Ahora le daremos el permiso para poder luego ejecutar el programa, esto se hace con el siguiente contacto: chmod +x nombredearchivo+extencion
  
                           En Python
    Codigo fuente:
   Ejecutado:
    Aqui esta el promedio de la suma de 1000 ńumeros random.
                                  En perl

   Codigo fuente


     Ejecutando aqui no enseñaremos los números sino que simplemente el
     promedio enseguida:

 

                                     En C

    Código fuente:


    Ejecutamos:




Conclusión: Si nos centramos en aprender un solo lenguaje de programación y lo aprendemos bien, luego aprender otros lenguajes de programación no sera tan difícil.