Introduction: Alarma/Despertador Con Arduino

About: Spanish Electronical Engineering student. Wish to help people ( or get helped ) and to bring something to this world. Hope you like my instructables and ask any doubt ( or correct any mistake ) freely. Jajaj …

Este es el primer proyecto que subo y escribo y me gustaría compartirlo pues me parece un proyecto muy interesante y muy entretenido.

La idea para este proyecto fue porque tenia en casa un pequeño reloj despertador desde navidad que no había usado pues no tenia pilas. Dado la forma de robot que tiene y que los ojos se iluminaban pulsando un botón (que estaba donde por ahora se ven cables saliendo ), quería darle una utilidad pues me parecía graciosillo. Ya que su funcionamiento era el de reloj/alarma, se me creo crearlo a mi mismo usando el ya mas que conocido arduino.

"Y porque una alarma si todos en el móvil tenemos una?" Pensareis. Bueno, es verdad que una alarma no es totalmente necesaria, pero me parecía un proyecto super interesante, en el que utilizaría muchas herramientas electrónicas muy usadas e importantes. Y sobre todo, no hay nada como ver como algo aparentemente complicado hecho por ti mismo funciona, y ademas, puedes usarlo en tu vida cotidiana.

Así empece este interesante proyecto.

Espero que os guste!(:

Step 1: Consiguiendo El Material

Primero, veremos como funciona la alarma para después saber el material necesario:

Mientras arduino este alimentado, en la pantalla LCD tendremos la fecha y la hora actual, hasta que pulsemos el pulsador que tengamos. Al pulsarlo, en la pantalla nos aparecerá la opción de escribir la hora en la que queremos que suene la alarma, y después de escribirla, en la pantalla tendremos la hora real y la hora de la alarma.Cuando estas dos sean iguales, se activaran, en mi caso, los LEDs rojos y el zumbador, que permanecerán activos hasta que pulsemos de nuevo el pulsador y empieze de nuevo el programa.

Para empezar. aparte de los imprescindibles arduino, la placa board y los cables para conectarlos, necesitaremos una pantalla LCD y un teclado ( Keypad). Yo he usado un teclado matricial de 4x4, aunque solo vayamos a utilizar los números, pero siempre estarán ahí si los necesitamos alguna otra vez.

Aparte de esto, necesitaremos controlar la hora con nuestro arduino, la hora real. Esto no es algo que pueda hacer por si solo, porque arduino si que controla el tiempo, pero solo puede controlar el tiempo desde el ultimo momento en que ha sido encendido. Por eso, cuando le quitamos la alimentación, este contador se pone a 0 y empieza de nuevo la siguiente vez que lo alimentamos. Como resolvemos este problema? Para ello necesitamos un reloj externo, que cuente el tiempo incluso cuando arduino no esta conectado. Un reloj que tenga batería propia para que pueda contar independientemente aunque quitemos la alimentación. Este reloj es un reloj Tiny RTC ( Real Time Clock) que consiste en un chip DS1307 que lleva la cuenta de la fecha ( dia, mes, año) y de la hora ( segundos, minutos, horas) en la que estamos y una placa con una bateria ( pila botón ) para que lleve la cuenta sin necesidad de la alimentación de arduino. ( Un calendario electrónico como quien diría jaja).

Tambien necesitaríamos un pulsador ( un Push-Button por ejemplo) para avisarle a nuestro programa que queremos pasar de un funcionamiento normal, a el funcionamiento de alarma, en el que pondremos la hora de la alarma para que suene.

Finalmente, pero no por ello menos importante, necesitaremos nuestra salida, algo que se active cuando la hora de la alarma ya ha llegado, ( sino, no tendría mucha utilidad....jajaj). Unos LEDs, un Buzzer (zumbador), un motor DC incluso....Yo he usado unos LEDs( los ojos de la pequeña alarma) y un zumbador.

-Arduino Uno (O cualquier microcontrolador parecido, tanto de arduino o clon)

-Placa board

-Cables de conexion

-Reloj Tiny RTC I2C

-Teclado matricial (Keypad)

-Pantalla LCD

-Push-Button

-LEDs, Zumbadores,...

Step 2: Reloj Tiny RTC Y Contar La Hora

Explicacion

Una de las partes mas importantes de este programa, es poder contar la hora en la que nos encontramos y poner la hora de nuestra alarma. Como hemos dicho, arduino no puede completar esta funcion, porque solo cuenta el tiempo desde la ultima vez que ha sido alimentado. Aquí es donde entra el reloj Tiny RTC.

Estos relojes RTC, llevan la cuenta de la hora y la fecha independientemente de estar conectado a arduino. Son un modulo formado por un microchip ( DS1307 en nuestro caso ) que cuenta la hora a tiempo real, una memoria para guardar los datos y una batería para que haga esta función aunque arduino no este alimentado.

Como suele pasar en este tipo de relojes, lo primero que hay que hacer en cuanto lo tengamos, es inicializarlo para ponerle la fecha y hora en la que estemos ( o cualquiera que queramos vamos) , que el reloj empiece a contar a partir de esa hora. Para ello y para usar este reloj con nuestro Arduino IDE, necesitaremos cargar una librería para tener ya todas las funciones relacionadas con el reloj y la cuenta del tiempo. Para ello, se pueden usar diferentes librerías, como la librería "Time" de arduino o la librería "RTC.lib".

En mi caso, he usado la librería RTC.lib, que podeis descargarla de esta misma pagina como archivo zip.

(Antes de cargar la librería, cuando la hayáis descargado, entrar en vuestro descomprimidor y cambiar el nombre de la carpeta (RTClib-master por RTClib). Después tenéis dos opciones, o extraer el zip en el directorio que queráis. o simplemente dejarlo en modo zip. Yo lo he dejado en zip. y después lo he añadido a arduino. Para añadirlo a arduino, no tenéis mas que entrar en el IDE, clickar en programa, después en "include library" y "add.zip". Buscáis el directorio donde habéis guardado el zip, y ya tendríais la librería.)

Conexiones

Cuando tengamos la librería, conectaremos el reloj a arduino de la manera que podemos ver en la imagen.

( Aunque finalmente el reloj vaya conectado por una placa board a arduino, las otras dos imagenes estan para que se vea bien como van las conexiones entre el Reloj y arduino.)

Los pines SDA y SCL son para comunicación entre arduino y el reloj, y el VCC y GND, como ya sabemos, para alimentación, pues aunque el reloj tenga una batería para contar el tiempo cuando no este alimentado, para comunicarse con arduino si que debemos de conectar estos pines. El pin SQW es un pin de salida que nos permite generar una señal cuadrada de frecuencia programable, para que así tengamos una base del tiempo en otro circuito sin necesidad de un cristal de cuarzo,que ya lleva nuestro reloj.

Ahora,tendremos que inicializar el reloj, para que empiece a contar a partir de la hora que marquemos. Para ello, usaremos el programa de la imagen. En el programa, podemos ver la linea "RTC.adjust(DateTime(__DATE__, __TIME__));", en esta linea, le decimos al RTC que conecte con la hora de nuestro ordenador, y esta sera la hora por la que el reloj empezara a contar, asi, sabemos que lo tenemos en hora.

Este pequeño programa solo lo usaremos ahora, pues en el programa de nuestra alarma no lo necesitaremos, ya que la hora estará ya establecida en el RTC.

Step 3: Pantalla LCD Y Escribir En Ella

Explicacion

Las pantallas LCD (Liquid Cristal Display) son muy usadas en electronica, muy interesantes y con muchas posibilidades. Estas pantallas, que son de cristal liquido, tienen un foco de luz detras, y nosotros elegimos que pixel de la pantalla queremos que se active o no. De esta manera, podemos escribir lo que queramos.

Para usar este tipo de pantallas, necesitaremos instalar previamente una libreria ( como de costumbre) LiquidCristal.h, cuyo link de descarga os dejo en el post. Es muy interesante ver las funciones que incluye esta libreria, pues se pueden hacer muchas cosas con ella y tiene muchas posibilidades. En este programa, podemos ver sobretodo que usamos 3 funciones:

lcd.clear()= Limpia todo lo que hay escrito en ese momento en la pantalla.

lcd.setCursor()= Colocamos el "cursor" en el pixel de la pantalla que queramos. La que yo he usado, y las mas comunes, son de 16*2. Osea que tiene 2 filas de 16 pixels cada una ( aunque luego cada pixels se divide en 35 pequeños pixels que podemos tambien editar con una funcion de la libreria), Si por ejemplo escribimos el tipico "Hola mundo!", usaremos 11 pixels de la primera fila.

lcd.print("Hola mundo!")= Escribimos "Hola mundo!" en la pantalla empezando desde donde estaba el cursor.

Conexiones

Las conexiones entre arduino y la pantalla, son multiples. En mi caso, en el programa principal,mpodemos ver que hemos definido desde los pines 5 a 0 de arduino para las conexiones de la pantalla. Los pondremos de esta manera:

Pin 5---->RS Pin 3---->D4 Pin 1----->D6

Pin 4---->E Pin 2----->D5 Pin 0------->D7

RW (pantalla)--->GND Vss (pantalla)---> GND VDD (pantalla)---->5V

VO (pantalla)-----> Contraste K (pantalla) ----> GND A (Pantalla) -----> 5V

Estas son todas las conexiones que hay que hacer para utilizar bien la pantalla. Para finalizar con las pantallas, tengo que decir que el pin Vo de la pantalla es el que maneja el contraste de esta. Puede que la primera que obtengamos la pantalla, no se vea bien por que el contraste no esta bien puesto (demasiado oscuro o demasiado claro) . Para ello esta este pin. podemos usar un pin PWM para poner el contraste que queramos. Le añadiriamos a nuestro programa un pinn pin PWM como salida, conectado a Vo, e iriamos probando (AnalogWrite(9,300) por ejemplo) diferentes valores hasta que encontremos el valor que queramos para que sea bien la pantalla. El problema de este metodo, es que necesitariamos usar otro pin de arduino como salida, y no nos sobran..

Yo recomiendo usar un potenciometro pues es mas facil y no hace falta programar. Conectamos el pin del medio del potenciometro a Vo de la pantalla, y los otros dos pines del potenciometro a 5V u a GND. De esta manera si movemos el potenciometro, veremos como va cambiando el contraste.

Step 4: Teclado Matricial Y Escribir La Alarma

Explicacion

Los teclados matriciales, como bien el nombre indica, son teclados para meter información a arduino. Pueden ser números, símbolos o letras como en nuestro caso. Como se ve en la imagen, esta organizado por filas y columnas, creando una matriz, por lo que cada teclado tiene un numero de fila y un numero de columna. El funcionamiento de estos teclados es de la siguiente manera. Se leva dando tension alternativamente a las columnas, ( digitalWrite(8,HIGH) por ejemplo ) y vamos leyendo todas las filas. Si por ejemplo en el pin que esta conectado la fila 3 lee HIGH, sabemos que ha sido pulsado el numero 2. Si leemos todas las columnas y no hay ninguno que de HIGH, pasamos a la siguiente fila.

Por suerte, y como de costumbre, nosotros no tenemos que programar nada de esto, pues ya esta todo programado en las librerias. Por cosas como estas son tan útiles. En este caso usaremos la librería Keypad.h que os la dejo en este post también. Entre otras funciones de esta librería, usaremos la de "waitForKey()", en donde arduino ejecutara continuamente el proceso indicado anteriormente en cuestión de micro-segundos hasta que una tecla sea pulsada.

Para usar un teclado matricial, hemos tenido que crear una matriz, de las medidas de nuestro teclado. En este caso, como vemos en la imagen de esta parte del programa, hemos creado una matriz de 4x3,por razones que explicare luego.

Conexiones

Uno de los mayores problemas de este proyecto, ha sido la falta de salidas de arduino, pues me he encontrado justo con 13 pines como salida, pues hemos usado todos y cada uno de ellos. Para ello, hemos tenido que prescindir de la columna 1, por que no quedaban mas pins y por que tampoco necesitamos esas teclas para escribir la hora..Por eso hemos creado una matriz de 4x3. Las conexiones son las siguientes:

Matriz 2 ---->Pin 7 Matriz 6 -----> Pin 11

Matriz 3 ----->Pin 8 Matriz 7 ------> Pin 12

Matriz 4 ----> Pin 9 Matriz 8 -------> Pin 13

Matriz 5 ----> Pin 10

En el programa podemos ver que creamos una matriz de tipo char, de las dimensiones indicadas (Filas,Cols) y después indicamos como sera cada elemento de la matriz.

Step 5: Ultimas Conexiones Y Programa Final

Para acabar el programa, vamos a conectar un LED y un pulsador. Para hacer esto, he conectado el LED ( en este caso son dos LEDs en paralelo, pero no pasa nada porque los dos están conectados como ánodo común y usan el mismo pin en el ánodo) al pin 6 de arduino. He usado tambien una resistencia de 330 ohm entre el katodo del LED y GND, por si acaso.

Al hacer esto, me he quedado ya sin ningún pin digital libre de arduino, que ha sido uno de los mayores problemas del proyecto, pues todavía necesitamos un pin para leer cuando pulsamos el pulsador. Para ello, he usado un pin analógico. Hay dos maneras para que leamos el estado de un botón con arduino. En la imagen podemos ver las dos, resistencia " pull up", o resistencia pull down. Como pull up, arduino leerá un voltaje de 5V ( HIGH) cuando el botón no este pulsado, y 0V (LOW) cuando este pulsado. Si conectamos a modo de resistencia "pull down ", leeremos todo lo contrario. En mi programa, he usado el modo de "pull Down".

Como no tenia ningún pin digital, he decidido usar un pin analógico para leer el estado del botón. Los pines analógicos de arduino, leen un voltaje de entre 5V y 0V y lo convierten en una escala de entre 1023 (5V) y 0 (0V) . Por ello, en el programa, podemos apreciar en el "While" de la linea 56 por ejemplo, cuando leamos un voltaje menor a 512 ( la mitad mas o menos, que sabemos que el botón no esta pulsado ), sigamos simplemente escribiendo la hora. Esto ha sido una manera de poder usar mas entradas a falta de pines digitales.

Finalmente, conectaremos el zumbador también la la salida 6 del pin digital por su lado positivo ( los zumbadores tienen polarización) , y a masa por el otro lado.Con esto, el programa estará terminado.

El programa final de arduino, esta adjunto en el blog, que esta bien explicado mediante notas.