Introduction: Alarma/Despertador Con Arduino
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.
Attachments
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.
Attachments
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.
24 Comments
3 years ago
hola que tal
he visto el proyecto y quisiera saber como hacer lo mismo pero con la Pantalla OLED 0.96" 128x64 Azul I2C . es de urgencia!! agradecería mucho una respuesta.
Question 5 years ago
de casualidad no tendrás una imagen de la conexión de todo el cableado, lo que ocurre es que tengo unos problemas con el botón, el buzzer y el led, por cierto excelente proyecto.
PS. espero que no exista ningún problema si utilizo tu proyecto para una materia que tengo de programación como proyecto final, aparte la fecha de entrega es el jueves 25/05/2018, de antemano te agradezco que te tomaras el tiempo de leer mi pregunta y espero una futura respuesta tuya, gracias.
Question 5 years ago
una pregunta, como conecto el buzzer y el boton, es decir a que pines van conectados.
Question 5 years ago
¡Gracias por la información!
Tengo dos preguntas
1-.¿Crees que sea posible hacer un programa en que se puedan crear varias alarmas para diferentes momentos del día?
2-.¿Podría programar una alarma para que sonara, por ejemplo, dos días después de haberla programado?
Answer 5 years ago
Buenas DenisseR2, siento responderte unos dias tarde, pero espero ayudarte aun asi.
1- Sin ningun problema podrias hacer una alarma que salte en dos momentos diferentes. Alfinal el programa se basa en contar el tiempo, si quieres que salte en dos momentos diferentes, o cuentas dos tiempo diferentes, o desde que salta la primera alarma, cuentas lo que queda hasta que salte la segunda.
2- Tambien podrias hacer que la alarma sonara dos dias despues si. Lo importante es no quitar la pila boton del RTC ni desconectar el arduino. Mientras no desconectes arduino este seguira ejecutando el programa preguntando si la fecha de que la alarma salte ha llegado, y el RTC no puede ser desconectado, sino no contaria jaja. Pero si sin ninguna duda podrias hacer que salte o¡en dos, o incluso en un mes.
Espero haberte podido ayudar, ya me contaras.
Un saludo,
Daniel.
6 years ago
La verdad es que me funciona todo muy bien, lo unico que me falta es la parte del boton porque cuando lo presiono, la pantalla no cambia ni me da ningun opcion, nose si puedas ayudarme con la coneccion de la ultima parte del circuito porfavor
Reply 6 years ago
He andado algo ocupado ultimamente ya lo siento.... ):
Si sigues teniendo el problema dimelo y te ayudo sin problemas.
6 years ago
no tendras el diagrama del circuito fisico de las conecciones??
Reply 6 years ago
Pues la verdad que no, no tengo un diagrama del circuito en total.
Pero si vas paso a paso conectando como se explica en cada al final es ir juntandolo todo, no tiene perdida Jajaja
6 years ago
hola se puede controlar con el movil
Reply 6 years ago
Holaa!, que querrias controlar la alarma mediante el movil?
Podrias conectar arduino por bluetooth al movil con el modulo HC05 y despues mediante una aplicacion creada con mitAppinventor usar tu movil como interfaz.
Reply 6 years ago
muchísimas gracias por tu ayuda me has salvado tu proyecto es muy bueno y esta genial. <3
Reply 6 years ago
Muchisimas Gracias por tu apoyo! Espero escribir otra entrada pronto. Cualquier duda aqui seguire (:
Reply 6 years ago
por bluetooth o algo ??
6 years ago
Buenas amigo, quisiera saber si me podrias explicar la parte del codigo donde pones:
if(dia1<10)
{
lcd.print("0");
lcd.setCursor(7,0);
}
Quisiera que me explicaras a que se debe ese <10 y a porque lo colocas en todos los if. Gracias por tu respuesta
Reply 6 years ago
significa que si el número es menor que 10 usaras un segmento para el número, en este caso en la columna 7 fila 0, si fuera mayor o igual a 10 usaría dos segmentos el 7 y 8 uno para cada número
6 years ago
como descargo pdf no puedo ayudaaa
Reply 6 years ago
Buenas!
A que PDF te refieres? yo no puse ninguno en el instructable.
Puede ser que le estes dando a la opcion de "download" en PDF, pero esta opcion es solo para clientes premium que descargan todo el instructable en pdf ( bueno creo, yo no soy premium Jajaja).
Un saludo!
7 years ago
Un proyecto realmente interesante :) Tienes mucho mérito lo que haces ;)
Reply 7 years ago
Muchisimas Gracias!(: Me alegra mucho que te haya gustado!