RELOJ CALENDARIO

Reloj

down-rojo-flecha

NOTA PREVIA


Este proyecto es de los más fáciles de construir y de programar, siempre que te descargues un icono de la web. Para bajar, pulsa aquí. La segunda opción, es descargarte un My Block que he confeccionado. Para bajar, pulsa aquí.


Una vez construido el reloj, cualquiera de las dos opciones es bastante sencilla de programar y no sería necesario que leyeras todas las explicaciones de esta sección. Pero si quieres entender cómo funciona y/o adaptar tu propio icono a tus necesidades de programación, sigue leyendo: está todo explicado.


Si antes de meterte en todo esto quieres saber qué puedes programar a partir de este sensor, baja a aplicaciones.


INTRODUCCION


Cierto es que el Mindstorms lleva un reloj interno, pero a ver cómo le dices que a las 17.00h del día 15 haga algo.


O que cada cuarto de hora empezando a las 17h tome la lectura del valor de la temperatura del te y lo guarde en el data logger para después analizar los datos.


Esta es la idea del reloj-calendario. Un artefacto que te da año (hasta 2100), mes, día de la semana, hora (en 12 o 24h), minutos y segundos.


Podrás por tanto contar paquetes determinados de tiempo y ejecutar una acción.


Lleva una pequeña pila botón, con lo que la fecha no se pierde aunque lo desconectes del NXT. Para hacerlo funcionar tienes 2 opciones: descargar e instalar un icono con licencia GNU, o sea, de libre distribución o entender, configurar y programar todos los pasos. Es mucho más rollo, pero es lo único que te permitirá aprender cómo funciona por dentro.


MATERIAL


Un cable de conexión al NXT con los cables verde, amarillo, azul y negro.

Dos resistencias de 82Kohm, las de siempre en circuitos digitales.

Un oscilador estándar de 32.768 KHz

Un reloj DS1307z. Para ver la hoja técnica, pincha aquí.

Una pila botón de 3V y su soporte.

CIRCUITO


Los pines y conexiones del DS1307 son estos. No olvides poner la muesca que lleva el circuito hacia arriba. Son muy fáciles:


circuito reloj DS1307

Vamos a explicar qué es cada cosa:

Las dos plaquitas negras de la izquierda arriba, son el oscilador de 32.768 KHz

El círculo negro es la pila botón de 3V

El resto de cables, como siempre. Quedaría así:



foto circuito reloj DS1307



UN ICONO YA HECHO


Una vez construido, lo primero que queremos comprobar es si funciona. Pincha sobre el dibujo a continuación para ir directamente a la página y poder descargarlo. Después, instálalo en el NXT-G. Recuerda que tienes un tutorial para estas instalaciones.


DESCRIPCION DEL ICONO


Configuración reloj DS1307

Como puedes ver, el programa para visualizar fecha y hora es muy sencillo.


Si aprietas donde la flecha negra, se desplegará una amplia pestaña con multiples entradas, correspondientes a fecha, hora, minutos, segundos, etc.


No olvides poner cada icono de display en una línea diferente, para ver ambos textos.


A la izquierda verás que salen dos mensajes de error. Aparecen muchas veces, pero no significa que no funcione. A mi me aparece especialmente cuando el icono del reloj está seleccionado en la pantalla del PC, así que deseleccionalo a ver si así se ve bien en la pantalla del NXT. Si aun así te da error, desconecta el cable del puerto y vuelve a conectarlo. En la foto de abajo se puede ver que funciona bien.


Para poner en hora el reloj, no tienes más que apretar donde señala la flecha roja y se sincronizará con el reloj de tu PC.


Montaje reloj

NOTAS:


Para ponerlo en hora, usa el cable USB. Con el Bluetooth es muy costoso o no se puede. Una vez puesto en hora, ya podrías desconectar el USB y usar el BT para usar el reloj.


Una vez puesto en hora, sólo necesitas actualizarlo con los cambios de hora oficiales, ya que no se actualiza sólo. En realidad, no está sincronizado al PC.


A partir de aquí, ya no es necesario que el reloj esté conectado al NXT. Mantendrá la hora aunque lo enchufes muchos días después y podrás leerla con el mismo programa.


Tienes así un reloj-calendario, al menos hasta 2100 si no recuerdo mal. Para entonces, tod@s calv@s.

Con esto ya puedes usar el bloque "Compare" para poner en marcha algún evento en tal o cual momento o activar algo cada "x" minutos.


Tienes una Guía de Uso en la propia página. Pincha aquí para descargarla.


Por cierto, el dato "día" está mal programado y aparecen valores extraños. En la parte de programación, podrás obtener correctamente este dato.


