Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Relógio RTC com Arduino Nano: Cronometragem Precisa com DS1307

Componentes e Materiais

Arduino Nano R3 1
Relógio de Tempo Real (RTC) – Módulo baseado no DS1307 1
Display LED de 7 Segmentos de 4 Dígitos (Ânodo Comum) 1
Header Fêmea Fileira Única 3
Placa Perfurada (Perfboard) 1
Fios Jumpers (Genéricos) 25
Header Macho 40 Posições 1 Fileira (0.1") 1

Ferramentas Necessárias

Aplicativos e Serviços Online

Sobre o Projeto

Este é um relógio digital realmente simples e fácil de montar criado usando o CI RTC DS1307. Com um display LCD. Ele simplesmente exibe a hora em um display de 7 segmentos de 4 dígitos. O código também pode ser facilmente ajustado para dar funcionalidades adicionais como alarme, tudo que você precisa é um pouco de imaginação e engenhosidade. Este projeto foi feito apenas como um trampolim para coisas melhores e mais complicadas, além de eu querer fazer algo bonito para colocar em exibição no meu quarto.

Chega de conversa, incluirei cada pequeno detalhe neste post, incluindo os problemas que encontrei ao soldar no PCB e como resolvi essas questões.

PASSO 1: Componentes

Módulo RTC

Relógio RTC com Arduino Nano: Cronometragem Precisa com DS1307

O chip DS1307 é realmente incrível pois tem a capacidade de manter o controle do tempo mesmo durante desligamento. É fácil de interligar com o Arduino e há muitas bibliotecas disponíveis para trabalhar com este módulo. O RTC interfaceia com o Arduino através do protocolo I2C. Não se preocupe com os detalhes do protocolo: os pinos A4 e A5 no Arduino Nano são usados para comunicação I2C.

Não precisaremos do pino DS para este projeto.

A única desvantagem é que não é tão preciso quanto gostaríamos. O chip é muito suscetível a deriva de tempo e se afasta facilmente do horário real dependendo da temperatura.

NOTA: Certifique-se de conectar os pinos GND e Vcc corretamente. O Vcc fica colocado (no módulo) antes do pino GND. Conectei o meu com polaridade invertida várias vezes e ele esquenta muito rápido. Então, se você tem receio de conectar a polaridade invertida, apenas toque na bateria de moeda ao ligar e desligue rapidamente se sentir que está esquentando.

Registrador de Deslocamento (74HC595)

Relógio RTC com Arduino Nano: Cronometragem Precisa com DS1307

NOTA: Esses chips são bastante confiáveis, mas acabei recebendo vários defeituosos. Em alguns chips, Q0 e Q1 não funcionavam. Alguns tinham Q3 aterrado internamente (erro de fabricação). Os que tenho no meu projeto agora também não são totalmente perfeitos. Um deles tem seu Q7 defeituoso, então quando estava trabalhando com eles tive que me certificar que minhas conexões estavam exatas, e quando ainda não funcionavam, tive que verificar os pinos usando a função de continuidade do meu multímetro. No geral não reclamo, já que tudo é meio de aprender a superar pequenos obstáculos durante um projeto.

Display de 7 Segmentos de 4 Dígitos

Relógio RTC com Arduino Nano: Cronometragem Precisa com DS1307
Relógio RTC com Arduino Nano: Cronometragem Precisa com DS1307

Usei um display de 4 segmentos genérico (Ânodo Comum). Ele tem 12 pinos, a numeração começa no canto inferior esquerdo e termina no canto superior esquerdo. Cada segmento é capaz de exibir um dígito e um ponto decimal. Como não tenho os dois pontos típicos de relógios digitais, tive que me virar com o ponto decimal do segundo dígito. São ótimos displays quando seu objetivo principal é exibir números.

NOTA: Podem ser bastante complicados para iniciantes, já que os segmentos a-g não estão na mesma linha. Tenha cuidado e não os conecte à alimentação de 5V sem resistor limitador de corrente.

Incluí um esquemático para isso e é autoexplicativo.

O Esquemático não tem o mesmo tipo de display que usei no projeto, então aqui estão as conexões dos pinos do registrador de deslocamento para o segmento:

Segmento Pino no Display Pino do Registrador
A1115 (1º 595)
B71 (1º 595)
C42 (1º 595)
D23 (1º 595)
E14 (1º 595)
F105 (1º 595)
G56 (1º 595)
Decimal37 (1º 595)
D11215 (2º 595)
D291 (2º 595)
D382 (2º 595)
D463 (2º 595)

Este projeto é barato e fácil de fazer, mas requer um pouco de paciência e perseverança (isso se você estiver disposto a ir além para soldar no PCB). Se você só quer testar por diversão, mal leva 2 horas.

Por favor, dê seu feedback sobre como posso melhorar isso e se há algo que não mencionei claramente no post.

Código

Código do Relógio Arduino

O código usa a biblioteca RTC e a biblioteca I2C. Você precisa dessas bibliotecas para o programa executar. Este programa é para display tipo Ânodo Comum.

#include <Wire.h>
#include <EEPROM.h>
#include <RTClib.h>

RTC_DS1307 RTC;
int temp, inc, hours1, minut, add = 11;
int HOUR, MINUT, SECOND;
int latchPin = 3;  // pino 12 no 595
int dataPin = 4;   // pino 14 no 595
int clockPin = 2;  // pino 11 no 595
int shift = 256;
int units, tens, hundreds, thousands;
int x, y;
const int alarmHour = 17;
const int alarmMinute = 26;

void setup() {
  Serial.begin(9600);
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(13, OUTPUT);
  Wire.begin();
  RTC.begin();
  if (!RTC.isrunning()) {
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}

void loop() {
  int temp = 0, val = 1, temp4;
  DateTime now = RTC.now();
  HOUR = now.hour();
  MINUT = now.minute();

  if (HOUR < 10) {
    hundreds = HOUR;
    thousands = HOUR / 10;
  } else if (HOUR >= 10 && HOUR < 24) {
    hundreds = HOUR % 10;
    thousands = HOUR / 10;
  }
  if (MINUT <= 9) {
    units = MINUT;
    tens = MINUT / 10;
  } else if (MINUT > 9 && MINUT <= 60) {
    units = MINUT % 10;
    tens = MINUT / 10;
  }

  // Multiplexação dos 4 dígitos (código abreviado para brevidade)
  // Cada dígito é atualizado sequencialmente com delay(1)
  // Inclui lógica de alarme no pino 13
}

Nota: O código completo de multiplexação dos 4 dígitos é extenso. O princípio é: para cada dígito (unidades, dezenas, centenas, milhares), envia-se o padrão de segmentos via shiftOut para o 74HC595 correspondente, com multiplexação rápida.

Ajustar a Hora Arduino

Como o DS1307 é suscetível a deriva do horário correto. Este programa permite ajustar a hora pelo Serial Monitor. Quando vir que a hora não está correta, simplesmente conecte o módulo RTC ao Arduino e faça upload deste programa. Abra o Serial Monitor e defina a data, mês, ano, hora corretos. Então faça upload do outro programa e a hora correta será exibida no display de 7 segmentos.

Bibliotecas necessárias:

Para instalar: crie pastas com os nomes das bibliotecas, adicione os arquivos .h, .cpp, keywords.txt, library.properties e README.md correspondentes, depois na Arduino IDE: Sketch → Incluir Biblioteca → Adicionar Biblioteca .ZIP.

Esquemático

Este é o esquemático do projeto.

7segmentClock.fzz (arquivo Fritzing)

Processo de manufatura

  1. Fabricação de Tábuas de Passar: Design, Materiais e Processo de Produção
  2. Relógio Cuco: História, Artesanato e Evolução Moderna
  3. Placas de Circuito Impresso: Design, Fabricação e Tendências Futuras
  4. Construção e Design de Pranchas de Surf: Das Raízes Polinésias à Inovação Moderna
  5. Construindo um Robô com Arduino e Raspberry Pi: Guia Passo a Passo
  6. RasPiRobot Board V2: Expanda seu Raspberry Pi em um Controlador de Robô Poderoso
  7. Relógio POV com Arduino: Construa um Display LED de Persistência de Visão
  8. Relógio Espelho Infinito: Elegância Infinita Encontra Precisão no Tempo
  9. A Importância de uma Placa de Circuito Impresso Impecável
  10. Configuração do Motor: Guia Abrangente de Tipos e Características