使用Arduino验证网格分析法 | AI生成和翻译
使用 Arduino 验证网孔分析法需要构建一个包含多个回路的电路,先通过理论计算应用网孔分析法预测电流值,再使用 Arduino 测量电阻两端电压并反推实际电流值进行比对。网孔分析法是电路理论中的一种方法,通过为每个独立回路设定网孔电流,并利用基尔霍夫电压定律(KVL)建立方程组。Arduino 可帮助测量实际电路行为以验证理论计算。
下面将指导您设计一个简单的双网孔电路,手动进行网孔分析,并通过 Arduino 测量电压值来验证结果(由于 Arduino 无法直接测量电流,我们将使用欧姆定律 \( I = V/R \) 进行换算)。
步骤一:设计双网孔电路
电路描述
- 元件清单:
- Arduino(如 Uno 型号)
- 3个电阻(例如 R1=330Ω、R2=470Ω、R3=680Ω)
- 面包板和跳线
- 电源(Arduino 的 5V 引脚)
- 接线方式:
- 将 5V 连接至节点 A
- 从节点 A 连接 R1 至节点 B
- 从节点 B 连接 R2 至节点 C(GND)
- 从节点 A 连接 R3 至节点 C(GND)
- 拓扑结构:
- 网孔1:5V → R1 → R2 → GND(左侧回路)
- 网孔2:5V → R3 → GND(右侧回路)
- R1 仅属于网孔1,R3 仅属于网孔2,R2 为两个网孔共享
- 测量点:
- A0:R1 两端电压(节点 A 至节点 B)
- A1:R2 两端电压(节点 B 至节点 C)
- A2:R3 两端电压(节点 A 至节点 C)
示意图
5V ---- 节点 A ---- R1 ---- 节点 B ---- R2 ---- 节点 C (GND)
| |
+----------- R3 -----------+
步骤二:理论网孔分析计算
定义网孔电流
- \( I_1 \):网孔1 电流(顺时针流经 5V、R1、R2、GND)
- \( I_2 \):网孔2 电流(顺时针流经 5V、R3、GND)
对每个网孔应用 KVL
- 网孔1 (5V → R1 → R2 → GND):
- 电压源:+5V(沿回路方向从 GND 至 5V)
- R1 压降:\( -R1 \cdot I_1 \)
- R2 压降:\( -R2 \cdot (I_1 - I_2) \)(流经 R2 的电流为 \( I_1 - I_2 \))
- 方程:\( 5 - R1 \cdot I_1 - R2 \cdot (I_1 - I_2) = 0 \)
- 网孔2 (5V → R3 → GND):
- 电压源:+5V
- R3 压降:\( -R3 \cdot I_2 \)
- R2 反向压降:\( +R2 \cdot (I_1 - I_2) \)(流经 R2 的电流为 \( I_1 - I_2 \))
- 方程:\( 5 - R3 \cdot I_2 + R2 \cdot (I_1 - I_2) = 0 \)
代入数值
- R1=330Ω, R2=470Ω, R3=680Ω
- 网孔1:\( 5 - 330 I_1 - 470 (I_1 - I_2) = 0 \)
- 简化:\( 5 - 330 I_1 - 470 I_1 + 470 I_2 = 0 \)
- \( 5 - 800 I_1 + 470 I_2 = 0 \) → (1)
- 网孔2:\( 5 - 680 I_2 + 470 (I_1 - I_2) = 0 \)
- 简化:\( 5 + 470 I_1 - 680 I_2 - 470 I_2 = 0 \)
- \( 5 + 470 I_1 - 1150 I_2 = 0 \) → (2)
解方程组
- 由(1)得:\( 5 = 800 I_1 - 470 I_2 \) → \( I_1 = \frac{5 + 470 I_2}{800} \)
- 代入(2):\( 5 + 470 \left( \frac{5 + 470 I_2}{800} \right) - 1150 I_2 = 0 \)
- 两边乘以800消去分母:
- \( 4000 + 470 (5 + 470 I_2) - 1150 \cdot 800 I_2 = 0 \)
- \( 4000 + 2350 + 220900 I_2 - 920000 I_2 = 0 \)
- \( 6350 - 699100 I_2 = 0 \)
- \( I_2 = \frac{6350}{699100} \approx 0.00908 \, \text{A} = 9.08 \, \text{mA} \)
- 回代求解:\( I_1 = \frac{5 + 470 \cdot 0.00908}{800} = \frac{5 + 4.2676}{800} \approx 0.01158 \, \text{A} = 11.58 \, \text{mA} \)
计算电压值
- \( V_{R1} = R1 \cdot I_1 = 330 \cdot 0.01158 \approx 3.82 \, \text{V} \)
- \( V_{R2} = R2 \cdot (I_1 - I_2) = 470 \cdot (0.01158 - 0.00908) \approx 1.18 \, \text{V} \)
- \( V_{R3} = R3 \cdot I_2 = 680 \cdot 0.00908 \approx 6.17 \, \text{V} \)(受电源限制实际为5V)
步骤三:使用 Arduino 验证
Arduino 代码
void setup() {
Serial.begin(9600); // 启动串口通信
}
void loop() {
// 读取电压值(0-1023对应0-5V)
int sensorValueR1 = analogRead(A0); // R1两端
int sensorValueR2 = analogRead(A1); // R2两端
int sensorValueR3 = analogRead(A2); // R3两端
// 转换为电压值
float VR1 = sensorValueR1 * (5.0 / 1023.0);
float VR2 = sensorValueR2 * (5.0 / 1023.0);
float VR3 = sensorValueR3 * (5.0 / 1023.0);
// 电阻值
float R1 = 330.0;
float R2 = 470.0;
float R3 = 680.0;
// 计算电流值(I = V/R)
float I1 = VR1 / R1; // 流经R1的网孔1电流
float I2 = VR3 / R3; // 流经R3的网孔2电流
float IR2 = VR2 / R2; // 流经R2的电流(I1 - I2)
// 输出结果
Serial.println("测量值:");
Serial.print("VR1 (V): "); Serial.println(VR1);
Serial.print("VR2 (V): "); Serial.println(VR2);
Serial.print("VR3 (V): "); Serial.println(VR3);
Serial.print("I1 (mA): "); Serial.println(I1 * 1000);
Serial.print("I2 (mA): "); Serial.println(I2 * 1000);
Serial.print("I1 - I2 (mA): "); Serial.println((I1 - I2) * 1000);
Serial.println("---");
delay(2000); // 等待2秒
}
接线说明
- 连接 A0 至节点 A(5V)与节点 B 之间
- 连接 A1 至节点 B 与节点 C(GND)之间
- 连接 A2 至节点 A(5V)与节点 C(GND)之间
- 确保所有接地端与 Arduino GND 共地
步骤四:结果比对
理论值 vs 测量值
- 理论计算值(网孔分析):
- \( I_1 \approx 11.58 \, \text{mA} \)
- \( I_2 \approx 9.08 \, \text{mA} \)
- \( I_1 - I_2 \approx 2.50 \, \text{mA} \)
- \( V_{R1} \approx 3.82 \, \text{V} \), \( V_{R2} \approx 1.18 \, \text{V} \), \( V_{R3} \approx 5 \, \text{V} \)(限幅值)
- 实测值: 打开串口监视器(波特率9600),将 Arduino 输出值与理论值对比
验证要点
- 检查是否满足 \( V_{R1} + V_{R2} \approx 5V \)(网孔1回路)
- 检查是否满足 \( V_{R3} \approx 5V \)(网孔2回路)
- 确认 \( I_1 - I_2 \) 与流经 R2 的电流匹配
技巧与故障排除
- 精度说明: Arduino ADC 分辨率约 4.9mV,电阻容差可能导致微小偏差。需精确验证时可使用万用表
- 量程调整: 若电压超过 5V(本电路 unlikely),需使用分压电路进行缩放
- 功能扩展: 可增加网孔或元件提升复杂度,但需注意引脚数量限制(A0–A5)
本实验通过对比理论电流与实测值,验证了网孔分析法的正确性。如需调整电路、调试程序或扩展多网孔设计,欢迎进一步交流!