Como construir um relógio com Arduino 150

Hoje vamos ver alguns conceitos sobre displays LCD 7 segmentos e mostrar como construir um relógio com Arduino utilizando o display LED 7 segmentos 4 dígitos:

Display 7 segmentos 4 dígitos

Esse display possui leds na cor vermelha e dígitos com 1,4cm de altura. Por meio dos 12 pinos na base podemos controlar individualmente os leds, gerando número e letras no display.

Como funciona um display 7 segmentos

O display de 7 segmentos contém 7 leds (ou segmentos), que acionados em conjunto podem formar os caracteres que precisamos. Basicamente os números e algumas letras. No lado esquerdo da imagem temos a disposição dos segmentos, que são nomeados com as letras de A a G. Para formar o número dois, por exemplo, precisamos acionar os segmentos A, B, D, E e G (lado direito da imagem):

Display - Segmentos

Além disso esse tipo de display pode ser catodo comum (o catodo de todos os leds conectados ao GND), ou anodo comum (o anodo de todos os leds conectados ao Vcc), o que vai influenciar no tipo de ligação que vamos ter com o microcontrolador.

Display 7 segmentos - Catodo comum e Anodo comum
Imagens : electronics-tutorials.ws

Em um display de 4 dígitos  como este que vamos utilizar no artigo, temos também os pinos Digito 1, Digito 2, Digito 3 e Digito 4 (D1, D2, D3 e D3), que correspondem ao anodo de cada dígito, e que são acionados de forma sequencial.

Display 7 segmentos 4 digitos - Pinos

Para mostrar um número no display, acionamos o pino dígito 1 (Dig1), e também os leds correspondentes para formar o número. Em seguida, é feita a mesma coisa com o segundo dígito : desliga-se o dígito anterior (Dig1), liga-se o Dig2 e acende os leds, e assim sucessivamente até o 4° dígito, quando o processo se repete. Usando técnicas de multiplexação, esse processo de acionamento de cada dígito é feito de maneira muito rápida, de forma que não percebemos que o display na verdade está “piscando”.

Circuito display 7 segmentos 4 dígitos

Como exemplo vamos utilizar o display 7 segmentos 4 dígitos e montar um relógio com Arduino usando também o módulo Real Time Clock RTC DS1307, que se comunica com o Arduino pela interface I2C. Do DS1307 vamos obter o valor das horas e minutos, e mostrar essa informação no display.

Os resistores utilizados no circuito são de 1 K, sendo um para cada segmento e um também para acionar o separador (dois pontos) na parte central do display:

Circuito Arduino Uno Display 7 segmentos

A biblioteca responsável por fazer o trabalho de multiplexação é a SevSeg, disponível para download neste link. Descompacte o arquivo e coloque a pasta SevSeg dentro da pasta Libraries da IDE do Arduino.

No início do programa definimos quais serão os pinos dos dígitos (usaremos os pinos de 10 à 13 para os dígitos de 1 à 4), e quais serão os pinos dos segmentos (usaremos os pinos de 2 à 9), sendo que o pino 9 é o responsável por acender o separador (dois pontos). A linha SelecionaDataeHora() é utilizada para acertar a hora do relógio, e deve ser comentada depois de utilizada.

//Programa : Relogio com Arduino, DS1307 e Display 7 Seg
//Autor : MakerHero

#include "Wire.h"
#include "SevSeg.h"

#define DS1307_ADDRESS 0x68

//Create an instance of the object.
SevSeg display7seg;

int valor = 0;

byte zero = 0x00; 
unsigned long timer;
void setup()
{
  Wire.begin();
  //A linha abaixo pode ser retirada apos setar a data e hora
  // SelecionaDataeHora(); 
 
  //Selecao tipo de display anodo comum
  int displayType = COMMON_ANODE; 
    
  //Definicao dos pinos dos digitos
  int digit1 = 10; //Pino Digito1 do display
  int digit2 = 11; //Pino Digito2 do display
  int digit3 = 12; //Pino Digito3 do display
  int digit4 = 13; //Pino Digito4 do display

  //Pinos ligados aos segmentos A - H
  int segA = 2; //Pino segmento A  
  int segB = 3; //Pino segmento B
  int segC = 4; //Pino segmento C
  int segD = 5; //Pino segmento D
  int segE = 6; //Pino segmento E
  int segF = 7; //Pino segmento F
  int segG = 8; //Pino segmento G
  int segDP= 9; //Pino segmento H
  
  //Define o numero de digitos do display
  int numberOfDigits = 4;

  //Inicializa o display
  display7seg.Begin(displayType, numberOfDigits, digit1, digit2, digit3, digit4, segA, segB, segC, segD, segE, segF, segG, segDP);
  
  //Nivel de brilho do display
  display7seg.SetBrightness(50);
  timer = millis();
}

void loop()
{
  char tempString[10]; //Used for sprintf
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_ADDRESS, 7);
  int segundos = ConverteparaDecimal(Wire.read());
  int minutos = ConverteparaDecimal(Wire.read());
  int horas = ConverteparaDecimal(Wire.read() & 0b111111); 
  sprintf(tempString, "%02d%02d", horas, minutos);
  display7seg.DisplayString(tempString, 3);
}

void SelecionaDataeHora()   //Seta a data e a hora do DS1307
{
  byte segundos = 10; //Valores de 0 a 59
  byte minutos = 32; //Valores de 0 a 59
  byte horas = 19; //Valores de 0 a 23
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero); //Stop no CI para que o mesmo possa receber os dados

  //As linhas abaixo escrevem no CI os valores de 
  //data e hora que foram colocados nas variaveis acima
  Wire.write(ConverteParaBCD(segundos));
  Wire.write(ConverteParaBCD(minutos));
  Wire.write(ConverteParaBCD(horas));
  Wire.write(zero);
  Wire.endTransmission(); 
}

byte ConverteParaBCD(byte val)
{ 
  //Converte o número de decimal para BCD
  return ( (val/10*16) + (val%10) );
}

byte ConverteparaDecimal(byte val)  
{ 
  //Converte de BCD para decimal
  return ( (val/16*10) + (val%16) );
}

Na imagem abaixo temos o circuito em funcionamento.

Tutorial Relógio com Arduino

Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

