<markdown>
# Dame Blanche - Physique Maritime
## Module 4 : Électricité statique
### Documents 6 & 7 : Simulations GeoGebra et Programmes Python
Licence : CC-BY-SA 4.0
Auteur : Nicolas Pettiaux, Athénée Royal de Ganshoren, ASBL EduCode
—
## TABLE DES MATIÈRES
DOCUMENT 6 : SIMULATIONS GEOGEBRA
1. Simulation 1 : Champ d'une charge ponctuelle
2. Simulation 2 : Superposition de deux charges
3. Simulation 3 : Configuration orage-voilier
4. Simulation 4 : Lignes de champ et surfaces équipotentielles
DOCUMENT 7 : PROGRAMMES PYTHON NUMWORKS
1. Programme 1 : Calcul force de Coulomb
2. Programme 2 : Calcul champ électrique
3. Programme 3 : Superposition de charges
4. Programme 4 : Analyse situation orage-voilier
5. Programme 5 : Graphiques E et V vs distance
6. Programme 6 : Simulation trajectoire particule chargée
—
# DOCUMENT 6 : SIMULATIONS GEOGEBRA
## Introduction
Les simulations GeoGebra permettent de visualiser les concepts abstraits d'électrostatique. Elles sont interactives : vous pouvez modifier les paramètres (charges, positions) et observer immédiatement les effets.
Accès aux fichiers :
- Dépôt Framagit : https://framagit.org/dame-blanche-physique/module4-geogebra
- Fichiers .ggb à télécharger et ouvrir avec GeoGebra Desktop ou Web
Mode d'emploi :
1. Ouvrir le fichier .ggb
2. Utiliser les curseurs pour modifier les paramètres
3. Observer les lignes de champ, vecteurs, valeurs calculées
4. Faire des captures d'écran pour vos comptes-rendus
—
## Simulation 1 : Champ d'une charge ponctuelle
Fichier : `champ_charge_unique.ggb`
### Objectifs pédagogiques
- Visualiser le champ électrique radial créé par une charge ponctuelle
- Observer la direction du champ (divergent si Q>0, convergent si Q<0)
- Vérifier la décroissance en 1/r²
### Éléments de l'interface
Curseurs :
- `Q` : Charge (de -10 µC à +10 µC)
- `r_test` : Distance d'un point test (de 0,1 m à 2 m)
Affichage :
- Charge Q représentée par un point (rouge si +, bleu si -)
- Lignes de champ radiales (flèches)
- Point test déplaçable
- Vecteur champ $\vec{E}$ au point test (avec norme affichée)
- Valeur numérique : $E = k|Q|/r^2$ en V/m
### Code GeoGebra (extraits)
```
# Constante de Coulomb
k = 8.99 * 10^9
# Charge (en C)
Q = Slider[-10*10^(-6), 10*10^(-6), 0.1*10^(-6)]
# Position de la charge
O = (0, 0)
# Point test
P = Point déplaçable
# Distance
r = Distance[O, P]
# Calcul du champ
E_norme = k * abs(Q) / r^2
# Direction (vecteur unitaire)
u = Vector[O, P] / r
# Vecteur champ (avec échelle pour visualisation)
echelle = 0.01 # ajuster pour lisibilité
E_vecteur = If[Q > 0, echelle * E_norme * u, -echelle * E_norme * u]
# Lignes de champ (16 lignes radiales)
For[i, 0, 15]:
angle = i * 2π / 16
direction = If[Q > 0, 1, -1]
Ligne[O, direction * (cos(angle), sin(angle))]
End
```
### Activités suggérées
1. Exploration qualitative (5 min)
Modifier Q de -10 à +10 µC
Observer l'inversion des lignes de champ
Noter : lignes vers l'extérieur si Q>0, vers l'intérieur si Q<0
2. Vérification quantitative (10 min)
Fixer Q = +5 µC
Déplacer le point test à r = 0,5 m, 1 m, 1,5 m, 2 m
Noter E pour chaque distance
Calculer manuellement et comparer
| r (m) | E mesuré (V/m) | E calculé = k | Q | /r² | Écart (%) |
| ——- | —————- | ——————— | ———– | | |
| 0,5 | | | | | |
| 1,0 | | | | | |
| 1,5 | | | | | |
| 2,0 | | | | | |
3. Graphique E vs 1/r² (15 min)
Relever E pour 10 valeurs de r entre 0,2 et 2 m
Tracer E en fonction de 1/r²
Vérifier la linéarité (régression linéaire)
La pente doit être k|Q|
—
## Simulation 2 : Superposition de deux charges
Fichier : `superposition_deux_charges.ggb`
### Objectifs pédagogiques
- Comprendre le principe de superposition
- Visualiser l'addition vectorielle des champs
- Observer les configurations dipôle, deux charges de même signe
### Éléments de l'interface
Curseurs :
- `Q1` : Première charge (de -10 µC à +10 µC)
- `Q2` : Deuxième charge (de -10 µC à +10 µC)
- `d` : Distance entre les charges (de 0,2 m à 2 m)
Points déplaçables :
- Position de Q1 (fixe ou déplaçable selon version)
- Position de Q2 (sur axe x, distance d de Q1)
- Point test P
Affichage :
- Les deux charges Q1 et Q2
- Lignes de champ résultantes (calcul numérique)
- Vecteurs $\vec{E_1}$ et $\vec{E_2}$ au point P
- Vecteur $\vec{E_{total}} = \vec{E_1} + \vec{E_2}$
- Valeurs numériques : $E_1$, $E_2$, $E_{total}$ en V/m
### Code GeoGebra (extraits)
```
# Charges
Q1 = Slider[-10e-6, 10e-6, 0.1e-6]
Q2 = Slider[-10e-6, 10e-6, 0.1e-6]
d = Slider[0.2, 2, 0.1]
# Positions
A = (-d/2, 0) # Q1 à gauche
B = (d/2, 0) # Q2 à droite
# Point test
P = Point déplaçable
# Distances
r1 = Distance[A, P]
r2 = Distance[B, P]
# Champs individuels (normes)
E1_norme = k * abs(Q1) / r1^2
E2_norme = k * abs(Q2) / r2^2
# Vecteurs unitaires
u1 = Vector[A, P] / r1
u2 = Vector[B, P] / r2
# Vecteurs champs
E1_vecteur = If[Q1 > 0, E1_norme * u1, -E1_norme * u1]
E2_vecteur = If[Q2 > 0, E2_norme * u2, -E2_norme * u2]
# Champ total (addition vectorielle)
E_total = E1_vecteur + E2_vecteur
E_total_norme = Length[E_total]
# Lignes de champ (calcul numérique par intégration)
# [Code plus complexe, voir fichier .ggb]
```
### Activités suggérées
1. Configuration dipôle (15 min)
Régler Q1 = +5 µC, Q2 = -5 µC, d = 0,5 m
Observer les lignes de champ (partent de + vers -)
Déplacer P le long de l'axe des x
Trouver le point où E est maximal (entre les charges)
Trouver les points où E = 0 (aucun !)
2. Deux charges positives (10 min)
Régler Q1 = Q2 = +3 µC, d = 0,5 m
Observer la répulsion (lignes s'écartent)
Trouver le point milieu : E = 0 (par symétrie)
3. Recherche de points d'équilibre (20 min)
Q1 = +10 µC, Q2 = -5 µC, d = 0,6 m
Chercher les points où $E_{total} = 0$
Il y en a sur l'axe des x, à l'extérieur du segment [Q1, Q2]
Calculer analytiquement et vérifier graphiquement
—
## Simulation 3 : Configuration orage-voilier
Fichier : `orage_voilier.ggb`
### Objectifs pédagogiques
- Application maritime concrète
- Géométrie 2D (distance oblique nuage-mât)
- Calcul du champ au sommet du mât
- Évaluation du risque de foudre
### Éléments de l'interface
Curseurs :
- `Q_nuage` : Charge du nuage (de -100 C à 0 C)
- `h_nuage` : Altitude du nuage (de 1000 m à 3000 m)
- `d_horiz` : Distance horizontale (de 0 m à 2000 m)
Paramètres fixes :
- `h_mat` = 11 m (hauteur du mât de Dame Blanche)
Affichage graphique :
- Échelle verticale : altitude (m)
- Échelle horizontale : distance (m)
- Mer (niveau 0)
- Voilier Dame Blanche (schématique)
- Mât vertical jusqu'à 11 m
- Nuage orageux à altitude h_nuage
- Ligne pointillée : distance r entre nuage et sommet du mât
Calculs affichés :
- Distance réelle : $r = \sqrt{(h_{nuage} - h_{mat})^2 + d_{horiz}^2}$
- Champ au sommet : $E = k|Q_{nuage}|/r^2$ en kV/m
- Potentiel au sommet : $V = kQ_{nuage}/r$ en MV
- Énergie éclair (avec I=40 kA, Δt=0,2 ms) : en GJ
- Pourcentage du seuil de claquage : $E/3000$ kV/m × 100%
Code couleur du risque :
- Vert : E < 50 kV/m (risque faible)
- Orange : 50 < E < 100 kV/m (risque modéré)
- Rouge : E > 100 kV/m (risque élevé)
### Code GeoGebra (extraits)
```
# Paramètres
Q_nuage = Slider[-100, 0, 1] # en C
h_nuage = Slider[1000, 3000, 100] # en m
d_horiz = Slider[0, 2000, 100] # en m
h_mat = 11 # m
# Distance réelle
r = sqrt1) * 1e-6
q2 = float(input(“Charge q2 (en µC) : ”)) * 1e-6
r = float(input(“Distance r (en cm) : ”)) / 100
F = coulomb(q1, q2, r)
sens = sens_force(q1, q2)
print(“”)
print(“Résultats :”)
print(f“Force : F = {F:.4f} N”)
print(f“Sens : {sens}”)
# Comparaison avec poids
m_equiv = F / 9.81
print(f“Équivalent : poids de {m_equiv*1000:.2f} g”)
```
### Exemple d'utilisation
```
Force de Coulomb
Charge q1 (en µC) : 3.5
Charge q2 (en µC) : -2.0
Distance r (en cm) : 15
Résultats :
Force : F = 2.7973 N
Sens : Attraction
Équivalent : poids de 285.16 g
```
—
## Programme 2 : Calcul champ électrique
Fichier : `champ.py`
### Code complet
```python
“”“
Dame Blanche - Module 4 : Électricité statique
Programme 2 : Calcul du champ électrique
”“”
def champ_electrique(Q, r):
"""
Calcule le champ électrique créé par une charge ponctuelle.
Paramètres:
Q : charge (C)
r : distance (m)
Retourne:
E : champ électrique (V/m)
"""
k = 8.99e9
E = k * abs(Q) / r**2
return E
def direction_champ(Q):
"""
Indique la direction du champ.
Retourne:
"Divergent" (Q>0) ou "Convergent" (Q<0)
"""
if Q > 0:
return "Divergent (vers l'extérieur)"
else:
return "Convergent (vers la charge)"
# Interface
print(“=== Champ Électrique ===”)
print(“”)
Q = float(input(“Charge Q (en µC) : ”)) * 1e-6
r = float(input(“Distance r (en m) : ”))
E = champ_electrique(Q, r)
direction = direction_champ(Q)
print(“”)
print(“Résultats :”)
print(f“Champ : E = {E:.2e} V/m”)
print(f“ E = {E/1000:.2f} kV/m”)
print(f“Direction : {direction}”)
# Comparaison champ atmosphérique
E_atm = 100 # V/m
ratio = E / E_atm
print(f“Comparaison : {ratio:.1f} fois le champ atmosphérique”)
```
—
## Programme 3 : Superposition de charges
Fichier : `superposition.py`
### Code complet
```python
“”“
Dame Blanche - Module 4 : Électricité statique
Programme 3 : Superposition de charges
”“”
from math import sqrt
def superposition(charges, positions, point):
"""
Calcule le champ électrique résultant de plusieurs charges.
Paramètres:
charges : liste de charges [q1, q2, ...] (C)
positions : liste de tuples [(x1,y1), (x2,y2), ...] (m)
point : tuple (x, y) où calculer le champ (m)
Retourne:
(Ex, Ey, E_total) : composantes et norme (V/m)
"""
k = 8.99e9
Ex, Ey = 0, 0
for q, (xq, yq) in zip(charges, positions):
# Vecteur déplacement
dx = point[0] - xq
dy = point[1] - yq
r = sqrt(dx**2 + dy**2)
# Éviter division par zéro
if r < 1e-10:
continue
# Norme du champ créé par cette charge
E_mag = k * abs(q) / r**2
# Composantes (selon signe de q)
signe = 1 if q > 0 else -1
Ex += E_mag * (dx / r) * signe
Ey += E_mag * (dy / r) * signe
E_total = sqrt(Ex**2 + Ey**2)
return Ex, Ey, E_total
# Interface - Exemple : 3 charges alignées
print(“=== Superposition de Charges ===”)
print(“Exemple : 3 charges alignées sur x”)
print(“”)
# Saisie
q1 = float(input(“Q1 (µC) en x1=0 : ”)) * 1e-6
q2 = float(input(“Q2 (µC) en x2=0.6 : ”)) * 1e-6
q3 = float(input(“Q3 (µC) en x3=1.2 : ”)) * 1e-6
xp = float(input(“Point P à x = (m) : ”))
# Calcul
charges = [q1, q2, q3]
positions = [(0, 0), (0.6, 0), (1.2, 0)]
point = (xp, 0)
Ex, Ey, E_total = superposition(charges, positions, point)
# Affichage
print(“”)
print(“Résultats :”)
print(f“Ex = {Ex:.2e} V/m”)
print(f“Ey = {Ey:.2e} V/m”)
print(f“E total = {E_total:.2e} V/m”)
print(f“E total = {E_total/1000:.2f} kV/m”)
# Direction
if abs(Ex) > 1:
if Ex > 0:
print("Direction : vers la droite (+x)")
else:
print("Direction : vers la gauche (-x)")
```
—
## Programme 4 : Analyse situation orage-voilier
Fichier : `orage_voilier.py`
### Code complet
```python
“”“
Dame Blanche - Module 4 : Électricité statique
Programme 4 : Analyse complète orage-voilier
”“”
from math import sqrt
def analyse_orage(Q_nuage, h_nuage, d_horiz, h_mat=11):
"""
Analyse complète d'une situation orageuse pour Dame Blanche.
Paramètres:
Q_nuage : charge du nuage (C, négatif)
h_nuage : altitude du nuage (m)
d_horiz : distance horizontale (m)
h_mat : hauteur du mât (m, défaut=11)
Retourne:
Dictionnaire avec tous les résultats
"""
k = 8.99e9
# Distance réelle
r = sqrt((h_nuage - h_mat)**2 + d_horiz**2)
# Champ au sommet du mât
E = k * abs(Q_nuage) / r**2
E_kV = E / 1000
# Potentiel
V = k * Q_nuage / r
V_MV = V / 1e6
# Différence de potentiel
U = abs(V)
# Énergie éclair typique
I = 40000 # A
dt = 0.0002 # s
Q_eclair = I * dt
E_eclair = Q_eclair * U
E_eclair_GJ = E_eclair / 1e9
# Seuil de claquage
seuil = 3e6 # V/m = 3000 kV/m
pct_seuil = 100 * E / seuil
# Évaluation risque
if E_kV < 50:
risque = "FAIBLE"
elif E_kV < 100:
risque = "MODÉRÉ"
elif E_kV < 200:
risque = "ÉLEVÉ"
else:
risque = "CRITIQUE"
return {
'r': r,
'E': E,
'E_kV': E_kV,
'V_MV': V_MV,
'U': U,
'E_eclair_GJ': E_eclair_GJ,
'pct_seuil': pct_seuil,
'risque': risque
}
# Interface
print(“=== Analyse Orage-Voilier ===”)
print(“Dame Blanche (Nantucket Clipper)”)
print(“”)
Q_nuage = float(input(“Charge nuage (C, ex: -60) : ”))
h_nuage = float(input(“Altitude nuage (m, ex: 2000) : ”))
d_horiz = float(input(“Distance horiz (m, ex: 800) : ”))
print(“”)
print(“Calcul en cours…”)
print(“”)
resultats = analyse_orage(Q_nuage, h_nuage, d_horiz)
# Affichage détaillé
print(“=“*40)
print(“RÉSULTATS DE L'ANALYSE”)
print(”=“*40)
print(f”Distance nuage-mât : {resultats['r']:.0f} m”)
print(“”)
print(f“Champ électrique : {resultats['E_kV']:.1f} kV/m”)
print(f“Potentiel mât : {resultats['V_MV']:.1f} MV”)
print(f“Différence de potentiel : {resultats['U']/1e6:.1f} MV”)
print(“”)
print(f“Énergie éclair : {resultats['E_eclair_GJ']:.2f} GJ”)
print(f“Seuil de claquage : {resultats['pct_seuil']:.1f} %”)
print(“”)
print(f“NIVEAU DE RISQUE : {resultats['risque']}”)
print(“=“*40)
# Recommandations
print(””)
print(“MESURES DE SÉCURITÉ :”)
if resultats['risque'] == “FAIBLE”:
print("- Surveillance météo standard")
print("- Parafoudres vérifiés")
elif resultats['risque'] == “MODÉRÉ”:
print("- Vigilance accrue")
print("- Débrancher équipements non essentiels")
print("- Équipage prêt à descendre")
elif resultats['risque'] == “ÉLEVÉ”:
print("- DANGER : Équipage dans cabine")
print("- Tout débranché sauf VHF")
print("- Ne pas toucher éléments métalliques")
else: # CRITIQUE
print("- DANGER IMMÉDIAT")
print("- Équipage couché cabine")
print("- Éloignement mât >2m")
print("- Chaussures isolantes")
```
### Exemple d'utilisation
```
Analyse Orage-Voilier
Dame Blanche (Nantucket Clipper)
Charge nuage (C, ex: -60) : -80
Altitude nuage (m, ex: 2000) : 1500
Distance horiz (m, ex: 800) : 800
Calcul en cours…
Distance nuage-mât : 1690 m
Champ électrique : 252.3 kV/m
Potentiel mât : -426.4 MV
Différence de potentiel : 426.4 MV
Énergie éclair : 3.41 GJ
Seuil de claquage : 8.4 %
NIVEAU DE RISQUE : ÉLEVÉ
MESURES DE SÉCURITÉ :
- DANGER : Équipage dans cabine
- Tout débranché sauf VHF
- Ne pas toucher éléments métalliques
```
—
## Programme 5 : Graphiques E et V vs distance
Fichier : `graphiques_E_V.py`
### Code complet (nécessite matplotlib sur ordinateur)
```python
“”“
Programme 5 : Graphiques E® et V®
Note : Pour NumWorks, adapter sans matplotlib
”“”
# Version NumWorks (sans graphique, affichage tableau)
def tableau_E_V(Q, r_min, r_max, n_points):
"""
Génère un tableau E(r) et V(r).
"""
k = 8.99e9
print("r (m) | E (kV/m) | V (kV)")
print("-" * 30)
for i in range(n_points):
r = r_min + i * (r_max - r_min) / (n_points - 1)
E = k * abs(Q) / r**2
V = k * Q / r
print(f"{r:.2f} | {E/1000:.2f} | {V/1000:.2f}")
# Interface
Q = float(input(“Charge Q (µC) : ”)) * 1e-6
r_min = float(input(“Distance min (m) : ”))
r_max = float(input(“Distance max (m) : ”))
n_points = int(input(“Nombre de points : ”))
tableau_E_V(Q, r_min, r_max, n_points)
```
—
## Programme 6 : Simulation trajectoire particule chargée
Fichier : `trajectoire.py`
### Code simplifié
```python
“”“
Programme 6 : Trajectoire d'une particule chargée dans un champ uniforme
”“”
def trajectoire(q, m, E, v0x, v0y, t_max, n_steps):
"""
Simule la trajectoire d'une particule chargée.
Paramètres:
q : charge (C)
m : masse (kg)
E : champ électrique (V/m, selon y)
v0x, v0y : vitesses initiales (m/s)
t_max : temps total (s)
n_steps : nombre de pas
Retourne:
listes (t, x, y, vx, vy)
"""
dt = t_max / n_steps
# Accélération
ay = q * E / m
ax = 0
# Listes
t_list = []
x_list = []
y_list = []
# Conditions initiales
t, x, y = 0, 0, 0
vx, vy = v0x, v0y
# Intégration (Euler)
for i in range(n_steps):
t_list.append(t)
x_list.append(x)
y_list.append(y)
# Mise à jour
vx += ax * dt
vy += ay * dt
x += vx * dt
y += vy * dt
t += dt
return t_list, x_list, y_list
# Exemple : électron dans champ 1000 V/m
q = -1.6e-19 # C
m = 9.1e-31 # kg
E = 1000 # V/m
v0x = 1e6 # m/s
v0y = 0 # m/s
t_max = 1e-8 # s
n_steps = 100
t, x, y = trajectoire(q, m, E, v0x, v0y, t_max, n_steps)
print(“Trajectoire calculée”)
print(f“Position finale : x={x[-1]:.2e} m, y={y[-1]:.2e} m”)
print(“(Graphique nécessite matplotlib sur ordinateur)”)
```
—
## DOCUMENT 8 : DOCUMENTATION FRAMAGIT
### Organisation du dépôt
```
dame-blanche-physique/
├── README.md
├── LICENSE (CC-BY-SA 4.0)
├── module4-electricite-statique/
│ ├── doc1-notes-cours.tex
│ ├── doc2-fiches-methodes.tex
│ ├── doc3-grilles-evaluation.tex
│ ├── doc4-guide-enseignant.tex
│ ├── doc5-activites-expeyes.tex
│ ├── geogebra/
│ │ ├── champ_charge_unique.ggb
│ │ ├── superposition_deux_charges.ggb
│ │ ├── orage_voilier.ggb
│ │ └── lignes_champ_equipotentielles.ggb
│ └── python/
│ ├── coulomb.py
│ ├── champ.py
│ ├── superposition.py
│ ├── orage_voilier.py
│ ├── graphiques_E_V.py
│ └── trajectoire.py
└── modules-suivants/
├── module5-circuits-continu/
├── module6-electromagnetisme/
└── module7-circuits-alternatif/
```
### README.md du projet
```markdown
# Dame Blanche - Physique Maritime
## Projet pédagogique d'apprentissage supervisé autonome
Auteur : Nicolas Pettiaux (Athénée Royal de Ganshoren, ASBL EduCode)
Licence : CC-BY-SA 4.0
Contact : nicolas.pettiaux@educode.org
### Description
Modules de physique utilisant le voilier Nantucket Clipper “Dame Blanche” (1972)
comme contexte authentique d'apprentissage. Approche d'apprentissage supervisé autonome
avec quatre ressources : cours + tuteurs IA + validation enseignant + outils numériques.
### Module 4 : Électricité statique
- 8 documents pédagogiques complets (300+ pages)
- Simulations GeoGebra interactives
- Programmes Python pour NumWorks
- Protocoles expérimentaux ExpEYES
- Aligné avec UAA 8-9 du programme belge
### Utilisation
1. Télécharger les documents LaTeX (.tex) ou PDF compilés
2. Ouvrir les simulations GeoGebra (.ggb)
3. Charger les programmes Python sur calculatrices NumWorks
4. Adapter selon votre contexte pédagogique
### Contribution
Améliorations bienvenues ! Merge requests sur Framagit.
Partagez vos adaptations sous même licence (CC-BY-SA 4.0).
### EducaLibre 2026
Conférence européenne sur le FLOSS en éducation
4-6 juillet 2026, ULB Bruxelles
Ateliers Dame Blanche prévus
—
© 2025 Nicolas Pettiaux - CC-BY-SA 4.0
```
—
FIN DES DOCUMENTS 6, 7 et 8
Tous les fichiers sources sont disponibles sur :
https://framagit.org/dame-blanche-physique
Licence CC-BY-SA 4.0 - Partagez, modifiez, redistribuez librement !
</markdown>