Usando un Arduino como un reloj LCD

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..

Los componentes

  • Arduino-Idealmente un Uno o Duemilanove
  • Pantalla LCD 1602: cualquier pantalla basada en HD44780 funciona
  • 1307 módulo de chip RTC
  • Cables de salto
  • Ordenador para programar el arduino.
  • Caja para mantenerla relativamente ordenada.

Conectándolo todo junto

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).

Conexiones de LCD donde Pin 1 en LCD está muy a la izquierda:

  • 1 - Riel de tierra
  • 2 - 5v Rail
  • 3 - Al potenciómetro
  • 4 - Digital 12
  • 5 - Riel de tierra
  • 6 - Digital 11
  • 11 - Digital 5
  • 12 - Digital 4
  • 13 - Digital 3
  • 14 - Digital 2
  • 15 (Contraluz) - Carril 5v
  • 16 (Luz de fondo) - Riel de tierra

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.

Cableado del módulo RTC:

  • SDA - Analógico 0
  • SCL - Analógico 1
  • 5v / VCC - Riel 5V
  • GND - Ground Rail
Cableado del módulo RTC

Comprobando que funciona

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.

Ajuste de la hora en el RTC

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..

Cargando el bosquejo del tiempo

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.

Ponerlo en orden

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..

Conclusión

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.