150 Comentários

  1. Olá boa tarde Adilson. Gostei muito do seu projeto e montei o mesmo. Ficou show de bola. Só gostaria de tirar uma dúvida com vc. É possível tirar o dígito zero da frente das horas quando for horário entre meia noite e nove horas da manhã? Tipo 9:30 em vez de 09:30. Obrigado pela atenção.

    1. Olá.

      Nesse caso e um padrão da biblioteca Wire, para fazer sem o zero no início, seria um código diferente.

      Att.
      Vitor Mattos.
      Suporte Técnico MakerHero.

  2. Muito bom o projeto. Veio a calhar para construir o relógio com dígitos grandes. E, posteriormente, fazer o acerto do relógio automaticamente pela internet.
    Parabéns.

  3. bel progetto, ma i segmenti non accendono correttamente, cioè non formano i numeri corretti

  4. Hai lo stesso progetto, solo con i pulsanti e cosa lampeggiano i punti?

  5. Boa tarde, estou com um problema! O relogio só começe a contar depois que retiro GND do DS1307 e apenas segundos e minuto

    1. Victor,

      Já verificou as conexões do seu display? Às vezes o acionamento é feito por nível lógico baixo, interferindo na contagem.

      Abraços e cuide-se com o COVID-19!
      Diogo – Equipe MakerHero

  6. Boa noite, tem como incluir neste código 6 horários para acionar um relê?

    1. José,

      Sim, é possível! Você deve escrever algumas linhas que, ao ter o horário determinado, ative o relé. Seria algo mais ou menos (mais ou menos ein?!) assim:
      if (horas == 19) {
      if (minutos == 30) {
      if (segundos == 00) {
      digitalWrite(pinoRele) = HIGH;
      }
      }
      }

      Abraços!
      Diogo – Equipe MakerHero

      1. Agradeço a boa vontade, mas pode ser mais especifico, onde inserir no código??????

        1. José,

          Você vai fazer a inserção na parte principal do código: void loop()

          Abraços!
          Diogo – Equipe MakerHero

  7. O meu não deu certo. Aparece o seguinte erro:
    exit status 1
    no matching function for call to ‘SevSeg::begin(int&, int&, int&, int&, int&, int&, int&, int&, int&, int&, int&, int&, int&, int&)’

    1. Dayane,

      Você instalou a biblioteca SevSeg?

      Abraços!
      Diogo – Equipe MakerHero

  8. Hola Adilson Thomsen como se le puede añadir a este circuito el sensor DS18B20 para que muestre la temperatura y la hora podrias mandarme el código a [email protected] gracias .

  9. muito legal! gostei!!
    tinha um display desses aqui em casa que retirei de um aparelho antigo e gostaria de saber como funcionava.
    parabéns pela explicação.

    1. William,

      Que bom que você curtiu!!

      Abraços!
      Diogo – Equipe MakerHero

  10. salve, volevo costruire questo orologio ma mi da il seguente errore, potete aiutarmi?
    display7seg.Begin(displayType, numberOfDigits, digit1, digit2, digit3, digit4, segA, segB, segC, segD, segE, segF, segG, segDP);
    ‘class SevSeg’ has no member named ‘Begin’

    1. Nicolò,

      Puoi mostrarmi il tuo codice?

      Abbracci,
      Diogo – Squadra MakerHero

  11. CURIOSIDADE como fica o codigo para eu por um dht11 e alternar entre hora e temperatura

    1. Olá, Paulo,

      Basta você adicionar a leitura da temperatura no código. Depois, terá que fazer aparecer no display a cada certo tempo. Da mesma forma, faça isso para o relógio.

      Abraços!
      Diogo – Equipe MakerHero

  12. Como fazer um painel para códigos aleatórios e relógio, acimamento do código via controle remoto, código fica no display por 4 minutos apos este tempo volta a informar a horas ate um novo código for digitado, assim alternando entre horas e códigos digitados.

    1. Olá Israel

      O código deste tutorial pode ser aproveitado para fazer a parte do relógio do seu projeto.
      A parte do controle remoto pode ser vista nesse post: https://www.arduinoecia.com.br/2013/09/controle-remoto-ir-no-arduino.html

      Abraço!
      Rosana – Equipe MakerHero

  13. Hola
    Adilson Thomsen , quiero montar con arduino un circuito que sea reloj y que marque la temperatura con estos componentes LM35 DS1302 y la pantalla TM1637 tienes tu algun circuito sketchs echo .

    1. Olá,

      Infelizmente não temos nenhum tutorial que tenha tudo de deseja :/

      Mas você pode usar esse tutorial para implementar o LM35.

      Abraço!
      Rosana – Equipe MakerHero

  14. Boa noite, utilizei o rtc ds3231 e arduino uno, mas todos números ficam ligados, a programação para o ds3231 é diferente?

    1. Olá Jehfferson,

      Você alterou a linha 7 do código?

      Abraço!
      Rosana – Equipe MakerHero

      1. Boa tarde Rosana, não alterei, o que devo alterar? Obrigado 🙂

      2. Consegui, alterei a linha 23, de :

        int displayType = COMMON_ANODE;

        Para:

        int displayType = COMMON_CATHODE;

        Obrigado pela atenção.

  15. Ótimo trabalho, consigo utilizar o arduino nano e o ds3231 sem fazer alterações no projeto?

    1. Olá Jehfferson,

      É possível sim!

      Abraço!
      Rosana – Equipe MakerHero

  16. Olá, tenho um projeto aqui que imagino possa satisfatoriamente ser resolvido com a ajuda de um arduino. Como poderia obter serviços de um programador?
    No aguardo, antecipadamente agradeço.

    MARCOS CHAGAS TOLEDO CHAVES
    1. Olá Marcos,

      Você pode postar seu projeto/ideia em nossa Comunidade
      Lá você pode encontrar alguém que possa te ajudar 😀

      Abraço!
      Rosana – Equipe MakerHero

  17. Alguém pode me ajudar ? Eu montei esse projeto a um tempo atrás e funcione 100% mas resolvi montar outro aí começaram os problemas o código fica com o seguinte erro ” ‘class sevseg’ has no member named ‘Behin’ ” o q eu faço pra corrigir isso ?

    1. Olá,

      Talvez você esteja com problemas com o biblioteca que está sendo usada.
      Vá na pasta Arduino > libraries e veja se a pasta SevSeg-master está lá. Se houver uma pasta chamada apenas SevSeg, delete a mesma.

      Abraço!
      Rosana – Equipe MakerHero

  18. Cordial saludo.
    Excelente tutorial con todo respeto copie su trabajo pero al compilar me muestra error en la linea 45 disculpeme soy novato y me gusto hacer ese modelo de reloj.
    Gracias por su respuesta.

    1. Olá,

      Você instalou a biblioteca SevSeg corretamente?
      Vá na pasta Arduino > libraries e veja se a pasta SevSeg-master está lá. Se houver uma pasta chamada apenas SevSeg, delete a mesma.

      Abraço!
      Rosana – Equipe MakerHero

  19. bons exemplos belo trabalho

    1. Olá Raul,

      É muito bom saber que gostou do nosso trabalho.

      Abraço!
      Rosana – Equipe MakerHero

  20. Buenas noches, le agradesco el maravilloso trabajo presentado ,buscando en la red por fin encontre su trabajo me gustaria que me dejara ver un plano donde y como conecto las resistencias y el rtc 3231.
    Le escribo desde Bogota colombia muchas gracias.
    “Obrigado”

    1. Olá,

      No esquemático (https://www.makerhero.com/wp-content/uploads/2015/04/Circuito_DS1307_Display_7_seg.png) você pode ver onde todas as conexões são feitas.

      Abraço!
      Rosana – Equipe MakerHero

  21. quando tento carregar acontece este erro…
    Arduino: 1.8.3 (Windows 8.1), Placa:”Arduino/Genuino Uno”

    C:\Users\Son-Geovane\Documents\Arduino\teste_display\teste_display.ino:5:20: fatal error: SevSeg.h: No such file or directory

    #include “SevSeg.h”

    ^

    compilation terminated.

    exit status 1
    Erro compilando para a placa Arduino/Genuino Uno

    Este relatório teria mais informações com
    “Mostrar a saida detalhada durante a compilação”
    opção pode ser ativada em “Arquivo -> Preferências”

    1. Olá!

      Parece que a biblioteca não foi instalada corretamente.
      A biblioteca responsável por fazer o trabalho de multiplexação é a SevSeg, disponível para download neste link: https://github.com/sparkfun/SevSeg. Descompacte o arquivo e coloque a pasta SevSeg dentro da pasta Libraries da IDE do Arduino.

      Abraço!
      Rosana – Equipe MakerHero

  22. Estou interessado em fazer este projeto para me iniciar na programação com Arduino, e gostaria de saber se posso usar o projeto para ligar sequências de leds em uma moldura de MDF vazada com uma placa de acrílico leitoso na frente, com os mesmos 4 dígitos do seu projeto, quero um relogio grande, acho que o controlador DS1307 pode fazer isso também.

    1. Olá Anselmo!

      Você pode usar esse projeto sim. Para as luzes em sequência sugiro dar uma olhada neste post:
      https://www.makerhero.com/blog/arvore-de-natal-com-arduino/

      Abraços!

      André – Equipe MakerHero

  23. Amigo, qual software vcs usam para criar essa matriz do circuito ? eu uso o tinkercad mas não possui la nenhum modulo de relógio, achei até estranho isso na verdade, eu quero testar algumas coisas aqui e comprar os produtos de vocês, mas queria testar e adiantar o código.

    1. Olá Hesley!

      Aqui nós usamos bastante o Fritzing, um programa gratuito.

      Abraços!

      André – Equipe MakerHero

  24. olá, Boa tarde!… como posso adicionar alarme nesse relógio? na programação

    1. Olá Adrian!

      É possível sim! Basta colocar uma condição (if) antes de mostrar a hora.

      Abraços!

      André – Equipe MakerHero

  25. Quero dar os parabéns por estes trabalhos pois são uma ajuda importante para pessoas iniciadas como e o meu caso.

    felicidades e muitos exitos

    1. Olá Raul!

      É sempre bom saber que nosso trabalho ajuda as pessoas! Você também pode dar uma olhada em nossa Comunidade. Lá você pode tirar algumas dúvidas e postar seus projetos. Colaborar e aproveitar a comunidade:

      Abraços!

      André – Equipe MakerHero

  26. Olá Adilson! Gosto muito das suas postagens e projetos e, no ensejo, tenho uma pergunta:
    Claro que o relógio já trabalha com a hora e data, definidas no RTC DS1307 mas, o que deve ser acrescentado no código para acertar a data e a hora manualmente, em caso, por exemplo, do esvaziamento completo da bateria? Obrigado

    1. Olá Daniel!

      Dê uma olhada nesse tutorial:
      https://www.makerhero.com/blog/datalogger-com-arduino-cartao-sd/

      Ali fala como mudar o horário!

      Abraços!

      André – Equipe MakerHero

      1. Obrigado André!
        Acho que não fui claro; Eu quis dizer que, algum dia, logicamente, essa bateria deverá ser trocada, por seu esvaziamento total ou por outra coisa qualquer, então, pra não deslocar todo o circuito próximo ao PC para definir a hora novamente, poderia ser usado, por exemplo, alguns botões para acertar a data e a hora manualmente! Então, como fazê-lo? Obrigado+

        1. Olá Daniel!

          Você poderia acrescentar esses botões e fazer uma lógica onde conforme você aperta, aumenta ou diminui a hora.

          Aí você faria uma seção no código para esse ajuste.

          Abraços!

          André Rocha – Equipe MakerHero

          1. Esclarecido; obrigado

  27. Bom dia, Gostei do projeto simples e funcional. Gostaria de saber se tem como diminuir/aumentar o brilho do display atraves de um botao.
    GRato

    1. Olá Paulo!

      É possível usar o PWM do arduino para diminuir a tensão aplicada no display.

      Dê uma olhada nesse tutorial:
      https://www.makerhero.com/blog/ajustando-brilho-led-pwm-com-arduino/

      Abraços!

      André – Equipe MakerHero

  28. Ola, comprei com vcs os displays e modul;o pra fazer este relogio. Copiei este codigo mas nao funciona. Tem varios erros

    1. Olá Parcell!

      Você pode colocar esse problema com mais detalhes em nossa Comunidade? Lá o pessoal pode te ajudar melhor nisso.

      Abraços!

      André – Equipe MakerHero

  29. Ola eu poderia usar um arduino nano em vez de um arduino uno. e não tem a decima terceira porta no arduino eu poderia entao começar da 9 e ir ate a 12?

    1. Olá João!

      Você pode usar qualquer saída digital de qualquer placa para fazer esse projeto. Fique atento se essas portas que você quer usar são realmente saídas digitais.

      Abraços!

      André – Equipe MakerHero

  30.  

    olá pessoal preciso de uma ajuda.

    Esta dando erro na linha 63, não sei o que fazer.

     

    display7seg.DisplayString(tempString, 3);

     

    exit status 1
    expected primary-expression before ‘.’ token

  31. Bom dia!

    Parabéns pelo seu projeto!
    Gostaria de saber se você já fez algum relógio destes sincronizando com servidor NTP? para que a hora possa estar sempre atualizada.

  32. Boa noite ao comilar a programação para o Arduíno apareceu o seguinte erro:

    SevSeg display7seg;

    não consegui executa corretamente a programação:

    1. Bom dia Josenildo,

      Você tentou instalar a biblioteca pela própria IDE do Arduino?

      Abraço

      Adilson – Equipe MakerHero

  33. Gostaria de saber como programar o Arduíno para ativar um rele usando determinadas horas do dia usando o https://www.makerhero.com/produto/real-time-clock-rtc-ds3231/

  34. Bom dia.
    Eu crio relógio em meus projetos com PIC usando clock da rede alternada e também timer1 do pic, agora preciso usar Módulo Rtc Real Time Clock Ds3231, mas preciso de uma ajuda no programa do pic.
    Você pode me ajudar?

  35. Seria interessante ter a ANALISE DO SOFTWARE tbem ! Mostrando como funciona cada linha do programa.

  36. Ola bom dia estou com um projeto em andamento esta faltando o controle eletrônico, peço se alguém montar o sistema, além de pagar eu agradeço muito, preciso de um relógio arduino ou outro qualquer que acione um rele nas horas cheias, mas com a seguinte configuração além de acionar nas horas acionar a quantidade de horas.
    Ex: 1 hora acionar uma vez, 12 horas acionar 12 vezes, não é necessário 24 horas

  37. por que o meu não acende os pontos decimais, como faço para acender os dois pontos, o display e anodo comum.

  38. Boas, o meu display fica mostrando 0.0.0 0 alguém pode ajudar? sff

  39. Uma sugestão, seria usar GPS, só não sei como fazer isso no código mas, fica aí a sugestão!

  40. Ola amigo, como eu faria usando um display catodo comum? é da mesma forma? obrigado

    1. Olá bom dia. mude a linha 23 para common cathode ok. comigo deu certo abç

  41. Olá amigo Adilson e os demais leitores!
    Eu entendo que nem vc e nem os demais leitores não tem a mínima obrigação de estar respondendo comentários/perguntas mas, se vc(s) puder(em) me ajudar, eu repetirei a minha questão: “O meu Display (Anodo Comum de 12 pinos) funcionou tudo, menos os 2 pontos (DP), que não acendem; o que mudei foi somente o módulo DS3231 que usei no lugar do DS1307; Alguma orientação?
    Obrigado

  42. Olá Adilson!
    O meu Display funcionou tudo, menos os 2 pontos (DP) que não acendem;
    Somente usei o módulo DS3231 no lugar do DS1307; Alguma orientação?
    Obrigado

  43. Olá bom dia. daria pra implementar botões de ajuste nesse relógio. e se sim de que forma. eu sou leigo em programação. obrigado pela atenção.

  44. Galera uma duvida, alguém poderia me informa como incluir no código e na placa do Arduíno ja que todas as saídas ja estão sendo usada um sensor de temperatura LM35?

  45. Qual o pino para acionar os dois pontos??

    THULIO MARCUS MARCENES DE SOUZA
  46. Boa tarde

    Parabéns pelo blog, Estou necessitando de um cronometro com display de 7 segmentos.
    Você tem algum projeto?
    abrs

    1. Olá, Jailton.

      Tenho um projeto de um cronômetro bem fácil para montar que inclui um marcador de tempo de volta.
      Utilizei um display de LED de 7 Segmentos duplo.
      Pode ser um ponto de partida ao seu projeto..
      Dê uma olhada aqui para ter todos os detalhes:
      http://www.instructables.com/id/Stopwatch-Lap-Time-With-Arduino-Nano-and-Maxi-7219/
      Veja também o video mostrando seu funcionamento:
      https://www.youtube.com/watch?v=XyMO8Rvyss0

  47. se eu usar um 1302 como fica?

  48. Olá!

    Estou com um problema, preciso ligar o relógio em outras entradas analógicas pois a A4 e A5 já estou utilizando para outro sensor, como eu faço isso?

    Att.

    1. Bom dia Kalan,

      Você pode usar o mesmo barramento I2C para ligar o RTC (se ele for I2C). Veja um exemplo de ligação neste post: http://www.arduinoecia.com.br/2015/04/arduino-lcd-16×2-modulo-i2c-rtc-ds1307.html

      Abraço!

      Adilson – Equipe MakerHero

  49. Olá Gostaria de saber como fazer os pontos piscarem e como fazer mostrar mostrar a temperatura lm35 se puder ajudar ficaria grato.

    1. Para fazer os pontos piscarem:

      byte savesegundos; //Julio Guarará

      //display7seg.DisplayString(tempString, 3); //Julio Guarará
      display7seg.DisplayString(tempString, 0); //Julio Guarará

      if (segundos != savesegundos) { // Julio Guarará – Inicio
      display7seg.DisplayString(tempString, 3);
      savesegundos = segundos;
      } // Julio Guarará – Fim

      1. Oi Julio! Onde no código eu posso adicionar esses comandos q vc mencionou?
        Eu coloquei logo após esses comandos, assim:
        / / As linhas abaixo escrevem no CI os valores de
        / /data e hora que foram colocados nas variáveis acima
        Wire.write(ConverteParaBCD(segundos));
        Wire.write(ConverteParaBCD(minutos));
        Wire.write(ConverteParaBCD(horas));
        Wire.write(zero);
        Wire.endTransmission();
        }

        / /Para fazer os pontos piscarem:

        byte savesegundos; //Julio Guarará

        / /display7seg.DisplayString(tempString, 3); //Julio Guarará
        display7seg.DisplayString(tempString, 0); //Julio Guarará

        if (segundos != savesegundos) { // Julio Guarará – Inicio
        display7seg.DisplayString(tempString, 3);
        savesegundos = segundos;
        } / / Julio Guarará – Fim

        … e apresentou o seguinte erro: clock_arduino:91: error: ‘display7seg’ does not name a type
        clock_arduino:93: error: expected unqualified-id before ‘if’
        ‘display7seg’ does not name a type

        O que fiz de errado, por favor? Obrigado

  50. ola amigos montei conforme esquema mas o meu fica tudo aceso ate os pontos sera que tem algo errado me ajudem

    1. Boa tarde Murilo,

      O seu display é do mesmo modelo usado no post ?

      Abraço.

      Adilson – Equipe MakerHero

      1. Boa tarde então eu acabei de descobrir mudando a linha de anodo pra catodo ele funcionou porem surgiu outra duvida os pontos ficam acesos tem como eles piscarem você pode me passar como faço pra colocar o valor do sensor de temperatura tbem obrigado pela atenção.

  51. Olá, algum colega sabe como faço para usar este display para mostrar a temperatura controlado por um sensor de temperatura

  52. posso fazer sem o modulo RTC DS1307 como seria sem este modulo ?

  53. fiz o relogio e funcionou perfeitamente, o que eu queria era colocar ele maior tipo fita de led.
    será que tem jeito.

    obrigado.

  54. olá pessoal. eu tenho uma dúvida de como acertar o relógio e pelo que andei pesquisando muita gente encontra dificuldade nisso. no programa diz que pode retirar a linha depois que acertar o relógio. mas em que linha, de que forma e como se acerta esse relógio. alguem poderia me passar detalhadamente por favor
    ficarei muito agradecido.

    1. Odilon,

      A linha 20 do programa está como comentário dentro da rotina void setup(), por isto possui duas barras / / :

      // SelecionaDataeHora();

      Aqui há alguns conceitos de programação do Arduino:

      1) A rotina void setup() é executa apenas uma vez ao se ligar o Arduino ou após resetá-lo.
      2) Após isto apenas é repetido indefinidamente a rotina void loop().
      3) As dua barras indicam que tudo que estiver a sua frente, será entendido como comentário não sendo executada sua compilação como comando de execução de alguma tarefa e por isto você tem que retirá-las para execução do ajuste das horas.

      Deste modo, para acertar o relógio, retire as duas barras, ficando assim:
      SelecionaDataeHora();

      Esta linha chama a subrotina que ajusta o relógio:
      void SelecionaDataeHora()

      Nesta subrotina, ajuste as varíaveis a seguir com a hora, minuto e segundo de sua hora local.

      Por exemplo, se agora for 21:13 horas, ajuste para:

      byte segundos = 00; //Valores de 0 a 59
      byte minutos = 13; //Valores de 0 a 59
      byte horas = 21; //Valores de 0 a 23

      Agora compile e carregue o programa para o Arduinio.

      Assim que ele executar o programa a primeira vez, a hora ajustada será gravada no RTC DS1307 e este modulo tem a capacidade de manter a hora correta mesmo sem energia do Arduinio uma vez que o mesmo possui uma bateria e, portanto, não será mais necessário realizar seu ajuste toda vez que religar o Arduino.

      Por isto é importante que após o primeiro carregamento deste programa, você volte a comentar a linha 20 para não mais ser executado a rotina de ajuste de horas:

      // SelecionaDataeHora();

      Recompile e recarregue o programa.

      Pronto !

      Parece um pouco complicado, mas na verdade é muito simples de ser feito.

      Se algum dia precisar reajustar o RTC, repita este procedimento.

      Esperto ter ajudado.

      Luís Antonio

      1. Bom dia Luis. agora sim entendi a explicação. fiz e deu certo. estava difícil pra entrar na minha cabeça. vlw . muito obrigado mesmo.

      2. Olá novamente Luis. me diga uma coisa. como é que eu faço apagar o ponto decimal. é que o meu display é aquele que tem um ponto decimal após cada dígito. assim eu gostaria de apagar o ponto decimal que está aceso após o primeiro dígito.

        1. Odilon,

          Se você estiver utilizando o display (anodo comum) indicado para este programa, desconecte o pino 9 do Arduino que está conectado ao pino 3 do display.

          Caso esteja utilizando outro display, é necessário verificar o seu Datasheet / Diagrama.

          Att.,
          Luís Antonio

          1. Olá bom dia.
            Só que se eu desligar o pino 9 todos os pontos decimais apagarão porque são multiplexados. eu quero desligar só um deles ok.

  55. olá pessoal. fiquei na dúvida quanto ao display de anodo comum ou katodo comum. esse do projeto é qual deles?

  56. Montei o circuito seguindo os passos acima, porém meu display só apresenta a hora 45:16, e não muda.
    Estou usando o arduino Mega 2560.
    O que pode ser?

    1. Você esta utilizando o Real Time Clock RTC DS1307 ou descomentou a linha 20?

      1. olá jefferson. me diga uma coisa. em que linha eu acerto o relogio, como faço, de que forma,
        qauais são todos os procedimentos. e essa linha pra descomentar tem que apagá-la é isso. se puder me passar detalhado eu agradeço.

    2. Olá amigo, estou com o mesmo problema, o display mostra 45:16, mais quando conecto o timer rtc, o display forma 0000. Encalhei aqui e não consigo sair do lugar he,he!. Infelizmente as respostas do Felipeflop não me ajudaram em nada. Você conseguiu resolver o problema? Se puder me ajudar eu agradeço.

  57. Equipe da MakerHero, da uma ajuda.

    preciso utilizar 2 portas analógicas no lugar de digitais. quando coloco A6 e A7 não funciona.
    como poderia fazer pra que portas analógica funcione?

    valeu

    1. Bom dia Samuel,

      Qual placa Arduino você está usando ?

      Abraço.

      Adilson – Equipe MakerHero

      1. Opa Edilson,

        estou usando um Mini Pro. Li na documentação que as portas A6 e A7 do Mini Pro são somente Analogicas, não é possivel dar uma digitalWrite nelas.
        Eu tinha a opção de alterar a biblioteca do sevseg ou então alterar para as porta A4 e A5. Alterei as portas para A4 e A5.

        obrigado.

  58. boa tarde, porque vocês respondem algumas duvidas e outras nao?

  59. Posso usar o ci ds1305?

    1. Boa tarde Jean,

      Você pode montar com o DS1305, mas a biblioteca é diferente e a pinagem também, mas é uma outra opção de RTC.

      Abraço.

      Adilson – Equipe MakerHero

  60. tenho a mesma duvida do amigo, gostaria de usar fita led com tip 120 ou unl2003 porem gostaria de saber o codigo pois cada segmento tera que ser controlado por uma saída do arduino ou usando um 74hc545

  61. tem como aumentar a quantidade de displays, parabens pelo projeto

  62. Ola boa tarde.
    O meu stkech esta dando erro nesta comando

    int displayType = COMMON_ANODE;

    1. Boa tarde Jorge,

      Que erro ele apresenta ?

      Abraço

      Adilson – Equipe MakerHero

      1. Ola
        Quando vo copilar o codigo ele para nesse erro
        int displayType = COMMON_ANODE;
        Grato

        1. Ola
          Resolvido, a minha biblioteca do seg estava diferente.
          Porem agora como posso acertar a hora ?

          1. Ola
            Nossa pena que não posso apagar meu post, fui ver o código e vi como acertar a hora.
            Grato.

          2. Bom dia Jorge,

            Sem problemas. 🙂

            Abraço!

            Adilson – Equipe MakerHero

          3. Rapaz, aqui tá dando o mesmo erro… qual biblioteca que deu certo?

          4. Como você acertou a hora?
            Obrigado.

          5. Bom dia Alexandre,

            Retire o comentário da linha 20, e coloque as informações de data e hora na rotina SelecionaDataeHora() (linha 66). Carregue o programa no Arduino.

            Quando a hora estiver correta, volte a comentar a linha 20 e carregue o programa novamente. Isso manterá o relógio atualizado.

            Abraço!

            Adilson – Equipe MakerHero

          6. Obrigado, deu certo.

          7. Boa noite Jorge, pode me ajudar acertar a hora? Tem como explicar o que você fez?
            Porque eu já revisei varias vezes e não entendi como acertar esse relógio.
            Agradeço.

  63. Olá, gostaria de ajuda para ligar seis displays de 7 segmentos ao arduino, e que seja possivel, controlar cada um individualmente.
    Agradeço a ajuda.

  64. Boa noite. Fiz uma simulação no Proteus, somente para ver como ele apareceria, porém não funcionou, nem ao menos os displays ligaram. Refiz o circuito todo 2 vezes e ambos ficaram iguais. Isso poderia ser apenas um erro do programa(Proteus)?

    1. Bom dia Luiz,

      Provavelmente algum erro ou particularidade do Proteus, já que esse circuito foi testado na protoboard.

      Abraço.

      Adilson – Equipe MakerHero

  65. Excelente. Obrigado.

  66. Boa noite pessoal. Tenho uma dúvida que, se solucionada, vai ser útil a muitos leitores.
    Meu relógio com o display está funcionando perfeitamente. Adotando o mesmo principio gostaria de construir um relógio maior, seguindo o esquema do display, substituindo cada led de cada segmento por uma fita de led. Sei que o arduino não vai suportar a carga, pensei então em usar um TIP120, mas não sei como fazer as ligações. Como meus conhecimentos em eletrônica são limitados, gostaria de saber se alguém pode me ajudar. Obrigado.

  67. Pessoal, sou leigo e estou começando o estudo sobre Arduino. Gostaria de saber como poderia intercalar a visualização da hora e temperatura no display? Abraço.

    1. Bom dia Sérgio,

      Você vai precisar de algum tipo de sensor de temperatura, como o DHT11, DHT22 ou o DS18B20, por exemplo. Na programação, você pode criar uma subrotina para mostrar a temperatura, e acionar essa subrotina em intervalos específicos (2, 3, 5, 10 segundos, etc).

      Abraço

      Adilson – Equipe MakerHero

      1. Boa noite,
        como vocês fazem para que os números sejam diferentes em cada dígito do display?
        Por exemplo, se eu quisesse o número 1 no primeiro dígito, acenderia os segmentos B e C, e o número 8 no segundo dígito, acenderia todos os segmentos, entao, no primeiro dígito também apareceria 8, e não 1, já que estou setando os pinos de todos os segmentos para HIGH, além dos pinos dos dígitos 1 e 2…

        Obrigado

        1. Boa tarde Alexandre,

          Sim, o que fazemos é usar multiplexação, selecionando um dígito de cada vez e acendendo os segmentos correspondentes. Quem faz esse trabalho é a biblioteca SevSeg.

          Abraço.

          Adilson – Equipe MakerHero

      2. Ola luiz, parabens pelo seu projeto, teria como me passar detalhes da montagem, e o sketch ?
        Grato, Mario.

        1. Olá, Mário, boa tarde,

          Obrigado por ter gostado do meu projeto!
          Todos os detalhes que tenho eu disponibilizei no site do Instructables onde há o diagrama de montagem na Protoboard, lista de peças, datasheets, programa do Arduino, enfim, tudo que precisa para replicar este projeto.

          Att.,
          Luís Antonio Silva

      3. Ola Luis Antonio G. Silva nao vie o código no instructables, como faço para em vez de usar o display usa leds?

  68. Boa tarde, gostaria de uma ajuda não sou especialista em programação
    mais quando efetuei o programa existente no site ai e mandei compilar, ele ocorreu um erro
    o erro é este abaixo:

    Arduino: 1.6.4 (Windows 7), Placa:”Arduino Uno”

    Opções de compilação alteradas, recompilando tudo

    Usando biblioteca Wire na pasta: C:Program Files (x86)ArduinohardwarearduinoavrlibrariesWire

    C:Program Files (x86)Arduinohardwaretoolsavr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10604 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:Program Files (x86)Arduinohardwarearduinoavrcoresarduino -IC:Program Files (x86)Arduinohardwarearduinoavrvariantsstandard -IC:Program Files (x86)ArduinohardwarearduinoavrlibrariesWire C:UsersWAppDataLocalTempbuild412406762290641630.tmpcronometro.cpp -o C:UsersWAppDataLocalTempbuild412406762290641630.tmpcronometro.cpp.o

    cronometro.ino:5:20: fatal error: SevSeg.h: No such file or directory
    compilation terminated.
    Erro compilando.

    Se alguem puder me ajudar corrigir este erro

    Obrigado!

  69. Olá amigos, como posso sincronizar as horas e data deste relógio pelo shield GPS? Desta forma não precisaria de ajustes.

  70. Pessoal, estou buscando ajuda para entender o problema dos 5V do DS1307, quando conectado aos Raspberry PI, que usam 3,3 no SDA e no SCL (segundo o que tenho lido). Há 5V no Raspberry PI também, no entanto, há alguns sites na Internet alertando para a retirada de dois resistores que ficam no DS1307 (R2 e R3), a fim de não haver danos elétricos ao RPI. Então, a ajuda que procuro é: alguém já vivenciou o uso do DS1307 em Raspberry PI, principalmente em relação aos resistores. A propósito, quando digo DS1307 me refiro ao TinyRTC que comprei aqui no site. Obrigado.

  71. Só eu que vomito quando olho pra displays multiplexados assim? 😀

  72. MUITO BOM O TRABALHO MUITO EXPLICATIVO FÁCIL DE ENTENDER
    MEUS PARABÉNS

  73. Poxa que legal, consigo fazer meu próprio relógio gastando menos de R$30 🙂

    1. Parabéns pelo blog, tem me ajudado muito.

      Tem como pegar a hora através do shiel ethernet através do javascript e passar para uma variável no arduino.

      Obrigado.

Trackbacks and Pingbacks

  1. […] humano. Desta forma, temos a ilusão que todos os LEDs estão ativos. Dê uma olhada nos projetos Como construir um relógio com Arduino e Aprenda a construir um Relógio Binário com Arduino, ambos utilizam multiplexação para […]

  2. […] Para ver um projeto bem simples de relógio utilizando microcontroladores, clique aqui. […]