Frequencímetro com Arduino

Frequency meter

Neste post será apresentado um projeto bem simples de um frequencímetro com Arduino, e também será apresentado a simulação no Tinkercad.

O projeto é baseado no circuito para medir distância, e aproveitando o mesmo código do post anterior foi mais fácil implementar um frequencímetro, mas antes de iniciar vamos definir o que é frequência e como podemos medir e calcular.

Frequência

A frequência é definida como o inverso do período, ou seja:

Equação para calcular frequência

Mas desta forma é um pouco difícil entender exatamente o que é frequência, que também pode ser definido como o números de repetições de um ciclo em um segundo.

Vamos verificar como calcular a frequência de um sinal, vamos utilizar um exemplo de forma de onda para facilitar o nosso entendimento do que é frequência, para isso vamos analisar o sinal abaixo:

Sinal senoidal de 60 Hertz

Vamos supor que para medir o sinal acima foi utilizado um osciloscópio, e se verificou que o sinal tem 10 mV, e um período de 16,67 ms, então para se determinar a frequência utilizado a equação acima se obtém:

Frequência de 60 Hz

Observem que na medida do período do sinal medimos apenas um ciclo, ou seja, medimos o período do sinal até o momento que o sinal volta a se repetir.

Para gerar o mesmo sinal, por exemplo, no MATLAB ou no Octave online, devemos transformar o frequência de hertz para radianos / segundos, para isso basta multiplicar a frequência em hertz por 2π.

O mesmo raciocínio vale para medir a frequência de sinais de outras formas de onda, como por exemplo, uma forma de onda quadrada.

Calculadora de frequência

Abaixo temos duas calculadoras, que faz o calculo da frequência, basta inserir o valor do período.

Período [segundos]
Rad / s hertz


Frequência = 0 Hz

Para encontrar uma frequência de 1 kHz, por exemplo, escreva 1e-3, e para casas decimais utilizar o ponto.

Na calculadora abaixo é possível encontrar o período bastando adicionar o valor da frequência.

Frequência [Hz]
Rad / s hertz


Período = 0 segundos

Frequencímetro com Arduino

O frequencímetro com Arduino apresentado a seguir é uma simulação do Tinkercad, onde se utiliza um display 16x2 e um gerador de sinais, para gerar um onda quadrada, onde é possível variar a frequência e ler o valor no display.

Abaixo temos o diagrama esquemático do nosso circuito:

Abaixo é mostrado o código que foi utilizado:

/*********************************************************************
 * Frequency meter with Arduino                                      *
 * Wantronics: https://wantronics.com.br/blog-wantronics/
 *********************************************************************/
#include <LiquidCrystal.h>
// Setup LCD pins
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // rs = 7, en = 6, D4 = 5, D5 = 4, D6 = 3, D7 = 2

#define sense 8 // Input pin


// Global variables
float time;
float frequency;
int delay_display = 0;

void setup()
{
  // Initialize LCD
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(2, 0);
  lcd.print("Frequency: ");
  
  pinMode(sense, INPUT); // Configuration pin as Input
}

void loop() 
{
   time = 0;
   frequency = 0;
  
   time = pulseIn(sense, HIGH);
   // Calculating the frequency
   frequency = (1 / (time * 2 * 0.000001)) * 1.055;
  
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("Frequency: ");
   lcd.setCursor(0,2);
   lcd.print(frequency);
   lcd.setCursor(5,2);
   lcd.print (" Hz");
  if (frequency > 100) {
    delay_display = 200;
  }
  else {
    delay_display = 50;
  }
   delay (delay_display);
}

E abaixo é possível verificar o funcionamento do circuito no Tinkercad:

Conclusão

Para concluir, o código utiliza a função pulseIn() para obter o valor do período, e após isso faz o cálculo da frequência. Essa não a melhor forma de se medir frequências usando um microcontrolador, mas facilita muito.

Como é possível observar pelas simulação, o valor da leitura da frequência é limitado até aproximadamente 60 kHz, e apresenta uma pequena diferença do valor real para o valor exato da frequência, que é corrigido no momento do cálculo da frequência.

Outra limitação relevante a ser destacada é que o circuito consegue fazer leituras apenas de sinais de onda quadrada, não conseguindo ler sinais com outras formas de onda, como por exemplo um sinal senoidal, ou um sinal com forma de onda dente de serra.

Apesar das limitações, o circuito pode ser muito útil dependendo da situação, e é lógico, podem ser feitos melhorias para se conseguir medir outras formas de onda, podem ser utilizados outros periféricos do microcontrolador, como por exemplo os timers para se obter uma melhor precisão, e ler uma faixa maior de valores.

https://www.tinkercad.com/