You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将树莓派INA219采集Python代码移植到Arduino UNO运行

Arduino UNO 移植INA219采集功能实现方案

前置准备

  • 打开Arduino IDE的库管理器,搜索安装Adafruit INA219库,安装时确认同步安装依赖的Adafruit BusIO、Adafruit Unified Sensor库即可。
  • 确认硬件接线:Arduino UNO与INA219通过I2C连接,引脚对应关系如下:
    • INA219 VCC → Arduino 3.3V/5V(根据模块标称支持电压选择,绝大多数模块兼容5V输入)
    • INA219 GND → Arduino GND
    • INA219 SDA → Arduino A4
    • INA219 SCL → Arduino A5

说明:Arduino UNO无内置文件系统,默认通过串口输出标准CSV格式数据,连接电脑打开串口监视器即可获取数据,直接复制保存即为可用的CSV文件;若需要脱机存储,可外接SD卡模块扩展存储能力。

移植代码

代码逻辑完全对齐原树莓派Python版本:0.1Ω分流电阻配置、10Hz采样频率、采集字段完全一致(总线电压、总线电流、功率、分流电压、采样频率),上电自动输出CSV表头。

#include <Wire.h>
#include <Adafruit_INA219.h>

#define SHUNT_OHMS 0.1  // 与原Python代码分流电阻参数一致
Adafruit_INA219 ina219;

const unsigned long sampleInterval = 100; // 10Hz采样对应100ms间隔
unsigned long lastSampleTick = 0;

void setup() {
  Serial.begin(115200);
  while (!Serial) delay(10); // 等待USB串口连接就绪

  // 初始化INA219,接线错误时输出提示并停机
  if (!ina219.begin()) {
    Serial.println("INA219 init failed, check wiring");
    while (1) delay(1000);
  }
  // 配置32V/2A量程,与原Python库默认配置对齐
  ina219.setCalibration_32V_2A();

  // 输出CSV表头,字段与原Python代码完全一致
  Serial.println("Bus Voltage,Bus Current,Power,Shunt Voltage,Frequency");
}

void loop() {
  unsigned long currentTick = millis();
  if (currentTick - lastSampleTick >= sampleInterval) {
    lastSampleTick = currentTick;
    unsigned long computeStart = micros();

    // 读取传感器数据,单位与原Python库保持统一
    float busVoltage = ina219.getBusVoltage_V();       // 总线电压,单位V
    float shuntVoltage = ina219.getShuntVoltage_mV()/1000.0; // 分流电压,单位V
    float busCurrent = ina219.getCurrent_mA()/1000.0;  // 总线电流,单位A
    float power = ina219.getPower_mW()/1000.0;         // 功率,单位W

    unsigned long computeCost = micros() - computeStart;
    float sampleFreq = 1000000.0 / computeCost;

    // 按CSV格式输出单行数据
    Serial.print(busVoltage, 3);
    Serial.print(",");
    Serial.print(busCurrent, 3);
    Serial.print(",");
    Serial.print(power, 3);
    Serial.print(",");
    Serial.print(shuntVoltage, 6);
    Serial.print(",");
    Serial.println(sampleFreq, 2);
  }
}

使用方法

  • 将上述代码粘贴到Arduino IDE,开发板选择Arduino UNO,选择设备对应的串口号后点击上传。
  • 上传完成后打开串口监视器,波特率设置为115200,行结束符选择换行,即可看到持续输出的CSV格式数据。
  • 需要保存数据时,全选串口输出的内容复制到新建文本文件,将文件后缀改为.csv即可,文件格式与原树莓派生成的CSV完全兼容,可直接用Excel、pandas等工具读取分析。

调参说明

  • 若你的INA219模块实际量程不是32V/2A,可将代码中setCalibration_32V_2A()替换为库支持的其他量程配置:setCalibration_32V_1A(32V/1A)、setCalibration_16V_400mA(16V/400mA)。
  • 若采样数值存在固定偏差,确认模块上的分流电阻实际阻值,修改代码开头SHUNT_OHMS的定义后重新校准即可。
  • 若需要调整采样频率,修改sampleInterval的数值即可,单位为毫秒,例如设置为50即为20Hz采样。

内容的提问来源于stack exchange,提问作者ZSupreme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 16:33:15