Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Dominando Timers Internos do Arduino para Temporização Precisa

Componentes e Materiais

ComponenteQuantidade
Arduino UNO1
LED (genérico)1
Resistor 220 Ω1

Sobre o Projeto

Visão Geral

Se você precisa contar tempo com precisão, deve usar um timer. Porém, usar os timers internos do Arduino não costuma ser fácil. Neste tutorial, explico de forma simples como utilizá-los.

É importante usar timers porque durante delay() você não pode fazer nada; com timer, o programa continua rodando e, quando o tempo chega, uma interrupção é ativada.

Usarei o TIMER0 por ser o mais simples. No futuro, posso explicar os outros.

Como Funciona

Consulte o datasheet do ATmega328P. O diagrama de blocos do contador mostra:

O prescaler divide o clock de 16 MHz. A configuração dos bits CS02:0 no registrador TCCR0B define a divisão (ex: 1/64).

Para calcular o valor de OCR0A para um tempo desejado:


Frequência do clock = 16 MHz
Prescaler = 64
Clock do timer = 16.000.000 / 64 = 250.000 Hz (período = 4 µs)
Para 1 ms: 1 ms / 4 µs = 250 ciclos → OCR0A = 249 (0xF9)

Exemplo Prático: Pisca LED a Cada 1 Segundo via Timer0


/* Pisca LED no pino 13 a cada 1 segundo usando Timer0 em modo CTC */
int timer = 0;
bool state = 0;

void setup() {
  pinMode(13, OUTPUT);
  TCCR0A = (1 << WGM01);        // Modo CTC
  OCR0A = 0xF9;                 // 249 → 1 ms
  TIMSK0 |= (1 << OCIE0A);      // Habilita interrupção Compare Match A
  sei();                        // Habilita interrupções globais
  TCCR0B |= (1 << CS01) | (1 << CS00); // Prescaler 64 (inicia contagem)
}

void loop() {
  if (timer >= 1000) { // 1000 * 1 ms = 1 s
    state = !state;
    timer = 0;
  }
  digitalWrite(13, state);
}

ISR(TIMER0_COMPA_vect) {
  timer++; // Incrementado a cada 1 ms
}

Importante: Configure o prescaler por último, pois o timer começa a contar imediatamente. Para parar, zere todos os bits de TCCR0B.

Esquemático

LED no pino 13 com resistor 220Ω para GND.

Processo de manufatura

  1. Construa um Spybot Controlado por Bluetooth com Arduino
  2. FlickMote: Controle Remoto IR por Gestos para Casa Inteligente
  3. DIY Arduino TV B-Gone: Controle Remoto Universal para Todas as TVs
  4. Construa um Relógio Mestre LED Personalizado com Alarme – Visível a 12 Metros
  5. Find Me: Localizador Inteligente de Objetos com Arduino e Bluetooth
  6. Soluções de Energia Otimizadas para Projetos Arduino
  7. Jogo da Velha com Arduino, Matriz LED MAX7219 e Caixa de Papelão
  8. Construa um Robô Quadrúpede Inteligente com Arduino: Guia Passo a Passo
  9. Volante Joystick Arduino Personalizado para Jogos
  10. Construa uma Máquina CNC Totalmente Funcional com Arduino Nano R3