sexta-feira, 7 de agosto de 2015

Programando um relógio no Arduíno

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!

← Postagem mais recente Postagem mais antiga → Página inicial

0 comentários:

Postar um comentário