Contador de frecuencia o Frecuencímetro con Arduino

El contador de frecuencia, como su nombre indica, es un dispositivo o componente electrónico, que se usa para medir la frecuencia de una señal. En el caso de una señal electrónica repetitiva, un contador de frecuencia mide el número de pulsos en esa señal.

Generalmente usamos un osciloscopio para representar la señal, calcular el período de tiempo de la señal y finalmente convertirla para calcular la frecuencia de la señal. Pero los osciloscopios son muy caros y no todos pueden permitirse uno.


Por lo tanto, se puede construir un contador de frecuencia digital que puede ser útil para medir la frecuencia de una señal de reloj, por ejemplo.

En este proyecto, un contador de frecuencia digital basado en Arduino está diseñado para medir la frecuencia de una señal entrante.

Tabla de contenido

  • Diagrama de circuito
  • Componentes
  • Descripción del componente
  • Diseño del circuito
  • Circuito Arduino
  • Parte generadora de señal
  • Principio de funcionamiento del proyecto
  • Aplicaciones
  • Imágenes del proyecto
  • Código de proyecto

Diagrama de circuito

Diagrama del circuito del contador de frecuencia Arduino

Figura Diagrama del circuito del contador de frecuencia Arduino

Componentes

Arduino Part

  • Arduino UNO
  • Pantalla LCD 16 X 2
  • ProtoBoard
  • Cables de conexión
  • Fuente de alimentación (adaptador o batería)

Parte del generador de señal

  • NE555 IC Temporizador
  • 10 KΩ Potenciómetro X 2
  • 100 nF Capacitor (Código: 104)
  • 1 μF/16V Capacitor electrolítico
  • Fuente de alimentación de 5V (12V no es adecuado ya que podría dañar la placa Arduino).
  • Conexión de cables
  • Placa protoboard

Descripción de los Componentes 

Arduino UNO: el microcontrolador ATmega 328P basado en Arduino UNO es la parte principal del proyecto. Captura el período de tiempo de la señal entrante y calcula la frecuencia de la señal.

 IC Temporizador 555: En este proyecto, el  IC 555 se usa como generador de pulsos, es decir, funciona en modo astable.

 LCD 16 X 2: El módulo LCD 16 × 2 se utiliza para mostrar la información clave como los mensajes de bienvenida (o cualquier mensaje personalizado) y la frecuencia calculada de la señal.

Diseño del Circuito

El diseño del frecuenciometro usando Arduino UNO se puede dividir en dos partes: la parte Arduino, donde el procesamiento de la información de la señal tiene lugar y la parte del generador de señales, donde se genera la señal cuya frecuencia se va a medir.

 Circuito Arduino

La parte del circuito Arduino consiste en una placa Arduino UNO y una Pantalla LCD 16 X 2. Los pines 1 y 2 de la pantalla LCD (Vss y Vdd) están conectados a tierra y a 5 V del suministro respectivamente. El pin 3 (Vee), que se usa para ajustar el contraste de la pantalla, está conectado a un potenciómetro.

Los pines 4 y 6 (RS y E) de la pantalla LCD están conectados a pines de E/S digitales 2 y 3 de Arduino. El pin 5 (RW) de la pantalla LCD está conectado a tierra.

Los pines del 11 al 14 (es decir D4 a D7), los pines de datos de la pantalla LCD están conectados a los pines de E/S digitales del 4 al 7 de Arduino. Los pines 15 y 16 de la pantalla LCD son pines de suministro de los LED de retroiluminación y están conectados a tierra y 5 V (el pin 16 a 5 V a través de una resistencia de 1 kΩ), respectivamente.

diagrama del frecuenciometro con arduino
diagrama del frecuenciometro con arduino

Parte del generador de señal

Un Temporizador 555 se utiliza para generar los pulso en este proyecto. Por lo tanto, se opera en modo de operación Astable. Las conexiones para este modo son las siguientes.

Los pines 4 y 8 (Reset y Vcc) están conectados a 5V Supply. El pin 1 (GND) está conectado a tierra. Los pines 2 y 6 (Trigger y Threshold) están en cortocircuito.

Un Potenciómetro de 10KΩ está conectado entre la fuente de alimentación y el Pin 7 (Descarga). El  otro terminal del potenciómetro está conectado al Pin 7.

De manera similar, otro Potenciómetro de 10 KΩ está conectado entre los pines 7 y 6. Esta vez, el terminal del potenciómetro está conectado al Pin 6.

