

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.