Amps to voltage conversion is the physical process of translating a current signal into a proportional voltage signal using a known resistance, enabling current-based measurements to be read by voltage-only analog-to-digital converters (ADCs). People commonly confuse this with a simple mathematical unit conversion—like converting inches to centimeters—but in electronics, you cannot just "convert" amps to volts on paper. You must force the current through a physical component to generate a measurable voltage drop. What this changes in a real circuit is the interface boundary: it allows a high-current 4-20mA industrial pressure transmitter or a 50A battery inverter feed to safely communicate with the fragile 3.3V GPIO pins of an ESP32 or Arduino.
The Core Concept: You Cannot "Convert" Without a Physical Component
At the heart of every amps to voltage conversion is Ohm’s Law: V = I × R. If you want to measure current (I) using a microcontroller that only reads voltage (V), you must introduce a known resistance (R) into the circuit. This component is called a shunt resistor.
For high-frequency or ultra-low-current applications, a simple resistor isn't enough. You will need a transimpedance amplifier—an active circuit that converts input current to output voltage, typically using an operational amplifier (op-amp) in an inverting configuration with a feedback resistor. This is mandatory when measuring microamp-level currents from photodiodes, where the parasitic capacitance of a standalone shunt resistor would destroy your signal bandwidth.
Worked Example: 4-20mA Industrial Sensor to ESP32 ADC
Let’s look at a real-world scenario. You have an industrial water pressure sensor that outputs a 4-20mA current loop (4mA = 0 PSI, 20mA = 100 PSI). You want to read this with an ESP32 DevKit v1, which has a 12-bit ADC referenced to 3.3V.
The Problem: The ESP32 ADC cannot read current directly, and its practical linear range is roughly 0.1V to 3.1V (the extremes of the ESP32 ADC suffer from severe non-linearity and noise).
The Math:
We need a voltage span that fits inside the 0.1V to 3.1V sweet spot. Let's target a maximum of 3.0V at 20mA.
R = V / I
R = 3.0V / 0.020A = 150 Ω
Verification:
At 4mA (0 PSI): 0.004A × 150Ω = 0.6V (Well above the 0.1V non-linear floor).
At 20mA (100 PSI): 0.020A × 150Ω = 3.0V (Safely below the 3.3V absolute max).
Where You Meet This in Practice
You will encounter the need for amps to voltage conversion in three primary DIY and prosumer scenarios:
- Industrial 4-20mA Loops: As shown above, industrial sensors (flow, pressure, temperature) use current loops because current remains constant over long wire runs, unlike voltage which suffers from wire resistance drops. You must convert this back to voltage at the microcontroller end.
- Battery Management Systems (BMS) & Coulomb Counting: To calculate the State of Charge (SoC) of a LiFePO4 battery bank, you must integrate current over time. This requires measuring the bidirectional current flowing in and out of the battery bank via a low-side or high-side shunt.
- Optical Sensors and Spectrometry: Photodiodes generate current proportional to light intensity, not voltage. Converting this nanoamp or microamp signal to a readable 0-3.3V range requires a transimpedance amplifier circuit.
Decision Tree: Choosing Your Amps-to-Voltage Hardware
Do not default to a bare shunt resistor for every project. Use this decision matrix to select the exact hardware module or IC for your workbench.
| Application Scenario | Current Range | Isolation Needed? | Best Hardware Approach | Concrete Part / Module Pick |
|---|---|---|---|---|
| DC Battery Monitor / Solar Charge tracking | 0 to 3.2A | No (Common Ground) | I2C Shunt Monitor IC | Texas Instruments INA219 (Adafruit breakout #904) |
| AC Mains Appliance Monitoring | 0 to 20A AC | Yes (Galvanic) | Hall-Effect Sensor | Allegro ACS712ELCTR-20A (SparkFun breakout SEN-08882) |
| 4-20mA Industrial Sensor Interfacing | 4mA to 20mA | No | Precision Shunt Resistor | Vishay Dale 150Ω 0.01% (or standard 250Ω for 1-5V PLCs) |
| High-Side DC Motor / Inverter Feed | 0 to 100A | No (High Common-Mode) | High-Side Shunt Monitor + External Shunt | TI INA226 paired with a 2mΩ 50W chassis-mount shunt |
| Photodiode / Low-Light Optical Sensing | 1nA to 10µA | No | Transimpedance Amplifier (Op-Amp) | TI OPA380 or Analog Devices LTC6268 |
The Default Pick for Makers: If you are simply trying to measure the DC current draw of a 12V or 5V project (like a servo motor or LED strip) up to 3.2A, stop overthinking it and buy an INA219 breakout board. It handles the amps-to-voltage conversion internally using a 0.1Ω shunt, amplifies the microvolt-level drop, and hands you a calibrated 12-bit digital value over I2C. You avoid the ESP32 ADC noise floor entirely.
Common Pitfalls and Hardware Selection Rules
When designing or wiring your own current-to-voltage conversion circuits, these are the failure modes that will fry your board or ruin your data.
1. Shunt Power Dissipation (The Melted Resistor)
Every resistor has a power rating. The power dissipated as heat is calculated by P = I² × R.
If you try to measure a 20A solar array feed using a 0.1Ω shunt resistor, the math is unforgiving: 20² × 0.1 = 40 Watts. A standard 1/4W through-hole resistor will instantly vaporize. For high currents, you must use a dedicated chassis-mount aluminum-housed resistor (like the Vishay FVT200 series) bolted to a heatsink, or drop the resistance to 0.001Ω (1mΩ) and use a high-gain instrumentation amplifier.
2. Ground Loops in 4-20mA Loops
When wiring a 4-20mA sensor to an ESP32 via a shunt resistor, the shunt must be placed on the low side (between the sensor's negative terminal and circuit ground). If you place the shunt on the high side, the voltage at the ESP32's ADC pin will be riding on top of the power supply voltage, instantly exceeding the 3.3V absolute maximum rating and destroying the silicon. Always verify the sensor's datasheet to ensure it is a "sourcing" (PNP) or "sinking" (NPN) device before wiring the shunt.
3. Ignoring ADC Input Impedance
If you use a high-value shunt resistor (e.g., 10kΩ for a low-current signal) and feed it directly into a microcontroller ADC, the ADC's internal sampling capacitor will draw a brief surge of current to charge itself. Because your shunt resistance is high, this surge causes a momentary voltage sag, resulting in erratic, non-linear readings. According to Espressif's ESP32 ADC documentation, the source impedance should ideally be kept below 1kΩ. If your conversion requires a higher resistance, you must buffer the signal with a unity-gain op-amp before it hits the microcontroller pin.
Quick Reference FAQ
Q: Can I use a multimeter's internal shunt to convert amps to voltage for my Arduino?
A: No. Multimeter shunts are tied to internal multiplexers and lack accessible breakout nodes. Use a dedicated breakout module like the ACS712 or INA219.
Q: Why do industrial systems use 4-20mA instead of 0-10V?
A: Current loops are immune to voltage drop over long wire runs. Furthermore, a "live zero" at 4mA allows the PLC to detect a broken wire (0mA) versus a genuine minimum reading (4mA), a fault-detection mechanism impossible with a 0-10V system.
Q: Does the INA219 measure voltage as well as current?
A: Yes. The Texas Instruments INA219 datasheet confirms it contains a separate 12-bit ADC channel dedicated to measuring the bus voltage (up to 26V), allowing you to calculate real-time power (Watts) in your code by multiplying the bus voltage register by the current register.






