Introduction: Arduino Frequency Counter

About: iam a B.E Electronics and Communication Engineer. I have great interest on electronics.

To find out the frequency of any signal we need to use CRO. We can also use frequency meter.But both of them are costly.Using Arduino Frequency Counter we can easily measure the frequency of various signals.This Circuit can be easily made with very less cost when compare to CRO and Frequency Meter.

Step 1: Components Required

  • Arduino Uno.
  • 3 Pin LCD Interface Board.
  • 16 x 2 LCD
  • IC 74LS14

I have used 3 Pin LCD interface Board to Connect LCD easily with 3Pins. If you don't have 3 pin interface board you can easily make it.Click on the bellow link to know how to make 3 pin interface board.

Interfacing LCD With Arduino Using Only 3 Pins

Step 2: Operation of IC 74LS14

IC74LS14 is a schmitt trigger.In order to convert any signal into square wave schmitt trigger is used.

Advantages of Using this IC 74LS14

  • It is a 5volt IC
  • It's Output current is below 40mA
  • It converts any signal into square wave
  • The time period of output square wave is same as input signal,So the frequency of input signal to be measured does not change when converting it to square wave.
  • Arduino Digital and Analog Pins only withstand 5Volt and 40mA current.Any thing out of this Range damage your Arduino. Since ic 74LS14 uses 5volt and gives the output current less than 40mA.It is safe to use this IC74LS14.

Step 3: Schematic Diagram

You can use any Oscillator circuit to measure frequency.I have used CD4047 which is a oscillator used for demo in this Schematic.

Step 4: Formula Used to Calculate Frequency

In CRO we use f=1/T formula to calculate frequency.Here also the same concept is used to calculate frequency

where

T is the time period of one cycle of signal in microseconds(us)

In the program of Arduino Frequency counter we used f=1000000/pulseTotal.

Where

pulse Total is nothing but, a Time period of Signal(T).

microseconds(us)=10^-6

See below how the formula is given asf=1000000/pulseTotal for Arduino Frequency Counter

f=1/T in microseconds,so the formula is given as f=1/Tx(us)

microseconds(us)=10^-6,So the formula is written as f=1/Tx10^-6.

If we Take micro seconds(us) to numerator it becomes 10^6.It is equal to the value that is 1000000

So finally the formula for arduino frequency counter is given as f=1000000/T.

since we are converting signals into square wave.The square wave contains Ton and Toff period,

So total time period of one cycle of signal is given as

pulseTotal=Ton+Toff

The below Code is used to calculate Ton and Toff.Ton=pulseHigh.Toff=pulseLow

pulseHigh = pulseIn(pulsePin, HIGH);

pulseLow = pulseIn(pulsePin, LOW);

Step 5: Program Code(if You Use 3 Pin Interface Board for LCD)

#include <Wire.h>

#include <LiquidCrystal_SR.h>

LiquidCrystal_SR lcd(6, 5, 9);

const int pulsePin = 12; // Input signal connected to Pin 12 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("Instructables");

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);

}

Step 6: Program Code (if You Use LCD Without 3Pin Interface Board)

#include <LiquidCrystal.h>

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

const int pulsePin = 12; // Input signal connected to Pin 12 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("Instructables");

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);

}

Step 7: Video