Fork me on GitHub

22/01/13

Arduino: Frequencímetro

Arduino: Frequencímetro




Esse é um projeto de frequencímetro, que dificilmente você irá na internet encontrar algo sobre isto. É muito simples de se fazer, precisando apenas de um display LCD e um potenciômetro( opcional ). O trabalho todo fica for conta do Arduino UNO.

Explicação do código: São declaradas quatro variáveis: long freq, long tempo, int pulsos e boolean pulso.

Dentro do void setup() você configura o LCD e o pino de entrada para medir a frequência, no caso do projeto eu utilizei o pino 2.

Dentro do void loop() a variável tempo recebe o valor do tempo atual em milissegundos.
Se o pino 2 for nível alto e se a variável pulso valer HIGH, a variável pulsos incrementa. Caso se o pino 2 for nível baixo a variável pulso vale LOW. Por que isso? No momento que faz a leitura do pino 2 com o valor 1, só queremos incrementar a variável pulsos depois que o pino 2 mudar para o nível 1 novamente.( após o nível 0).

Depois de passar 2 segundos( tempo%2000==0), a varável freq recebe o valor dos pulsos e divide por 2, ou seja, se pulsos contou 10 em 2 segundos, a frequência e 5. Após isso escreve no display LCD.

Obs.: Caso você não utilize o potenciômetro, você deve aterrar o pino 3 do LCD. A frequência mínima é 1Hz e a máxima é 10500Hz aproximadamente.

DOWNLOAD:
Arquivo de simulação do Proteus: frequencimetro-arduino.DSN;

CÓDIGO-FONTE:





18 comentários:

  1. Olá,

    Sou novo nesta área de eletrônica. e estudando um pouco sobre rádio-frequência e biomagnetismo, me deparei com uma questão de como captar determinadas frequências. Por exemplo, quando falamos em frequências na faixa de MHZ, usamos como referência a frequência da onda e a velocidade da luz para calcular o tamanho de antena, ou seja, quanto maior a frequência, menor o tamanho da antena, que inclusive pode ser em frações de 1/2 ou 1/4, ou seja, meia onda, ou um quarto de onda.

    Só que quando fala-se em biomagnetismo, as frequências são baixas, as radiações emanadas do corpo, como as do cérebro, assim como as do som, são extremamente baixas. Precisaria então entender como captar frequências 1 a 200 HZ ou mais por exemplo… como seria possível com o projeto com Arduíno como este, captar estas frequências, como determinar cada tamanho de antena para cada faixa.

    Obrigado,
    José Aparecido

    ResponderExcluir
  2. Boa tarde, a partir deste frequencimetro posso adaptar para ler rpm e velocidade em km\h, obrigado, ajudou-me imenso.

    ResponderExcluir
    Respostas
    1. pode sim, para converter para rpm, e só fazer rpm = Hz * 60
      e para km/h é Kmh = rpm * c(km) * 60, c é a circunferência;

      Excluir
  3. Qreria um codigo para contar os pulsos de um sensor fotoeletrico. Fiz o codigo abaixo, mas nao deu certo

    [code]
    int pulsos;
    boolean pulso;
    void setup()

    {
    Serial.begin(9600);
    Serial.println("Iniciando...");
    pulso=HIGH;
    pinMode(2,INPUT);
    }

    void loop()
    {
    Serial.println(pulsos);
    if(digitalRead(2)==HIGH)
    {

    if(pulso==HIGH)
    {
    pulsos = pulsos + 1;
    }

    pulso=LOW;

    }

    else{
    pulso=HIGH;
    }


    }

    [/code]

    ResponderExcluir
  4. Como faço para realizar a leitura de frequência de tensões 127, 220, 380 Volts?
    Grato.

    ResponderExcluir
    Respostas
    1. Para usar o circuito do link ( http://www.newtoncbraga.com.br/index.php/circuitos/140-conversores/3968-ne245.html ), que converte a forma de onda senoidal em quadrada, é necessário a entrada do sinal com um valor máximo como apresenta no site. Você tem que dividir o valor a ser medido com resistores e obter o valor, por exemplo 5V, na entrada e ligar a saída deste circuito no frequencímetro, se não você queima o Arduino.

      Excluir
  5. Boas, eu pretendia um frequencímetro para ver em que frequência esta transmitindo uns comandos de portão de garagem, acha que isto serve? como o arduino recebe a frequência que o comando esta a transmitir? obrigado

    ResponderExcluir
  6. é só para receber notificaçao que esqueci de marcar no post anterior :)

    ResponderExcluir
  7. Olá, estou querendo fazer uma lâmpada de ponto para motores, onde há um Frequencímetro e um estroboscópio conjugados, e há a possibilidade de ajuste de graus do APMS (antes ponto morto superior). Você teria alguma teoria/experiência sobre isto? Obrigado.

    ResponderExcluir
  8. Bom dia! o que faço para realizar leituras de frequências maiores, ex: 5MHz ? Parabéns pelo projeto!.

    ResponderExcluir
  9. Passei a comunicação pra serial no LCD e funcionou bem, porém, quando zera a leitura o valor deveria ficar 0Hz, fica 0Hzz, ou seja, o "Hz" desloca mas não apaga a última casa, tentei fixar o "Hz" mais afastado e o contador não zera quando aterro, fica sempre travado o valor na última casa, 02 Hz, 09 Hz.
    Como soluciono isso ? tentei usar um lcd.clear (); no fina da instrução mas aí o display não mostra nada.

    ResponderExcluir
    Respostas
    1. Insira alguns espaços depois de "z". Vai ficar assim: lcd.print("Hz ");

      Excluir
    2. Perfeito, funcionou certinho, obrigado.
      Aproveitando, se eu quisesse a leitura mínima em 2 digitos, 02Hz, 05Hz, 00Hz, como poderia implementar isso ?

      Excluir
    3. Voce teria que imprimir os digitos separadamente. Exemplo:
      lcd.print( ( freq / 10 ) % 10 ); //imprime o digito da dezena.
      lcd.print( freq % 10 ); //imprime o digito da unidade.
      lcd.print( "Hz" );

      Excluir
    4. Valeu Tiago, funcionou tudo, com estas duas modificações ficou exatamente como eu queria.
      Muito obrigado pela ajuda.

      Excluir
  10. Olá,
    Eu estou utilizando esta programação para leitura da frequência da rede elétrica, eu obtive exito nisso sem nenhum problema, mas estou enfrentando outros problemas e preciso de ajuda de vocês...

    Estou fazendo meu TCC que além da captura da freq. da rede elétrica, também preciso capturar outros dados como Tensão, Potencias, Corrente, FP...

    O meu problema é o seguinte, rodando a minha linguagem para obtenção de Tensão, Potencias, Corrente, FP, sozinhos, ele funciona normal...

    Rodando em outro programa separado somente essa linguagem para freq., também funciona normal, mas quando tento incorporar essa linguagem de freq. dentro da minha linguagem atual, para a obtenção de todos os dados juntos, a frequência não funciona!

    Alguém pode me ajudar POR FAVOR, estou desesperado!

    Obrigado.

    ResponderExcluir
  11. medir rpm atraves do cabo de vela
    O cabo de vela geralmente trabalha com 75Hz.
    O Arduino não vai queimar ?

    ResponderExcluir
  12. como fazer a parte eletronica,transformar 127/220v para 5v ,dá para fazer só com resistores ou precisamos de uma fonte?.
    Obrigado.

    ResponderExcluir

Postagens Relacionadas!!