这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 功率监测与控制系统DIY活动过程帖

共1条 1/1 1 跳转至

功率监测与控制系统DIY活动过程帖

菜鸟
2025-06-04 17:09:33     打赏

Arduino开发环境搭建

1. 打开ArduinoIDE。点击 “文件” 菜单,然后点击 “首选项”。

2025-05-28-21-57-35.png

2. “首选项” 对话框将打开,然后将以下链接添加到 “其它开发板管理器地址”字段, 并点击 “确定”: https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json

3. 点击 “工具” 菜单,然后点击 “开发板 > 开发板管理器” 或使用左侧栏带下划线的图标。

4. 在搜索栏输入 stm32 选择 “STM32 MCU based boards”,并点击安装。我这里的环境已经安装好了 2.9.0版本,而最新版本为 2.10.1 此处显示的是更新,如果没有安装过,则会显示最新版本,旁边按钮字样为 安装。

2025-05-28-22-02-09.png


基础任务1:使用单片机定时器实现1s翻转LED验证开发板时钟晶振是否正确;

搭建好开发环境之后,就可以使用 Arduino 进行愉快地玩耍了,按照基础任务1的要求,先来点个灯吧!


代码实现

/**
 * 任务1:使用单片机定时器实现1s翻转LED验证开发板时钟晶振是否正确;
 */
void task1() {
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT); // 设置LED引脚为输出

  while(1) {
    Serial.println(millis()); // 打印当前执行毫秒数值
    digitalToggle(LED_BUILTIN); // 翻转LED
    delay(1000); // 延时1秒
  }
}


效果展示

2025-05-30_11-03-37.gif


基础任务2:实现OLED屏幕显示信息;

硬件准备

NUCLEO-F411RE 开发板 1 块

Grove - 0.96英寸黄蓝双色OLED显示屏 1 个

面包板 1 块

杜邦线 若干

Grove - 0.96英寸黄蓝双色OLED显示屏 默认情况下是通过 IIC 连接,按照如下图所示,连接到开发板即可。

面包板接线图_bb.png


代码实现

#include <Wire.h>
#include <U8g2lib.h>
static U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);   // All Boards without Reset of the Display
/**
 * 任务2:实现OLED屏幕显示信息;
 */
void task2() {
  Serial.begin(115200);
  delay(1000); // 延时一秒后初始化OLED屏
  // U8g2 初始化
  while(!u8g2.begin()) {
    Serial.println(F("SSD1306 allocation failed"));
    delay(2000); // 不要继续,永远循环下去
  }
  u8g2.enableUTF8Print(); // 启用UTF8
  u8g2.setFont(u8g2_font_unifont_t_chinese2); // 设置字体,支持中文
  Serial.println("OLED init finished.");
  while(1) {
    u8g2.firstPage();
    do {
      u8g2.setCursor(2, 15);
      u8g2.print("Hello EEPW!");
      u8g2.setCursor(2, 32);
      u8g2.print("你好 EEPW!");
      u8g2.setCursor(2, 48);
      u8g2.printf("millis: %d", millis());
    } while(u8g2.nextPage());
    delay(1000);
  }
}


效果展示

2025-05-30_11-05-26.gif


基础任务3:使用开发板实现对INA219的负载测量5V,12V电压电流并显示在OLED。

硬件准备

NUCLEO-F411RE 开发板 1 块

Grove - 0.96英寸黄蓝双色OLED显示屏 1 个

Gravity I2C数字功率计模块 1个

面包板 1 块

杜邦线 若干

2025-05-28-22-30-13.png

Gravity I2C数字功率计 也是通过 IIC 连接到开发板,在基础任务2的基础上,参考上图的功率测量负载连接方案增加 Gravity I2C数字功率计 的连接。按照如下图所示,连接到开发板即可。

面包板接线图_bb2.png


代码实现

#include <Wire.h>
#include <U8g2lib.h>
#include <DFRobot_INA219.h>
// OLED 显示屏定义
static U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);   // All Boards without Reset of the Display
// INA219
static DFRobot_INA219_IIC     ina219(&Wire, INA219_I2C_ADDRESS4);
// 测量结果
static float busVoltage = 0.0;      // 总线电压
static float shuntVoltage = 0.0;    // 分线电压
static float current = 0.0;         // 电流
static float power = 0.0;           // 功率
/**
 * 任务3:使用开发板实现对INA219的负载测量5V,12V电压电流并显示在OLED。
 */
void task3() {
  Serial.begin(115200);
  delay(1000); // 延时一秒后继续初始化
  // INA219 初始化
  while(ina219.begin() != true) {
    Serial.println("INA219 begin faild");
    delay(2000); // 不要继续,永远循环下去
  }
  // U8g2 初始化
  while(!u8g2.begin()) {
    Serial.println(F("SSD1306 allocation failed"));
    delay(2000); // 不要继续,永远循环下去
  }
  u8g2.enableUTF8Print(); // 启用UTF8
  u8g2.setFont(u8g2_font_unifont_t_chinese3); // 设置字体,支持中文
  Serial.println("OLED init finished.");
  while(1) {
    // 读取 INA219 数据
    busVoltage = ina219.getBusVoltage_V();
    shuntVoltage = ina219.getShuntVoltage_mV();
    current = ina219.getCurrent_mA();
    power = ina219.getPower_mW();
    // OLED 显示当前电压电流,以及功率信息。
    u8g2.firstPage();
    do {
      u8g2.setCursor(5, 14);
      u8g2.print("  电压电流表");
      u8g2.setCursor(2, 31);
      u8g2.print("电压: ");
      u8g2.print(busVoltage);
      u8g2.print(" V");
      u8g2.setCursor(2, 48);
      u8g2.print("电流: ");
      u8g2.print(current);
      u8g2.print(" mA");
      u8g2.setCursor(2, 63);
      u8g2.print("Power: ");
      u8g2.print(power);
      u8g2.print(" mW");
    } while(u8g2.nextPage());
    // 串口打印
    Serial.print("BusVoltage:   ");
    Serial.print(busVoltage, 2);
    Serial.println("V");
    Serial.print("ShuntVoltage: ");
    Serial.print(shuntVoltage, 3);
    Serial.println("mV");
    Serial.print("Current:      ");
    Serial.print(current, 1);
    Serial.println("mA");
    Serial.print("Power:        ");
    Serial.print(power, 1);
    Serial.println("mW");
    Serial.println("");
    delay(1000);
  }
}


效果展示

2025-06-04_15-33-21.gif





关键词: 功率     监测     控制系统     活动     过程     开发     u8g2.    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]