Reloj despertador

En este proyecto, nos propusimos crear reloj despertador que:

  • Permitiera apagar su alarma sin tocarlo
  • Tuviera pantalla que se iluminase si se acercaba el usuario y en función de la luz ambiental
  • Contase con una interfaz unificada y fácil de usar usando un joystick con botón integrado

Hardware

El hardware del proyecto consiste en una placa Arduino UNO R3 conectada a una pantalla LCD y a un joystick que sirven como interfaz de usuario así como un fotoresistor y un sensor de distancia para el resto de funciones.

El uso de un joystick en lugar de botones no sólo se prestaba interesante, sino que además permitió ahorrar en pines digitales, los cuales escaseaban debido al uso de la pantalla LCD.

Conexión física de los componentes

Una vez conectados todos los componentes, se ven de la siguiente manera:

El circuito paralelo de divisor de tensión que nos permite utilizar el foto-resistor está soldado a un escudo de prototipado (proto shield) que va montado encima de la Arduino UNO R3. Esto permite una reducción significativa en el tamaño del prototipo al no necesitar utilizar una protoboard externa así como una mayor robustez al no depender de pines DuPont que podrían soltarse durante el desplazamiento del prototipo.

Los pines de la pantalla LCD y del zumbador tuvieron que ser soldados a cables DuPont debido a que no se disponían de suficientes adaptadores macho-hembra como para poder conectar todos los componentes a la Arduino sin necesidad de una protoboard.

El joystick y el sensor de ultrasonidos están conectados a la Arduino utilizando adaptadores DuPont macho-hembra bastante largos, lo que nos permitió una mayor flexibilidad más adelante a la hora de posicionar los componentes para su posterior presentación.

La batería de 9V está conectada a la Arduino utilizando un cable adaptador de pila de 9V al conector de barril que posee la Arduino.

Disposición en una caja para presentación

Todo el hardware, organizado como prototipo dentro de una caja, se ve de la siguiente manera:

Internamente, los componentes fueron adheridos a las distintas paredes de la caja utilizando cinta Kapton. Además, la pantalla LCD y el joystick están reforzados utilizando cinta de aluminio para aguantar el mayor peso de la pantalla y la fuerza necesaria para presionar el botón integrado en el joystick. En el lateral derecho hay un pequeño puerto rectangular para poder conectar un cable USB a la Arduino y depurar sin necesidad de deshacer el montaje.

Software

El software ha sido, sin duda, la parte más complicada del proyecto.

Debido a que la Arduino UNO R3 no cuenta con soporte para programación multihilo ni multiproceso, para implementar la lógica del circuito ha sido necesario no usar el tan habitual delay() en proyectos de Arduino y en su lugar utilizar la función millis() con el objetivo de poder medir el tiempo de manera no bloqueante.

El proyecto aprovecha que el framework de Arduino está basado en C++ utilizando la programación orientada a objetos para estructurar el código:

Varios aspectos a destacar sobre la arquitectura son:

  • Lectura y escritura de señales analógicas independiente de la resolución de la placa gracias a la clase Analogico.
  • Interacción con componentes del circuito mediante clases que simplifican su uso y facilitan las tareas de depuración.
  • Implementación de la interfaz de usuario basado en el patrón de diseño Behavior (veasé Head First Design Patterns de Eric Freeman y Elisabeth Freeman, pág. 11), lo cual permite diferenciar claramente entre el código que fundamenta cada vista de la interfaz de usuario y, lo más importante, permite implementar un sistema de redirección y manejo de eventos que asegura que las distintas partes de la interfaz de usuario no reaccionan a eventos de usuario cuando no deben.

Para respaldar la compleja estructura del software, consideramos necesario utilizar un conjunto de herramientas más potente que el Arduino IDE, por lo que recurrimos a usar PlatformIO para definir y compilar el proyecto.

A continuación se muestra un diagrama que explica a grandes rasgos cómo se comporta el software del reloj ante varios casos de uso:

El código está ampliamente documentado de manera que su lectura debería considerablemente amena a pesar de su complejidad.

Enlace de descarga del código

Funcionamiento del reloj

Nada más conectar la batería, el reloj se enciende con una hora establecida por defecto.

Cuando el usuario se acerca, el reloj elige entre dos niveles de intensidad programados en el código para iluminar la pantalla en función del umbral de luz (configurable por el usuario) y de la luz detectada por el fotoresistor.

Para alternar entre las distintas pantallas (hora, alarma y umbral de luz), el usuario simplemente debe mover el joystick horizontalmente. La alarma se activa y desactiva cambiando a la pantalla de alarma y moviendo el joystick hacia arriba.

Para configurar cualquiera de los parámetros visibles en la pantalla, el usuario debe cambiar a la pantalla en la que se muestra el parámetro que desea modificar y pulsar el botón del joystick para entrar en modo de edición. En dicho modo, mover el joystick horizontalmente permite seleccionar el campo a modificar (por ejemplo, en la hora cambiaría entre editar horas, minutos y segundos), y moverlo verticalmente aumenta o disminuye el valor del campo.

Cuando suena la alarma, el usuario puede desactivarla antes de que pase el tiempo estipulado por código (30 segundos) acercándose al reloj.

También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *