A DIY Micro-Ohm Meter with Arduino (vollrathd's design & concept)

rsaeon

Patron
Pursuant (corporate speak, ha) to this helpful video:


It became apparent that I needed empirical verification for the connections I would be making in my LiFePO4 projects, unexpected resistances result in heat build-up, and can become disastrous if unchecked — the prismatic cells I'm using are capable of 5C discharge, that's over 500A!

From: https://www.omnicalculator.com/physics/joule-heating

Screen Shot 2024-07-03 at 5.25.26 AM.png

That's (potential) heat generated by a 500A fault over a 1 milli-ohm conductor every minute. Essentially, you would want your conductors to be in the 10's of micro-ohms for safety.

But most commercially available meters look terrible and are priced beyond what I'm able to spend:

Screen Shot 2024-07-03 at 5.14.15 AM.png

So the moment had finally arrived:

maybe even finally learn about arduino

And I'm entirely impressed with how intuitive and rewarding the process of building and coding Arduino is! It cannot be stated enough. I'm almost convinced that if we had these technologies back when I was learning about electronics (mid-teenage years in the 90s), we'd be building space stations today. It's just incredible.

Most tutorials have you blink a led as your first Arduino project but I skipped right into making a prototype of this Micro-Ohm Meter and I loved every moment of it!

Starting with depopulating a popular prototyping board for Arduino, to serve as the carrier PCB for an Arduino Nano:

photo_2024-07-03 05.12.11.jpeg

Attached headers and a trimpot to adjust contrast for a LCD:

photo_2024-07-03 05.12.12.jpeg

Also seen above is a 0.1uF decoupling capacitor in the bottom left of the proto pcb.

First test with the JHD 8x1 LCD, naturally:

photo_2024-07-03 05.12.13.jpeg

Vollrathd's design incorporated a very cool but tiny OLED — I wanted a larger, easier to read display.

Power is with a 1.2Ah 18650 cell, with a TP4056 module serving as a charger & low voltage disconnect:

photo_2024-07-03 05.12.15.jpeg

Vollrathd's design has a 2S pack for a higher voltage that'll push >1A through the conductor-under-test. A single cell like this pushes about half that much (through a 5 Ohm power resistor):

photo_2024-07-03 05.12.16.jpeg

A little boost converter provides 5V for the Arduino and the 18-bit Analogue to Digital Converter, a MCP3422. The other components are two zeners, three resistors and a capacitor for the input protection of the ADC. There are two more resistors arranged as a voltage divider for the Arduino to measure and display the battery voltage (details in a later post).

photo_2024-07-03 05.12.22.jpeg

There are only two ways to put this chip on this adapter PCB, so it's not a surprise that I got it wrong (white mark on the top right indicates pin 1, but pin 1 is in the bottom left).

In other news, I seem to have lost my soldering mojo, this is definitely not my best work:

photo_2024-07-03 05.12.18.jpeg

The premise of this meter is that it measures the voltage drop across a known 0.1 Ohm 1% resistor (ideally it should be 0.1%) and derives current through Ohm's law (i = v / r):

photo_2024-07-03 05.12.19.jpeg

And then it uses that current value, along with the ADC reading of the voltage drop across the conductor-under-test, to derive the resistance of the conductor-under-test.

It's refreshingly simple and clever.

I'm still waiting on the kelvin probes to be delivered (they allow four-terminal sensing: https://en.wikipedia.org/wiki/Four-terminal_sensing) but here's a quick test:

photo_2024-07-03 05.12.23.jpeg

That's 0.05 milli-ohms or ~50 micro-ohms across the bus bar that was installed in the Muscle Grid battery. Cross-sectional area of it would be 20 sq mm (20 x 1mm).

Compare that with this 40 sq mm bus bar (20 x 2mm):

photo_2024-07-03 05.12.30.jpeg

Working as expected, the meter shows about half the resistance at 0.02 milli-ohms or ~20 micro-ohms. Schematic and code to follow.

edit: comparing to the calculated resistance of a somewhat ideal conductor without holes, the uncalibrated reading is within 5 micro-ohms:

https://www.omnicalculator.com/physics/wire-resistance

Screen Shot 2024-07-03 at 6.37.17 AM.png



Vollrathd's original schematic and code are here: https://www.rcgroups.com/forums/showthread.php?3647559-MicroOhmmeter-Project-Revisited/page10
 
Last edited:
Great, you picked up real quick, fast learner I must say.
And I'm entirely impressed with how intuitive and rewarding the process of building and coding Arduino is! It cannot be stated enough. I'm almost convinced that if we had these technologies back when I was learning about electronics (mid-teenage years in the 90s), we'd be building space stations today. It's just incredible.
You just scratched the surface, wait till you fully see the possibilities.

the voltage drop across a known 0.1 Ohm 1% resistor (ideally it should be 0.1%)
Finding a 0.1Ω 0.1% resistor is hard and also very expensive, however you can get 1Ω 0.1% resistor and if you put 10 of those in parallel you get 0.1Ω resistance with 0.1% tolerance.

This is the part number RT1206BRD071RL, 10 of those will cost you around ₹600.

The second benefit of this if you pass 1A through that single 0.1Ω resistor, that resistor will dissipate 100mW as it will heat up, which will make it's 0.1Ω value drift with temperature. But with multiple 1Ω resistors in parallel, 100mW will spread among them, so each resistor will dissipate only 10mW and they won't drift as much.
 
IGreat, you picked up real quick, fast learner I must say.

You just scratched the surface, wait till you fully see the possibilities.


Finding a 0.1Ω 0.1% resistor is hard and also very expensive, however you can get 1Ω 0.1% resistor and if you put 10 of those in parallel you get 0.1Ω resistance with 0.1% tolerance.

This is the part number RT1206BRD071RL, 10 of those will cost you around ₹600.

The second benefit of this if you pass 1A through that single 0.1Ω resistor, that resistor will dissipate 100mW as it will heat up, which will make it's 0.1Ω value drift with temperature. But with multiple 1Ω resistors in parallel, 100mW will spread among them, so each resistor will dissipate only 10mW and they won't drift as much.
The tolerance will be 10 * 0.1% not 0.1%.
 
I did a few quick searches and found that tolerance of resistors, whether in parallel or series, will be the same if they're all the same (it gets complicated if you're mixing different tolerances).

