O frequencímetro é um dispositivo usado para medir a frequência de um sinal periódico. No contexto do Arduino, podemos criar um frequencímetro simples usando um sensor de pulso para medir a frequência de um sinal gerado por outro Arduino. Neste tutorial, vamos explicar o que é um frequencímetro, como ele funciona, a fórmula para calcular Hertz (Hz) e demonstrar um projeto básico de frequencímetro com Arduino.
Um frequencímetro é um dispositivo eletrônico projetado para medir a frequência de um sinal periódico, ou seja, o número de ciclos ou pulsos que ocorrem em um segundo. A frequência é medida em Hertz (Hz), onde 1 Hz equivale a um ciclo por segundo. Os frequencímetros são amplamente utilizados em eletrônica, engenharia, telecomunicações e ciência para medir a frequência de sinais, como sinais de áudio, sinais de RF (rádio frequência) e muito mais. Eles são essenciais para a depuração, análise e monitoramento de sistemas elétricos e eletrônicos.
O funcionamento de um frequencímetro baseia-se na medição da quantidade de ciclos ou pulsos no período de um segundo. A fórmula básica para calcular a frequência (f) a partir da quantidade (n) de ciclos em um período (Δt) é:
f =n /Δ t
onde:
f é a frequência em Hertz (Hz).
Δ t é o intervalo de tempo em (segundos).
n é o número de oscilações ocorridas em T
Ou seja, os Hertz são o mesmo que oscilações por segundo.
Para medir a frequência, um frequencímetro inicia um contador de tempo quando um pulso do sinal inicia e para o contador quando o próximo pulso inicia. O tempo decorrido (Δt) é então usado na fórmula para calcular a frequência. A fórmula usada é a seguinte:
f= 1/Δ t
A única diferença da anterior é que já sabemos a quantidade de pulsos (1), e o valor alterado é apenas Δt (intervalo de tempo), que será dito pela função pulseIn.
Vamos criar um projeto de frequencímetro com Arduino, usando um Arduino Nano, para medir a frequência gerada por um Arduino Uno R3.
Gerador:
O pino lilás é o terminal das ondas.
Frequencímetro:
Para usar o sistema apenas para ler as frequências, é só conectar uma fonte de oscilações elétricas ao pino digital n.º 6, lembrando que não se deve conectar tensões maiores que 5 V aos pinos de entrada ou saída do Arduino Uno, pois isso pode danificar ou queimar o microcontrolador. É importante conectar os GNDs quando for usado para medir frequências de outras fontes (que não ultrapasse 5V) ou quando for usar os Arduinos em diferentes fontes ex; baterias e fontes diferentes. No mesmo computador, com referência comum pelo USB, não é necessário a conexão entre GNDs dos Arduinos.
Gerador + Frequencímetro:
OBS: Os pinos digitais n°6 dos Arduinos devem estar conectados entre si para o funcionamento correto.
Esse é o circuito que desenvolveremos a seguir.
Gerador:
int HZ; void setup() { Serial.begin(9600); // inicia o serial pinMode(A0, INPUT); //define o pino A0 como entrada pinMode(6, OUTPUT); //define o pino 6 como saída } void loop() { HZ = map(analogRead(A0), 0, 1023, 31, 10000); // define a variável HZ de 0 a 10000 (mesmo valor que limita a leitura analógica do potenciômetro 0 a 1023) Serial.println(HZ); //imprime a variável HZ tone(6, HZ); //ativa o pino 6 com a frequência de HZ }
Explicação:
O código no bloco setup é executado uma vez quando o Arduino é ligado ou resetado. Basicamente ele configura a comunicação serial a uma taxa de 9600 bauds. Define o pino A0 como uma entrada para ler um sinal analógico (potenciômetro). Configura o pino 6 como saída para gerar as frequências.
O código no bloco loop é executado repetidamente após a configuração inicial. Basicamente lê um valor analógico do pino A0 (varia de 0 a 1023) e o mapeia para um valor entre 0 e 10000. Define a frequência no pino 6 com base no valor mapeado em A0. Imprime o valor de HZ (frequência no pino 6) no monitor serial.
Frequencímetro:
long leitura; // cria a variável tipo long void setup() { Serial.begin(9600); //inicia o serial pinMode(6, INPUT); // define o pino 6 como entrada } void loop() { leitura = (1000000/pulseIn(6, HIGH, 1000000)/2); //define a variável long como o valor de pulseIn(o tempo que o pino 6 fica ativo, obs: esse leitura passa pela fórmula de Hertz) delay(200);// após a definição da variável como Hz, aguarda 200 ms Serial.print("Frequência (Hz): "); //escreve no monitor serial Serial.println(leitura); //escreve o valor de leitura, que é em hertz }
Explicação:
O void setup configura a comunicação serial como baud-rate 9600 e define o pino 6 como entrada de energia ou dados.
No void loop:
leitura = (1000000/pulseIn(6, HIGH, 1000000)/2);
Esta linha define a variável (leitura) com o valor da função pulseIn para medir a duração de um pulso no pino 6 enquanto o nível do sinal é HIGH (dentro do período de um Segundo que equivale a 1000000 microssegundos), depois divide esse valor por 2, para encontrar o tempo de duração de metade do um ciclo desse sinal, que corresponde a um ciclo completo (um período) da onda produzida pela função tone do Arduino gerador. Para medir frequências de outras fontes, você pode tirar a divisão por 2.
A função pulseIn mede o tempo que um pino leva para fazer a transição de LOW para HIGH e retornar para LOW (ou o tempo que o pino fica no estado HIGH) . Essa função substitui o Δ t na fórmula. O número de oscilações sabemos que são 1, pois pulseIn mede o tempo de uma oscilação.
1s = 1000 ms = 1000000 µs
Resumindo, este código configura o pino 6 como entrada e mede a duração de um pulso que é aplicado a esse pino. A duração do pulso é então impressa no monitor serial, adicionada à fórmula de Hz, e depois exibe uma variável como uma frequência em Hertz.
À esquerda monitoramos o gerador de frequências elencado pelo Arduino UNO R3. À direita, monitoramos o frequencímetro, elencado pelo Arduino NANO. Para comprovar o valor lido do pulso a 10000 Hz, podemos observar em que ambos há o mesmo valor (aproximado) da frequência, fica ainda mais claro ao chegar em 31.
O valor mínimo de 31 Hz foi definido pelo criador da função tone(), então esse é o valor mínimo para gerar frequências com a função tone(). É possível contornar esse limite com o uso de delays variáveis pelo potenciômetro.
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!