PROGRAMANDO NUESTRO ICONO


Para programar bien nuestro propio icono y acabar creando un "My Block", distinguiremos claramente 2 partes: la lectura de la hora y la puesta en hora del reloj. Para lo primero, usaremos el icono "Read". Para la puesta en hora, el "Write". Empezaremos por la puesta en hora.


Para ello, nos resultará muy útil la siguiente tabla, extraída del enlace de la hoja de datos que ya pusimos arriba. Lo explicamos todo a continuación.


Reloj permanente para NXT

PUESTA EN HORA


Para la puesta en hora del reloj, usaremos el icono Write. La dirección SIEMPRE es 208. Según el registro en el que escribas según la tabla anterior, modificarás uno u otro (día, año, mes, etc).


NOTA: Puedes poner en hora de forma fácil y rápida el reloj usando el icono del NXT-G que has bajado de la red.


SEGUNDOS


Como ejemplo, configuraremos 37 segundos. El registro, según la tabla, es el 0.


Reloj permanente para NXT

Ahora tenemos que escribir el valor correspondiente a 37. Según la tabla, los dígitos del 1 al 4 corresponden al número 7 y el 5, 6 y 7 al número 3.


Abre la calculadora, selecciona "Programador" y escribe "3". Pásalo a binario. Sale un 11. Ahora hacemos lo mismo con el 7, lo pasamos a binario. Sale un 111. Con esto, lo escribimos todo en la tabla y queda así:


Reloj permanente para NXT

Ahora solo falta saber qué número es el 0011-0111 en decimal. Usamos la calculadora y sale 55, tal como pone en el ejemplo de arriba. Si escribes un programa con ese único icono, configurarás los segundos a 37. Un programa realmente breve. Otro ejemplo: queremos configurar los segundos a 24. Sería así:


Reloj permanente para NXT

El 0010-0100 es 36, y ese es valor que debes escribir en el icono en el WValue para que salgan 24 segundos.


MINUTOS


Exactamente igual que los segundos, pero usando el registro 1.


HORAS


Casi igual que antes, pero usando solo hasta el dígito 6. El dígito 7 y 8 son fijos y son un 0. Te pongo un ejemplo: queremos configurar el reloj a las 22h. Como verás, el reloj funciona a 24h. Se puede configurar también en 12h con AM y PM, pero creo que es liar. Si quieres más info de cómo hacerlo, consulta la hoja de datos. Para configurar las 22h, escribe un 34 en el WValue del registro 2.


Reloj permanente para NXT

DIA DE LA SEMANA


Este es el más sencillo de configurar. Se configura igual que los otros, pero solo usa los 3 primeros dígitos, así que escribe en el registro 3 (en el WValue) un 1 para el lunes, un 2 para martes... y un 7 para domingo.


DIA DEL MES


Se configura igual que las horas. Registro 4.


MES


Un par de ejemplos. Lo primero, mirar la tabla de configuración. El registro es el 5. Pongamos por ejemplo julio.


Reloj permanente para NXT

Y si esamos en noviembre tendremos que poner un 17 en el WValue:


Reloj permanente para NXT

AÑO


Del año aparecen únicamente las 2 últimas cifras. Escribiremos el año 16. Para ello, escribe 22 en el WValue del registro 6. Cuando escribamos el programa para leer la fecha, podremos escribir 2016 si queremos. De momento lo dejamos ahí, que es lo único configurable.


Reloj permanente para NXT

PROGRAMA DE CONFIGURACION


Resumiendo, si quieres configurar el reloj a: 12/11/2016 a las 22:24:37h del sábado, escribe lo siguiente. Ejecutas el programa exactamente como aparece a continuación y ya está. Tan solo 1 vez que lo ejecutes, queda configurado. Por si la imagen no se ve bien, el primer icono corresponde al registro 0 y el último al 6. Y en ese mismo orden, los WValue son: 55-36-34-5-18-17-22.


Reloj permanente para NXT



LEYENDO LA HORA


NOTA: Puedes poner en hora de forma fácil y rápida el reloj usando el icono del NXT-G que has bajado de la red. Así podrás leer los registros sabiendo de antemano el valor que debe salir.


Para la programación será necesario el uso del icono "Mask", que puedes descargar en la sección de software. Allí encontrarás también una breve explicación del icono. De forma resumida, este icono nos permite seleccionar determinados dígitos de un número. Aquí, en lugar del icono Write usaremos el de lectura (Read).


Como antes, empezamos por los segundos para pillarle el tranquillo. Cuando lo pilles, continuar es más fácil y podrás adaptar la programación a tu gusto. Tenemos ya mucho avanzado en la comprensión del tema.


Si visualizaras cada uno de los registros de la dirección 208, obtendrías los resultados que hemos escrito anteriormente en los WValue. Así que ahora sólo tenemos que invertir los pasos anteriores para extraer la información.


SEGUNDOS


Para hacerlo más fácil, pondremos el ejemplo que ya vimos al escribir en segundos.


Reloj permanente para NXT

Lo que nos dice esta tabla es que los 4 últimos dígitos binarios del número, los de la derecha, corresponden a las unidades. Y los tres siguientes dígitos (5, 6 y 7) corresponden a las decenas de los segundos. Bueno, lo primero, leer el registro 0 (el de los segundos). La dirección siempre es la 208.


Reloj permanente para NXT

Para seguir el ejemplo imagina que, por casualidad, obtienes el valor 55. De este número en binario obtendremos los datos. Lo primero, obtener los 4 últimos dígitos. Aquí usamos el icono "Mask". Ponemos un 1 en la máscara cuando queramos conocer ese dígito y 0 si lo queremos ignorar. Como queremos los 4 últimos dígitos, la máscara será 0000-1111 o, dicho en decimal, 15.


Reloj permanente para NXT

Si estuviéramos en el segundo 37, el valor que visualizarías en el programa anterior sería un 7. Así que ya tenemos las unidades. Vale, vamos a por el resto, los dígitos 5, 6 y 7. El dígito 8 es fijo, un cero. Por tanto, el número será: 0111-0000, que en decimal es un 112, nuestro valor para la máscara.


Si vuelves a escribir el programa anterior poniendo en la máscara 112 en lugar de 15, verás en la pantalla del NXT... un 48. Si esperas, se convertirá en un 64, en un 80... Ese número son las decenas y hay que dividirlo x16. La explicación es que en los bits 1 al 4 hay ceros y por tanto el siguiente valor (bit 5) será 16 y no uno. No se si queda muy claro. Espero que la imagen ayude:


Reloj permanente para NXT

Bueno, explicado esto, el programa queda como sigue. De esta forma, obtenemos las decenas, el 3. Recuerda, máscara 112 y dividido /16.


Reloj permanente para NXT

Ahora ya lo podemos recomponer todo para obtener los segundos. El 3 lo multiplicamos x10 y le sumamos las unidades. Ya tenemos los segundos. Pincha sobre la imagen para ampliarla.


Reloj permanente para NXT

MINUTOS


El programa es exactmente el mismo que acabamos de poner, pero leyendo del registro 1.


HORAS


Solo hay que cambiar los primeros iconos. El resto es exactamente igual. Recuerda: registro 2.


Reloj permanente para NXT

DIA DE LA SEMANA


Corresponde al registro 3. Creo que el icono Mask se puede quitar, pero bueno, por seguir la sistemática lo dejamos. Se configuraría con un 7, correspondiente a los últimos 3 dígitos: 0000-0111 = 7.


Reloj permanente para NXT

Recuerda que este es el dato que no se podía leer/escribir con el icono que descargamos de la web al inicio, el icono en NXT-G. Recuerda: 1 es lunes y 7 es domingo.


DIA DEL MES


El día del mes se lee en el Registro 4 y el proceso es exactamente igual que en el de las horas.


MES


El mes se lee en el Registro 5. El primer icono de máscara tiene un valor de 15 y el segundo que se ve, de 16. Si quieres, pincha sobre la imagen para ampliar.


Reloj permanente para NXT

AÑO


Según la tabla, tendremos que mirar el registro 6. Los 4 últimos bits son las unidades del año en curso y los 4 primeros bits, las decenas. El primer Mask será un 15 y el segundo, 240. Con esto, nos aparecerá en pantalla un 11, siempre que esté bien configurado.


Si quieres que en lugar de 11 aparezca 2011, escribe el programa que viene a continuación. También en esta puedes pinchar sobre la imagen para agrandar.


Reloj permanente para NXT

PRESENTANDO LOS DATOS


Ya hemos visto cómo obtener cada uno de los parámetros que nos puede aportar el reloj. Pero para que tengan algún sentido, habrá que agruparlos y presentarlos como si fuera un reloj. Para ello, nos ayudaremos de variables. En lugar de la presentacón de un dato en pantalla, lo introduciremos en una variable numérica. Es decir, el programa anterior quedaría así:


Reloj permanente para NXT

El último icono de todos es una variable llamada "año" y que sustituye a los habituales iconos de presentación en patalla. De la misma forma, crea variables numéricas llamadas: seg, min, hora ... año. Una vez hecho esto, pondremos como ejemplo la presentación de un reloj con solo hora, minutos y segundos. Quedaría como sigue. Lo explicamos a cotinuación:


Reloj permanente para NXT

Notas: he suprimido los iconos "Number to Text" por claridad. Por eso aparecen las líneas discontínuas en la imagen. Recuerda incorporarlos en tu programación. He modificado como en otras ocasiones el color de un cable, también por claridad.


Por último, tienes en la imagen lo que debes anotar en la "B" del icono "Text": dos puntos en el primer y segundo caso y 4 o 5 espacios en el tercer caso (sin comillas). Haciendo esto, aparecerá en pantalla (por fin) el reloj con apariencia de reloj.


Reloj permanente para NXT

MY BLOCK


Con todo esto, ya puedes entender el siguiente My Block. También puedes descargarlo y usarlo directamente. Bueno, o casi. Recuerda que para instalarlo, descarga el archivo y lo pegas en el directorio (y no en otro):


[...]/LEGO Creations/MINDSTORMS Projects/Profiles/Default/Blocks/My Blocks.


Para que el icono funcione correctamente, DEBERÁS disponer de los siguientes bloques instalados en tu ordenador: Write, Read y Mask. Todos ellos los puedes encontrar en la sección de Software.


En el programa, los días de la semana aparecen con su nombre y no con un número. Puedes descargarlo pinchando sobre el icono.


Descargar Reloj calendario permanente para LEGO NXT




Una vez instalado, tendrás esto:


Reloj permanente para NXT

Es decir, con un único icono podrás controlar todas las funciones, a excepción de la puesta en hora que ya hemos explicado, del reloj. Si tu reloj se atrasa en los minutos, simplemente crea un programa con el icono Write y lo ejecutas 1 vez para ponerlo en hora y ya está.


Verás que el reloj tiene salidas numéricas y de texto. Como ejemplo, la Hora en texto mostrará en pantalla 21:25:23. La hora numérica contiene el valor "21" para que puedas realizar operaciones con él. Lo vemos ahora.


APLICACIONES


Reloj de cuco


Citaré solo 2 de las muchas posibles. Una sería construir un reloj de cuco. En las propias instrucciones de la caja del NXT 2.0 creo que viene cómo construir uno. Bueno, pues para que suene 1 "bip" cada hora, la programación sería tan complicada como esto:


Reloj permanente para NXT

Ambos iconos "Igual que" está seleccionados a "0". El último "Compare" está en "And". De esta forma, cuando los minutos Y los segundos son "0", suena un "bip". Mientras tanto, aparece la hora en pantalla. La razón de poner también los segundos es para evitar que esté sonando el bip durante todo el minuto "cero" de cada hora.


Toma de datos cada cierto tiempo


Una segunda aplicación del reloj podría ser la de la toma de datos cada cierto tiempo, por ejemplo cada 20 segundos. En el siguiente ejemplo, en lugar de tomar un dato, suena un bip cada 20 s. Pincha sobre la imagen para ampliarla.


Reloj permanente para NXT

Lo primero que hace es poner el contador a cero. Ahora, presenta la hora en pantalla. Cuando los segundos sean igual a 0, coincidirá con la variable "contador" y el programa avanzará. Sumamos 20 (segundos) a la variable "contador".


La próxima vez que pitará el programa es cuando los segundos coincidan con 20. En ese momento, volverá a pitar y sumará 20 más a la variable, que valdrá 40. Cuando llegue a 60 habrá que reiniciarla (el switch), ya que "no existen" 80 segundos. Así volverá a empezar a contar desde 0 segundos.


Un programa más real puede consistir en tomar valores de algo que estemos midiendo cada cierto tiempo. Imagina que tienes un termómetro como el que contruimos en la sección de "Sensores Analógicos" y que está sumergido en agua con hielo y sal. La idea es tomar un dato de la temperatura cada 15 minutos automáticamente y registrarlo con el Data Logger.


Adaptar el programa anterior no debería ser complicado. Incluso podrías poner al inicio un bucle para que la toma de datos empezara justo a las 17h. Simplemente habría que añadir al inicio del programa:


Reloj permanente para NXT

El programa quedaría atrapado en este bucle hasta que se cumpliera la condición, momento en el cual avanzaría y empezaría a tomar datos. De esta forma, tomaría datos a las 17:00h, a las 17:15h, a las 17:30h... o cualquier otra cosa que se te ocurra, como que empiece a medir el próximo lunes... siempre que tu NXT no se quede sin baterías.


Cualquier duda adicional, error, cosa que no se comprenda o no te salga..., no dudes en acudir al foro.


up-rojo-flecha
Display digital de 7 segmentos
Acelerómetro casero
.