当前位置:   article > 正文

Python打发无聊时光:4.实现简单电路的仿真_python实现电路

python实现电路

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

 第一步:装matplotlib库

pip install matplotlib

 第二步:复制并运行代码

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

  1. import matplotlib.pyplot as plt
  2. import matplotlib.patches as patches
  3. plt.rcParams['font.sans-serif'] = ['SimHei']
  4. plt.rcParams['axes.unicode_minus'] = False
  5. def simulate_series_circuit(V, resistances):
  6. """模拟一个给定电压(V)和一系列电阻值的串联电路。"""
  7. # 计算总电阻
  8. R_total = sum(resistances)
  9. # 根据欧姆定律计算电流: V = I * R
  10. I = V / R_total if R_total > 0 else 0
  11. # 计算每个电阻上的电压降
  12. voltage_drops = [I * R for R in resistances]
  13. return I, voltage_drops
  14. def draw_circuit(resistances, voltage_drops, current):
  15. """绘制电路图并显示电压降和电流。"""
  16. fig, ax = plt.subplots()
  17. # 创建电池图例
  18. battery = patches.Rectangle((1, -0.25), 0.2, 0.5, edgecolor='black', facecolor='grey', label='电源')
  19. ax.add_patch(battery)
  20. plt.text(1.1, 0, '电源', horizontalalignment='center', verticalalignment='center')
  21. # 绘制电阻并显示电压
  22. for i, (R, V) in enumerate(zip(resistances, voltage_drops)):
  23. resistor_x = 2 + i * 1.5
  24. resistor = patches.Rectangle((resistor_x, -0.25), 1, 0.5, edgecolor='black', facecolor='orange',
  25. label=f'电阻 R{i + 1}' if i == 0 else "")
  26. ax.add_patch(resistor)
  27. plt.text(resistor_x + 0.5, 0, f'{V:.2f}V', horizontalalignment='center', verticalalignment='center')
  28. # 绘制导线
  29. plt.plot([1.2, 2], [0, 0], color='black', label='导线')
  30. for i in range(len(resistances) - 1):
  31. plt.plot([3 + i * 1.5, 3.5 + i * 1.5], [0, 0], color='black')
  32. plt.plot([2 + len(resistances) * 1.5, 3 + len(resistances) * 1.5], [0, 0], color='black')
  33. # 绘制从电路末端返回电池的线路
  34. plt.plot([3 + len(resistances) * 1.5, 3 + len(resistances) * 1.5, 1], [0, -0.25, -0.25], color='black')
  35. # 添加电流标签
  36. plt.text(1.5 + len(resistances) * 1.5, 0.3, f'电流 = {current:.2f}A', horizontalalignment='center',
  37. verticalalignment='center')
  38. # 设置限制并关闭坐标轴
  39. ax.set_xlim(0, 4 + len(resistances) * 1.5)
  40. ax.set_ylim(-1, 1)
  41. plt.axis('off')
  42. # 显示图例
  43. handles, labels = ax.get_legend_handles_labels()
  44. plt.legend(handles, labels, loc='upper right')
  45. plt.show()
  46. # 输入参数
  47. V = float(input("请输入电源电压 (伏特): "))
  48. resistances = [float(x) for x in input("请输入电路中的电阻值 (欧姆),用空格分隔: ").split()]
  49. # 运行仿真
  50. current, voltage_drops = simulate_series_circuit(V, resistances)
  51. # 绘制并显示电路
  52. draw_circuit(resistances, voltage_drops, current)

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

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

        观察运行结果如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/456317
推荐阅读
相关标签
  

闽ICP备14008679号