Hub 015 - Cronômetro com acionamento automático - sensores infravermelho e Arduino

Básico - Hub 015

Cronômetro com pause e reset

 

Sugerido por: Pedro Beltrão ENVIAR SUGESTÃO

Objetivo

Criar um cronômetro com acionamento automático por sensores para medir o tempo em que um objeto leva para ir de um ponto A para um ponto B. O projeto consiste em colocar um sensor infravermelho para disparar o cronômetro no início do trajeto e outro sensor para parar o cronômetro no final do trajeto.

Adaptação do projeto I12 - Cronômetro com pause controlado por leds infravermelhos - Arduino

 

kkkkkkkkkkkkkkkkkkkkkkkkkk

disparar e pausar o cronômetro, quando um objeto passa de um ponto A para um ponto B. Esse cronômetro medirá então o movimento de um objeto

 

Pelo que entendi seria um projeto com início e pausa do cronômetro acionado por dois sensores infravermelhos (sistema A e sistema B). O objeto ao passar pelo sistema A dispara o cronômetro e ao passar pelo sistema B para o cronômetro.  


 Oi, ótimo dia.

    Pedro Beltrão

Vi o seu projeto do cronômetro com infravermelho no YouTube e fiquei muito interessado nele. Estou com um projeto e o seu ali já é meio caminho andado. Se eu te passasse a ideia, acha que conseguia me ajudar??

As modificações que eu precisaria fazer no atual projeto, seria trocar o start do puch, por um acionamento com infravermelho.

Aí teria os sensores para iniciar e os outros dois para parar o cronômetro. E na tela mostra quanto tempo levou do ponto 'A' ao ponto 'B'

Provavelmente também teria que inserir algumas informações a mais no código pra apresentar um resultado a parti dos dados coletados, mas no geral seria isso.

O objetivo é adaptar o Projeto 64 - Cronômetro com display TM1637 e Arduino acrescentando botões de pause (congelar tempo) e reset (zerar cronômetro). Também deve ser acrescentado a um display LCD para visualizar minutos, segundos e centésimos de segundos.

Obs.: O cronômetro sugerido é limitado até 60 minutos.

{source}




style="display:block"
data-ad-client="ca-pub-0154803398463315"
data-ad-slot="6385083147"
data-ad-format="auto">


{/source}

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 830 pontos

Jumpers Kit cabos ligação macho / macho 1  
Módulo TM1637

Módulo TM1637 - 4 dígitos(anodo comum)

 

1 Módulo TM1637 com display 4 dígitos - Controlador TM1637
- Alimentação: 3.3 à 5V DC
- Display 7 segmentos 4 dígitos anodo comum

datasheet

Push Button

Push button 6X6X5mm

2  
Display LCD Display LCD 16X2  1

LCD que utilize o controlador HD44780 (veja na descrição ou datasheet do componente)

O display poderá ser de qualquer cor (fundo verde, azul ou vermelho)

Módulo I2C para display LCD 

Módulo I2C com CI PCF8574

(opcional)

1 Módulo I2C display LCD Arduino

O módulo I2C poderá vir separado ou já soldado no display LCD

(datasheet)

Se você não possui um módulo I2C para display LCD, poderá adaptar o projeto para o display LCD sem o adaptador

Arduino UNO R3 Arduino UNO 1

Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Referências

Projeto 64 - Cronômetro com display TM1637 e Arduino

Projeto 63 - Usando o módulo TM1637 (display 4 dígitos) com Arduino

Projeto 48 - Como controlar um display LCD com o módulo I2C

Projeto 38 - Controlando um display LCD (instalação e comandos básicos)  - Caso opte por usar o LCD sem o módulo I2C

Bibliotecas

Para controlarmos o módulo TM1637 vamos precisar das bibliotecas TM1637Display ({source}download{/source}) e para o display LCD com módulo I2C precisaremos da biblioteca NewliquidCrystal_1.3.4.zip ({source}download{/source}).

Após fazer o download dos arquivos das bibliotecas com todos os arquivos compactados no formato zip, abra o IDE do Arduino e siga o tutorial: Como incluir uma biblioteca no IDE do Arduino.

Para conhecer outras bibliotecas para módulos veja a Tabela Biblioteca para Módulos.

Código do Projeto (Sketch)

Faça o download e abra o arquivo hub012.ino no IDE do Arduino: {source} DOWNLOAD - hb012.ino{/source}

Ou se preferir, copie e cole o código abaixo no IDE do Arduino:

/*******************************************************************************
*
*    Hub 12: Cronômetro com display TM1637 e Arduino (pause e reset)
*    Autor: Angelo Luis Ferreira
*    Data: 21/06/2021
*    
*             http://squids.com.br/arduino             
*
*******************************************************************************/
#include   // Inclui a biblioteca LiquidCrystal_I2C (LCD)
#include  // Inclui a biblioteca TM1637Display
 
const byte CLK = 2; // Define pino 2 como CLK
const byte DIO = 3; // Define pino 3 como DIO

const byte pinButPause = 8; // Define a porta digital 8 para o push button (pausa)
const byte pinButReset = 9; // Define a porta digital 12 para o push button (reset)

// declarações de variáveis
byte mode = 0;
uint32_t tempoPause = 0;
uint32_t timer = 0;
uint32_t t = 0;

