/* Title: LC_Meter_1.ino a true Arduino sketch program file Author: Florin Dragan florind@mas.utcluj.ro Date Created: 01-12-2019 Last Modified: 11-11-2020 Purpose: This is an example how to to measure an inductance or capacitance by measuring LC resonance frequency. The circuit measure inductance L, When capacitance is known and viceversa. The LC circuit is connected by a diode to digital pin 3, for charging by using a little time pulse (~100us). The damped sinusoidal transient signal is converted to a rectangular one by using an analog comparator which outputs it to Arduino's digital input D2. Frequency is measured using pulseIn() function. Print the value using the serial port and LCD1602 display. */ #include LiquidCrystal lcd(A5, A4, A3, A2, A1, A0); #define charge 3 #define freqIn 2 #define mode 10 #define Samples 16 double frequency, capacitance, inductance; boolean BitFlag = 1; void setup() { Serial.begin(9600); 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(); delay(2000); } void loop() { for(int i=0;i 0.1) frequency+= 1.E6 / (2 * Pulse); delay(20); } frequency/=Samples; Serial.print("frequency:"); Serial.print( frequency ); Serial.print(" Hz "); lcd.setCursor(0, 0); lcd.print("freq:"); lcd.print( frequency ); lcd.print(" Hz "); if (BitFlag) { inductance = 1.E-3; capacitance = ((1. / (inductance * frequency * frequency * 4.*3.14159 * 3.14159)) * 1.E9); if((int)capacitance < 0) capacitance=0; Serial.print("Capacitance:"); Serial.print( capacitance,6); Serial.println(" uF "); 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; Serial.print("Ind:"); if(inductance>=1000) { Serial.print( inductance/1000 ); Serial.println(" mH"); } else { Serial.print( inductance ); Serial.println(" uH"); } 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) { BitFlag = !BitFlag; delay(1000); while (digitalRead(mode) == LOW); } delay(50); }