Amplificateur opérationnel : fonctionnement, gain et LM358
Amplificateur opérationnel (ampli-op) : montages inverseur et non inverseur, suiveur, comparateur, brochage LM358 et LM741, alimentation simple et ADC Arduino.
Un amplificateur opérationnel (ampli-op, AOP ou op-amp en anglais) est un petit circuit intégré, le plus souvent à huit broches, qui multiplie par des centaines de milliers la minuscule différence de tension entre ses deux entrées. C'est la réponse courte à la question qu'est-ce qu'un amplificateur opérationnel, mais un gain aussi énorme ne sert pas à grand-chose tout seul. La magie apparaît quand quelques résistances renvoient une partie de la sortie vers l'entrée : l'ampli-op devient alors un amplificateur précis dont le gain est fixé par un rapport de résistances, un étage tampon, un comparateur ou un filtre. Du préampli de micro au capteur de pouls, du module de balance à la carte son, il y a un ampli-op dans presque chaque recoin de l'électronique analogique.
Avec Arduino, la raison principale pour laquelle tu as besoin d'un ampli-op est la suivante : beaucoup de capteurs donnent des signaux de quelques millivolts, alors que le CAN (ADC) de l'Arduino Uno ne distingue que des pas de 4,88 mV. Un thermocouple de type K ne produit que 4,1 mV à 100 °C ; branché directement, l'Arduino remarque à peine cette température. Dans ce guide, tu vas apprendre les règles de l'ampli-op idéal, les formules des montages inverseur et non inverseur, le suiveur de tension, le comparateur, le brochage du LM358 et du LM741, le fonctionnement en alimentation simple et la façon d'adapter les signaux d'un micro et d'un thermocouple à l'ADC d'un Arduino, d'un ESP32 et d'un Raspberry Pi Pico, avec des valeurs réelles.
Qu'est-ce qu'un amplificateur opérationnel et comment fonctionne-t-il ?
Un ampli-op possède cinq bornes de base : l'entrée non inverseuse (+), l'entrée inverseuse (−), la sortie et deux broches d'alimentation (V+ et V−). Il ne regarde que la différence entre ses deux entrées et la multiplie par son gain en boucle ouverte (A) : Vsortie = A × (V+ − V−). Sur le LM358, A vaut typiquement 100 000 (100 dB). Une différence de seulement 0,1 mV entre les entrées demande donc 10 V en sortie ; mais la sortie ne peut pas dépasser l'alimentation, si bien que la sortie d'un ampli-op sans contre-réaction reste presque toujours collée à l'un des rails : il sature. Ce comportement est utile dans les montages comparateurs. Pour faire un amplificateur, on renvoie une partie de la sortie vers l'entrée inverseuse à travers des résistances ; c'est la contre-réaction (rétroaction négative), et dès lors ce sont les résistances qui fixent le gain, plus l'ampli-op.
| Caractéristique | Ampli-op idéal | LM358 (typique) | LM741 (typique) |
|---|---|---|---|
| Gain en boucle ouverte | Infini | 100 000 (100 dB) | 200 000 (106 dB) |
| Courant d'entrée (polarisation) | 0 | 20 nA | 80 nA |
| Tension de décalage (offset) d'entrée | 0 | 3 mV (7 mV max) | 1 mV (5 mV max) |
| Produit gain-bande passante (GBW) | Infini | 0,7 MHz | Environ 1 MHz |
| Vitesse de balayage (slew rate) | Infinie | 0,3 V/µs | 0,5 V/µs |
| Excursion de sortie | Jusqu'aux rails | Proche de 0 V, en haut V+ − 1,5 V | 1 à 3 V à l'intérieur de chaque rail |
| Alimentation | Illimitée | 3–30 V simple ou ±1,5–±15 V | ±10–±18 V recommandée (LM741C) |
Règles de l'ampli-op idéal : court-circuit virtuel et courant d'entrée nul
- Règle 1 – Les entrées ne consomment aucun courant : un ampli-op idéal a une résistance d'entrée infinie, aucun courant n'entre donc dans les broches + et −. En pratique, le LM358 consomme environ 20 nA, ce qui ne provoque qu'une erreur de 2 mV même à travers une résistance de 100 kΩ.
- Règle 2 – Court-circuit virtuel : avec une contre-réaction, la sortie fait tout ce qu'il faut pour amener les deux entrées à la même tension ; au final V+ = V−. Les entrées ne sont pas reliées entre elles, mais elles se trouvent à la même tension.
- Règle pratique – La sortie ne peut pas dépasser l'alimentation : même si la formule demande 12 V, un ampli-op alimenté en 5 V ne monte au mieux qu'à l'alimentation, et un LM358 seulement jusqu'à environ 3,5 V. Une sortie bloquée à cette limite est dite écrêtée ou saturée.
Avec ces règles, tu peux résoudre presque n'importe quel montage à ampli-op sur papier en quelques lignes : trouve d'abord la tension de l'entrée +, considère que l'entrée − est à la même tension, puis écris les courants dans les résistances avec la loi d'Ohm. Comme le courant ne peut pas entrer dans l'entrée, il doit passer par la résistance de contre-réaction, et c'est de là que vient la tension de sortie. Attention : la deuxième règle n'est valable qu'avec une contre-réaction. Dans les montages sans contre-réaction, comme le comparateur, les entrées sont à des tensions différentes et la sortie est à l'un des rails. Si tu veux réviser les calculs de courant et de tension, jette un œil au guide sur la loi d'Ohm.
Montage non inverseur : formule du gain et exemple
Dans le montage non inverseur, le signal arrive directement sur l'entrée +. Une résistance de contre-réaction (Rf) relie la sortie à l'entrée −, et une résistance de masse (Rg) relie l'entrée − à GND. Ces deux résistances forment un pont diviseur : la tension sur l'entrée − vaut Vsortie × Rg / (Rf + Rg). D'après la règle du court-circuit virtuel, elle est égale à l'entrée, d'où la formule Vsortie = Ventrée × (1 + Rf / Rg). Avec Rf = 10 kΩ et Rg = 1 kΩ, le gain vaut 11 : un signal de 100 mV devient 1,1 V. La sortie évolue dans le même sens que l'entrée, le gain ne descend jamais sous 1 et la résistance d'entrée du montage est très élevée, il ne charge donc pas le capteur.
| Rf | Rg (Rin dans le montage inverseur) | Gain non inverseur | Gain inverseur |
|---|---|---|---|
| 10 kΩ | 10 kΩ | 2 (6,0 dB) | −1 (0 dB) |
| 47 kΩ | 10 kΩ | 5,7 (15,1 dB) | −4,7 (13,4 dB) |
| 10 kΩ | 1 kΩ | 11 (20,8 dB) | −10 (20 dB) |
| 100 kΩ | 4,7 kΩ | 22,3 (27,0 dB) | −21,3 (26,6 dB) |
| 100 kΩ | 1 kΩ | 101 (40,1 dB) | −100 (40 dB) |
Montage inverseur et masse virtuelle
Dans le montage inverseur, l'entrée + est reliée à GND et le signal arrive sur l'entrée − à travers une résistance Rin ; Rf est toujours entre la sortie et l'entrée −. D'après la règle du court-circuit virtuel, l'entrée − est elle aussi à 0 V, sans pourtant être reliée à GND ; on l'appelle la masse virtuelle. Le courant Ventrée / Rin qui traverse Rin ne peut pas entrer dans l'entrée, il passe donc par Rf, et la sortie devient Vsortie = −(Rf / Rin) × Ventrée. Avec Rin = 10 kΩ et Rf = 47 kΩ, le gain vaut −4,7 : une entrée de 0,5 V donne une sortie de −2,35 V. Le signe moins indique que le signal est inversé. La résistance d'entrée du montage vaut à peu près Rin, il peut donc charger un capteur à forte résistance interne.
Une jolie utilisation du montage inverseur est le sommateur (mélangeur) : si tu branches plusieurs signaux sur l'entrée −, chacun à travers sa propre résistance, la sortie est la somme pondérée et inversée de ces signaux. Dans un montage Arduino en alimentation simple, il faut toutefois relier l'entrée + de l'inverseur à une référence, par exemple la moitié de l'alimentation, au lieu de GND ; sinon les entrées positives demandent une sortie négative et la sortie reste collée à 0 V. La formule devient alors Vsortie = Vref − (Rf / Rin) × (Ventrée − Vref).
Suiveur de tension (buffer) : le montage le plus utile, avec un gain de 1
Relie la sortie directement à l'entrée − et envoie le signal sur l'entrée + : tu obtiens un suiveur de tension (étage tampon, buffer). Comme Rf est nulle et Rg infinie, le gain vaut exactement 1 et Vsortie = Ventrée. À quoi sert un montage qui n'amplifie pas ? Il ne prélève presque aucun courant sur son entrée mais peut fournir des milliampères en sortie ; il transforme une source à haute impédance en source à basse impédance. La fiche technique de l'ATmega328P indique que son ADC fonctionne au mieux avec une impédance de source de 10 kΩ ou moins. Un pont diviseur de 100 kΩ + 100 kΩ se comporte comme une source de 50 kΩ, et quand l'Arduino passe d'une voie à l'autre, la mesure peut dériver de quelques pas. Place un suiveur après le pont et le problème disparaît.
Autres usages classiques du suiveur : lisser un signal PWM avec un filtre RC puis le tamponner pour obtenir un DAC simple, distribuer une tension de référence prise sur un potentiomètre à plusieurs circuits, et attaquer un long câble depuis la sortie d'un ampli-op plutôt que depuis la sortie fragile d'un capteur. En alimentation simple, le LM358 suit jusqu'à 0 V, mais sous 5 V il ne dépasse pas environ 3,5 V ; pour tamponner toute la plage 0–5 V, choisis un ampli-op rail-to-rail.
L'ampli-op en comparateur
Sans contre-réaction, un ampli-op devient un interrupteur qui compare deux tensions : si l'entrée + dépasse l'entrée −, ne serait-ce que de quelques millivolts, la sortie monte à la limite haute, sinon elle descend à 0 V. Une veilleuse sans microcontrôleur en est un bel exemple. Relie le point milieu d'un pont monté dans l'ordre 5V, 10 kΩ, LDR, GND à l'entrée +, et le curseur d'un potentiomètre à l'entrée −. Dans le noir, la résistance de la LDR augmente, la tension du point milieu franchit le seuil réglé au potentiomètre et une LED reliée à la sortie par 330 Ω s'allume. Le LM358 suffit pour ça, mais il est lent : avec une vitesse de balayage de 0,3 V/µs, la sortie met plus de 10 µs pour passer de 0 à 3,5 V.
Pour les tâches qui demandent des transitions rapides et nettes, on utilise un vrai comparateur comme le LM393. Le LM393 a le même brochage que le LM358, mais sa sortie est à collecteur ouvert : il ne peut que tirer la sortie vers GND, et pour qu'elle monte il faut une résistance de rappel (pull-up), par exemple 10 kΩ, entre la sortie et l'alimentation. Tu peux ainsi relier la pull-up au 3,3 V et envoyer sans risque la sortie d'un comparateur alimenté en 5 V vers un ESP32 ou un Pico. La petite puce à côté du potentiomètre ajustable bleu du capteur de son KY-038 et des modules d'humidité du sol, de pluie, de flamme et de gaz est presque toujours un LM393.

