Está en la página 1de 6

Electrónica de Consumo

Trabajo de Curso: Desarrollo de un reloj digital sincronizado con


servidor en placa WiPy 3.0
1. Introducción
El objeto de este trabajo es desarrollar un equipo de Electrónica de Consumo mediante el
uso de los microcontroladores usados durante las prácticas. En este caso, se ha decidido crear un
reloj digital sincronizado con un servidor y que cuente con varias funcionalidades extra. En
concreto, se va a usar la placa pycom WiPy 3.0 con su expansión board y la pantalla Nokia 5110,
así como un buzzer electrónico y una serie de botones externos.

2. Desarrollo
Las funcionalidades que se han querido instalar son: un reloj sincronizado con un servidor
(se sincroniza cada 15 segundos ya que es el límite de tiempo que permite el microcontrolador),
un sistema de configuración de alarma (que haga sonar el buzzer cuando la hora del reloj coincida
con la de la alarma), un cronómetro con precisión de segundos y un sistema de configuración y
ejecución de una cuenta atrás (que haga sonar el buzzer cuando llega a cero).

2.1. Configuración
La configuración de cableado que se ha usado es la especificada en la Tabla 1, y se puede
observar en la Figura 1.
Pin Objeto Pin Placa Pin Objeto Pin Placa
Pin 1 Pantalla GND Positivo buzzer P22
Pin 2 Pantalla 3V3 Negativo buzzer GND
Pin 3 Pantalla P23 Botones Pin 1 Vin
Pin 4 Pantalla P11 Botón Blanco izq Pin 2 P15
Pin 5 Pantalla P21 Botón Azul Pin 2 P14
Pin 6 Pantalla P20 Botón Blanco dcha Pin 2 P13
Pin 7 Pantalla P19 Botón Rojo Pin 2 P16
Pin 8 Pantalla P9
Tabla 1. Conexiones con la placa WiPy
Figura 1. Configuración de conexiones con la placa WiPy

Los botones están en configuración de push down, con un resistor a tierra de 2 kΩ en el


Pin 1 y uno de 330 Ω en el Pin 2, en cada botón. La configuración de push down hace que la señal
que se recibe del botón es 0 cuando el botón no está pulsado y 1 cuando está pulsado.

2.2. Funcionalidades
En los programas que se han desarrollado van incluidos tres programas, a parte de la
librería pcd8544.py que sirve para configurar la pantalla de Nokia 5110. Estos programas son el
boot.py, que se ejecuta al iniciar la placa, el archivo functions.py, que actúa como librería para los
programas que ejecutan las distintas pantallas, por último, el archivo icons.py, que se pretendía
que fuese una librería en la que se programaban los distintos iconos que se van a utilizar, sin
embargo, debido a que al utilizar un archivo distinto se borraba toda la pantalla no se ha utilizado,
se ha dejado incluido ya que se ha usado como referencia para incluir los iconos en las distintas
funciones que ejecutan las pantallas.
El cambio de funcionalidades se ha programado para que se haga al apretar el botón azul
que se puede ver en la Figura 1. Estos cambios de funcionalidades se efectúan mediante una
variable que se ha llamado screenmode, que vale 0 para la función del reloj, 1 para la función de
la configuración de la alarma, 2 para el cronómetro y 3 para la cuenta atrás. A continuación se van
a detallar las distintas funcionalidades, que se traducen en las distintas pantallas del reloj.
- Reloj digital con sincronización online:
Para la funcionalidad del reloj se usa el comando rct.ntp_sync(), que se conecta a un
servidor (en este caso concreto el servidor “hora.roa.es”) cada cierto tiempo que se puede
especificar como una de las entradas (en este caso se ha seleccionado 15s, que es el mínimo
tiempo de muestreo que acepta este comando) y de esta conexión se obtiene la hora UTC y fecha
actual.
Esta hora y fecha se puede incluir en la memoria de la placa mediante el comando
rtc.now(), y gracias al comando rtc.init() se puede sincronizar el reloj interno de la placa con dicha
hora (además de introducir husos horarios, en este caso se le añade un +2 al componente de la
hora para tener el huso horario de España).
Para finalizar con esta funcionalidad tenemos la función hora() definida en el archivo
functions.py, con la que representamos la pantalla correspondiente a la funcionalidad de reloj. En
la Figura 2 se puede ver el diseño elegido para esta pantalla. Se ha añadido como detalle un
símbolo de un reloj despertador que aparece cuando la alarma está activada.

Figura 2. Pantalla de reloj


