LC Meter using Arduino: Measuring Inductance and Frequency

Published  September 5, 2018   7
S Saddam
Author
LC Meter Using Arduino: Measuring Inductance and Frequency

All embedded lovers are familiar with multimeter which a great tool to measure voltage, current, resistance etc. A multimeter can measure them easily. But sometimes we need to measure inductance and capacitance which is not possible with a normal multimeter. There are some special multimeters that can measure inductance and capacitance but they are costly. We already built Frequency Meter, Capacitance Meter and Resistance meter using Arduino. So today we are going to make an Inductance LC Meter using Arduino. In this project, we will show the inductance and capacitance values along with the frequency over 16x2 LCD display. A push button is given in the circuit, to switch between capacitance and inductance display.

 

Components Required

  1. Arduino Uno
  2. 741 opamp IC
  3. 3v battery
  4. 100-ohm resistor
  5. Capacitors
  6. Inductors
  7. 1n4007 diode
  8. 10k resistor
  9. 10k pot
  10. Power supply
  11. Push button
  12. Breadboard or PCB
  13. Connecting wires

 

Components Required for LC Meter Using Arduino

 

Calculating Frequency and Inductance

In this project we are going to measure inductance and capacitance by using an LC circuit in parallel. This circuit is a like a ring or bell which start resonating at certain frequency. Whenever we apply a pulse, this LC circuit will start resonating and this resonance frequency is in form of analog (sinusoidal wave) so we need to convert it in squire wave. To do this, we apply this analog resonance frequency to opamp (741 in our case) that will convert it in squire wave (frequency) at 50% of the duty cycle. Now we measure the frequency by using Arduino and by using some mathematical calculation we can find the inductance or capacitance. We have used the given LC circuit frequency response formula.

f=1/(2*time)

where time is output of pulseIn() function

now we have LC circuit Frequency:

f=1/2*Pi* square root of (LC)

 

we can solve it to get inductance:

f2 = 1/ (4Pi2LC)
L= 1/ (4Pi2 f2C)
L = 1/(4* Pi * Pi * f * f * C)

 

As we already mentioned that our wave is sinusoidal wave so it has the same time period in both positive and negative amplitude. Its means the comparator will convert it into square wave having a 50% duty cycle. So that we can measure it by using pulseIn() function of Arduino. This function will give us a time period which can be easily converted into a frequency by inverting the time period. As pulseIn function measure only one pulse, so now to get correct frequency we have to multiply it by to 2. Now we have a frequency which can be converted into inductance by using the above formula.

Note: while measuring inductance (L1), capacitor (C1) value should be 0.1uF and while measuring capacitance (C1), inductor (L1) value should be 10mH.

 

Circuit Diagram and Explanation

In this LC Meter circuit diagram, we have used Arduino to control the project operation. In this, we have used an LC circuit. This LC circuit consists of an Inductor and a capacitor. To convert sinusoidal resonance frequency to digital or square wave we have used operational amplifier namely 741. Here we need to apply negative supply to op-amp to get accurate output frequency. So we have used a 3v battery connected in reverse polarity, means 741 negative pin is connected to battery negative terminal and positive pin of the battery is connected to the ground of the remaining circuit. For more clarification see the circuit diagram below.

Circuit Diagram for LC Meter Using Arduino

 

Here we have a push button to change the mode of operation whether we are measuring inductance or capacitance. A 16x2 LCD is used to show inductance or capacitance with the frequency of LC circuit. A 10k pot is used for controlling the brightness of the LCD. Circuit is powered with the help of Arduino 5v supply and we can power the Arduino by 5v using USB or 12v adaptor.

Circuit Hardware for LC Meter Using Arduino

 

LC Meter Using Arduino: Measuring Inductance and Frequency

 

Programming Explanation

The programming part of this LC Meter project is very easy. Complete Arduino code is given at the end of this article.

First we have to include library for LCD and declare some pins and macros.

#include<LiquidCrystal.h>
LiquidCrystal lcd(A5, A4, A3, A2, A1, A0);

#define serial

#define charge 3
#define freqIn 2
#define mode 10

#define Delay 15

double frequency, capacitance, inductance;

typedef struct
{
  int flag: 1;
}Flag;

Flag Bit;

 

After it, in setup function we have initialized LCD and Serial communication to show measured values over the LCD and serial monitor.

void setup()
{
#ifdef serial
  Serial.begin(9600);
#endif
  lcd.begin(16, 2);
  pinMode(freqIn, INPUT);
  pinMode(charge, OUTPUT);
  pinMode(mode, INPUT_PULLUP);
  lcd.print(" LC Meter Using ");
  lcd.setCursor(0, 1);
  lcd.print("     Arduino    ");
  delay(2000);
  lcd.clear();
  lcd.print("Circuit Digest");
  delay(2000);
}

 

Then in loop function, apply a pulse of a fixed time period to LC circuit that will charge the LC circuit. After removing pulse LC circuit starts resonating. Then we read its square wave conversion, coming from op-amp, by using pulseIn() function and convert that by multiplying by 2. Here we have taken some samples of this too. That’s how frequency is calculated:

void loop()
{
  for(int i=0;i<Delay;i++)
  {
    digitalWrite(charge, HIGH);
    delayMicroseconds(100);
    digitalWrite(charge, LOW);
    delayMicroseconds(50);
  double Pulse = pulseIn(freqIn, HIGH, 10000);
  if (Pulse > 0.1)
    frequency+= 1.E6 / (2 * Pulse);
    delay(20);
  }
  frequency/=Delay;
#ifdef serial
  Serial.print("frequency:");
  Serial.print( frequency );
  Serial.print(" Hz     ");
#endif

  lcd.setCursor(0, 0);
  lcd.print("freq:");
  lcd.print( frequency );
  lcd.print(" Hz      ");

 

After getting frequency value, we have converted them into inductance by using given piece of code

capacitance = 0.1E-6;
    inductance = (1. / (capacitance * frequency * frequency * 4.*3.14159 * 3.14159)) * 1.E6;
#ifdef serial
    Serial.print("Ind:");
    if(inductance>=1000)
    {
    Serial.print( inductance/1000 );
    Serial.println(" mH");
    }
    else
   {
    Serial.print( inductance );
    Serial.println(" uH");
  }
#endif

    lcd.setCursor(0, 1);
    lcd.print("Ind:");
    if(inductance>=1000)
    {
    lcd.print( inductance/1000 );
    lcd.print(" mH            ");
    }
    else
   {
    lcd.print( inductance );
    lcd.print(" uH              ");
  }
  }

 

And by using given code we calculated capacitance.

if (Bit.flag)
  {
    inductance = 1.E-3;
    capacitance = ((1. / (inductance * frequency * frequency * 4.*3.14159 * 3.14159)) * 1.E9);
    if((int)capacitance < 0)
    capacitance=0;
#ifdef serial
    Serial.print("Capacitance:");
    Serial.print( capacitance,6);
    Serial.println(" uF   ");
#endif
    lcd.setCursor(0, 1);
    lcd.print("Cap: ");
    if(capacitance > 47)
    {
      lcd.print( (capacitance/1000));
    lcd.print(" uF                 ");
    }
    else
    {
       lcd.print(capacitance);
       lcd.print(" nF                 ");
    }
  }

 

So this is how we calculated frequency, capacitance and Inductance using Arduino and displayed it on 16x2 LCD.

Code

#include<LiquidCrystal.h>
LiquidCrystal lcd(A5, A4, A3, A2, A1, A0);

#define serial

#define charge 3
#define freqIn 2
#define mode 10

#define Delay 15

double frequency, capacitance, inductance;

typedef struct
{
  int flag: 1;
}Flag;

Flag Bit;

void setup()
{
#ifdef serial
  Serial.begin(9600);
#endif
  lcd.begin(16, 2);
  pinMode(freqIn, INPUT);
  pinMode(charge, OUTPUT);
  pinMode(mode, INPUT_PULLUP);
  lcd.print(" LC Meter Using ");
  lcd.setCursor(0, 1);
  lcd.print("     Arduino    ");
  delay(2000);
  lcd.clear();
  lcd.print("Circuit Digest");
  delay(2000);
}

void loop()
{
  for(int i=0;i<Delay;i++)
  {
    digitalWrite(charge, HIGH);
    delayMicroseconds(100);
    digitalWrite(charge, LOW);
    delayMicroseconds(50);
  double Pulse = pulseIn(freqIn, HIGH, 10000);
  if (Pulse > 0.1)
    frequency+= 1.E6 / (2 * Pulse);
    delay(20);
  }
  frequency/=Delay;
#ifdef serial
  Serial.print("frequency:");
  Serial.print( frequency );
  Serial.print(" Hz     ");
#endif

  lcd.setCursor(0, 0);
  lcd.print("freq:");
  lcd.print( frequency );
  lcd.print(" Hz      ");

  if (Bit.flag)
  {
    inductance = 1.E-3;
    capacitance = ((1. / (inductance * frequency * frequency * 4.*3.14159 * 3.14159)) * 1.E9);
    if((int)capacitance < 0)
    capacitance=0;
#ifdef serial
    Serial.print("Capacitance:");
    Serial.print( capacitance,6);
    Serial.println(" uF   ");
#endif
    lcd.setCursor(0, 1);
    lcd.print("Cap: ");
    if(capacitance > 47)
    {
      lcd.print( (capacitance/1000));
    lcd.print(" uF                 ");
    }
    else
    {
       lcd.print(capacitance);
       lcd.print(" nF                 ");
    }
  }
  
  else
  {
    capacitance = 0.1E-6;
    inductance = (1. / (capacitance * frequency * frequency * 4.*3.14159 * 3.14159)) * 1.E6;
#ifdef serial
    Serial.print("Ind:");
    if(inductance>=1000)
    {
    Serial.print( inductance/1000 );
    Serial.println(" mH");
    }
    else
   {
    Serial.print( inductance );
    Serial.println(" uH");
  }
#endif

    lcd.setCursor(0, 1);
    lcd.print("Ind:");
    if(inductance>=1000)
    {
    lcd.print( inductance/1000 );
    lcd.print(" mH            ");
    }
    else
   {
    lcd.print( inductance );
    lcd.print(" uH              ");
  }
  }

  if (digitalRead(mode) == LOW)
  {
    Bit.flag = !Bit.flag;
    delay(1000);
    while (digitalRead(mode) == LOW);
  }
  delay(50);
}

Video

Have any question realated to this Article?

Ask Our Community Members

Comments

I am receiving just the same as above :
frequency:0.00 Hz     Capacitance:inf uF

or

frequency:0.00 Hz     inductance : inf mH
dissregarding what i do - it's never changes. Did someone actually succeed to make this works ?!

Seems like this circuit actually never worked, and the project itself is a troll project.
Please prove me wrong.