Cronômetro com Arduino e display LCD I2C

Eletrônica Arduino 17 de Novembro de 2019 às 14:55

O cronômetro é um dispositivo parecido com um relógio para medir a quantidade de tempo decorrido de sua ativação e desativação. É útil para medir o tempo das atividades esportivas, como corrida, natação ou futebol. Você já pensou em fazer o seu próprio cronômetro? Se sim, este tutorial pode te ajudar!

Para este tutorial foi desenvolvido um cronômetro simples utilizando a plataforma de desenvolvimento Arduino Uno, um display LCD I2C e botões.

Materiais e montagem

  • 1 Arduino Uno R3 com cabo USB
  • 1 Display LCD 16x2 com módulo I2C
  • 2 Botões/chave táctil
  • 1 Protoboard pequeno
  • Fios jumpers
Esquema cronômetro com Arduino e display LCD I2C.

Os pinos de SDA e SCL do display LCD 16x2 com módulo I2C são conectados nos pinos analógicos A4 e A5 da placa Arduino, onde sua alimentação de 5V também. Se você tiver dúvidas sobre a montagem do display, leia o tutorial de Como ligar um display LCD 16x2 I2C no Arduino Uno.

Modulo I2C para display LCD 16x2.

Depois de finalizar a montagem, abra a IDE oficial do Arduino e cole este código abaixo. A biblioteca utilizada para o display LCD I2C é a NewLiquidCrystal, faça o download e adicione ao projeto.

/*
 * Cronômetro com Arduino e display LCD I2C
 * 
 * Autor: Daniele Alberti
 * Modificações: tecdicas
 * 
 * 18/10/2019
 *
 * V1.0
*/

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

#define BTN_PLAY 10
#define BTN_STOP 11

int estado_btnplay;
int estado_btnstop;

unsigned long tempo;
unsigned long tempo_play = 0;
unsigned long tempo_stop;
unsigned long tempo_segundo;

int controle = 1;

// Alterar o endereço conforme modulo I2C
LiquidCrystal_I2C lcd(0x3F, 2,1,0,4,5,6,7,3, POSITIVE); 

void setup()
{
  pinMode(BTN_PLAY, INPUT_PULLUP);
  pinMode(BTN_STOP, INPUT_PULLUP);
  
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.print("Tec Dicas");
  lcd.setCursor(0,1);
  lcd.print("Cronometro");
  delay(1000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("PLAY p/ iniciar");
}

void loop()
{
  estado_btnplay = digitalRead (BTN_PLAY);
  estado_btnstop = digitalRead (BTN_STOP);
  
  if ((estado_btnplay == LOW) && (controle < 2))
  {
    tempo = millis();
    controle = 0;
  }
  if ((estado_btnplay == LOW) && (controle == 2))
  {
    controle = 0;
  }
  if (controle == 0)
  {
    lcd.setCursor(0, 0);
    lcd.print("TEMPO  (segundo)");
    lcd.setCursor(0, 1);
    lcd.print("PLAY!    ");
    tempo_play = millis() - tempo;
    tempo_segundo = tempo_play / 1000;
    if (tempo_segundo <= 9)
    {
      lcd.setCursor(12, 1);
      lcd.print("   ");
      lcd.print(tempo_segundo);
    }
    if ((tempo_segundo > 9) && (tempo_segundo <= 99))
    {
      lcd.setCursor(12, 1);
      lcd.print("  ");
      lcd.print(tempo_segundo);
    }
    if ((tempo_segundo > 99) && (tempo_segundo <= 999))
    {
      lcd.setCursor(12, 1);
      lcd.print(" ");
      lcd.print(tempo_segundo);
    }
    if ((tempo_segundo > 999) && (tempo_segundo <= 9999))
    {
      lcd.setCursor(12, 1);
      lcd.print(tempo_segundo);
    }
  }
  if (estado_btnstop == LOW)
  {
    lcd.setCursor(0, 0);
    lcd.print("TEMPO (milliseg)");
    lcd.setCursor(0, 1);
    lcd.print("STOP!    ");
    if ((tempo_play > 9) && (tempo_play <= 99))
    {
      lcd.setCursor(9, 1);
      lcd.print("     ");
      lcd.print(tempo_play);
    }
    if ((tempo_play > 99) && (tempo_play <= 999))
    {
      lcd.setCursor(9, 1);
      lcd.print("    ");
      lcd.print(tempo_play);
    }
    if ((tempo_play > 999) && (tempo_play <= 9999))
    {
      lcd.setCursor(9, 1);
      lcd.print("   ");
      lcd.print(tempo_play);
    }
    if ((tempo_play > 9999) && (tempo_play <= 99999))
    {
      lcd.setCursor(9, 1);
      lcd.print("  ");
      lcd.print(tempo_play);
    }
    if ((tempo_play > 99999) && (tempo_play <= 999999))
    {
      lcd.setCursor(9, 1);
      lcd.print(" ");
      lcd.print(tempo_play);
    }
    if ((tempo_play > 999999) && (tempo_play <= 9999999))
    {
      lcd.setCursor(9, 1);
      lcd.print(tempo_play);
    }
    controle = 2;
  }
}
Montagem do cronômetro com Arduino Uno e display LCD I2C.

Ao ligar o Arduino, irá aparecer escrito "Tec Dicas" na primeira linha e "Cronometro" na segunda linha, logo após "PLAY p/ iniciar", clique na tecla PLAY e veja o cronômetro medindo a quantidade de tempo em segundos. Para parar a contagem, clique na tecla STOP, onde o tempo será mostrado em milissegundos.

Para converter o resultado em milissegundos para segundos, basta dividir o valor de tempo por 1000. E converter o resultado em segundos para minutos ou minutos para horas, divida o valor de tempo por 60.

Ressaltando que o máximo de tempo que o cronômetro conta é até 9999 segundos.

Fórmulas de conversão de tempo, milissegundos, segundos, minutos e horas para o cronômetro.

Referência