Como último detalle se ha diseñado el programa para que los puntos que separan las
horas de los minutos parpadeen cada segundo. Además, la función buzzer() definida en el archivo
functions.py, que hace sonar el buzzer con tonos de 4 kHz espaciados en la secuencia 125ms
tono, 200ms silencio, 125ms tono; solo se activa para la alarma cuando se está en la pantalla del
reloj (en parte porque solo se actualiza la hora interna de la placa cuando se está en dicha
pantalla).
- Configuración de la alarma:
Para la funcionalidad de configuración de la alarma se usa la función alarmsetdisp()
definida en el archivo functions.py, a parte de una serie de bucles incluidos en el bucle while
principal de boot.py. Estos bucles sirven para cambiar los valores de ciertos punteros que se han
definido para poder acceder a las distintas funciones que se desean, así como las variables que
se han definido para que contengan el valor de la hora a la que se configura la alarma. Entre estos
punteros y variables se cuenta con: un puntero para determinar si la alarma está activada o no, un
puntero para determinar si se quiere modificar la hora o el minuto de la alarma, un puntero para
configurar el parpadeo de los dígitos que se están modificando (se usa el mismo que para el
parpadeo de los puntos en las otras funcionalidades) y por último dos variables, una que almacena
la hora de la alarma y otra el minuto de la alarma.
En la pantalla de configuración de la alarma se ha dispuesto que la cifra que se esté
modificando (hora o minuto) parpadee cada segundo, también se ha dispuesto que el icono del
reloj despertados aparezca siempre en la esquina superior izquierda (para indicar que se está en
el modo de configuración de la alarma) y un texto que ponga ON u OFF según si la alarma está
activada o no.
El funcionamiento se ha programado tal que el botón blanco de la izquierda actúa como
selector y cambia el puntero de hora-minuto mencionado anteriormente. El botón blanco de la
derecha, por tanto, se utiliza para modificar el valor seleccionado (hora o minuto) en uno por cada
segundo que se mantiene pulsado el botón. Por último se tiene el botón rojo, con el cual se modifica
el puntero que activa y desactiva la alarma. En la Figura 3 se pueden ver dos imágenes de esta
pantalla, la primera en el estado sin parpadear y con la alarma desactivada, en la segunda se
puede ver el parpadeo y la alarma activada.

Figura 3. Pantalla de configuración de la alarma


- Cronómetro:
Para la funcionalidad de cronómetro se usa la función chrono() definida en el archivo
functions.py, a parte de una serie de bucles incluidos en el bucle while principal del programa
boot.py. Estos bucles se usan para modificar los punteros asociados a las funciones del
cronómetro, así como para modificar las variables que almacenan los tiempos del cronómetro.
Entre estos punteros y variables tenemos: un puntero para determinar si el cronómetro está en
marcha, un segundo puntero para activar el reset del cronómetro (sólo ocurre si el cronómetro está
en pausa) y por último las dos variables que almacenan en memoria el minuto y el segundo del
cronómetro.
En la pantalla del cronómetro se ha dispuesto que aparezca el símbolo de un cronómetro
en la esquina superior izquierda (para indicar que se está en el modo de cronómetro). El
funcionamiento tal que el botón blanco izquierdo activa y pausa el cronómetro. El botón blanco
derecho activa el reset cuando el cronómetro está en pausa. En la Figura 4 se pueden ver dos
imágenes de esta pantalla, una con el cronómetro a 0 y otra con el cronómetro después de estar
activo durante 11 segundos.
Figura 4. Pantalla de cronómetro
- Cuenta atrás:
Para la funcionalidad de cuenta atrás se usa la función timer() definida en functions.py,
que funciona muy similarmente a la función alarmsetdisp(), con la diferencia de que se usan
distintos punteros a los usados para esa función (a excepción del que se usa para el parpadeo) y
distintas variables y bucles. Las diferencias en funcionalidad con respecto a la de alarma son: en
primer lugar que las cifras se corresponden con minutos y segundos en vez de horas y minutos;
en segundo lugar, que al activar el modo mediante el botón rojo empieza la cuenta atrás y la cifra
de segundos va disminuyendo; por último está que al llegar a cero se activa el bucle con la función
buzzer(), con la que se hace sonar el buzzer con el mismo ciclo que suena cuando se alcanza la
hora y minuto de la alarma. En términos de diferencias de diseño está el icono de la esquina
superior izquierda que en el caso de la cuenta atrás es un reloj de arena. En la Figura 5 se pueden
ver dos imágenes de esta pantalla, una en la que se ve la cuenta atrás puesta a 0 y con el parpadeo
y otra en la que se ve la cuenta atrás puesta a 10 segundos y sin parpadeo.

Figura 5. Pantalla de la cuenta atrás


3. Conclusiones y Consideraciones
En la carpeta entregada se encuentran una serie de vídeos en los que se muestran las
diferentes funcionalidades del reloj digital. Se considera que el objetivo del trabajo se ha cumplido,
aunque para poder usar este producto más cotidianamente hace falta una conexión a internet, que
se debe configurar en el programa antes de descagarlo en la placa. Adicionalmente se ha de tener
en cuenta que el servidor del que se obtiene la hora “hora.roa.es”, en ocasiones no funcione, en
ese caso se podría usar el servidor “hora.rediris.es”, que también es viable para el caso de España.
Se debe comentar también que se ha configurado este reloj para el horario de verano en España,
que corresponde a la hora UTC +2; para el horario de invierno habría que configurarlo
adecuadamente. Por último, se reconoce que el funcionamiento podría estar mucho más refinado
en términos de código (el hecho de que solo se reconozca el pulsado de los botones a cada
segundo se podría solucionar refinando este código), sin embargo y debido el tiempo limitado del
que se disponía para realizar este trabajo, se ha dejado como está con posibilidades de
refinamiento en un futuro.

También podría gustarte