pythonIntroduction au langage de programmation Python

Un module Python pour l'étude des circuits électriques linéaires en régime continu

Ce module pédagogique s'appuie sur l'écriture des lois de l'électricité pour résoudre un problème donné.
Ce n'est donc pas un logiciel de simulation.

Installation

pypi.org/project/dc-electricity

pip install dc-electricity

Documentation

Version française
English version

Exemple 0 - Loi d'Ohm

Un radiateur de résistance 35 Ω est alimenté par une tension de 230 volts.
Que vaut le courant dans le radiateur ?
Quelle est la puissance mise en jeu ?
Quelle est l'énergie consommée pendant 2 heures ?

>>> from dcelectricity.dc_fr import *
>>> loi = Loi()
>>> U = Tension(230)
>>> R = Resistance(35)
>>> I = loi.Ohm(v=U, r=R)
>>> I
Intensité du courant : 6.571429 A
>>> P = loi.Joule(r=R, i=I)
>>> P
Puissance : 1511.43 W (1.511429 kW)
>>> T = Temps(7200)  # ou T = Temps(2, 'h')
>>> E = loi.Energie(t=T, p=P)
>>> E
Energie : 1.08823e+07 J (10.882286 MJ) 3.02286 kWh

On peut aussi utiliser des expressions littérales.
Notez que si l'expresssion est "inattendue", vous aurez droit à un message d'erreur :

>>> I = U/R
>>> I
Intensité du courant : 6.571429 A
>>> I = R/U
TypeError

Pour la puissance :

>>> P = R*I*I
>>> P = U*(U/R)
>>> P = U*I

Pour l'énergie :

>>> E = P*T

Exemple 0b - Résistance équivalente

Que vaut la résistance équivalente à l'association en parallèle de 2 résistances 1 kΩ et 1,5 kΩ ?

>>> from dcelectricity.dc_fr import *
>>> loi = Loi()
>>> R1 = Resistance(1, 'k')
>>> R2 = Resistance(1.5, 'k')
>>> Req = loi.Rparallele(R1, R2)
>>> Req
Résistance : 600.000000 Ω

Voici une notation équivalente bien pratique :

>>> Req = R1//R2
>>> Req
Résistance : 600.000000 Ω

Avec les équations littérales :

>>> Req = 1/(1/R1+1/R2)
>>> Req = R1*(R2/(R1+R2))

Enfin, en passant par les conductances :

>>> G1 = 1/R1
>>> G2 = 1/R2
>>> Geq = G1 +G2
>>> Geq
Conductance : 0.00166667 S (1.666667 mS)
>>> Req = 1/Geq
>>> Req
Résistance : 600.000000 Ω

Exemple 1

On s'intéresse au circuit électrique suivant :

schéma

Données :
E = 12 V ; R1 = 1 kΩ ; R2 = 2,7 kΩ et R3 = 1,8 kΩ

Télécharger les scripts exemple1.py et exemple1_bis.py

Ce script calcule les courants I1, I2 et I3, les tensions U1 et U2 et fait un bilan de puissances.

>>> from dcelectricity.dc_fr import *
>>> E = Tension(12)
>>> E
Tension : 12.000000 V
>>> R1 = Resistance(1, 'k')
>>> R1
Résistance : 1000 Ω (1.000000 kΩ)
>>> R2 = Resistance(2.7, 'k')
>>> R3 = Resistance(1.8, 'k')
>>> R23 = R2//R3  # résistances en parallèle
>>> R23
Résistance : 1080 Ω (1.080000 kΩ)
>>> Req = R1 +R23  # résistances en série
>>> Req
Résistance : 2080 Ω (2.080000 kΩ)
>>> I1 = E/Req  # Loi d'Ohm
>>> I1
Intensité du courant : 0.00576923 A (5.769231 mA)
>>> V1 = R1*I1  # Loi d'Ohm
>>> V1
Tension : 5.769231 V
>>> V2 = E -V1  # Loi des branches
>>> V2
Tension : 6.230769 V
>>> I2 = V2/R2  # Loi d'Ohm
>>> I2
Intensité du courant : 0.00230769 A (2.307692 mA)
>>> I3 = I1 -I2  # Loi des nœuds
>>> I3
Intensité du courant : 0.00346154 A (3.461538 mA)

Une autre approche :

>>> loi = Loi()
>>> # diviseur de tension
>>> V2 = loi.DiviseurTension(vtotal=E, r=R2//R3, r2=R1)
>>> V2
Tension : 6.230769 V
>>> # Théorème de Millman
>>> masse = Tension(0)
>>> V2 = loi.Millman(v_r=[(E, R1), (masse, R2), (masse, R3)])
>>> V2
Tension : 6.230769 V
>>> (E/R1)/(1/R1 +1/R2 +1/R3)
Tension : 6.230769 V
>>> V2/E
0.5192307692307693
>>> # diviseur de courant
>>> I3 = loi.DiviseurCourant(itotal=I1, r=R3, r2=R2)
>>> I3
Intensité du courant : 0.00346154 A (3.461538 mA)
>>> I1*R2/(R2 +R3)
Intensité du courant : 0.00346154 A (3.461538 mA)

Puissances et loi de Joule

>>> P = E*I1  # puissance fournie par la source E
>>> P
Puissance : 0.0692308 W (69.230769 mW)
>>> P1 = loi.Joule(r=R1, i=I1)
>>> P1
Puissance : 0.033284 W (33.284024 mW)
>>> R1*I1*I1
Puissance : 0.033284 W (33.284024 mW)
>>> loi.Joule(r=R1, v=V1)
Puissance : 0.033284 W (33.284024 mW)
>>> V1*(V1/R1)
Puissance : 0.033284 W (33.284024 mW)
>>> P2 = loi.Joule(r=R2, i=I2)
>>> P2
Puissance : 0.0143787 W (14.378698 mW)
>>> P3 = loi.Joule(r=R3, i=I3)
Puissance : 0.021568 W (21.568047 mW)
>>> P1 +P2 +P3
Puissance : 0.0692308 W (69.230769 mW)

Exemple 2a

Le même circuit électrique mais avec une résistance R3 ajustable :

Etude de l'évolution de U2 en fonction de R3

R3 = ? 0

Propriétés de R3 :
Résistance : 0.000000 Ω
Propriétés de U2 :
Tension : 0.000000 V

R3 = ? 100

Propriétés de R3 :
Résistance : 100.000000 Ω
Propriétés de U2 :
Tension : 1.055375 V

R3 = ? 

Télécharger les scripts exemple2a_analyse_parametrique.py et exemple2a_analyse_parametrique_bis.py

Exemple 2b

On utilise ici le module matplotlib pour faire de belles courbes :

figure 1

figure 2

figure 3

Télécharger les scripts exemple2b_analyse_parametrique.py et exemple2b_analyse_parametrique_bis.py

Exemple 3

On cherche la valeur de R3 qui donne U2 = 6,00 V.
On utilise une méthode dichotomique :

Itération  R3 (Ω)               U2 (V)
         1               5000.0    7.641509433962264
         2               2500.0   6.7782426778242675
         3               1250.0   5.5290102389078495
         4               1875.0    6.303501945525291
         5               1562.5    5.969049373618275
         6              1718.75    6.146947223180407
         7             1640.625    6.060929983965794
         8            1601.5625   6.0157594420795215
         9           1582.03125    5.992601726263872
        10          1591.796875    6.004229291252643
        11         1586.9140625    5.998427762523782
        12        1589.35546875    6.001331580654524
        13       1588.134765625     5.99988043623693
        14      1588.7451171875    6.000606199456697
        15     1588.43994140625    6.000243365618415
        16    1588.287353515625    6.000061912872932
        17   1588.2110595703125     5.99997117754154

Résultat : 1588.2110595703125 Ω

Télécharger les scripts exemple3_solution.py et exemple3_solution_bis.py

Avantages et limitations

Ce module gère les opérations arithmétiques de base (+, -, *, /) ainsi que // qui désigne deux résistances en parallèle.

La cohérence des unités est contrôlée :

>>> V3 = V1 -V2 +I3
TypeError
>>> I = I1 +0.5
TypeError
>>> I2 = Courant(0.5)
>>> I = I1 + I2
>>> I = 5*I2 -V1/R1 + I3

Le résultat d'une opération doit donner une grandeur dont l'unité est en volt, ampère, ohm, siemens, watt, joule, seconde ou sans unité (rapport de grandeurs de même unité).
Autrement, vous aurez une erreur :

>>> R1/V1  # Ω/V -> Erreur
TypeError
>>> R2*(R3/(R2 +R3))  # Ω*(Ω/Ω) -> Ω*() -> Ω
>>> R2*R3/(R2 +R3)  # Ω*Ω -> Erreur
TypeError
>>> P = V1*(V1/R1)  # V*(V/Ω) -> V*A -> W
>>> P = V1*V1/R1  # V*V -> Erreur
TypeError
>>> V1()**2/R1()

Bibliographie

Cours d'électricité