Un condensador de 100nF está conectado entre el pin 6 y la tierra. Al seleccionar esta resistencia, la frecuencia de la señal de salida, que puede tomarse del Pin 3 (Salida), estará en el rango de 480 Hz a 48 KHz.

Opcionalmente, puede usarse un condensador de 1 μF. conectado, con lo cual la frecuencia de la señal generada estará en el rango de 50 Hz a 4.8 KHz.

generador de senal del frecuenciometro con arduino
generador de senal del frecuenciometro con arduino

Nota: la fuente de alimentación al circuito del generador de señal debe ser de solo 5V. Esto se debe a que la tensión del pulso generado será la misma que la tensión de entrada y la placa Arduino UNO (o el microcontrolador ATmega 328p, para ser mas precisos) puede tolerar un máximo de 5.5V en sus pines de entrada.

Principio de funcionamiento del proyecto

El objetivo del proyecto es diseñar un circuito de contador de frecuencia digital simple utilizando Arduino UNO y IC 555. El funcionamiento del proyecto es muy simple y se explica a continuacion.

Como se mencionó anteriormente, el IC temporizador 555  está configurado para operar en modo Astable. Por lo tanto, la salida del 555 (o más bien el circuito generador de señal) es un pulso con frecuencia variable (variada usando el potenciómetro). Este pulso se da como señal de entrada al Arduino UNO en uno de sus pines de E/S digitales.

En el Arduino, hacemos uso de una función llamada «pulseIn ();» La función pulseIn puede ser usada para leer el pulso BAJO o ALTO en un pin de E/S digital y devuelve la longitud del pulso en microsegundos.

Por ejemplo, si la función pulseIn se usa para leer un pulso HIGH en un pin, espera que el pin se ponga ALTO. Una vez que el pin se pone ALTO, inicia el temporizador y se ejecuta hasta que el pin se pone en BAJO. La duración (en microsegundos) de este pulso ALTO es devuelta.

En nuestro proyecto, estamos calculando la duración del pulso ALTO y el pulso BAJO y al sumarlos, obtenemos el período de la entrada señal. La inversa de este valor proporciona la frecuencia de la señal que se muestra en la pantalla LCD.

Nota:

  • Como se mencionó anteriormente, el rango de la frecuencia de la señal generada por el nivel 555 puede cambiarse cambiando el valor del condensador.
  • Arduino solo puede detectar pulsos entrantes, es decir, la señal entrante puede ser cuadrada o rectangular. No todas las señales de prueba pueden estar en forma de pulsos. Por lo tanto, podemos usar un disparador Schmitt para convertir cualquier entrada en un pulso.
  • También tenga en cuenta que la salida del CI de disparo Schmitt (74LS14) es una señal invertida de la señal de entrada.

Aplicaciones

  • Se diseña un contador de frecuencia simple, con componentes simples, que se puede usar para medir la frecuencia de un pulso sin necesidad de un osciloscopio.
  • Se pueden medir múltiples rangos de frecuencias seleccionando componentes adecuados.
  • Las frecuencias de todos los tipos de señales de prueba se pueden calcular agregando un Disparador Schmitt entre la señal generada y Arduino.

Imágenes del proyecto

Contador de frecuencia Arduino Contador de frecuencia Arduino  Contador de frecuencia Arduino Contador de frecuencia Arduino  Arduino Contador de frecuencia Arduino Contador de frecuencia  Arduino Frequency Counter Arduino Frequency Counter

Código de proyecto

#include <LiquidCrystal.h>

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

const int pulsePin = 8; // Input signal connected to Pin 8 of Arduino

int pulseHigh; // Integer variable to capture High time of the incoming pulse
int pulseLow; // Integer variable to capture Low time of the incoming pulse
float pulseTotal; // Float variable to capture Total time of the incoming pulse
float frequency; // Calculated Frequency

void setup()
{
pinMode(pulsePin,INPUT);
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print(«Electronica Lugo»);
lcd.setCursor(0,1);
lcd.print(» Freq Counter «);
delay(5000);
}
void loop()
{
lcd.setCursor(0,0);
lcd.print(«Frequency is «);
lcd.setCursor(0,1);
lcd.print(» «);

pulseHigh = pulseIn(pulsePin,HIGH);
pulseLow = pulseIn(pulsePin,LOW);

pulseTotal = pulseHigh + pulseLow; // Time period of the pulse in microseconds
frequency=1000000/pulseTotal; // Frequency in Hertz (Hz)

lcd.setCursor(0,1);
lcd.print(frequency);
lcd.print(» Hz»);
delay(500);
}