Go Down

Topic: ESR meter with Arduino (Read 135710 times) previous topic - next topic


I have upgraded existing code with previous modifications to expand measurement range up to 50 Ohms and to make this ESR meter autoranging in the range of 0-50 Ohms which should be more than enough range for the ESR measurement. The code is included in the attachment and on the schematic you have to add one more PNP transistor with the same configuration as Q1 but with the 1k resistor instead of 100R (1k is for upper range measurement). Pinout in my sketch version is different in order to match my board so you will have to modify it according to your board settings.
Any comments/suggestions are welcome...


Apr 23, 2013, 11:12 am Last Edit: May 11, 2013, 11:44 am by Baravantan Reason: 1
Hello everyone, and thank you for sharing your work.
I built the ESR meter using an Arduino UNO and a lcd display CDL4162-HD44780.
My version can work in two ways: with Arduino UNO connected to the board face down, and in standalone mode.
In the first case, only the bottom side of the pcb is required (single side)
I also added a function that allows me, by selecting the right value of the DUT, to know immediately if it is good or not.
BUT there is a problem: If I measure a 1ohm resistor, the reading is quite correct, but if I measure 150mohm or 75mOhm, the reading is totally wrong.   :smiley-eek:
Is there anyone who can help me? Thank you. :~


20 days, 10 downloads, 0 replies   :smiley-zipper:


You need to post the code you are using and the schematic of your hardware before someone can help you.


... 10 downloads of the attached .zip file with code, images, schematics and PCB design...


:smiley-sleep: ...is there anyone who has successfully measured low ohmic values??, for example 0.1 or 0.01; appropriate values ??to an ESR meter;)


Hi Baravantan,
To answer your last question, yes, I have measured what seem to be good values in the milliOhm range. I have a 100mOhm precision resistor and have measured many capacitors with what appears to be reasonable and repeatable results.
I took a quick look at your code and all appears to be OK with the actual calcESR routine. I didn't look at your PCB layout so I can't say more than that in my proto-board build I used the schematic exactly as in the original post EXCEPT that I used a 10microFarad cap and a 110Ohm resistor in the pulse circuit (47micro and 100 Ohm in the original).
I did notice in testing that the whole thing is very sensitive to the declared supply voltage and the value of this resistor. And I noticed in your code the following...

double Vin_LO = 4700; // milliVolts
uint16_t Rs_LO = 110; // Ohms

Are you actually using a 110 Ohm resistor? And is your supply voltage really only 4,7 V? Unless these (and the Vref voltage) are well defined, the calculation can be very non-linear.
Anyway, hope this helps.


Hi, Totoro, and thanks for your help!
These days I've done some tests, including the correction of the parameters that you have shown me, but without solving the problem.

double vRef = 1.079; // Volts
double Vin_LO = 4980; // milliVolts
uint16_t Rs_LO = 99.8; // Ohms

All values ??measured with a €40 multimeter (what I have)

Considered that your ESR Meter works, surely my problem isn't in the code.
I think there is a lot of work waiting for me...

Thank you again.


May 17, 2013, 05:52 am Last Edit: May 17, 2013, 05:55 am by cepc Reason: 1

Sorry, I am just a breadboard/point-to-point/proto-board type. My main need for an ESR meter is to troubleshoot old audio gear and test equipment.

Hello  Totoro , I am having a hard time wrapping my head around which pins you hooked up to the 7 segment displays, can you possibly draw something quick showing pinouts?   i dont want to use a lcd display,  im going to make a smd version of the board and will post the results after i have a working prototype.

thanks so much!


May 17, 2013, 06:50 am Last Edit: May 17, 2013, 07:45 am by cepc Reason: 1
ohh crap.    :smiley-red:

i need to take it easy on the drinking.. i think

let me guess:  these are the common anodes (or cathode depending on display.) going to a transistor for each.

#define PIN_DIG_0 10 // least significant digit
#define PIN_DIG_1 11
#define PIN_DIG_2 12
#define PIN_DIG_3 13

these go to their respective pins on display..

#define PIN_SEG_DP 8
#define PIN_SEG_A 3
#define PIN_SEG_B 2
#define PIN_SEG_C 9
#define PIN_SEG_D 6
#define PIN_SEG_E 7
#define PIN_SEG_F 4
#define PIN_SEG_G 5

or do i need to stop drinking???  i think i can keep drinking.  ]:D


May 22, 2013, 05:19 pm Last Edit: May 22, 2013, 09:35 pm by garballz Reason: 1
Here is a shield I built for my Uno. It has a resolution of 0.02 Ohms. I'm currently finishing the video for the code demo/explanation on how it works.


Next I plan to simplify it a bit more and add a basic function generator on a shield designed for the Due.

I would like to thank Tim and his Visual Micro project. Using his add-in to program and debug the Arduino software made it easy.



Did anyone work on getting this to work with nF range capacitors, or to a resolution of mOhms or better?

What sort of time window is it taking to do the measurement for you guys?


is it  possible in this scheme to measure the capacity of the capacitor?
If so, by what formula?


Dec 06, 2013, 05:02 am Last Edit: Dec 06, 2013, 05:03 am by spyromania Reason: 1
Can anyone tell me if this ESR can be used to test in circuit caps?




I built it as originally designed but to challenge myself I used all SMD components. The .1uF cap (0603) was a challenge as were the TO-23 cased transistors but it works just fine.

I used an Arduino MEGA 2560 and had to modify the code a bit. For those who have the MEGA and are using a standard 44780 2 line X 16 char LCD do the following:

LiquidCrystal lcd(6, 5,  10, 11, 12, 13);

comment out the setLEDpin lines - they dont work with this display
also   analogReference(INTERNAL1V1);  //setting vRef to internal reference 1.1V

INTERNAL won't work on the MEGA - you must add the specifier "1V1" to the parameter.

This was indeed a fun project. I learned alot from building it. Thanks for sharing. Look forward to your next one.

Go Up