Índice:

Relógio em tempo real com Arduino: 3 etapas
Relógio em tempo real com Arduino: 3 etapas

Vídeo: Relógio em tempo real com Arduino: 3 etapas

Vídeo: Relógio em tempo real com Arduino: 3 etapas
Vídeo: Faça um RELÓGIO com ARDUINO #Shorts 2024, Novembro
Anonim
Relógio em tempo real com Arduino
Relógio em tempo real com Arduino

Neste projeto, faremos um relógio com a ajuda do módulo Arduino e RTC. Como sabemos, o Arduino não pode exibir a hora real, então usaremos o módulo RTC para exibir a hora certa no LCD. Leia todas as etapas com atenção, pois irá ajudá-lo muito a fazer o seu relógio funcionar.

O código DS3231 Arduino é como o código DS1307 e funciona com ambos os chips RTC.

O código do Arduino abaixo não utiliza nenhuma biblioteca para o DS3231 RTC, a biblioteca Wire é para a correspondência entre o Arduino e o DS3231 utilizando a convenção I2C.

Isso! Muitos engenheiros eletrônicos dependem dele para seus projetos baseados no tempo, mas o RTC não é totalmente confiável. É operado por bateria e deve ser substituído mais cedo ou mais tarde. Chegando aos projetos de IoT, ele ocupa valiosos pinos SPI (Interface Periférica Serial) e fica bagunçado com fios emaranhados. Solução…. Aqui vem nosso herói NTP (Network time protocol). O NTP é tão preciso, pois obtém o tempo da Internet. Vamos operar este protocolo usando um modo cliente-servidor. o processo é tão simples que nosso Nodemcu atua como um cliente e solicita um pacote NTP do servidor usando UDP. Em troca, o servidor envia um pacote ao cliente que analisa os dados. NTP é o protocolo de sincronização de horário universal. Agora vamos iluminar nossa estação de trabalho de laboratórios

Etapa 1: Componentes necessários

  • Placa Arduino
  • Placa DS3231 RTC
  • Tela LCD 16x2
  • 2 x botão de pressão
  • Resistor variável de 10K ohm (ou potenciômetro)
  • Resistor de 330 ohms
  • Bateria de célula tipo moeda 3V
  • Tábua de pão
  • Fios de ligação

RTC mocule DS3231

O tempo é um sentido essencial exigido neste mundo acelerado de seres humanos. Em projeto em tempo real

Usamos RTC (relógio em tempo real A. K. A)

RTC Real-time-clock (RTC) é um circuito integrado (IC) que mantém o controle da hora atual. O RTC cuida do tempo em modo real. O RTC é geralmente encontrado em placas-mãe de computador e sistemas embarcados para exigir acesso oportuno.

Etapa 2: Conexão do Relógio Arduino

Conexão do Relógio Arduino
Conexão do Relógio Arduino
  • Conecte o pino SCL ao módulo RTC ao Arduino A5
  • Conecte o pino SDA ao módulo RTC ao Arduino A4
  • Conecte VCC A 5v e GND A GND
  • Conecte um botão de pressão ao pino 8
  • Conecte outro botão de pressão ao pino 9
  • Conecte o RS do LCD ao pino 2 do Arduino
  • Conecte E do LCD ao pino 3 do Arduino
  • Conecte o D7 do LCD ao pino 7 do Arduino
  • Conecte o D6 do LCD ao pino 6 do Arduino
  • Conecte o D5 do LCD ao pino 5 do Arduino
  • Conecte o D4 do LCD ao pino 4 do Arduino
  • Conecte VSS e K ao GND
  • Conecte VDD e A ao 5v
  • Conecte vo ao pino de saída do potenciômetro

Etapa 3: Código para Arduino Clock com RTC

Código para relógio Arduino com RTC
Código para relógio Arduino com RTC

O DS3231 funciona apenas com o formato BCD e para converter o BCD em decimal e vice-versa, usei as 2 linhas abaixo (exemplo para minuto): // Converter BCD para decimalminuto = (minuto >> 4) * 10 + (minuto & 0x0F);

// Converte decimal em BCDminute = ((minuto / 10) << 4) + (minuto% 10); void DS3231_display (): exibe a hora e o calendário, antes de exibir a hora e os dados do calendário são convertidos de BCD para o formato decimal.void blink_parameter ():

// Relógio e calendário em tempo real com botões definidos usando DS3231 e Arduino // inclui o código da biblioteca LCD #include // inclui o código da biblioteca Wire (necessário para dispositivos de protocolo I2C) #include // Conexões do módulo LCD (RS, E, D4, D5, D6, D7) LiquidCrystal lcd (2, 3, 4, 5, 6, 7); void setup () {pinMode (8, INPUT_PULLUP); // button1 está conectado ao pino 8 pinMode (9, INPUT_PULLUP); // o botão2 está conectado ao pino 9 // configura o número de colunas e linhas do LCD lcd.begin (16, 2); Wire.begin (); // Ingressar no barramento i2c} char Time = "TIME:::"; Calendário char = "DATA: / / 20"; byte i, segundo, minuto, hora, data, mês, ano; void DS3231_display () {// Converter BCD em segundo decimal = (segundo >> 4) * 10 + (segundo & 0x0F); minuto = (minuto >> 4) * 10 + (minuto & 0x0F); hora = (hora >> 4) * 10 + (hora & 0x0F); data = (data >> 4) * 10 + (data & 0x0F); mês = (mês >> 4) * 10 + (mês & 0x0F); ano = (ano >> 4) * 10 + (ano & 0x0F); // Tempo de conversão final [12] = segundo% 10 + 48; Tempo [11] = segundo / 10 + 48; Tempo [9] = minuto% 10 + 48; Tempo [8] = minuto / 10 + 48; Tempo [6] = hora% 10 + 48; Tempo [5] = hora / 10 + 48; Calendário [14] = ano% 10 + 48; Calendário [13] = ano / 10 + 48; Calendário [9] = mês% 10 + 48; Calendário [8] = mês / 10 + 48; Calendário [6] = data% 10 + 48; Calendário [5] = data / 10 + 48; lcd.setCursor (0, 0); lcd.print (Tempo); // Tempo de exibição lcd.setCursor (0, 1); lcd.print (calendário); // Exibir calendário} void blink_parameter () {byte j = 0; while (j 23) // Se horas> 23 ==> horas = 0 parâmetro = 0; if (i == 1 && parâmetro> 59) // Se minutos> 59 ==> minutos = 0 parâmetro = 0; if (i == 2 && parâmetro> 31) // Se data> 31 ==> data = 1 parâmetro = 1; if (i == 3 && parâmetro> 12) // Se mês> 12 ==> mês = 1 parâmetro = 1; if (i == 4 && parâmetro> 99) // Se ano> 99 ==> ano = 0 parâmetro = 0; sprintf (texto, "% 02u", parâmetro); lcd.setCursor (x, y); lcd.print (texto); atraso (200); // Aguarde 200ms} lcd.setCursor (x, y); lcd.print (""); // Mostra dois espaços blink_parameter (); sprintf (texto, "% 02u", parâmetro); lcd.setCursor (x, y); lcd.print (texto); blink_parameter (); if (! digitalRead (8)) {// Se o botão (pino # 8) for pressionado i ++; // Aumento 'i' para o próximo parâmetro parâmetro de retorno; // Retorna o valor do parâmetro e sai}}} void loop () {if (! DigitalRead (8)) {// Se o botão (pino # 8) for pressionado i = 0; hora = editar (5, 0, hora); minuto = editar (8, 0, minuto); data = editar (5, 1, data); mês = editar (8, 1, mês); ano = editar (13, 1, ano); // Converter decimal em minuto BCD = ((minuto / 10) << 4) + (minuto% 10); hora = ((hora / 10) << 4) + (hora% 10); data = ((data / 10) << 4) + (data% 10); mês = ((mês / 10) << 4) + (mês% 10); ano = ((ano / 10) << 4) + (ano% 10); // Fim da conversão // Grava dados no DS3231 RTC Wire.beginTransmission (0x68); // Inicia o protocolo I2C com o endereço DS3231 Wire.write (0); // Enviar endereço de registro Wire.write (0); // Reinicia os segundos e inicia o oscilador Wire.write (minuto); // Grava o minuto Wire.write (hora); // Grava a hora Wire.write (1); // Escreve o dia (não usado) Wire.write (date); // Grava a data Wire.write (mês); // Escreve o mês Wire.write (ano); // Grava o ano Wire.endTransmission (); // Pare a transmissão e libere o atraso do barramento I2C (200); // Aguarde 200ms} Wire.beginTransmission (0x68); // Inicia o protocolo I2C com o endereço DS3231 Wire.write (0); // Enviar endereço de registro Wire.endTransmission (false); // Reiniciar I2C Wire.requestFrom (0x68, 7); // Solicita 7 bytes do DS3231 e libera o barramento I2C no final da leitura second = Wire.read (); // Lê os segundos do registro 0 minuto = Wire.read (); // Lê minutos do registro 1 hora = Wire.read (); // Lê a hora do registro 2 Wire.read (); // Lê o dia do registro 3 (não usado) date = Wire.read (); // Lê a data do registro 4 meses = Wire.read (); // Lê o mês do registro 5 year = Wire.read (); // Lê o ano do registro 6 DS3231_display (); // Tempo de exibição e atraso de calendário (50); // Aguarde 50ms}

Recomendado: