- UID
- 373967
- 帖子
- 8867
- 主題
- 2609
- 精華
- 0
- 積分
- 1000
- 楓幣
- 15
- 威望
- 977
- 存款
- 34822
- 贊助金額
- 0
- 推廣
- 0
- GP
- 1205
- 閱讀權限
- 70
- 在線時間
- 455 小時
- 註冊時間
- 2023-1-12
- 最後登入
- 2024-11-22
|
製作一個智能電壓電流表,需要以下材料:
HK32F030M開發板 x 1
OLED顯示屏 x 1
INA219電流電壓感測器模塊 x 1
連接線若干
以下是 HK32F030M 的基本資訊:
主頻:72 MHz
FLASH:64 KB
RAM:8 KB
INA219模塊是一個高精度、高速度的電流電壓感測器模塊,可以感測電流、電壓等參數。 OLED顯示屏則可以用來顯示感測到的電流、電壓等數值。
以下是連接線的連接方式:
INA219的VCC接開發板的3.3V
INA219的GND接開發板的GND
INA219的SDA接開發板的PB9
INA219的SCL接開發板的PB8
OLED顯示屏的VCC接開發板的3.3V
OLED顯示屏的GND接開發板的GND
OLED顯示屏的SDA接開發板的PA10
OLED顯示屏的SCL接開發板的PA9
以下是程式碼的基本架構:
#include "hk32f030m.h"
#include "hk32_i2c.h"
#include "hk32f030m_gpio.h"
#include "INA219.h"
#include "OLED.h"
#define OLED_ADDR 0x78
#define INA_ADDR 0x80
初始化函數
void System_Configuration(void)
{
// 初始化 I2C 接口
I2C_Configuration(I2C1, 100000);
I2C_Cmd(I2C1, ENABLE);
// 初始化 INA219
INA219_Init(INA_ADDR);
// 初始化 OLED
OLED_Init(OLED_ADDR);
OLED_Clear();
}
主函數
int main(void)
{
uint16_t voltage, current;
System_Configuration();
while (1)
{
// 讀取電壓和電流值
voltage = INA219_GetBusVoltage_V(INA_ADDR);
current = INA219_GetCurrent_mA(INA_ADDR);
// 在 OLED 上顯示電壓和電流值
OLED_Set_Pos(0, 0);
OLED_PutString("Voltage: ");
OLED_PutInt(voltage);
OLED_PutString(" V");
OLED_Set_Pos(0, 1);
OLED_PutString("Current: ");
OLED_PutInt(current);
OLED_PutString(" mA");
// 延遲 500ms
Delay(500);
}
}
INA219庫文件
arduino
Copy code
#include "hk32_i2c.h"
#define CONFIG_ADDR 0x00
#define SHUNT_VOLTAGE_ADDR 0x01
#define BUS_VOLTAGE_ADDR 0x02
下面是HK32F030M智能電壓電流表的零件清單、連接圖和示例代碼。
零件清單
HK32F030M開發板 x1
OLED屏幕 x1
ACS712電流傳感器 x1
10K電位器 x1
杜邦線若干
連接圖
ACS712傳感器的VCC引腳連接到3.3V電源,GND引腳連接到地,OUT引腳連接到開發板的PB0引腳。
電位器的中心引腳連接到開發板的PA0引腳,兩側引腳連接到3.3V電源和地。
OLED屏幕則通過I2C總線連接到開發板的PB10和PB11引腳。
lua
Copy code
+-----------------------+
| HK32F030M開發板 |
| |
| |
| +----------+ OLED屏幕
| | |
| | +-------|------+
| | | | |
| | | | |
ACS712 | PB0 <----|--+ | |
電流傳感器 | | | |
| 3.3V -----|----------+ |
| | |
| | |
10K電位器 | PA0 <----|----------------+
| |
| 3.3V -----+
| |
| GND <-----+
+------------+
示例代碼
#include "hk32f030m.h"
#include "ssd1306.h"
#include "acs712.h"
int main(void)
{
float voltage, current;
char buf[32];
// 初始化OLED屏幕
ssd1306_init();
ssd1306_clear();
// 初始化ACS712傳感器
acs712_init();
while (1) {
// 讀取電壓和電流值
voltage = (float)hk_adc_read(HK_ADC_CH1) * 3.3 / 4096;
current = acs712_read();
// 在OLED屏幕上顯示電壓和電流值
sprintf(buf, "V=%.2fV", voltage);
ssd1306_display_string(0, 0, buf);
sprintf(buf, "I=%.2fA", current);
ssd1306_display_string(0, 1, buf);
ssd1306_refresh();
hk_delay_ms(1000); // 等待1秒鐘
}
}
以上示例代碼使用了HK32F030M開發板上的ADC模塊讀取電壓值,同時使用ACS712傳感器讀取電流值,並在OLED屏幕上顯示。
代碼中還包含了SSD1306 OLED屏幕和ACS712傳感器的驅動庫,需要在項目中添加對應的文件。 |
|