

The Adafruit INA237 is a high-precision power monitor designed to measure DC current, voltage, and power with exceptional accuracy. Featuring a 16-bit resolution, it can handle up to 85V and 10A, making it suitable for a wide range of applications. The INA237 communicates via the I2C protocol, allowing seamless integration with microcontrollers and development boards such as the Arduino UNO.








The Adafruit INA237 is a robust and versatile component. Below are its key technical details:
| Parameter | Value |
|---|---|
| Operating Voltage | 3.3V to 5V (logic level) |
| Measurable Voltage Range | 0V to 85V |
| Measurable Current Range | Up to 10A (with appropriate shunt resistor) |
| Resolution | 16-bit |
| Communication Protocol | I2C |
| Default I2C Address | 0x40 (configurable) |
| Operating Temperature | -40°C to +125°C |
The Adafruit INA237 breakout board has the following pin layout:
| Pin Name | Description |
|---|---|
| VIN+ | Positive input for current sensing (connect to the high side of the load). |
| VIN- | Negative input for current sensing (connect to the low side of the load). |
| VBUS | Voltage sense input (connect to the voltage source being monitored). |
| GND | Ground reference for the circuit. |
| SCL | I2C clock line (connect to the microcontroller's SCL pin). |
| SDA | I2C data line (connect to the microcontroller's SDA pin). |
| ALERT | Configurable alert pin for overcurrent, overvoltage, or other conditions. |
| 3V3 | 3.3V power supply input (optional, for logic level shifting). |
| VIN | Main power supply input (3.3V to 5V). |
Below is an example of how to use the Adafruit INA237 with an Arduino UNO to measure voltage, current, and power:
#include <Wire.h>
#include <Adafruit_INA237.h>
// Create an INA237 object
Adafruit_INA237 ina237;
void setup() {
Serial.begin(115200);
while (!Serial) {
delay(10); // Wait for Serial Monitor to open
}
// Initialize I2C communication
if (!ina237.begin()) {
Serial.println("Failed to find INA237 chip!");
while (1) {
delay(10); // Halt if initialization fails
}
}
Serial.println("INA237 initialized successfully!");
// Configure the INA237
ina237.setShuntResistorValue(0.01); // Set shunt resistor value in ohms
ina237.setAveragingMode(INA237_AVERAGE_16); // Set averaging mode
ina237.setBusVoltageRange(INA237_BUS_VOLTAGE_RANGE_85V); // Set voltage range
}
void loop() {
// Read voltage, current, and power
float busVoltage = ina237.readBusVoltage(); // Voltage in volts
float current = ina237.readCurrent(); // Current in amps
float power = ina237.readPower(); // Power in watts
// Print the measurements to the Serial Monitor
Serial.print("Bus Voltage: ");
Serial.print(busVoltage);
Serial.println(" V");
Serial.print("Current: ");
Serial.print(current);
Serial.println(" A");
Serial.print("Power: ");
Serial.print(power);
Serial.println(" W");
delay(1000); // Wait 1 second before the next reading
}
INA237 Not Detected on I2C Bus:
Incorrect Voltage or Current Readings:
Alert Pin Not Functioning:
Q: Can the INA237 measure negative currents?
A: No, the INA237 is designed for unidirectional current measurement. Ensure the current flows in the correct direction through the shunt resistor.
Q: What is the maximum sampling rate of the INA237?
A: The INA237 can achieve a maximum sampling rate of approximately 1.1kHz, depending on the averaging mode and configuration.
Q: Can I use the INA237 with a 3.3V microcontroller?
A: Yes, the INA237 is compatible with both 3.3V and 5V logic levels. Ensure the VIN pin is powered accordingly.
Q: How do I change the I2C address of the INA237?
A: The I2C address can be changed by modifying the solder jumpers on the breakout board. Refer to the Adafruit documentation for detailed instructions.