Medição Precisa de Frequência e Ciclo de Trabalho com Arduino UNO
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Arduino UNO | 1 |
| Display LCD Alfanumérico 20x4 | 1 |
Ferramentas Necessárias
- Protoboard 270 pinos
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
O Arduino tem várias aplicações em medição de grandezas elétricas (tensão, corrente, potência) ou físicas (temperatura, umidade, luminosidade) ou valores de componentes eletrônicos.
Este artigo demonstra como medir frequência e ciclo de trabalho (duty cycle) de pulsos usando Arduino. Medição de frequência é essencial em comunicações. Ciclo de trabalho indica % de largura de pulso (tempo ON) — crucial no controle de velocidade de motor DC, ângulo de servo, verificação de simetria de pulso em receptores digitais, repetidores, etc.
O projeto mede frequência, tempo ON, tempo OFF e duty cycle, exibindo no LCD 16x4 (no texto original; componentes listam 20x4).

Descrição do Circuito
- Pulsos aplicados diretamente no pino digital 7 do Arduino.
- Pinos RS e EN do LCD nos pinos digitais 9 e 8; RW no GND.
- Pinos de dados D4-D7 nos pinos 10, 11, 12, 13 do Arduino.
- Anodo do backlight (pino 15) e Vcc (pino 2) do LCD em 5V via Arduino.
- Catodo do backlight (pino 16) e Vss (pino 1) no GND.
- Potenciômetro 1 kΩ no pino Vee para contraste.
Operação do Circuito
- Ao alimentar o Arduino via USB, quatro parâmetros aparecem no LCD:
Freq:,Ton:,Toff:,Duty:(um por linha). - Quando pulsos chegam ao pino 7, o Arduino espera pulso ficar HIGH. Mede tempo (µs) em HIGH → Ton.
- Mede tempo (µs) em LOW → Toff.
- Soma os dois → Período total.
- Frequência = 1 / Período (em segundos; usa µs → 1.000.000 / período).
- Duty Cycle = Ton / (Ton + Toff) × 100%.
- Exibe os quatro parâmetros no LCD.
- Repete a cada 1 segundo, monitorando variações contínuas.
Código
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 10, 11, 12, 13); // RS, EN, D4, D5, D6, D7
#define pulse_ip 7
int ontime, offtime, duty;
float freq, period;
void setup() {
pinMode(pulse_ip, INPUT);
lcd.begin(16, 4); // Note: use lcd.begin(20,4) se display for 20x4
lcd.clear();
lcd.print("Freq:");
lcd.setCursor(0,1); lcd.print("Ton:");
lcd.setCursor(0,2); lcd.print("Toff:");
lcd.setCursor(0,3); lcd.print("Duty:");
}
void loop() {
ontime = pulseIn(pulse_ip, HIGH);
offtime = pulseIn(pulse_ip, LOW);
period = ontime + offtime;
freq = 1000000.0 / period;
duty = (ontime / period) * 100;
lcd.setCursor(5,0); lcd.print(freq); lcd.print("Hz");
lcd.setCursor(4,1); lcd.print(ontime); lcd.print("us");
lcd.setCursor(5,2); lcd.print(offtime); lcd.print("us");
lcd.setCursor(5,3); lcd.print(duty); lcd.print('%');
delay(1000);
}
Esquemático

Processo de manufatura
- Medindo Frequência e Fase em Sistemas de Potência AC
- Sistema de Presença RFID Confiável com Arduino e Python
- Controle Remoto Universal Android com Arduino, 1Sheeld e IR
- Construa um Voltímetro Inteligente com Arduino e Smartphone – Projeto DIY Fácil
- Construa um Pote Inteligente IoT com ESP8266, Arduino e Sensor Ultrassônico – Monitoramento em Tempo Real
- Medição Precisa de Frequência e Ciclo de Trabalho com Arduino UNO
- Controle um Rover Arduino com Firmata e Gamepad Xbox One
- Medir a Massa da Terra com Arduino: Guia DIY Passo a Passo
- Medição de Distância em Tempo Real com Sonar Arduino e Visualização no Processing
- Construa uma Bússola Digital em Tempo Real com Arduino e Processing