Seu Curso

  • Full Screen
  • Wide Screen
  • Narrow Screen
  • Increase font size
  • Default font size
  • Decrease font size

Programando um relógio no Arduíno

Imprimir
Avaliação do Usuário: / 21
PiorMelhor 

Existem muitas aplicações, somente de software ou de automação, onde contar o tempo é necessário, ou seja, onde é preciso ter um relógio.

Esse relógio pode ser feito apenas via software, com programação, ou pode ser implementado utilizando-se hardware específico (cristal oscilador e etc.). A ideia deste artigo é utilizar apenas técnicas de programação e comandos da linguagem C do Arduino para programar um relógio.

Eis o código fonte:

 

int seg=0,
min=0,
hor=0;
 
void setup()
{
Serial.begin(9600);
}
 
void loop()
{
static unsigned long ult_tempo = 0;
int tempo = millis();
if(tempo - ult_tempo >= 1000) {
ult_tempo = tempo;
seg++;
}
if(seg>=60) {
seg = 0;
min++;
}
if(min>=60) {
min = 0;
hor++;
}
if(hor>=24) {
hor=0;
min=0;
}
Serial.print(hor);
Serial.print(":");
Serial.print(min);
Serial.print(":");
Serial.println(seg);
delay(1000);
}

 

O que fizemos:

A função millis() retorna a quantidade de milissegundos desde o início da execução do programa. Esse retorno é bastante estável uma vez que volta ao zero apenas em aproximadamente 50 dias!

A cada 1000 milissegundos contamos um segundo, incrementando a variável seg (segundos) e guardamos essa marca, para podermos refazer a conta para encontrar os próximos 1000 milissegundos, uma vez que a contagem da função millis() sempre caminha em frente (excento quando zera, no caso que comentei acima).

Depois disso é o mais fácil: a cada 60 segundos, incrementamos um minuto, a cada 60 minutos incrementamos uma hora e a cada 24 horas voltamos tudo ao zero.

O delay é para que a impressão no terminal serial não fique confusa, mostrando várias vezes o tempo repetidamente.

Uma vez compilado e enviado ao Arduino, basta iniciar o Serial Monitor e verificar a contagem do tempo:

 

Mas talvez, mais interessante ainda, é incluirmos alguma coisa para ajustarmos a contagem do tempo o horário atual. Para isso você vai precisar de:

1. Um Botão

2. Um resistor (220?)

3. Fios

 

A ligação é a seguinte:

GND---| Resistor |-----| Botão | --------------- Pino 3 do Arduino 
5V-------------------------|          |

 

Altere o programa para que fique assim:

 

int seg=0,
min=0,
hor=0,
botao;
 
void setup()
{
pinMode(3,INPUT);
Serial.begin(9600);
}
 
void loop()
{
botao = digitalRead(3);
while(botao == HIGH) {
digitalWrite(13, HIGH);
botao = digitalRead(3);
min++;
if(min>=60) {
min = 0;
hor++;
}
if(hor>=24) {
hor=0;
min=0;
}
Serial.print(hor);
Serial.print(":");
Serial.print(min);
Serial.print(":");
Serial.println(seg);
delay(200);
}
static unsigned long ult_tempo = 0;
int tempo = millis();
if(tempo - ult_tempo >= 1000) {
ult_tempo = tempo;
seg++;
}
if(seg>=60) {
seg = 0;
min++;
}
if(min>=60) {
min = 0;
hor++;
}
if(hor>=24) {
hor=0;
min=0;
}
Serial.print(hor);
Serial.print(":");
Serial.print(min);
Serial.print(":");
Serial.println(seg);
delay(1000);
}

 

Com isso quando se mantem o botão pressionado o tempo correrá mais rápido, cada segundo será incrementado em 200 milissegundos, ou seja, o tempo correrá 5 vezes mais rápido. Ao despressionar o botão o tempo voltará a correr normalmente, com um segundo valendo um segundo.

Dessa forma você poderá ajustar o tempo do Arduino a um relógio.

Lógico, esse projeto pode ser melhorando em muito, seja CRIATIVO!

 

Comentários  

 
+1 #16 TOPAlexandre Muzulão 04-02-2016 22:40
Muito boa cara.
Não tinha pensado em implementar dessa maneira.

Top!
Citar
 
 
0 #15 HelanoFernando Bryan Frizzarin 13-08-2015 17:53
Sim, essa é a ideia.
Citar
 
 
0 #14 Relogio + ProgramaHelano 13-08-2015 08:38
existe a possibilidade de usar esse relogio e inserir outras linhas de codigo que ficarão incarregadas de outras tarefas, sem interferir na contagem do tempo? como por exemplo: condições if , else, e chamadas de funções.
Citar
 
 
0 #13 PrecisãoBruno hagio 06-04-2015 18:11
Ola.
Tenho um projeto, que preciso de uma precisão de tempo na casa dos nano segundos, teria algo para me sugerir?
Citar
 
 
-1 #12 Utilização TimerBruno hagio 06-04-2015 17:50
Ola.
Será que o senhor poderia me ajudar?
Preciso de um timer em nanosegundos, isso seria possivel?
att
Bruno Hagio
Citar
 
 
+1 #11 LegalRodrigo Cunha 18-03-2015 17:13
Muito bom o seu código, tem como fazer um codigo com mais de um botão para acertar os minustos e as horas sem precisar ficar correndo com um botão só?
Citar
 
 
-1 #10 HorarioRodrigo Cunha 27-02-2015 14:47
Gostei do seu código, até testei ele virtualmente.... ao invés de colocar no serial, seria bacana colocar ele no lcd. Faz um como o lcd.
Citar
 
 
+1 #9 Temporizadoralexsandro 23-02-2015 15:41
olá! estou desenvolvendo um projeto simples, apenas para começar com o arduino. Onde iria acender uma lampada a determinado horário e desliga-lá após duas horas (por exemplo). Preciso de um modulo(módulo RTC DS1302) desses para fazer isso ? obs. já tenho o rele.
Citar
 
 
+1 #8 Ajuda contador de horas trabalhadasRodrigo Oliveira 13-11-2014 09:51
Bom dia Fernando, gostei do seu código, estou precisando fazer um horimetro (contador de horas trabalhadas de maquinas), funcionaria o contador quando a maquina é ligada até quando desligarem ela, mas ela teria que salvar as horas e minutos, para que a proxima vez que ligarem a maquina continuasse daonde parou. Poderia me ajudar? Estou começando agora no arduino.
Citar
 
 
+1 #7 Código em outros usostiago batista 28-04-2014 10:18
Achei o código inteligente ele funciona, mas reparei que a cada 7 seg aproximadamente ele adiciona um segundo talvez seja culpa do delay, seria interessante inserir um corretor.

Tenho uma duvida similar ao do rodolfo, como faço para utilizar o código como timer para ativar uma saída do arduino, tentei algumas opções mas não consegui. Não sei se inseri-se mais um bloco void para executar a função.
Citar
 

Adicionar comentário


Código de segurança
Atualizar

You are here: