Tabla de contenido:

Reloj en tiempo real con Arduino: 3 pasos
Reloj en tiempo real con Arduino: 3 pasos

Video: Reloj en tiempo real con Arduino: 3 pasos

Video: Reloj en tiempo real con Arduino: 3 pasos
Video: INTERRUPTOR HORARIO CON ARDUINO || CON RTC (tiempo real) Y PANTALLA LCD|| BIEN EXPLICADO !! 2024, Mes de julio
Anonim
Reloj de tiempo real con Arduino
Reloj de tiempo real con Arduino

En este proyecto, haremos un reloj con la ayuda del módulo Arduino y RTC. Como sabemos, Arduino no puede mostrar la hora real, por lo que usaremos el módulo RTC para mostrar la hora correcta en la pantalla LCD. Lee todo el paso con atención, te ayudará mucho a hacer el mecanismo de relojería.

El código DS3231 Arduino es como el código DS1307 y funciona con ambos chips RTC.

El código Arduino debajo no utiliza ninguna biblioteca para DS3231 RTC, la biblioteca Wire es para la correspondencia entre Arduino y DS3231 utilizando la convención I2C.

¡Sí! Muchos ingenieros electrónicos dependen de él para sus proyectos basados en el tiempo, pero RTC no es completamente confiable. Funciona con pilas y debe sustituirse tarde o temprano. Al llegar a los proyectos de IoT, ocupa valiosos pines SPI (interfaz periférica en serie) y se ensucia con los cables enredados. Solución… Aquí viene nuestro héroe NTP (protocolo de tiempo de red). NTP es tan preciso ya que obtiene tiempo de Internet. Vamos a operar este protocolo usando un modo cliente-servidor. el proceso es tan simple que nuestro Nodemcu actúa como cliente y solicita un paquete NTP del servidor usando UDP. A cambio, el servidor envía un paquete al cliente que analiza los datos. NTP es el protocolo de sincronización de hora universal. Ahora iluminemos nuestra estación de trabajo de laboratorios

Paso 1: componentes necesarios

  • Placa arduino
  • Tarjeta DS3231 RTC
  • Pantalla LCD 16x2
  • 2 x pulsador
  • Resistencia variable de 10K ohmios (o potenciómetro)
  • Resistencia de 330 ohmios
  • Batería de celda de moneda de 3V
  • Tablero de circuitos
  • Cables de puente

Molécula RTC DS3231

El tiempo es un sentido esencial requerido en este mundo acelerado de seres humanos. En proyecto en tiempo real

Usamos RTC (también conocido como reloj en tiempo real)

RTC Real-time-clock (RTC) es un circuito integrado (IC) que realiza un seguimiento de la hora actual. RTC se encarga de la hora en modo real. El RTC generalmente se encuentra en placas base de computadoras y sistemas integrados para requerir acceso oportuno.

Paso 2: Conexión del reloj Arduino

Conexión del reloj Arduino
Conexión del reloj Arduino
  • Conecte el pin SCL al módulo RTC al Arduino A5
  • Conecte el pin SDA al módulo RTC al Arduino A4
  • Conecte VCC a 5v y GND TO GND
  • Conecte un pulsador al pin 8
  • Conecte otro pulsador al pin 9
  • Conecte RS de LCD al pin 2 de Arduino
  • Conecte E de LCD al pin 3 de Arduino
  • Conecte D7 de LCD al pin 7 de Arduino
  • Conecte D6 de LCD al pin 6 de Arduino
  • Conecte D5 de LCD al pin 5 de Arduino
  • Conecte D4 de LCD al pin 4 de Arduino
  • Conecte VSS & K a GND
  • Conecte VDD & A al 5v
  • Conecte vo al pin de salida del potenciómetro

Paso 3: Código para el reloj Arduino con RTC

Código para reloj Arduino con RTC
Código para reloj Arduino con RTC

El DS3231 funciona solo con formato BCD y para convertir el BCD a decimal y viceversa, utilicé las 2 líneas siguientes (ejemplo de minuto): // Convertir BCD a decimalminute = (minuto >> 4) * 10 + (minuto y 0x0F);

// Convertir decimal a BCDminute = ((minuto / 10) << 4) + (minuto% 10); void DS3231_display (): muestra la hora y el calendario, antes de mostrar la hora y los datos del calendario se convierten de BCD a formato decimal.

// Reloj en tiempo real y calendario con botones de configuración usando DS3231 y Arduino // incluye código de biblioteca LCD #include // incluye código de biblioteca Wire (necesario para dispositivos de protocolo I2C) #include // Conexiones del módulo LCD (RS, E, D4, D5, D6, D7) LCD de cristal líquido (2, 3, 4, 5, 6, 7); configuración vacía () {pinMode (8, INPUT_PULLUP); // button1 está conectado al pin 8 pinMode (9, INPUT_PULLUP); // button2 está conectado al pin 9 // configura el número de columnas y filas de la pantalla LCD lcd.begin (16, 2); Wire.begin (); // Únete al bus i2c} char Time = "TIME:::"; char Calendar = "FECHA: / / 20"; byte i, segundo, minuto, hora, fecha, mes, año; void DS3231_display () {// Convertir BCD a decimal segundo = (segundo >> 4) * 10 + (segundo & 0x0F); minuto = (minuto >> 4) * 10 + (minuto & 0x0F); hora = (hora >> 4) * 10 + (hora & 0x0F); fecha = (fecha >> 4) * 10 + (fecha & 0x0F); mes = (mes >> 4) * 10 + (mes y 0x0F); año = (año >> 4) * 10 + (año & 0x0F); // Hora de finalización de la conversión [12] = segundo% 10 + 48; Tiempo [11] = segundo / 10 + 48; Tiempo [9] = minuto% 10 + 48; Tiempo [8] = minuto / 10 + 48; Tiempo [6] = hora% 10 + 48; Tiempo [5] = hora / 10 + 48; Calendario [14] = año% 10 + 48; Calendario [13] = año / 10 + 48; Calendario [9] = mes% 10 + 48; Calendario [8] = mes / 10 + 48; Calendario [6] = fecha% 10 + 48; Calendario [5] = fecha / 10 + 48; lcd.setCursor (0, 0); lcd.print (Hora); // Mostrar hora lcd.setCursor (0, 1); lcd.print (Calendario); // Mostrar calendario} void blink_parameter () {byte j = 0; while (j 23) // Si horas> 23 ==> horas = 0 parámetro = 0; if (i == 1 && parámetro> 59) // Si minutos> 59 ==> minutos = 0 parámetro = 0; if (i == 2 && parámetro> 31) // Si fecha> 31 ==> fecha = 1 parámetro = 1; if (i == 3 && parámetro> 12) // Si mes> 12 ==> mes = 1 parámetro = 1; if (i == 4 && parámetro> 99) // Si año> 99 ==> año = 0 parámetro = 0; sprintf (texto, "% 02u", parámetro); lcd.setCursor (x, y); lcd.print (texto); retraso (200); // Espere 200ms} lcd.setCursor (x, y); lcd.print (""); // Mostrar dos espacios blink_parameter (); sprintf (texto, "% 02u", parámetro); lcd.setCursor (x, y); lcd.print (texto); blink_parameter (); if (! digitalRead (8)) {// Si se presiona el botón (pin # 8) i ++; // Incremento 'i' para el siguiente parámetro return parámetro; // Devuelve el valor del parámetro y sale}}} void loop () {if (! DigitalRead (8)) {// Si se presiona el botón (pin # 8) i = 0; hora = editar (5, 0, hora); minuto = editar (8, 0, minuto); fecha = editar (5, 1, fecha); mes = editar (8, 1, mes); año = editar (13, 1, año); // Convertir decimal a BCD minuto = ((minuto / 10) << 4) + (minuto% 10); hora = ((hora / 10) << 4) + (hora% 10); fecha = ((fecha / 10) << 4) + (fecha% 10); mes = ((mes / 10) << 4) + (mes% 10); año = ((año / 10) << 4) + (año% 10); // Finalizar la conversión // Escribir datos en DS3231 RTC Wire.beginTransmission (0x68); // Inicie el protocolo I2C con la dirección DS3231 Wire.write (0); // Enviar dirección de registro Wire.write (0); // Reinicia los segundos e inicia el oscilador Wire.write (minuto); // Escribe el minuto Wire.write (hora); // Hora de escritura Wire.write (1); // Día de escritura (no utilizado) Wire.write (fecha); // Fecha de escritura Wire.write (mes); // Escribir mes Wire.write (año); // Escribe el año Wire.endTransmission (); // Detener la transmisión y liberar el retardo del bus I2C (200); // Espere 200ms} Wire.beginTransmission (0x68); // Inicie el protocolo I2C con la dirección DS3231 Wire.write (0); // Enviar dirección de registro Wire.endTransmission (false); // Reinicio de I2C Wire.requestFrom (0x68, 7); // Solicite 7 bytes de DS3231 y libere el bus I2C al final de la lectura second = Wire.read (); // Leer segundos del registro 0 minuto = Wire.read (); // Leer minutos del registro 1 hora = Wire.read (); // Leer la hora del registro 2 Wire.read (); // Leer el día del registro 3 (no usado) date = Wire.read (); // Leer fecha del registro 4 mes = Wire.read (); // Leer mes del registro 5 año = Wire.read (); // Leer año del registro 6 DS3231_display (); // Tiempo de visualización y retraso del calendario (50); // Espere 50 ms}

Recomendado: