Séance 21 · Partie D · Électronique et embarqué
Bases
d’électronique.
Avant d’écrire une ligne pour l’Arduino, il faut savoir pourquoi une LED sans résistance grille, pourquoi un moteur ne se branche pas sur une broche, et ce que mesure vraiment un capteur. Une séance de physique, avec Python comme calculatrice.
Durée : 2 séances · Objectifs : tension, courant, résistance, loi d’Ohm, puissance ; LED et résistance série ; pont diviseur et capteurs résistifs ; breadboard et multimètre ; numérique vs analogique ; sécurité.
Ce que vous saurez faire à la fin
- Calculer la résistance à mettre devant une LED, et pourquoi.
- Lire un schéma simple et le monter sur une breadboard.
- Comprendre ce qu’une broche d’Arduino peut et ne peut pas alimenter.
- Mesurer tension, courant et résistance avec un multimètre.
Matériel : breadboard, LED, résistances (220 Ω, 1 kΩ, 10 kΩ), bouton, potentiomètre, photorésistance, multimètre, une pile ou une alimentation 5 V.
01 / Grandeurs
Tension, courant, résistance : l’analogie de l’eau
| Grandeur | Unité | Image | Se mesure |
|---|---|---|---|
| Tension U | volt (V) | La pression, la différence de hauteur entre deux points | Entre deux points, en parallèle |
| Courant I | ampère (A) | Le débit d’eau qui circule | Dans le fil, en série |
| Résistance R | ohm (Ω) | L’étroitesse du tuyau | Composant hors circuit |
| Puissance P | watt (W) | L’énergie dissipée par seconde (chaleur, lumière, mouvement) | Se calcule : P = U × I |
Loi d’Ohm : U = R × I
Une tension pousse un courant à travers une résistance. Plus la résistance est grande, moins il passe de courant pour une même tension.
Ordres de grandeur : pile 1,5 V ; USB 5 V ; Arduino 5 V ; ESP32 et Pico 3,3 V ; secteur 230 V (jamais dans ce cours). LED 10 à 20 mA ; broche Arduino 20 mA max ; petit moteur 0,5 à 2 A.
La masse
Une tension est toujours une différence entre deux points. On choisit un point de référence, la masse (GND, 0 V), et toutes les tensions sont mesurées par rapport à lui. Tous les composants d’un circuit doivent partager la même masse : deux cartes qui communiquent sans masse commune, c’est le bug n°1 des débutants.
01 / Grandeurs
La loi d’Ohm et la puissance, en Python
Trois formules à connaître par cœur
U = RI, P = UI, et leurs combinaisons P = U²/R = RI². Avec elles, on dimensionne 90 % d’un circuit de robot. Le court-circuit : résistance quasi nulle → courant énorme → chaleur → fumée. Une batterie LiPo court-circuitée peut prendre feu : d’où les fusibles et la vérification au multimètre avant de mettre sous tension.
02 / Composants
La LED et sa résistance : le premier calcul de tout roboticien
Une LED n’obéit pas à la loi d’Ohm : en dessous de sa tension de seuil elle ne conduit pas ; au-dessus, le courant explose. Il faut donc une résistance en série qui absorbe la différence de tension et fixe le courant.
5 V ──[ 220 Ω ]──▶|── GND
LED
(anode : patte longue, côté +)Retenez : 220 Ω sur 5 V, 100 Ω sur 3,3 V. Ça marche pour toutes les couleurs.
Pourquoi ces valeurs
Les résistances du commerce suivent la série E12 : 12 valeurs par décade. On prend la valeur normalisée juste au-dessus du calcul : un peu moins de courant, jamais plus. Une LED tolère 20 mA en continu ; 15 mA est déjà très lumineux. Une broche d’Arduino fournit au plus 20 mA (40 mA absolu) : une LED avec 220 Ω, oui ; deux en parallèle sur la même broche, c’est limite ; un moteur, jamais.
02 / Composants
Série et parallèle
Les deux lois de Kirchhoff, en une phrase chacune
Nœuds : le courant qui entre dans un point ressort intégralement (rien ne s’accumule). Mailles : en faisant le tour d’une boucle, les tensions s’additionnent à zéro (on revient à la même « hauteur »). Toute l’analyse de circuit en prépa découle de ces deux lois, et elles suffisent ici pour comprendre série (même courant) et parallèle (même tension).
02 / Composants
Le pont diviseur : transformer une résistance en tension
U_in
│
[R_haut]
├──── U_out
[R_bas]
│
GND
U_out = U_in × R_bas / (R_haut + R_bas)La plupart des capteurs bon marché sont des résistances variables : photorésistance, thermistance, capteur de flexion, potentiomètre. Le pont diviseur les transforme en tension, que la carte sait lire.
Choisir la résistance fixe
Pour une sensibilité maximale, on prend R_bas proche de la résistance du capteur dans la zone qui nous intéresse. Un potentiomètre est un pont diviseur réglable : ses deux extrémités sur 5 V et GND, son curseur donne de 0 à 5 V. Attention : un diviseur consomme en permanence (5 V / 20 kΩ = 0,25 mA) et ne fournit presque pas de courant : il sert à mesurer, pas à alimenter.
02 / Composants
Le bouton et la résistance de rappel
Sans rappel : broche « en l'air »
quand le bouton est relâché →
valeur aléatoire, parasites.
Avec pull-down :
5 V ──[bouton]──┬── broche
[10 kΩ]
GND
relâché : 0 (via 10k) ; pressé : 1
Avec pull-up (interne à l'Arduino) :
pinMode(2, INPUT_PULLUP);
broche ──[bouton]── GND
relâché : 1 ; pressé : 0 (inversé !)Une entrée numérique lit 0 ou 1 selon que sa tension est proche de 0 V ou de 5 V. Entre les deux, ou non connectée, elle lit n’importe quoi.
La résistance de rappel (pull-up ou pull-down) impose une valeur par défaut. Les microcontrôleurs en ont une intégrée (pull-up) : le montage se réduit à un bouton entre la broche et GND.
Avec le pull-up interne, « pressé » = 0. Ne pas l’oublier dans le code.
Le rebond
Un bouton mécanique ne fait pas un contact franc : pendant 1 à 10 ms, il « rebondit » et la broche voit 0101010 avant de se stabiliser. Un compteur naïf compte alors 5 appuis pour un. On anti-rebond (debounce) par logiciel (ignorer les changements pendant 20 ms après un changement) ou par matériel (condensateur). Séance 22.
03 / Signaux
Numérique et analogique
Ce que la carte sait faire
Entrée numérique : 0 ou 1. Sortie numérique : 0 V ou 5 V. Entrée analogique (ADC) : une tension → un entier de 0 à 1023. Sortie « analogique » : en réalité une PWM (séance 23). Une tension supérieure à la référence (5 V, ou 3,3 V !) ne donne pas une valeur plus grande : elle détruit la broche. C’est la première chose à vérifier avant de brancher un capteur sur un ESP32.
03 / Signaux
Ce qu’une broche ne peut pas faire : alimenter
| Charge | Courant | Sur une broche ? | Solution |
|---|---|---|---|
| LED + résistance | 15 mA | oui | — |
| Buzzer piézo | ~10 mA | oui | — |
| Servomoteur SG90 | 100–700 mA | non | Alimentation séparée, signal seul sur la broche |
| Moteur CC | 0,2–2 A | non | Transistor ou pont en H (séance 27) |
| Relais, électro-aimant | 50–100 mA | non | Transistor + diode de roue libre |
Piloter un moteur avec un transistor :
+6 V ──[moteur]──┬── collecteur
▲ diode NPN
broche ─[1 kΩ]── base
émetteur ── GND
Le petit courant de base commande
le grand courant du moteur.Le transistor, interrupteur commandé
Un transistor laisse passer un courant important (collecteur → émetteur) quand un petit courant arrive sur sa base. La broche fournit 4 mA, le moteur en tire 1 A depuis son alimentation. La diode de roue libre est obligatoire avec tout moteur ou bobine : à la coupure, la bobine génère une pointe de tension inverse qui détruirait le transistor. Un MOSFET fait la même chose sans courant de base ; un pont en H permet d’inverser le sens.
04 / Pratique
Breadboard et multimètre
Breadboard (vue de dessus) :
+ ━━━━━━━━━━━━━━━━━━━━ rails d'alimentation
− ━━━━━━━━━━━━━━━━━━━━ (reliés horizontalement)
a b c d e f g h i j
1 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ chaque ligne de 5
2 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ trous est reliée
3 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ (a-e ensemble,
... f-j ensemble)
┃ rigole centrale : coupureMultimètre
- Tension (V⎓) : sondes en parallèle, sur les deux points. Toujours sûr.
- Résistance (Ω) : composant débranché, hors tension.
- Courant (A) : le multimètre s’insère dans le fil (série). Sonde sur la borne A. Jamais en parallèle : court-circuit.
- Continuité (♪) : bip si les deux points sont reliés. Pour trouver un mauvais contact.
Méthode de montage
1. Dessiner le schéma. 2. Alimentation débranchée. 3. Placer les composants en suivant le schéma, fils courts, couleurs (rouge +, noir GND). 4. Vérifier à l’œil puis au multimètre (continuité entre + et GND = court-circuit !). 5. Brancher. 6. Mesurer les tensions attendues. Une LED à l’envers ne s’allume pas et ne casse rien ; une alimentation à l’envers sur une carte la détruit.
04 / Pratique
Montages à réaliser
- LED seule — 5 V, 220 Ω, LED, GND. Mesurer la tension aux bornes de la LED (≈ 2 V) et de la résistance (≈ 3 V) : la somme fait 5 V. Mesurer le courant.
- Deux LED en série — combien de tension reste-t-il pour la résistance ? Peut-on en mettre trois sur 5 V ?
- Potentiomètre — extrémités sur 5 V et GND, mesurer la tension du curseur en tournant. C’est votre premier capteur analogique.
- Photorésistance — pont diviseur avec 10 kΩ, mesurer la tension à la lumière et à l’ombre. Inverser LDR et résistance : que change-t-on ?
- Bouton avec pull-down — mesurer la tension sur la broche, pressé et relâché. Retirer la résistance : mesurer encore, toucher le fil avec le doigt.
Notez chaque mesure. Comparez avec les calculs Python. L’écart, c’est la tolérance des composants (±5 %) et la résistance interne du multimètre.
05 / Défis
Défi ★ — Le vérificateur de LED
Consigne
Écrire verifier_led(U_alim, U_led, R) qui renvoie un diagnostic : « OK » si le courant est entre 5 et 20 mA, « trop faible, LED éteinte ou pâle » en dessous, « DANGER » au-dessus, et « ne s’allume pas » si U_alim ≤ U_led. Tester avec plusieurs combinaisons, dont 3,3 V avec une LED blanche (3,2 V) et 100 Ω.
Correction
def verifier_led(U_alim, U_led, R):
if U_alim <= U_led:
return "ne s'allume pas (tension insuffisante)"
I = (U_alim - U_led) / R * 1000
if I > 20: return f"DANGER : {I:.0f} mA"
if I < 5: return f"trop faible : {I:.1f} mA"
return f"OK : {I:.1f} mA"La LED blanche sur 3,3 V avec 100 Ω ne reçoit que 1 mA : à peine visible. Sur une carte 3,3 V, les LED bleues et blanches sont un problème ; on préfère rouge ou verte, ou un transistor vers 5 V.
05 / Défis
Défi ★★ — Dimensionner l’alimentation d’un robot
Consigne
Un robot contient : 2 moteurs (6 V, 0,8 A chacun en charge, 2 A au démarrage pendant 0,2 s), 1 servomoteur (5 V, 0,25 A moyen, 0,7 A en pointe), 1 Arduino (5 V, 50 mA), 1 capteur ultrason (15 mA), 4 LED (15 mA). Batterie : 6 × AA NiMH (7,2 V, 2000 mAh) avec un régulateur 5 V à 85 % de rendement pour la partie logique.
Calculer : le courant total moyen et en pointe ; l’autonomie ; la puissance dissipée par le régulateur. Puis : combien de temps le robot peut-il rouler si les moteurs ne tournent que 60 % du temps ?
Correction
U_bat, capacite = 7.2, 2.0 # V, Ah
rendement = 0.85
I_logique = sum(c["I_moy"] for n, c in composants.items() if c["U"] == 5)
P_logique = 5 * I_logique
I_bat_logique = P_logique / rendement / U_bat # ce que la batterie fournit pour la partie 5 V
I_moteurs = composants["moteurs"]["I_moy"] # supposés directement sur la batterie
I_total = I_bat_logique + I_moteurs
I_pointe = sum(c["I_max"] for c in composants.values())
print(f"Courant moyen batterie : {I_total:.2f} A, pointe : {I_pointe:.2f} A")
print(f"Autonomie moteurs 100 % : {capacite / I_total:.2f} h")
print(f"Autonomie moteurs 60 % : {capacite / (I_bat_logique + 0.6 * I_moteurs):.2f} h")
print(f"Régulateur : dissipe {(U_bat - 5) * I_logique / rendement:.2f} W (chauffe !)")≈ 1,9 A moyen, 4,7 A en pointe : les piles AA tiennent, à condition que les fils et le connecteur supportent la pointe. Un régulateur linéaire dissiperait (7,2 − 5) × I en chaleur ; un régulateur à découpage (85 %) est bien meilleur. Le démarrage des moteurs peut faire chuter la tension et redémarrer l’Arduino : c’est le bug classique du robot qui « reboote quand il accélère ». Solution : condensateur de découplage, ou alimentation logique séparée.
05 / Défis
Défi ★★★ — Esprit prépa : le condensateur et le temps
Consigne
Un condensateur C chargé à travers une résistance R suit U(t) = U₀(1 − e^(−t/RC)). La constante de temps τ = RC (en secondes si R en Ω et C en F).
1. Simuler la charge avec la méthode d’Euler (séance 15) : dU/dt = (U₀ − U)/(RC). Comparer à la formule. Pour R = 10 kΩ, C = 100 µF : temps pour atteindre 63 % ? 99 % ?
2. Un bouton avec anti-rebond matériel : R = 10 kΩ, C = 100 nF. Combien de temps le signal met-il à passer de 0 à 2,5 V (seuil logique) ? Est-ce suffisant pour masquer des rebonds de 5 ms ?
3. Tracer avec matplotlib la charge et la décharge.
Correction et ouverture
def charge(R, C, U0=5.0, dt=None, duree=None):
tau = R * C
dt = dt or tau / 200; duree = duree or 6 * tau
t, U = 0.0, 0.0; ts, Us = [0.0], [0.0]
while t < duree:
U += (U0 - U) / tau * dt; t += dt
ts.append(t); Us.append(U)
return ts, Us
R, C = 10_000, 100e-6
ts, Us = charge(R, C)
tau = R * C
print(f"τ = {tau} s ; 63 % à t ≈ {next(t for t, u in zip(ts, Us) if u >= 0.63 * 5):.2f} s ; 99 % à ≈ {next(t for t, u in zip(ts, Us) if u >= 0.99 * 5):.2f} s (théorie : τ et 4.6 τ)")
ts2, Us2 = charge(10_000, 100e-9)
print(f"Anti-rebond : 2.5 V atteint en {1000 * next(t for t, u in zip(ts2, Us2) if u >= 2.5):.2f} ms (théorie : RC·ln2 = {1000 * 10_000 * 100e-9 * math.log(2):.2f} ms)")
plt.plot(ts, Us, label="charge (Euler)")
plt.plot(ts, [5 * (1 - math.exp(-t / tau)) for t in ts], "--", label="formule")
plt.plot(ts, [5 * math.exp(-t / tau) for t in ts], label="décharge")
plt.xlabel("t (s)"); plt.ylabel("U (V)"); plt.legend(); plt.grid(alpha=.3); plt.show()τ = 1 s : 63 % en 1 s, 99 % en 4,6 s. L’anti-rebond RC = 1 ms retarde le front de 0,7 ms : trop court pour des rebonds de 5 ms — il faudrait C = 1 µF (τ = 10 ms). Le condensateur est le composant « mémoire de tension » : découplage d’alimentation (il fournit la pointe de courant que la batterie ne peut pas donner assez vite), filtrage, temporisation. L’équation dU/dt = (U₀ − U)/τ est votre première équation différentielle linéaire ; sa solution exponentielle est le pain quotidien de la prépa, et vous venez de la vérifier numériquement.
06 / Vérification
Peut-on brancher un petit moteur directement entre une broche de l’Arduino et GND ?
Deux questions supplémentaires
1. Pourquoi une résistance devant une LED ? Parce qu’au-dessus de son seuil, la LED laisse passer un courant quasi illimité : la résistance fixe ce courant à 10–20 mA.
2. Que lit une entrée numérique non connectée ? N’importe quoi : il faut une résistance de rappel (pull-up ou pull-down).
Référence
Les mots à retenir
| Mot | Définition |
|---|---|
| Tension U (V) | Différence de potentiel entre deux points. |
| Courant I (A) | Débit de charges dans un fil. |
| Loi d’Ohm | U = R × I. |
| Puissance P (W) | P = U × I ; se dissipe en chaleur. |
| Masse (GND) | Référence 0 V commune à tout le circuit. |
| Pont diviseur | Deux résistances en série ; tension au milieu proportionnelle. |
| Pull-up / pull-down | Résistance qui fixe la valeur par défaut d’une entrée. |
| ADC | Convertisseur tension → entier (10 bits Arduino, 12 bits ESP32). |
Pour continuer
Vous savez ce que vous branchez
Séance suivante : le code prend le contrôle des broches. Arduino en C/C++, premiers programmes.
À faire chez soi
- Réaliser les cinq montages et remplir un tableau mesures / calculs.
- Identifier sur votre carte Arduino : les broches numériques, analogiques, 5 V, 3,3 V, GND, VIN. Chercher le courant maximal par broche dans la fiche technique de l’ATmega328P.
- Lire le code couleur des résistances (bagues) et vérifier trois résistances au multimètre.
Ressources
Loi d’Ohm · Simulateur de circuits Falstad (interactif) · Arduino Docs : Learn