Avec des signaux lents ou bruités proches du seuil, la sortie d'un comparateur peut osciller des centaines de fois par seconde ; la veilleuse clignote au crépuscule. La solution est l'hystérésis, autrement dit un trigger de Schmitt. Envoie le signal sur l'entrée + à travers une résistance R1 de 10 kΩ et relie une résistance R2 de 1 MΩ de la sortie à l'entrée +. À chaque basculement de la sortie, cette réaction positive décale légèrement le seuil ; l'écart entre les seuils de montée et de descente vaut environ excursion de sortie × R1 / R2. Avec une sortie qui bascule entre 0 et 5 V, 5 × 10k / 1M donne 50 mV d'hystérésis, ce qui suffit en général à absorber le bruit. Tu peux appliquer la même idée en logiciel avec deux seuils distincts ; l'exemple ESP32 plus bas fait exactement cela.
Brochage du LM358 et du LM741
Les deux ampli-op que tu croiseras le plus en électronique amateur sont le LM358 double et le classique LM741 simple. Tous deux existent en boîtier DIP 8 broches. Tiens la puce de façon à lire son marquage, l'encoche vers la gauche : la broche 1 est en bas à gauche et la numérotation tourne dans le sens inverse des aiguilles d'une montre. Les brochages sont différents, tu ne peux donc pas simplement remplacer l'un par l'autre :
| Broche | LM358 (ampli-op double) | LM741 (ampli-op simple) |
|---|---|---|
| 1 | 1OUT – sortie A | Offset null (réglage d'offset) |
| 2 | 1IN− – entrée inverseuse A | Entrée inverseuse (−) |
| 3 | 1IN+ – entrée non inverseuse A | Entrée non inverseuse (+) |
| 4 | GND (V−) | V− (alimentation négative) |
| 5 | 2IN+ – entrée non inverseuse B | Offset null (réglage d'offset) |
| 6 | 2IN− – entrée inverseuse B | Sortie |
| 7 | 2OUT – sortie B | V+ (alimentation positive) |
| 8 | VCC (V+) | NC (non connectée) |
| Caractéristique | LM358 | LM741 | MCP6002 |
|---|---|---|---|
| Nombre de voies | 2 | 1 | 2 |
| Alimentation | 3–30 V simple | ±10–±18 V symétrique recommandée | 1,8–6 V simple |
| En 5 V simple | Fonctionne | Ne fonctionne pratiquement pas | Fonctionne |
| En 3,3 V | Médiocre (sortie ~1,8 V max) | Ne fonctionne pas | Très bien |
| Plage d'entrée | De 0 V à V+ − 1,5 V | ~3 V à l'intérieur des rails | Jusqu'à 0,3 V au-delà des rails |
| Plage de sortie (en 5 V) | ~0,02–3,5 V | Inutilisable | 0,025–4,975 V (rail-to-rail) |
| GBW / vitesse de balayage | 0,7 MHz / 0,3 V/µs | ~1 MHz / 0,5 V/µs | 1 MHz / 0,6 V/µs |
| Consommation | 0,35 mA / voie | 1,7 mA | 0,1 mA / voie |
Le LM741 est la vedette des manuels depuis 1968, mais il a été conçu pour une alimentation symétrique comme ±15 V : ses entrées doivent rester à environ 3 V des rails et sa sortie à 1–3 V. En 5 V simple, une fois ces marges retirées, il ne reste aucune plage utilisable ; si un montage à LM741 ne fonctionne pas alimenté par la broche 5V de l'Arduino, c'est pour cette raison. Le LM358, lui, a été conçu pour l'alimentation simple : ses entrées incluent 0 V, sa sortie peut s'approcher de 0 V à quelques millivolts près, et son seul défaut est de plafonner à V+ − 1,5 V. Sur les cartes en 3,3 V comme l'ESP32 et le Pico, utilise un ampli-op rail-to-rail comme le MCP6002 ; il a le même brochage que le LM358 et se monte donc directement à sa place. S'il te faut quatre voies, le LM324 à 14 broches est le grand frère quadruple du LM358.
Fonctionnement en alimentation simple : masse virtuelle et rail-to-rail
La plupart des montages à ampli-op des manuels utilisent une alimentation symétrique comme ±15 V, et le signal oscille de part et d'autre de 0 V. Dans le monde Arduino, tu n'as en général que 5 V ou 3,3 V. Ce n'est pas un problème pour les signaux continus qui restent toujours positifs, comme ceux d'un thermocouple, d'une résistance de shunt ou d'un LM35 ; on les amplifie directement avec un ampli-op dont la plage d'entrée inclut 0 V. En revanche, les signaux alternatifs qui partent dans le positif et le négatif, comme celui d'un micro, doivent d'abord être remontés au milieu de l'alimentation. Pour cela, tu crées une tension de point milieu avec deux résistances et tu ajoutes à côté un condensateur de 10 µF pour réduire le bruit. Ce point s'appelle la masse virtuelle ou référence ; le signal s'y superpose à travers un condensateur de liaison.
- Choisis le bon ampli-op : les modèles dont la plage d'entrée n'inclut pas 0 V, comme le LM741 ou le TL072, écrêtent de façon inattendue en alimentation simple ; utilise un LM358, un LM324 ou un MCP6002.
- Tiens compte des limites de sortie : en 5 V, la sortie du LM358 va d'environ 0,02 à 3,5 V, donc pour des signaux alternatifs un point milieu vers 1,8 V est mieux équilibré que 2,5 V. Le MCP6002 s'approche à environ 25 mV des deux rails, son point milieu peut donc être exactement VCC/2.
- Alimente l'ampli-op avec la même tension que la carte : un ampli-op alimenté en 12 V peut envoyer plus de 10 V sur une broche de l'ESP32 ou du Pico si le gain est mal choisi.
- Utilise une masse commune : les GND du capteur, de l'ampli-op et de la carte doivent être reliées ; tu trouveras pourquoi dans le guide sur la masse commune.
- Ne laisse pas la voie inutilisée en l'air : câble la moitié libre du LM358 en suiveur (sortie vers l'entrée −) et relie son entrée + à GND ou au point milieu ; des entrées flottantes peuvent provoquer des oscillations et une consommation inutile.
Amplifier le signal d'un micro : préampli pour micro électret
Les micros électret ont une sensibilité typique d'environ −44 dBV/Pa ; autrement dit, même avec une forte pression acoustique de 94 dB, ils ne donnent qu'environ 6 mV. Une conversation normale à un mètre reste autour de 0,1 mV, tandis qu'un claquement de mains juste à côté du micro peut atteindre quelques dizaines de millivolts. Avec le pas de 4,88 mV de l'Arduino, ce signal n'apparaît pas du tout ou ne bouge que de quelques pas ; c'est aussi pourquoi la sortie analogique de modules comme le capteur de son KY-038 est si faible. La solution est un amplificateur alternatif non inverseur d'un gain d'environ 100. Le montage ci-dessous utilise la voie A du LM358 :
| Composant | Valeur | Branchement |
|---|---|---|
| Résistance de polarisation du micro | 2,2 kΩ | Entre 5V et la borne + du micro (borne − du micro à GND) |
| Condensateur de liaison C1 | 1 µF | De la borne + du micro à la broche 3 du LM358 (1IN+) |
| Résistances du point milieu | 100 kΩ et 56 kΩ | 100 kΩ de la broche 3 au 5V, 56 kΩ de la broche 3 à GND (environ 1,8 V) |
| Contre-réaction Rf | 100 kΩ | Entre la broche 1 (1OUT) et la broche 2 (1IN−) |
| Rg et C2 | 1 kΩ + 10 µF | En série de la broche 2 à GND (borne − de C2 à GND) |
| Alimentation | Broche 8 et broche 4 | Broche 8 au 5V, broche 4 à GND, 100 nF entre les deux |
| Sortie | Broche 1 | Arduino Uno A0 (ESP32 GPIO 34, Pico GP26 : avec MCP6002 et 3,3 V) |
Grâce au condensateur C2, le montage est en continu un suiveur de gain 1 ; dans le silence, la sortie repose au point milieu, vers 1,8 V. Aux fréquences audio, en revanche, C2 se comporte comme un court-circuit et le gain devient 1 + 100k / 1k = 101 (40 dB). La fréquence de coupure basse est fixée par Rg et C2 : 1 / (2π × 1 kΩ × 10 µF) ≈ 16 Hz. La limite haute est dictée par le produit gain-bande passante de l'ampli-op : sur le LM358, 0,7 MHz / 101 ≈ 7 kHz, ce qui suffit pour la voix. Si tu veux plus de gain, n'oublie pas que la bande passante diminue dans la même proportion ; pour un gain de 1000, mieux vaut le répartir sur deux étages d'environ 32 chacun.
1// LM358 mikrofon ön yükselteci ile ses seviyesi / Sound level with an LM358 mic preamp
2const int MIC_PIN = A0; // LM358 pin 1 (1OUT)
3const float GAIN = 101.0; // 1 + 100k / 1k
4const unsigned long WINDOW_MS = 50; // ölçüm penceresi / sampling window
5
6void setup() {
7 Serial.begin(115200);
8}
9
10void loop() {
11 int minV = 1023, maxV = 0;
12 unsigned long start = millis();
13 while (millis() - start < WINDOW_MS) { // 50 ms boyunca örnekle / sample for 50 ms
14 int v = analogRead(MIC_PIN);
15 if (v < minV) minV = v;
16 if (v > maxV) maxV = v;
17 }
18 float ppVolt = (maxV - minV) * 5.0 / 1023.0; // tepe-tepe çıkış / peak-to-peak output
19 float micMv = ppVolt * 1000.0 / GAIN; // mikrofonun kendi sinyali / the mic's own signal
20
21 Serial.print("Çıkış / output: ");
22 Serial.print(ppVolt, 3);
23 Serial.print(" V p-p Mikrofon / mic: ");
24 Serial.print(micMv, 2);
25 Serial.println(" mV p-p");
26}Le code prend autant d'échantillons que possible pendant 50 ms, cherche la plus petite et la plus grande valeur et convertit l'écart en volts ; c'est l'amplitude crête à crête du son. En divisant le résultat par 101, on obtient la tension produite par le micro lui-même. Dans une pièce calme, la sortie ne bouge que de quelques pas d'ADC (0,01–0,02 V), tandis qu'un claquement de mains proche dépasse facilement 1 V. Si le signal s'écrête, c'est-à-dire si la sortie bute sur 0 V ou 3,5 V, descends Rf à 47 kΩ. Tu trouveras comment stabiliser la mesure dans le guide sur le filtrage des données de capteur.
Amplifier un thermocouple : thermocouple de type K et LM358
Un thermocouple de type K produit une petite tension proportionnelle à l'écart de température à la jonction où deux métaux différents se rejoignent : environ 41 µV/°C. On mesure 4,1 mV à 100 °C, 20,6 mV à 500 °C et 41,3 mV à 1000 °C. Branché directement sur l'Arduino, un pas d'ADC (4,88 mV) correspond à environ 119 °C ; ce n'est pas une mesure. Un montage non inverseur de gain 101 réalisé sur la voie B du LM358 porte le signal à 4,14 mV/°C : un pas vaut désormais environ 1,2 °C, et la limite de sortie de 3,5 V du LM358 permet de mesurer jusqu'à environ 700–800 °C selon l'offset. Le câblage : borne + du thermocouple sur la broche 5 (2IN+), borne − à GND ; Rf = 100 kΩ entre les broches 7 et 6, Rg = 1 kΩ entre la broche 6 et GND ; la broche 7 va sur l'entrée A1 de l'Arduino. Sur un type K, le fil d'alumel, qui est la borne −, est légèrement magnétique : pratique pour distinguer les bornes.
En réalité, un thermocouple mesure l'écart entre la soudure chaude et la soudure froide, là où ses fils rejoignent la connexion en cuivre. Pour connaître la vraie température, il faut mesurer séparément la température de la soudure froide et l'ajouter ; c'est la compensation de soudure froide. Le code ci-dessous utilise pour cela un LM35 placé juste à côté des bornes de connexion (sortie sur A2). De plus, l'offset d'entrée du LM358, de 3 à 7 mV, est lui aussi multiplié par 101 et crée en sortie une erreur de 0,3 à 0,7 V, soit 70 à 170 °C. Le code mesure cet offset au démarrage et le soustrait des mesures suivantes ; mets donc la carte sous tension quand la sonde est à température ambiante.
1// K tipi termokupl + LM358 (kazanç 101) + LM35 soğuk uç / K-type thermocouple + LM358 (gain 101) + LM35 cold junction
2const int TC_PIN = A1; // LM358 pin 7 (2OUT)
3const int LM35_PIN = A2; // LM35 çıkışı / LM35 output
4const float GAIN = 101.0; // 1 + 100k / 1k
5const float MV_PER_C = 0.041; // K tipi: yaklaşık 41 µV/°C / K-type: about 41 µV/°C
6float zeroMv = 0; // açılışta ölçülen ofset / offset measured at power-up
7
8float readMv(int pin) {
9 long sum = 0;
10 for (int i = 0; i < 64; i++) sum += analogRead(pin); // 64 okumanın ortalaması / average of 64 readings
11 return sum / 64.0 * 5000.0 / 1023.0;
12}
13
14void setup() {
15 Serial.begin(115200);
16 delay(500);
17 zeroMv = readMv(TC_PIN); // prob oda sıcaklığında olmalı / probe must be at room temperature
18 Serial.print("Ofset / offset: ");
19 Serial.print(zeroMv, 1);
20 Serial.println(" mV");
21}
22
23void loop() {
24 float coldC = readMv(LM35_PIN) / 10.0; // LM35: 10 mV/°C
25 float tcMv = (readMv(TC_PIN) - zeroMv) / GAIN; // termokupl gerilimi / thermocouple voltage
26 float hotC = coldC + tcMv / MV_PER_C; // soğuk uç telafisi / cold-junction compensation
27
28 Serial.print("Ortam / ambient: ");
29 Serial.print(coldC, 1);
30 Serial.print(" °C Prob / probe: ");
31 Serial.print(hotC, 1);
32 Serial.println(" °C");
33 delay(500);
34}Adapter le signal à l'ADC de l'Arduino : le placer dans la bonne plage
Le vrai travail d'un ampli-op dans les projets Arduino est d'amener le signal d'un capteur dans la plage que l'ADC exploite le mieux. La règle est simple : la valeur maximale du signal doit approcher le haut de la plage de l'ADC, sans déborder sur les extrémités où l'ampli-op et l'ADC ne sont plus linéaires. Par exemple, le LM35 donne 0–500 mV entre 0 et 50 °C ; lu directement sur un Uno, tu obtiens une résolution de 0,49 °C par pas. Si tu amplifies le même signal avec un gain de 6,6 jusqu'à 0–3,3 V, la résolution descend à 0,074 °C. Voici la conception étape par étape :
- Trouve la plage de sortie du capteur : relève dans la fiche technique la tension de sortie minimale et maximale (LM35, 0–50 °C : 0–0,5 V).
- Choisis la plage cible : la zone sûre est d'environ 0,02–3,5 V pour un Uno avec LM358, 0,15–2,5 V pour un ESP32 et 0,03–3,25 V pour un Pico avec MCP6002.
- Calcule le gain : G = maximum visé / maximum du capteur = 3,3 / 0,5 = 6,6. Pour 1 + Rf / Rg = 6,6 en montage non inverseur, choisis Rf = 56 kΩ et Rg = 10 kΩ.
- Retire l'offset : si le capteur travaille dans une plage qui ne commence pas à zéro, comme 1–2 V, soustrais d'abord la tension de référence (Vref dans un inverseur, ou un amplificateur différentiel), puis amplifie.
- Protège et filtre : mets une résistance série de 1 kΩ entre la sortie de l'ampli-op et la broche de l'ADC, et 100 nF entre la broche et GND. Ce filtre RC atténue le bruit au-dessus d'environ 1,6 kHz et limite tout courant de défaut vers la broche.
- Recalcule dans le logiciel : divise la tension mesurée par le gain pour retrouver la vraie tension du capteur (Vcapteur = Vadc / G) ; mesure les résistances au multimètre pour préciser le gain.
| Carte | ADC | Plage d'entrée conseillée | Pas | Broches analogiques |
|---|---|---|---|---|
| Arduino Uno | 10 bits | 0–5 V (0–1,1 V avec la référence interne) | 4,88 mV (1,07 mV) | A0–A5 |
| ESP32 | 12 bits | Environ 0,15–2,5 V (atténuation par défaut de 11 dB) | ~0,8 mV | GPIO 32–39 (ADC1, fonctionne aussi avec le Wi-Fi) |
| Raspberry Pi Pico | 12 bits | 0–3,3 V | 0,81 mV | GP26, GP27, GP28 |
Lire la sortie d'un ampli-op avec l'ESP32 : interrupteur à claquement de mains
Comme l'ESP32 fonctionne en 3,3 V, monte le même circuit de micro avec un MCP6002 et alimente-le par la broche 3V3 ; utilise deux résistances de 100 kΩ pour le point milieu (1,65 V). Si tu alimentes un LM358 en 5 V, sa sortie peut atteindre 3,5 V et malmener la broche de l'ESP32. Relie la sortie de l'ampli-op au GPIO 34, l'une des voies ADC1 qui fonctionnent aussi quand le Wi-Fi est actif. Le code ci-dessous mesure l'amplitude crête à crête sur des fenêtres de 20 ms, utilise les millivolts étalonnés de analogReadMilliVolts() et applique une hystérésis logicielle avec deux seuils distincts : chaque claquement de mains inverse l'état de la LED intégrée. Si tu utilises la carte pour la première fois, commence par les étapes d'installation du guide Qu'est-ce que l'ESP32.
1// ESP32: MCP6002 mikrofon yükselteci ile el çırpma anahtarı / ESP32: clap switch with an MCP6002 mic preamp
2const int MIC_PIN = 34; // MCP6002 çıkışı, ADC1 kanalı / MCP6002 output, ADC1 channel
3const int LED_PIN = 2; // dahili LED / onboard LED
4const int ON_MV = 800; // üst eşik, mV tepe-tepe / upper threshold, mV peak-to-peak
5const int OFF_MV = 300; // alt eşik: histerezis / lower threshold: hysteresis
6
7bool loud = false;
8bool ledOn = false;
9
10void setup() {
11 Serial.begin(115200);
12 pinMode(LED_PIN, OUTPUT);
13}
14
15void loop() {
16 int minMv = 3300, maxMv = 0;
17 unsigned long start = millis();
18 while (millis() - start < 20) { // 20 ms pencere / 20 ms window
19 int mv = analogReadMilliVolts(MIC_PIN); // kalibre edilmiş mV / calibrated mV
20 if (mv < minMv) minMv = mv;
21 if (mv > maxMv) maxMv = mv;
22 }
23 int pp = maxMv - minMv;
24
25 if (!loud && pp > ON_MV) { // üst eşik aşıldı: alkış / upper threshold crossed: a clap
26 loud = true;
27 ledOn = !ledOn;
28 digitalWrite(LED_PIN, ledOn ? HIGH : LOW);
29 Serial.printf("Alkış / clap: %d mV p-p\n", pp);
30 delay(250); // yankıları yok say / ignore echoes
31 } else if (loud && pp < OFF_MV) { // ses alt eşiğin altına indi / sound fell below the lower threshold
32 loud = false;
33 }
34}Raspberry Pi Pico et MicroPython : mesurer un courant avec une résistance de shunt
Autre tâche pratique pour un ampli-op : mesurer un courant. Si tu places une résistance de shunt de 0,1 Ω entre la borne négative d'un moteur ou d'un ruban LED et GND, un courant de 1 A n'y fait chuter que 100 mV. Un montage non inverseur à MCP6002 (Rf = 100 kΩ, Rg = 4,7 kΩ) multiplie cette tension par 22,3 : 1 A devient 2,23 V, et avec la plage de 3,3 V du Pico tu mesures jusqu'à environ 1,45 A. Le haut du shunt va sur la broche 3 du MCP6002 et la sortie de l'ampli-op (broche 1) sur la broche GP26 (ADC0) du Pico ; l'ampli-op est alimenté par la broche 3V3(OUT) et la masse de l'alimentation de la charge est reliée à celle du Pico. À 1,5 A, le shunt dissipe 0,225 W : utilise une résistance d'au moins 0,5 W.
1# Pico: 0,1 Ω şönt + MCP6002 (kazanç 22,3) ile akım ölçümü / current sensing with a 0.1 Ω shunt + MCP6002 (gain 22.3)
2from machine import ADC
3import time
4
5adc = ADC(26) # GP26 = ADC0, MCP6002 pin 1
6VREF = 3.3
7GAIN = 1 + 100000 / 4700 # Rf = 100k, Rg = 4.7k -> 22.3
8SHUNT = 0.1 # şönt direnci, ohm / shunt resistance, ohms
9
10def read_volts(n=100):
11 total = 0
12 for _ in range(n): # 100 okumanın ortalaması / average of 100 readings
13 total += adc.read_u16()
14 return total / n * VREF / 65535
15
16zero = read_volts() # yük kapalıyken ofset / offset with the load off
17print("Sıfır / zero: {:.3f} V".format(zero))
18
19while True:
20 v_out = read_volts() - zero
21 amps = v_out / GAIN / SHUNT # I = V / R
22 print("Akım / current: {:.3f} A".format(max(amps, 0)))
23 time.sleep(0.5)Au démarrage, charge coupée, le code mesure l'offset de l'ampli-op et le soustrait des mesures suivantes ; la moyenne de 100 lectures atténue le bruit de l'ADC. Pour des courants plus forts, baisse la valeur du shunt ou le gain ; vérifie la chute de tension et la puissance dissipée dans le shunt avec l'outil Loi d'Ohm. Si tu préfères une solution toute faite, le capteur de courant ACS712 à effet Hall mesure le courant en gardant la charge isolée de ton montage. Si tu configures le Pico pour la première fois, le guide Qu'est-ce que le Raspberry Pi Pico explique l'installation de MicroPython.
Autres montages à ampli-op
| Montage | Formule / comportement | Où l'utilise-t-on ? |
|---|---|---|
| Sommateur (mélangeur) | Vsortie = −Rf × (V1/R1 + V2/R2 + …) | Table de mixage audio, combiner plusieurs signaux |
| Amplificateur différentiel | Vsortie = (R2 / R1) × (V2 − V1) | Retirer un offset, mesurer l'écart entre deux points |
| Amplificateur d'instrumentation | Gain élevé réglé par une seule résistance, excellente réjection du mode commun | Capteurs de force, ponts de Wheatstone, signaux biomédicaux |
| Intégrateur | Condensateur dans la contre-réaction ; la sortie est l'intégrale de l'entrée dans le temps | Générateur de signal triangulaire, régulation PI |
| Filtre actif (Sallen-Key) | Filtrage du deuxième ordre avec deux résistances et deux condensateurs | Filtres audio, filtre anti-repliement avant l'ADC |
| Trigger de Schmitt | Comparateur à réaction positive, deux seuils distincts | Sortie numérique propre à partir d'un signal bruité |
Pour les capteurs en pont comme les capteurs de force, dont les deux sorties sont au milieu de l'alimentation et ne diffèrent que de quelques millivolts, les puces toutes faites sont plus pratiques : le HX711 intègre un amplificateur de gain jusqu'à 128 et un ADC 24 bits. L'ampli-op de la carte d'un capteur de pouls, lui, amplifie et filtre le faible signal du capteur de lumière ; c'est pourquoi l'Arduino voit une onde de pouls nette dès le premier essai.

Idées de projets avec un ampli-op
- Lampe qui s'allume en claquant des mains : commande un module relais avec le préampli de micro et le code ESP32 à hystérésis.
- Vumètre : transforme l'amplitude crête à crête en une barre qui monte avec la musique sur un ruban LED WS2812B.
- Thermomètre de four : mesure jusqu'à 500 °C avec l'amplificateur de thermocouple et affiche la valeur sur un écran OLED.
- Veilleuse sans code : réalise une LED qui s'allume dans le noir avec une LDR et un LM358 en comparateur, sans aucun microcontrôleur.
- Balance numérique : lis un capteur de force avec le HX711 et construis une balance de cuisine précise au gramme.
- Surveillance du courant moteur : mesure le courant du moteur de ta voiture robot avec un shunt et un ampli-op, et arrête le moteur quand le courant monte parce qu'il est bloqué.
Erreurs fréquentes et solutions
| Symptôme | Cause probable | Solution |
|---|---|---|
| Sortie toujours à 0 V ou tout en haut | Pas de contre-réaction ou branchée sur la mauvaise entrée ; gain trop élevé ; entrée hors de la plage d'entrée | Vérifie que Rf va bien à l'entrée −, baisse le gain, assure-toi que l'entrée est entre 0 et V+ − 1,5 V |
| Montage à LM741 qui ne marche pas en 5 V | Le LM741 demande une alimentation symétrique plus élevée | Utilise un LM358 ou un MCP6002 |
| La sortie ne dépasse pas 3,5 V | La sortie du LM358 plafonne à V+ − 1,5 V | Choisis le gain en conséquence ou utilise un ampli-op rail-to-rail |
| Mesures bruitées et instables | Pas de découplage d'alimentation, fils longs, gain inutilement élevé | 100 nF sur les broches d'alimentation, fils courts, filtre RC en sortie, moyenne logicielle |
| Le montage oscille tout seul | L'ampli-op attaque directement un long câble ou une forte charge capacitive | Ajoute une résistance série de 100–470 Ω en sortie |
| La sortie du comparateur ne monte jamais | Le LM393 est à collecteur ouvert et n'a pas de pull-up | Relie 4,7–10 kΩ entre la sortie et l'alimentation |
| Broche de l'ESP32 ou du Pico endommagée | L'ampli-op était alimenté en 5 V ou 12 V et la sortie a dépassé 3,3 V | Alimente l'ampli-op en 3,3 V ou ajoute un pont diviseur et une diode d'écrêtage en sortie |
| Sortie bloquée à 0 V avec de petits signaux | Un offset d'entrée négatif colle la sortie en bas en alimentation simple | Utilise un ampli-op de précision ou applique une petite polarisation à l'entrée |
Un ampli-op est un traducteur qui transpose le monde analogique dans une langue que le microcontrôleur comprend : une fois que tu connais les deux règles et les deux formules de gain, tu peux adapter à l'ADC n'importe quel signal, qu'il vienne d'un micro, d'un thermocouple, d'une résistance de shunt ou d'un capteur en pont. Essaie des valeurs avec l'outil Gain d'ampli-op ; dans l'application BlueGrays, tu trouveras des projets analogiques comme la mesure de lumière avec une LDR, une veilleuse, un voltmètre numérique, la mesure de température avec une CTN et les capteurs de flamme et de gaz, pas à pas avec schémas et code.
Questions fréquentes
À quoi sert un amplificateur opérationnel ?
Un amplificateur opérationnel sert à amplifier des signaux faibles, comparer deux tensions, additionner ou soustraire des signaux, les filtrer et tamponner des sources à haute impédance. Dans les projets Arduino, on l'utilise surtout pour porter des signaux de quelques millivolts, comme ceux d'un micro, d'un thermocouple ou d'une résistance de shunt, à un niveau que l'ADC peut lire.
Comment calculer le gain d'un ampli-op ?
En montage non inverseur, le gain vaut 1 + Rf / Rg, et en montage inverseur −Rf / Rin. Par exemple, avec Rf = 100 kΩ et Rg = 1 kΩ, le gain non inverseur vaut 101 et le gain inverseur −100. En décibels, on calcule 20 × log10(gain).
Quelle est la différence entre le LM358 et le LM741 ?
Le LM358 réunit deux ampli-op dans un boîtier, fonctionne avec une alimentation simple de 3 à 30 V et sa plage d'entrée inclut 0 V ; il s'utilise donc directement avec le 5 V de l'Arduino. Le LM741 est un ampli-op simple prévu pour une alimentation symétrique comme ±15 V et ne fonctionne pratiquement pas en 5 V simple. Leurs brochages sont aussi différents.
Un ampli-op fonctionne-t-il avec une seule alimentation de 5 V ?
Oui, les modèles conçus pour l'alimentation simple fonctionnent, comme le LM358, le LM324 et le MCP6002. Pour des signaux alternatifs, il faut remonter l'entrée au milieu de l'alimentation et tenir compte des limites de sortie ; la sortie du LM358 ne monte qu'à environ 3,5 V sous 5 V.
Quelle est la différence entre un ampli-op et un comparateur ?
Un ampli-op est compensé en fréquence pour rester stable avec une contre-réaction, et sa sortie peut fournir et absorber du courant. Les comparateurs comme le LM393 sont conçus pour basculer vite sans contre-réaction, et la plupart ont une sortie à collecteur ouvert qui demande une résistance de rappel. Un ampli-op peut servir de comparateur lent, mais un comparateur ne doit pas servir d'amplificateur.
Qu'est-ce qu'un ampli-op rail-to-rail ?
Sur un ampli-op rail-to-rail, l'entrée ou la sortie peut s'approcher à quelques dizaines de millivolts des tensions d'alimentation. Par exemple, le MCP6002 fournit 0,025 à 4,975 V sous 5 V, alors que le LM358 ne monte qu'à environ 3,5 V. Sur les cartes en 3,3 V comme l'ESP32 et le Raspberry Pi Pico, il faut un ampli-op rail-to-rail pour exploiter toute la plage de l'ADC.
Projets à réaliser après cet article
Voir tous les projets
Mesurer l'intensité lumineuse avec une LDR
Envie de voir en chiffres à quel point ta chambre est lumineuse ? Le LDR, une petite pièce sensible à la lumière, mesure la lumière ambiante, et l'Arduino écrit la valeur sur l'écran de ton ordinateur

Veilleuse avec LDR
Une petite veilleuse qui s'allume toute seule quand il fait nuit et s'éteint au matin. Un capteur de lumière mesure la clarté de la pièce, et l'Arduino allume la LED quand il fait assez sombre puis l'

Mesure de l'intensité lumineuse avec le module LDR ESP32
Suivi en temps réel sur le moniteur série de la valeur brute de l'ADC du module LDR et du pourcentage relatif de luminosité calculé à partir de références dans l'obscurité et à la lumière. Ce pourcentage n'est pas une mesure en lux. Permet de comprendre le principe de calibrage du module. Il est préférable de réaliser cet exercice avant le projet 10, car il sert à déterminer la valeur seuil.

Voltmètre numérique avec écran LCD
Découvre quelle tension fournit une pile ou un adaptateur avec un appareil de mesure fait maison. Un diviseur de deux résistances abaisse la tension élevée à un niveau que la carte peut lire, et l'Ard

Mesure de la température avec NTC et écran LCD 2x16
Mesure la température ambiante avec un capteur qui ressemble à une petite perle. Cette pièce, appelée NTC, laisse passer l'électricité de plus en plus facilement en chauffant ; l'Arduino lit ce change

Utilisation du détecteur de flamme
Un petit gardien qui repère le feu avant toi, dans la cuisine ou l'atelier. Le capteur de flamme capte la lumière invisible émise par le feu ; quand tout va bien, la LED verte est allumée, et quand il

Utilisation des capteurs de gaz
Un petit gardien qui repère une fuite de gaz dans la cuisine avant toi. Le capteur de gaz renifle l'air sans arrêt ; tant que tout va bien, la LED verte reste allumée, et quand le gaz dans l'air dépas

Luminosité d'une LED avec un Potentiomètre sur ESP32 (Analogique → PWM)
Dans ce projet, nous contrôlons la luminosité d'une LED de manière analogique à l'aide d'un potentiomètre. La broche ADC de l'ESP32 lit la tension entre 0 et 3,3 V provenant du potentiomètre, puis cette valeur est convertie en signal PWM (modulation de largeur d'impulsion) envoyé à la LED. Ainsi, la LED s'allume et s'éteint progressivement. Avec Arduino Core 3.0+, analogWrite() est utilisable directement; sur ESP32-S2/S3, la résolution de l'ADC est fixée à 12 bits.
Autres articles
Application BlueGrays
Réalise ce montage pas à pas sur ton téléphone
Schéma, code et liste des composants sur un seul écran. Plus de 200 projets Arduino, ESP32 et Pico à réaliser.
Scanne avec ton téléphone
Pointe l’appareil photo vers le code : la boutique d’applications de ton téléphone s’ouvre.
ou ouvre la boutique