It makes sense, if you have two 100 ohm resistors that have hypothetically 50% tolerance, then you'll have effective resistance between 25 ohms (two 50 ohm resistors in parallel) and 75 Ohms (two 150 ohms in parallel) — that range of 25 to 75 is basically a 50 ohm resistor with 50% tolerance.

The power dissipation will be distributed equally with multiple parallel resistors, so there's that plus point.

This micro-ohm meter should be used for a few seconds at a time to prevent any drift. Maybe I can wire in a relay somewhere to cut off current after 5 seconds but have the display remain active. Then I'll need a button to resume measurement — or just reset the Arduino.

I found 0.1% 750mW four-point current sense resistors under Rs 70 on element14. Just need to to get a GST number and buy 1000 of them, ha.

You just scratched the surface, wait till you fully see the possibilities.

I am SO excited for this. The original nano died during botched programming and a few digital pins on the other nano died because I was swapping connections while the nano was powered on. I looked it up and these digital pins don't like being driven directly to ground or 5V when they've already been assigned as output pins (sounds obvious in hindsight). I haven't had any issues other than that.
 
The tolerance will be 10 * 0.1% not 0.1%.
I think chat-gpt is correct.

1720105628419.png


I found 0.1% 750mW four-point current sense resistors under Rs 70 on element14. Just need to to get a GST number and buy 1000 of them, ha.
No you don't need GST, the trick is to use semikart.com, when you enter the part number there, they will show all the vendors like digikey, element14, mouser offering that part, and most likely some will be offering it with pricing of single piece, so you don't have to buy 1000, semikart will take care of import duty charges, gst, and domestic shipping charges.

I am SO excited for this. The original nano died during botched programming and a few digital pins on the other nano died because I was swapping connections while the nano was powered on. I looked it up and these digital pins don't like being driven directly to ground or 5V when they've already been assigned as output pins (sounds obvious in hindsight). I haven't had any issues other than that.
As long as mistakes are happening, you are learning. When the pin is set as input, you can connect it to any voltage between 0-5V but when the pin is set as output, then it can only be set in 2 states, HIGH or LOW.
  • HIGH state pin when directly connected to GND 0V is a dead short.
  • LOW state pin when directly connected to 5V is a dead short.
When unsure, just put 1k resistor on the pin which is set as OUTPUT pin, then you can connect it to GND or 5V or to some other 5V tolerant chip through the resistor without worrying, the resistor will limit current to 5mA, which won't damage anything most of the time.

Happy Tinkering. Sooner or later somewhere on your bench, magic smoke will release, it's okay, it's part of the process. ;)
 
I
I think chat-gpt is correct.

View attachment 200658


No you don't need GST, the trick is to use semikart.com, when you enter the part number there, they will show all the vendors like digikey, element14, mouser offering that part, and most likely some will be offering it with pricing of single piece, so you don't have to buy 1000, semikart will take care of import duty charges, gst, and domestic shipping charges.


As long as mistakes are happening, you are learning. When the pin is set as input, you can connect it to any voltage between 0-5V but when the pin is set as output, then it can only be set in 2 states, HIGH or LOW.
  • HIGH state pin when directly connected to GND 0V is a dead short.
  • LOW state pin when directly connected to 5V is a dead short.
When unsure, just put 1k resistor on the pin which is set as OUTPUT pin, then you can connect it to GND or 5V or to some other 5V tolerant chip through the resistor without worrying, the resistor will limit current to 5mA, which won't damage anything most of the time.

Happy Tinkering. Sooner or later somewhere on your bench, magic smoke will release, it's okay, it's part of the process.;)
I did the correct calculation but didn't divide by the new value to get the percentage. You & chat GPT are correct.
 

Attachments

  • IMG_0404.jpeg
    IMG_0404.jpeg
    151.2 KB · Views: 6
Back
Top