// Cria o array position[] para armazenar os valores do cronômetro no TM1637
uint8_t position[] = { 0, 0, 0, 0 }; //
 
// Cria o objeto "lcd" (display no endereço 0x27)
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);
 
// Cria o objeto "display" da biblioteca TM1637
TM1637Display display(CLK, DIO);
 
void setup() {
  Serial.begin(9600);    
  display.setBrightness(3); // Ajusta o brilho para do do TM1637
  lcd.begin (16,2); // inicia o display LCD 
  // exibe título no display LCD
  lcd.setCursor(1,0);
  lcd.print("Cron");
  lcd.write(239);
  lcd.print("metro");
  
  // define pinMode dos botões
  pinMode(pinButPause, INPUT_PULLUP); // Habilita o pull up interno do Arduino
  pinMode(pinButReset, INPUT_PULLUP); // Habilita o pull up interno do Arduino
}
 
void loop() {
     // verifica se o botão Pause (pushbutton) está pressionado e muda o controle
    if (!digitalRead(pinButPause)) {         
      mode = 1; // vai para pauseMode
      while (!digitalRead(pinButPause)) {  }  //esperera soltar o botão
      delay(50);
  }
     // verifica se o botão Reset (pushbutton) está pressionado e muda o controle
    if (!digitalRead(pinButReset)) {         
      mode = 0; // vai para resetMode
      while (!digitalRead(pinButReset)) {  }  //esperera soltar o botão
      delay(50);
  }
  
    // menu de controle
    switch (mode) {
      case 0:
        resetMode();
        break;
      case 1:
        pauseMode();
        break;
      case 2:
        runMode();
        break;
      default:
        resetMode();   
    }
}

// Modo RUN - roda o cronômetro
void runMode() {
   // Armazena em segundos o tempo ligado do Arduino
  timer = (millis() - t) + tempoPause;

   // Armazena em segundos o tempo ligado do Arduino
  uint32_t segundos = timer / 1000;
  
  // Calculo individual para posição no display
  position[0] = display.encodeDigit((segundos / 60) / 10); // Dezena de minuto
  position[1] = display.encodeDigit((segundos / 60) % 10); // Unidade de minuto
  position[1] = position[1] + 128; // coloca o separador ":"
  position[2] = display.encodeDigit((segundos % 60) / 10); // Dezena de segundo
  position[3] = display.encodeDigit((segundos % 60) % 10); // Unidade de segundo
 
  //Mostra os valores no display TM1637
  display.setSegments(position);

  //Mostra os valores no display LCD
  lcd.setCursor(1,1);
  lcd.print((segundos / 60) / 10); // Dezena de minuto  
  lcd.setCursor(2,1);
  lcd.print((segundos / 60) % 10); // Unidade de minuto
  lcd.setCursor(3,1);
  lcd.print(":");
  lcd.setCursor(4,1);
  lcd.print((segundos % 60) / 10); // Dezena de segundo
  lcd.setCursor(5,1);
  lcd.print((segundos % 60) % 10); // unidade de segundo
  lcd.setCursor(6,1);
  lcd.print(",");
  lcd.setCursor(7,1);
  lcd.print((timer / 100) % 10); // Décimo de segundo
  lcd.setCursor(8,1);
  lcd.print((timer % 100) % 10); // Centésimo de segundo 

  // Define máximo de 60 minutos -> vai para pause
  if (((segundos / 60) / 10) == 6) {
    pauseMode();
  }                  
}

// mod RESET -> zera o cronômetro
void resetMode() {
  // Zera o display
  position[0] = display.encodeDigit(0); // Dezena de minuto
  position[1] = display.encodeDigit(0); // Unidade de minuto
  position[2] = display.encodeDigit(0); // Dezena de segundo
  position[3] = display.encodeDigit(0); // Unidade de segundo
  // coloca o separador dois pontos (:)
  position[1] = position[1] + 128; 

  //Mostra os valores no display TM1637
  display.setSegments(position);

  //Zera display LCD
  lcd.setCursor(1,1);
  lcd.print("00:00,00"); 
   
  // Aguarda pressionar o botão Pause
  while(digitalRead(pinButPause)) { } // espera apertar o botão para iniciar
  while (!digitalRead(pinButPause)) { }  //esperera soltar o botão  
  delay(50);
  tempoPause = 0;
  timer = 0; 
  t = millis();
  mode = 2;  
}

// mode PAUSE -> pausa o cronômetro
void pauseMode() {
  // Aguarda pressionar o botão Pause para reiniciar
  while(digitalRead(pinButPause)) { 
    // verifica se o botão Reset (pushbutton) está pressionado e muda o controle
    if (!digitalRead(pinButReset)) {         
      while (!digitalRead(pinButReset)) {  }  //esperera soltar o botão Reset
      delay(50);
      resetMode();
      break;
    }  
  } // espera apertar o botão
  while (!digitalRead(pinButPause)) { }  //esperera soltar o botão Pause
  delay(50);
  tempoPause = timer;
  t = millis();
  mode = 2; 
}

Vídeo

{source}

 

{/source}

{source}



style="display:block"
data-ad-client="ca-pub-0154803398463315"
data-ad-slot="6385083147"
data-ad-format="auto">


{/source}

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores