En este tutorial, te mostraré cómo convertir un Arduino en un reloj con una pantalla LCD 1602, un Arduino, una mano llena de puentes y un chip / módulo de reloj de tiempo real. Ideal como accesorio para tu escritorio en casa o en el trabajo..
Este proyecto utilizará varios cables de puente en un espacio muy pequeño, así que tómese su tiempo para revisar y volver a verificar sus ubicaciones para no producir humo azul mágico.
Conecta la pantalla LCD al Arduino, solo para comprobar que todo funciona como debería. Comience con los cables de alimentación rojo y negro del Arduino a la placa de pruebas, y luego encienda la pantalla LCD. Si la pantalla no tiene luz de fondo, ignore los pines 15 y 16 en la pantalla LCD (los conectores del extremo derecho).
La pantalla se basa en el chip HD44780, un chip muy versátil que se utiliza en varios tamaños de pantalla diferentes, desde 16x1 hasta 40x2. Todo esto funcionará bien, el único ajuste mínimo que se requiere es asegurar que todo se alinee correctamente dentro del código, pero esto está anotado para que sea más fácil de adaptar a sus necesidades.
Una vez que la pantalla está conectada, puede conectar el módulo RTC. Los diferentes módulos pueden tener un orden diferente de pines, así que verifique de cerca con su módulo antes de continuar con el siguiente paso.
Antes de agregar algo de energía, es mejor revisar el cableado, asegurándose de que los cables de alimentación y tierra estén en los lugares correctos.
Una vez que estés feliz, conecta el Arduino. Verás una línea de cajas negras en la pantalla. Si no lo hace, intente ajustar el potenciómetro hasta que aparezca algo.
Debe tener el IDE de Arduino (el último en el momento de la escritura es v1.0.5) instalado en su computadora. Si no, visita el sitio web de Arduino para descargar e instalar.
Dentro del IDE de Arduino, haga clic en Archivo> Ejemplos> LiquidCrystal> HelloWorld. Se abrirá una nueva ventana llena de código. Hacer clic Expediente y entonces Subir. En menos de un minuto, la pantalla LCD cobrará vida, mostrando Hola Mundo y contando cada segundo.
Tienes una pantalla de trabajo.
Tendrá que decirle al chip RTC la hora correcta. Como el chip usa una batería para seguir contando, solo puede hacerlo una vez que tenga tiempo para comenzar a contar..
Comenzando con una nueva pantalla de Arduino, copie y pegue el siguiente código, desplácese un poco hacia abajo para cambiar la hora a la hora actual.
#include "Wire.h" # define DS1307_I2C_ADDRESS 0x68 byte decToBcd (byte val) return ((val / 10 * 16) + (val% 10)); void setDateDs1307 (byte segundo, // 0-59 byte minuto, // 0-59 byte hora, // 1-23 byte dayOfWeek, // 1-7 1 = Mon, 7 = Sun byte dayOfMonth, // 1- 28/29/30/31 byte mes, // 1-12 byte año // 0-99) Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (segundo)); Wire.write (decToBcd (minuto)); Wire.write (decToBcd (hora)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (mes)); Wire.write (decToBcd (año)); Wire.endTransmission (); void setup () byte segundo, minuto, hora, dayOfWeek, dayOfMonth, month, year; Wire.begin (); pinMode (13, SALIDA); // Cambie estos valores a lo que desea configurar su reloj. // Es mejor agregar 30 segundos a un minuto para permitir que la computadora compile y cargue la hora actual. // ¡Solo ejecute este script una vez, ya que ejecutarlo de nuevo sobrescribirá el tiempo establecido en el chip RTC! // Las horas están en formato de 24 horas // El día de la semana comienza con el lunes = 1 hasta el domingo = 7 // El año está en el formato YY, así que solo use los últimos 2 dígitos del año // // Una vez que haya ejecutado el programa, el LED en el pin 13 parpadeará para indicar que ha finalizado, NO DESCONECTAR NI RESTABLECER. // Simplemente siga el tutorial y cargue el código LCD para evitar sobrescribir la hora correcta con este tiempo nuevamente. // segundo = 0; minuto = 40; hora = 21; dayOfWeek = 3; dayOfMonth = 25; mes = 6; año = 14; setDateDs1307 (segundo, minuto, hora, dayOfWeek, dayOfMonth, month, year); // * / void loop () digitalWrite (13, HIGH); // enciende el LED (ALTO es el nivel de voltaje) retardo (1000); // espera un segundo digitalWrite (13, LOW); // apaga el LED haciendo que el voltaje BAJA retardo (1000);
Debe agregar 30 segundos o minutos adicionales para tener en cuenta el tiempo de compilación y carga. Hacer clic Subir Para enviar esto al Arduino. Solo necesitará ejecutar esto una vez, pero si su reloj retrocede o avanza una hora, o si mueve la zona horaria / país, deberá ejecutar nuevamente el bosquejo de configuración de la hora..
El último paso es el boceto real que ejecutará el reloj. Los únicos cambios que deberá hacer es establecer la fecha en la forma en que normalmente la leería. El script actual muestra la fecha como DD / MM / 20YY, para cambiar este desplazamiento hasta el final del código, he marcado las 2 líneas que se pueden cambiar, así como la pantalla
#include "Wire.h" #include#define DS1307_I2C_ADDRESS 0x68 LiquidCrystal lcd (12, 11, 5, 4, 3, 2); byte bcdToDec (byte val) return ((val / 16 * 10) + (val% 16)); void getDateDs1307 (byte * segundo, byte * minuto, byte * hora, byte * dayOfWeek, byte * dayOfMonth, byte * month, byte * year) Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission (); Wire.requestFrom (DS1307_I2C_ADDRESS, 7); * segundo = bcdToDec (Wire.read () & 0x7f); * minuto = bcdToDec (Wire.read ()); * hora = bcdToDec (Wire.read () & 0x3f); * dayOfWeek = bcdToDec (Wire.read ()); * dayOfMonth = bcdToDec (Wire.read ()); * mes = bcdToDec (Wire.read ()); * año = bcdToDec (Wire.read ()); void setup () byte segundo, minuto, hora, dayOfWeek, dayOfMonth, month, year; Wire.begin (); // MODIFICAR SI ESTÁ USANDO UNA PANTALLA LCD DIFERENTE // lcd.begin (16, 2); void loop () byte segundo, minuto, hora, dayOfWeek, dayOfMonth, month, year; Cuerda s, m, d, mth, h; getDateDs1307 (& second, & minute, & hour, & dayOfWeek, & dayOfMonth, & month, & year); si (segundo < 10) s = "0" + String(second); else s = String(second); if (minute < 10) m = "0" + String(minute); else m = String(minute); h = String(hour); if (dayOfMonth < 10) d = "0" + String(dayOfMonth); else d = String(dayOfMonth); if (month < 10) mth = "0" + String(month); else mth = String(month); char* days[] = "NA", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" ; lcd.clear(); // JUMP TO CENTER ON A 16X2 SCREEN // lcd.setCursor(4,0); // CHANGE THE FOLLOWING TO SET THE DATE IN TO YOUR PREFERED ORDER // lcd.print(h + ":" + m + ":" + s); // NEXT LINE, 1 SPACE IN FROM THE LEFT // lcd.setCursor(1,1); // PREFIX THE 20 AS THE RTC CHIP ONLY USES 2 DIGITS FOR THE YEAR // lcd.print(String(days[dayOfWeek]) + " " + d + "/" + mth + "/20" + year); delay(1000); // Wait 1 second
Cuando esté satisfecho con sus cambios, haga clic en Subir. Su pantalla ahora mostrará la fecha y la hora actuales, incluso después de desconectarse.
Encuentre una bonita caja para ocultar el Arduino y los cables, agregue una batería o conecte el Arduino a un cargador USB para la alimentación (los cargadores de iPhone funcionan bien), y ahí lo tienen, un fantástico reloj hecho por usted..
Tendrá un reloj brillante hecho en casa para su escritorio o mesilla de noche que no requerirá que se vuelva a colocar. Como está hecho usando un Arduino, y con 7 pines adicionales disponibles, puede agregar un zumbador, LED o botones para agregar una alarma fácilmente.
Expanda más al controlar la luz de fondo para encenderla y apagarla en momentos específicos. Para hacer esto solo se requiere que conecte el cable rojo 15 más alejado de la pantalla LCD a un pin digital y agregue una verificación de tiempo en el código para establecer el pin alto o bajo. Un reto perfecto.