Using an Arduino as an autoranging ohmmeter

Looking for some suggestions as I begin a new project. I’m hoping to use the Arduino as an autoranging ohm meter. The range that I’ll be looking to measure are about 0.1 to 1,000,000 Mega Ohms. I’m using the Arduino to manage a new wood drying kiln that I’m building, and by driving pins into the wood and measuring resistance, I should be able to calculate the moisture content. As the wood dries, it changes resistance dramatically, which is the reason I need such a wide range.

I’d really prefer to do it with the minimum number of pins used. I’ve got some of the digital pins in use for an LCD screen, and other digital pins will be used to run a data logging shield, so I’m hoping to use the analog pins for resistance measurement. Any thoughts on how to proceed are appreciated.

1,000,000 Mega Ohms.

If you are not going to be serious then let's all go home.

Electrical measurements of solid matter moisture content is a widely used method, of course with some variations depending on the application. Besides contact based measurements, capacitive or radio wave (e.g. microwave) absorption measurements are in use.

To avoid the pins suffering too much from electrolysis it would need to reverse the polarity for each measurement, in fact most technical moisture or conductivity measurements are using AC voltage. But the polarity reversal method should hopefully work. To cover the intended wide resistance range you'll need some kind of automatic range switching.

I wonder of you already verified the working of your method with a digital multimeter. The input circuits of commercial resistance meters can be a template for your design, I think.

Lower resistance values are typically measured by using a constant current source and measuring the voltage across the unknown to determine its resistance. Very high resistance values are often measured by apply a known voltage and measuring the small current.

Note that measuring resistances as high as 100G? requires very careful design to minimize leakage currents in the insulators. Teflon wire and standoffs are often used, since Teflon has the highest resistance of common insulation materials. Also guard rings and guard shielding is likely required such as discussed here.

Here is an example of a high resistance measuring system. If you google "high resistance measurment cricuits" you should find other information on this.

This reference states that the resistance of wood for two pins 30mm apart is 4800M? (4.8G?) for wood with 8% moisture. If you want to measure a lower moisture level than that, you would need to be able to measure a higher resistance.

I can give you some help on the design but more in the way of suggestions and critique of what you are designing, rather than a complete design.

Unfortunately I am not able to take on any new projects. I can help you by critiquing your design and offering suggestions through this forum, but that's as far as I can go.

The simple approach is to measure the voltage across some high value resistors in series with the measurement value. I did a quick check at Digikey and they sell resistors up to 5G? in value. The voltage could be amplified by a FET type op amp which has a very high input impedance (such as this), configured as a non-inverting amp.

Depending upon the accuracy you want, you will likely need to switch in different value series resistors and/or change the op amp gain to cover the full dynamic range. The switching would need to be done with very high impedance switches, such as small reed relays. The resistors, relays, and op amp input pin should probably be connected to Teflon standoffs to minimize leakage current.

The measurement process would be to apply the supply voltage to the series combination of the wood terminals and the sense resistor. You then read the sense resistor voltage value and the supply voltage with an A/D converter (could be an A/D built into the Arduino), and calculate the wood resistance from that. If the measured voltage is too high or too low, then 5V would need to change the sense resistor value and/or op amp gain until the reading is within the desired range.