Proyecto de reloj digital
En estos últimos tiempos ha surgido un interés muy grande por el desarrollo de dispositivos de tecnología vestible que ofrezcan funcionalidades a nuestra vida diaria, los famosos wearables. Actualmente han surgido una serie de modelos y prototipos de este tipo con la idea de introducirlos al mercado e ir buscando desarrollar una nueva tendencia en el mundo de la tecnología. Algunos de estos productos podemos citar el Google Glass y los llamados SmartWatches
Una de las principales desventajas de estos aparatos o Gadgets como comúnmente se les llama es su alto costo que en muchas ocasiones los hace menos atractivos para un mercado aun emergente.
Este proyecto esta desarrollado en Arduino, un sistema basado en micro controladores ATMEL cuya programacion a traves de las librerias implementadas en IDE de Arduino y las librerias proporcionadas en el sitio web de Adafruit.
El hardware del dispositivo
El proyecto esta concebido para ser lo mas accesible posible en los materiales utilizados y de bajo costo. Es por esta razon que los materiales escogidos para el hardware de manera esencial se listan en la lista a continuacion. Existe la posibilidad de ampliar las capacidades del proyecto agregando nuevo hardware que le de al reloj nuevas características para explotar pero comento las esenciales.
Diagrama de la conexion de pines de los dispositivos con el microcontrolador con su mapeo de pines de Arduino.
Diagrama de bloques del proyecto Se me olvido en el diagrama un push button ups!!
Prueba del proyecto en Protoboard
Arduino Mini Pro 3.3 V 8 Mhz
El arduino Mini Pro como se menciono previamente es un sistema basado en microcontroladores ATMEL de arquitectura RISC Reduced Instrution Set.
En la imagen se muestra el diagrama de pines del microcontrolador junto con su mapeo a los pines de Arduino. Hecho el mapeo los pines se dividen en digitales y analogicos lo cuales se colorean en el diagrama. En el Mini Pro se utiliza el empaquetado tipo SOIC
Este Arduino en particular esta basado en un ATmega 328 cuya velocidad de procesamiento esta fijada a 8 Mhz siendo su velocidad max de 20 Mhz. Su reducido tamaño y bajo consumo lo hace ideal para este proyecto.
El Mini Pro cuenta con 14 pines digitales y 8 analogicos
La principal desventaja con la que ahi que lidiar con este modelo y en general con cualquier proyecto que involucre controladores son los recursos limitados del chip. Siendo el programa creado con librerias de alto nivel tenemos la desventaja de que agotamos conforme extendamos nuestro software la memoria que nos ofrece el microcontrolador, por lo que agregando solo las librerias que necesitemos nos ayudara mucho para nuestro proyecto.
Pantalla Nokia 5110
Esta pantalla fue utilizada en el popular celular Nokia 5110. La pantalla usa el controlador PCD8544 para manejar esta pantalla gráfica monocromática de 84 columnas x 48 renglones. La nokia 5110 es facil de conseguir en tiendas de componentes electrónicos o bien via web y existe amplia documentación en varios sitios web sobre su funcionamiento y uso. Su bajo precio y tamano lo hacen una excelente opcion como pantalla para el reloj.
Despliegue de una imagen en mapa de bits con la Nokia 5110
Para este proyecto y el manejo de la pantalla se utilizo la libreria de codigo abierto de AdaFruit.
Para el manejo de esta pantalla necesitas instalar dos librerias disponibles en su descarga en el sitio web de GitHub
Libreria del driver
Libreria AdaFruit GFX
Tutorial de conexion de la Pantalla Nokia 5110
https://learn.sparkfun.com/tutorials/graphic-lcd-hookup-guide
https://learn.sparkfun.com/tutorials/graphic-lcd-hookup-guide
Pines de la pantalla Nokia 5110
- 3 botones tipo push button
- Buzzer
RTC DS1307
El RTC es un dispositivo que se comunica via I2C con el microcontrolador. Posee un calendario incluido hasta el 2100. Este chip se puede conseguir como un modulo o bien conseguir el chip solo pero requiere el uso de componentes externos para su funcionamiento al igual que una pila tipo reloj para mantener sus registros.
Regulador de voltaje y bateria
Con la idea de que el dispositivo sea vestible debe tener una bateria y un regulador para poder llevarse de forma autonoma y recargarse. Existen muchos dispositivos para manejar la carga proveniente de baterías de litio basados en el controlador lineal de carga MCP73831 de Microchip. Para este proyecto les recomiendo el SparkFun LiPo Charger Basic Mini USB o el Micro USB Lipo de AdaFruit.
Afortunadamente el Mini Pro cuenta con un regulador de voltaje. Durante la primer prueba del prototipo use dos baterias tipo reloj CR2032 para alimentar el reloj y afortunadamente pudo funcionar pero aun no he hecho pruebas para ver que tanto puede durar el reloj funcionando de esta forma.
Opciones de ampliacion
A continuacion se enlistan las opciones de ampliacion. Dedicare otra entrada para comentar sobre las posibilidades de ampliacion.
- Motor de vibracion y LEDS
- Acelerometro ADXL345
El ADXL345 es un acelerometro de 3 ejes con 10 bits de resolucion.
Los usos del acelerometro se extienden mucho mas alla de su funcion de paso doble. Este dispositivo en el caso de aparatos electronicos tiene utilidad en videojuegos que podemos manejar solo girando el aparato simulando un volante con nuestro movimiento. Los acelerometros son el sensor responsable de la rotacion de la pantalla en dispositivos electronicos actuales.
- Codec para reproduccion de audio VS1053
Reloj funcionando
La interfaz grafica
La interfaz realizada se enfoca para moverse entre las funciones del reloj de forma facil y sencilla. Utiliza 3 botones para el usuario. Dos de ellos como boton hacia adelante y atras y un boton de seleccion. Existe la idea de ampliar las funcionalidad de los botones agregando la opcion de mantener presionado el boton de seleccion para regresar al menu principal y salir asi facilmente de las funciones.
Una fotocelda de facil adquisicion permite con algo de programacion regular el brillo de la pantalla a traves de un PWM dependiendo de la luz exterior para mantener una mejor visualizacion y ahorro de energía.
Existe una opción de contador automático ubicada cuando nos ubicamos en el menu principal que sirve para determinar la inactividad del reloj. Recordemos que sin importar las funciones que manejemos y agreguemos para el reloj su principal funcion es dar la hora y fecha. Por este motivo después de un tiempo determinado de inactividad se mostrara de forma predeterminada a la funcion de fecha y hora.
Parte del hardware que puede ser de utilidad es obtener la temperatura a través de un sensor de temperatura LM35 y mostrarlo como un dato alternativo en la función de fecha. Para conocer mas informacion sobre este sensor te dejo el siguiente enlace para poder consultarlo
Hoja de datos sensor de Temp LM35
Manejo de botones e interfaz con el usuario
En esta primera version el manejo de los botones se realizo de forma secuencial es decir conforme recorremos el menu y se ejecutan las instrucciones en el momento que el hardware detecta el toque del boton conectado a un pin digital se pasa ese valor a una funcion antirebote que reconoce ek tecleo y en base al boton seleccionado se ejecuta una accion especifica.
Un problema de esto es que la detección de la tecla compite con las instrucciones que se ejecutan secuencialmente por lo que aun con varias funciones antirebote que se probaron no se corrige este problema. Una solucion seria manejar los botones a traves de interrupciones. Recuerdo que las interrupciones son recursos limitados del ATmega
Una propuesta de mejora futura para los botones que vale la pena probar se las dejo aqui
- Una interrupcion para los dos botones de navegacion
- Una interrupcion para el boton Enter
La interfaz del reloj se basa en un menu principal dividido en las siguientes funciones basicas.
- Reloj
- Alarma
- Configuraciones Config
- Rutina
Pasos
Permite medir los pasos. Esta opción esta incluida en el ADXL345 y requiere interrupciones.
Imagen de la funcion de conteo de pasos. Cada vez que el acelerometro en su funcion de paso incrementa un contador y dicho conteo se despliega en pantalla.
Imagen de la funcion de conteo de pasos. Cada vez que el acelerometro en su funcion de paso incrementa un contador y dicho conteo se despliega en pantalla.
Imagen del menu de opciones Config usado para el ajuste de contraste de la pantalla y otras opciones del reloj.
Prueba de barra horizontal animada para poder usarse en la ejecucion de una rutina deportiva
Prueba de barra horizontal animada para poder usarse en la ejecucion de una rutina deportiva
El codigo permite ampliar facilmente las opciones del menu para agregar nuevas funciones y acceso a dispositivos tales como un juego que desarrolles o bien agregar nuevas funciones a traves de otros dispositivos.
Armado del circuito
Para el armado físico del reloj se probaron una serie de ensambles
para probar la forma mas adecuada y compacta de hacer el reloj.
Cuando
realices tu ensamble recuerda cuidar sobre todo tus conexiones ya que
una conexión mal realizada puede provocar un falso en tu circuito.
En
este primer ensamble se tiene acceso al chip retirando la pantalla para
facilitar su programacion y mantenimiento. Las resistencias limitadoras
se encuentran soldadas a la placa para hacer un diseño compacto. El
chip esta colocado sobre una base DIP de 40 pines para alojar el Mini
Pro.
La pantalla Nokia 5110 opera con 3.3 V si
trabajas con un micro controlador fijo a 5 V se necesitara un convertidor logico para bajar la señal cuadrada para evitar que la pantalla se llegue a fundir.
La conexion de los botones tipo push button se realizo por una conexion en pulldown.
La conexion de los botones tipo push button se realizo por una conexion en pulldown.
Placas de base para el Arduino Mini Pro y la placa que lleva el RTC y el acelerometro
En este ensamble como en otros que se hicieron los botones estan colocados en pull Down con resistencias de 330 ohms. Aunque este ensamble es un poco impractico para ser usado como reloj puede ser muy util para pruebas y comodo para poder juegar un juego que se programe en el codigo.
En este otro ensamble se muestra una forma mas compacta y apropiada para reloj. Aqui dentro de la piel esta colocado en una placa el Mini Pro y la paca para el acelerometro y el RTC, mientras que con jumpers se conecto una placa por separado para los botones. La pantalla esta conectada con un cable plano conectado a los pines asignados en la placa del mini Pro; esta idea ayudo mucho a poder colocar la pantalla al frente sin ocupar demasiado espacio extra. Recuerda referenciar todas tus tierras a un nodo comun para evitar falsos en tu dispositivo.
Despliegue de imagenes en mapa de bits
Para el despliegue de imagenes se usaron imagenes de 84x48 pixeles transformadas en formato bmp a traves de LCD Assistant. Como nota te cuento que el codigo para mostar mapas de bits ubicado en la opcion de pasos solo puedo mostrar las imagenes que tienen la medida de 84x48
Aqui les dejo el link para poder descargar el programa LCD Assistant
Ajuste de contraste
Cuando use la Nokia 5110 me di cuenta que la nitidez de la pantalla trabaja con diferente contraste entre pantalla y pantalla por lo que agregue esta opcion en el menu CONFIG para poder ajustarlo a tu gusto.
Nuevos proyectos
Existen muchas posibilidades no solamente relojes espero poder traerles mas noticias en una proxima entrada sobre los avances y lo que este por venirSaludos a toda la comunidad y sigan siempre adelante
Muy interesante tu proyecto esta genial, me gustaría saber si me podrías pasar el código, ya que me ayudarías bastante con mi proyecto de la escuela técnica. Desde ya muchas gracias
ResponderEliminarMuy interesante tu proyecto esta genial, me gustaría saber si me podrías pasar el código, ya que me ayudarías bastante con mi proyecto de la escuela técnica. Desde ya muchas gracias
ResponderEliminar