sábado, 12 de noviembre de 2011

Cronómetro para péndulo - (Parte II)

Al fin acabé el programa del péndulo. En la entrada anterior Crónometro para péndulo, explicaba los problemas que tenía para que funcionase correctamente como quería.

Antes de seguir debo hacer un inciso para explicar que este programa, ha sido finalizado gracias al foro Hispalug. En concreto el usuario Nxtorm, me ha ayudado mucho y os recomiendo que visitéis su página web con muchos tutoriales sobre software, sensores caseros etc…
 
La parte física del péndulo sigue igual, tanto la base como la posición del sensor se ha conservado, únicamente me he centrado en solventar los problemas del programa. Así que vamos allá:
Nos encontrábamos con que el cronómetro se detenía tras la segunda pasada, contando como primera aquella que iniciaba el crono. La solución ha sido modificar casi por completo el programa. El anterior era este:


El sensor estaba en modo luz, esperando a detectar el péndulo para entonces iniciar el tiempo.
Al pasar el péndulo (1ª vez) comienza el crono.
Se activa el bucle de repetición, el cual va mandando el tiempo continuamente a la pantalla de la controladora, hasta que el péndulo vuelve a pasar por delante, momento en el que se detiene.
La función del último icono es mantener el programa activado hasta que nosotros mismos lo detenemos pulsando uno de los botones de la controladora.

Bien, ese era el antiguo programa, con el que como ya he dicho tan sólo cronometrábamos lo que sería un medio del periodo, la mitad, pero para obtener mayor precisión en los posteriores cálculos vamos a intentar hacer un programa que cumpla lo que necesitamos. Así quedaría el mejorado:


Comenzamos abriendo un bucle de repetición y en su interior ponemos:

- El sensor de color, en modo color, cuya función va  a ser esperar a que pase el péndulo para activar el crono.

- Un bloque de espera de 0.100 segundos. Colocamos este bloque aquí ya que el sensor anterior lo hemos puesto con la opción insite range en mi caso en la zona del color rojo, es decir, que desde el primer momento en que el sensor reconozca una pequeña parte del color rojo va a activar el crono. Posteriormente, como ya dije el nxt procesa la información a una velocidad altísima, el sensor va a seguir reconociendo el rojo durante una pequeña porción de tiempo en la cual va mandando información de forma continua. En este caso no tiene mucha importancia pero en los siguientes bloques similares a este sí que la va a tener.

- Timer en modo reset, para que el crono se ponga a cero y empiece a contar tras el primer paso.

- Otro bloque de espera con el sensor de color colocado en inside para el color que queramos que reconozca. Como bien me dijo Nxtorm, aquí es donde se encontraba el fallo, en mi anterior programa colocaba los sensores en “outside”, es decir que detectasen colores fuera del rojo, así al ser un péndulo hecho con un cordón de tela hay partes más oscuras que otras, las cuales el sensor puede confundir con otro color y considerarlo fuera del rango de rojo.

- Bloque de espera de 0.100 segundos, por lo que ya hemos explicado antes.

- Y ahora volvemos a poner estos dos bloques de nuevo, para conseguir la tercera y última pasada.

El programa ya está casi acabado, tan solo nos falta que este tiempo que ha tardado el péndulo se envíe a la controladora y se pueda ver en la pantalla.

- Primero colocamos otro timer, esta vez sin el reset, con Read.

- A continuación colocamos una división ya que el mindstorms cuenta en milisegundos, dividiendo entre 1000, nos aparecerá la cifra en segundos. Por tanto, seleccionamos entre las opciones división y en la casilla blanca escribimos la cifra: 1000.

- Bloque “Number to text”, éste se encuentra en la paleta avanzada, está entre los bloques rojos.

- Bloque “text”, el cual podemos encontrarlo en el mismo sitio que el anterior. La función de este bloque es evitar que se sobrescriban los resultados sucesivos, para su correcto funcionamiento debéis añadir 4 o 5 espacios en la casilla B.

- Y por último el bloque “Display”.

Finelamente debemos conectar unos con otros correctamente, para que la información que se procese como nosotros deseamos.
Para ello desplegamos la pestaña que cada bloque posee en su parte inferior. Así, unimos el último timer, seleccionando el reloj pequeño, con el icono A del bloque de división. Éste unirá el resultado “#” con el “#” del bloque “Number to text”. Ahora unimos la “T” con la A del bloque “Text”. Y finalmente la “T” del bloque “Text” con la “T” del “display

Por último se cierra el bucle de repetición, que yo lo he puesto en infinito para que siga contando el periodo cada tres pasadas.

De esta manera cuando el péndulo haya pasado por tercera vez desde que el cronómetro comienza, enviará el tiempo a la pantalla en segundos.

Aquí os dejo también un video del péndulo y el cronómetro calculando su periodo. Espero que os haya gustado este proyecto, y que al menos hayáis aprendido como yo nuevas cosas a la hora de programar.
Cualquier duda, consejo o ayuda podéis comentarla y la responderé lo antes posible.


Etiquetas: ,

0 comentarios:

Publicar un comentario

Suscribirse a Enviar comentarios [Atom]

<< Página principal