看到这个标题肯定有人会问:好好的multisim、 proteus之类的专门电路仿真软件不用,非要写一个简陋的python程序来弄,是不是精神失常了。实际上,我也不知道为什么要这么干,前两篇文章是我实际项目中的一些探索,但是这个纯属突发奇想。

 第一步:装matplotlib库

pip install matplotlib

 第二步:复制并运行代码

        我设计了一个计算了"串联分压"电路中的总电流以及每个电阻上的电压降的程序,如下。

import matplotlib.pyplot as plt
import matplotlib.patches as patches

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

def simulate_series_circuit(V, resistances):
    """模拟一个给定电压(V)和一系列电阻值的串联电路。"""
    # 计算总电阻
    R_total = sum(resistances)
    # 根据欧姆定律计算电流: V = I * R
    I = V / R_total if R_total > 0 else 0
    # 计算每个电阻上的电压降
    voltage_drops = [I * R for R in resistances]

    return I, voltage_drops


def draw_circuit(resistances, voltage_drops, current):
    """绘制电路图并显示电压降和电流。"""
    fig, ax = plt.subplots()

    # 创建电池图例
    battery = patches.Rectangle((1, -0.25), 0.2, 0.5, edgecolor='black', facecolor='grey', label='电源')
    ax.add_patch(battery)
    plt.text(1.1, 0, '电源', horizontalalignment='center', verticalalignment='center')

    # 绘制电阻并显示电压
    for i, (R, V) in enumerate(zip(resistances, voltage_drops)):
        resistor_x = 2 + i * 1.5
        resistor = patches.Rectangle((resistor_x, -0.25), 1, 0.5, edgecolor='black', facecolor='orange',
                                     label=f'电阻 R{i + 1}' if i == 0 else "")
        ax.add_patch(resistor)
        plt.text(resistor_x + 0.5, 0, f'{V:.2f}V', horizontalalignment='center', verticalalignment='center')

    # 绘制导线
    plt.plot([1.2, 2], [0, 0], color='black', label='导线')
    for i in range(len(resistances) - 1):
        plt.plot([3 + i * 1.5, 3.5 + i * 1.5], [0, 0], color='black')
    plt.plot([2 + len(resistances) * 1.5, 3 + len(resistances) * 1.5], [0, 0], color='black')

    # 绘制从电路末端返回电池的线路
    plt.plot([3 + len(resistances) * 1.5, 3 + len(resistances) * 1.5, 1], [0, -0.25, -0.25], color='black')

    # 添加电流标签
    plt.text(1.5 + len(resistances) * 1.5, 0.3, f'电流 = {current:.2f}A', horizontalalignment='center',
             verticalalignment='center')

    # 设置限制并关闭坐标轴
    ax.set_xlim(0, 4 + len(resistances) * 1.5)
    ax.set_ylim(-1, 1)
    plt.axis('off')

    # 显示图例
    handles, labels = ax.get_legend_handles_labels()
    plt.legend(handles, labels, loc='upper right')

    plt.show()


# 输入参数
V = float(input("请输入电源电压 (伏特): "))
resistances = [float(x) for x in input("请输入电路中的电阻值 (欧姆),用空格分隔: ").split()]

# 运行仿真
current, voltage_drops = simulate_series_circuit(V, resistances)

# 绘制并显示电路
draw_circuit(resistances, voltage_drops, current)

第三步:输入总电压和每个电阻并观察运行结果

        在运行窗口输入总电压(例:220V),每个电阻(56Ω,78Ω,90Ω,100Ω)

Python打发无聊时光:3.实现简单电路的仿真-LMLPHP

        观察运行结果如下:

Python打发无聊时光:3.实现简单电路的仿真-LMLPHP

02-19 08:28