Operationsverstärker einfach erklärt: Formeln, LM358 und Arduino
Operationsverstärker einfach erklärt: invertierender und nichtinvertierender Verstärker, Impedanzwandler, Komparator, LM358/LM741-Pinbelegung, Arduino-ADC.
Ein Operationsverstärker (OPV, englisch op-amp) ist ein kleiner integrierter Schaltkreis, meist mit acht Beinchen, der die winzige Spannungsdifferenz zwischen seinen beiden Eingängen hunderttausendfach verstärkt. Das ist die kurze Antwort auf die Frage, was ein Operationsverstärker ist, aber eine so riesige Verstärkung allein ist kaum nützlich. Die Magie beginnt, wenn ein paar Widerstände einen Teil des Ausgangs auf den Eingang zurückführen: Dann wird der OPV zu einem präzisen Verstärker, dessen Verstärkung ein Widerstandsverhältnis festlegt, zu einem Puffer, einem Komparator oder einem Filter. Vom Mikrofonvorverstärker über Pulssensoren und Waagenmodule bis zur Soundkarte steckt in fast jeder Ecke der Analogelektronik ein OPV.
Beim Arbeiten mit dem Arduino brauchst du einen OPV vor allem aus diesem Grund: Viele Sensoren liefern Signale im Millivoltbereich, der ADC des Arduino Uno kann aber nur Schritte von 4,88 mV auflösen. Ein Thermoelement Typ K liefert bei 100 °C nur 4,1 mV; schließt du es direkt an, bemerkt der Arduino diese Temperatur kaum. In dieser Anleitung lernst du die Regeln des idealen OPV, die Formeln für den invertierenden und nichtinvertierenden Verstärker, den Spannungsfolger, den Komparator, die Pinbelegung von LM358 und LM741, den Betrieb mit einfacher Versorgung und wie du Mikrofon- und Thermoelementsignale an den ADC von Arduino, ESP32 und Raspberry Pi Pico anpasst, alles mit echten Werten.
Was ist ein Operationsverstärker und wie funktioniert er?
Ein OPV hat fünf grundlegende Anschlüsse: den nichtinvertierenden Eingang (+), den invertierenden Eingang (−), den Ausgang und zwei Versorgungsanschlüsse (V+ und V−). Er betrachtet nur die Differenz zwischen seinen beiden Eingängen und multipliziert sie mit seiner Leerlaufverstärkung (A): Uaus = A × (U+ − U−). Beim LM358 beträgt A typisch 100.000 (100 dB). Eine Differenz von nur 0,1 mV zwischen den Eingängen verlangt also 10 V am Ausgang; der Ausgang kann aber nicht über die Versorgung hinaus, deshalb klebt der Ausgang eines OPV ohne Rückkopplung fast immer an einer der Versorgungsschienen, er geht also in die Sättigung. Dieses Verhalten ist in Komparatorschaltungen nützlich. Für einen Verstärker wird ein Teil des Ausgangs über Widerstände auf den invertierenden Eingang zurückgeführt; das nennt man Gegenkopplung, und ab dann bestimmen die Widerstände die Verstärkung, nicht mehr der OPV.
| Eigenschaft | Idealer OPV | LM358 (typisch) | LM741 (typisch) |
|---|---|---|---|
| Leerlaufverstärkung | Unendlich | 100.000 (100 dB) | 200.000 (106 dB) |
| Eingangsstrom (Bias) | 0 | 20 nA | 80 nA |
| Eingangs-Offsetspannung | 0 | 3 mV (max. 7 mV) | 1 mV (max. 5 mV) |
| Verstärkungs-Bandbreite-Produkt (GBW) | Unendlich | 0,7 MHz | Etwa 1 MHz |
| Anstiegsrate (Slew Rate) | Unendlich | 0,3 V/µs | 0,5 V/µs |
| Ausgangshub | Bis zu den Schienen | Nahe 0 V, oben V+ − 1,5 V | 1–3 V innerhalb jeder Schiene |
| Versorgung | Beliebig | 3–30 V einfach oder ±1,5–±15 V | ±10–±18 V empfohlen (LM741C) |
Regeln des idealen OPV: virtueller Kurzschluss und kein Eingangsstrom
- Regel 1 – Die Eingänge ziehen keinen Strom: Ein idealer OPV hat einen unendlichen Eingangswiderstand, in die Anschlüsse + und − fließt also kein Strom. In der Praxis zieht der LM358 etwa 20 nA, was selbst an einem 100-kΩ-Widerstand nur einen Fehler von 2 mV verursacht.
- Regel 2 – Virtueller Kurzschluss: Mit Gegenkopplung tut der Ausgang alles Nötige, um beide Eingänge auf dieselbe Spannung zu bringen; am Ende gilt U+ = U−. Die Eingänge sind nicht miteinander verbunden, liegen aber auf derselben Spannung.
- Praxisregel – Der Ausgang kann die Versorgung nicht überschreiten: Selbst wenn die Formel 12 V verlangt, kommt ein mit 5 V versorgter OPV höchstens bis zur Versorgung, ein LM358 nur bis etwa 3,5 V. Einen Ausgang, der an dieser Grenze ansteht, nennt man Clipping oder Sättigung.
Mit diesen Regeln kannst du fast jede OPV-Schaltung in wenigen Zeilen auf dem Papier lösen: Bestimme zuerst die Spannung am +-Eingang, nimm an, dass der −-Eingang auf derselben Spannung liegt, und schreibe dann die Ströme durch die Widerstände mit dem ohmschen Gesetz auf. Da der Strom nicht in den Eingang fließen kann, muss er durch den Rückkopplungswiderstand, und daraus ergibt sich die Ausgangsspannung. Denk daran: Die zweite Regel gilt nur mit Gegenkopplung. In Schaltungen ohne Rückkopplung, etwa beim Komparator, liegen die Eingänge auf unterschiedlichen Spannungen und der Ausgang steht an einer der Schienen. Wenn du Strom- und Spannungsrechnungen auffrischen willst, wirf einen Blick in die Anleitung zum ohmschen Gesetz.
Nichtinvertierender Verstärker: Verstärkungsformel und Beispiel
Beim nichtinvertierenden Verstärker gelangt das Signal direkt an den +-Eingang. Ein Rückkopplungswiderstand (Rf) führt vom Ausgang zum −-Eingang, ein Massewiderstand (Rg) vom −-Eingang nach GND. Diese beiden Widerstände bilden einen Spannungsteiler: Am −-Eingang liegt Uaus × Rg / (Rf + Rg). Nach der Regel des virtuellen Kurzschlusses ist das gleich der Eingangsspannung, daraus folgt die Formel Uaus = Uein × (1 + Rf / Rg). Mit Rf = 10 kΩ und Rg = 1 kΩ beträgt die Verstärkung 11, ein Signal von 100 mV wird also zu 1,1 V. Der Ausgang bewegt sich in dieselbe Richtung wie der Eingang, die Verstärkung fällt nie unter 1 und der Eingangswiderstand der Schaltung ist sehr hoch, sodass sie den Sensor nicht belastet.
| Rf | Rg (Rein beim invertierenden Verstärker) | Nichtinvertierende Verstärkung | Invertierende Verstärkung |
|---|---|---|---|
| 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) |
Invertierender Verstärker und virtuelle Masse
Beim invertierenden Verstärker liegt der +-Eingang an GND, und das Signal erreicht den −-Eingang über einen Widerstand Rein; Rf sitzt wieder zwischen Ausgang und −-Eingang. Nach der Regel des virtuellen Kurzschlusses liegt auch der −-Eingang auf 0 V, ist aber nicht mit GND verbunden; das nennt man virtuelle Masse. Der Strom Uein / Rein durch Rein kann nicht in den Eingang fließen, er muss also durch Rf, und der Ausgang wird zu Uaus = −(Rf / Rein) × Uein. Mit Rein = 10 kΩ und Rf = 47 kΩ beträgt die Verstärkung −4,7: Ein Eingang von 0,5 V ergibt −2,35 V am Ausgang. Das Minuszeichen bedeutet, dass das Signal invertiert wird. Der Eingangswiderstand der Schaltung entspricht etwa Rein, sie kann also einen Sensor mit hohem Innenwiderstand belasten.
Eine schöne Anwendung der invertierenden Schaltung ist der Summierverstärker (Mischer): Schließt du mehrere Signale über jeweils eigene Widerstände an den −-Eingang an, ist der Ausgang die invertierte, gewichtete Summe dieser Signale. In einer Arduino-Schaltung mit einfacher Versorgung musst du den +-Eingang eines invertierenden Verstärkers allerdings statt an GND an eine Referenz legen, zum Beispiel an die halbe Versorgung; sonst verlangen positive Eingänge einen negativen Ausgang und der Ausgang klebt bei 0 V. Dann lautet die Formel Uaus = Uref − (Rf / Rein) × (Uein − Uref).
Spannungsfolger (Impedanzwandler): die nützlichste Schaltung mit Verstärkung 1
Verbindest du den Ausgang direkt mit dem −-Eingang und gibst das Signal auf den +-Eingang, erhältst du einen Spannungsfolger (Impedanzwandler, Puffer). Da Rf null und Rg unendlich ist, beträgt die Verstärkung genau 1 und Uaus = Uein. Warum ist eine Schaltung nützlich, die nicht verstärkt? Weil sie dem Eingang fast keinen Strom entnimmt, am Ausgang aber Milliampere liefern kann; sie macht aus einer hochohmigen Quelle eine niederohmige. Laut Datenblatt des ATmega328P arbeitet der ADC am besten mit einer Quellimpedanz von 10 kΩ oder weniger. Ein Spannungsteiler aus 100 kΩ + 100 kΩ verhält sich wie eine 50-kΩ-Quelle, und wenn der Arduino zwischen Kanälen umschaltet, kann der Messwert um einige Schritte abweichen. Setzt du einen Spannungsfolger hinter den Teiler, verschwindet das Problem.
Weitere klassische Einsätze des Spannungsfolgers: ein PWM-Signal mit einem RC-Filter glätten und puffern, um einen einfachen DAC zu bauen, eine Referenzspannung von einem Potentiometer an mehrere Schaltungen verteilen und ein langes Kabel vom OPV-Ausgang statt von einem schwachen Sensorausgang treiben. Mit einfacher Versorgung folgt der LM358 bis hinunter auf 0 V, kommt bei 5 V Versorgung aber nicht über etwa 3,5 V; willst du den vollen Bereich von 0–5 V puffern, wähle einen Rail-to-Rail-OPV.
Der Operationsverstärker als Komparator
Ohne Rückkopplung wird ein OPV zu einem Schalter, der zwei Spannungen vergleicht: Liegt der +-Eingang auch nur ein paar Millivolt über dem −-Eingang, geht der Ausgang an die obere Grenze, liegt er darunter, geht er auf 0 V. Ein Nachtlicht ohne Mikrocontroller ist ein schönes Beispiel. Verbinde den Mittelpunkt eines Teilers in der Reihenfolge 5V, 10 kΩ, LDR, GND mit dem +-Eingang und den Schleifer eines Potentiometers mit dem −-Eingang. Im Dunkeln steigt der Widerstand des LDR, die Mittelpunktspannung überschreitet die mit dem Poti eingestellte Schwelle, und eine über 330 Ω am Ausgang angeschlossene LED leuchtet. Der LM358 reicht dafür aus, ist aber langsam: Mit einer Anstiegsrate von 0,3 V/µs braucht der Ausgang mehr als 10 µs, um von 0 auf 3,5 V zu steigen.
Für Aufgaben mit schnellen, sauberen Übergängen nimmt man einen echten Komparator wie den LM393. Der LM393 hat dieselbe Pinbelegung wie der LM358, sein Ausgang ist aber ein Open-Collector: Er kann den Ausgang nur nach GND ziehen und braucht zum Hochgehen einen Pull-up-Widerstand, etwa 10 kΩ, zwischen Ausgang und Versorgung. So kannst du den Pull-up an 3,3 V legen und den Ausgang eines mit 5 V versorgten Komparators gefahrlos an einen ESP32 oder Pico geben. Der kleine Chip neben dem blauen Trimmer auf dem Schallsensor KY-038 und auf Bodenfeuchte-, Regen-, Flammen- und Gasmodulen ist fast immer ein LM393.

Bei langsam veränderlichen oder verrauschten Signalen nahe der Schwelle kann der Ausgang eines Komparators hunderte Male pro Sekunde flattern; das Nachtlicht flackert in der Dämmerung. Die Lösung ist eine Hysterese, also ein Schmitt-Trigger. Gib das Signal über einen 10-kΩ-Widerstand R1 auf den +-Eingang und schließe einen 1-MΩ-Widerstand R2 vom Ausgang zurück zum +-Eingang an. Jedes Mal, wenn der Ausgang umschaltet, verschiebt diese Mitkopplung die Schwelle ein wenig; der Abstand zwischen Einschalt- und Ausschaltschwelle beträgt etwa Ausgangshub × R1 / R2. Mit einem Ausgang, der zwischen 0 und 5 V schaltet, ergibt 5 × 10k / 1M eine Hysterese von 50 mV, was meist reicht, um das Rauschen zu schlucken. Dieselbe Idee kannst du auch in Software mit zwei getrennten Schwellen umsetzen; das ESP32-Beispiel unten macht genau das.
Pinbelegung von LM358 und LM741
Die beiden OPVs, die dir in der Hobbyelektronik am häufigsten begegnen, sind der zweikanalige LM358 und der klassische einkanalige LM741. Beide gibt es im 8-poligen DIP-Gehäuse. Halte den Chip so, dass du die Beschriftung lesen kannst und die Kerbe nach links zeigt: Pin 1 liegt unten links, die Nummern steigen gegen den Uhrzeigersinn. Die Pinbelegungen sind unterschiedlich, du kannst also nicht einfach einen gegen den anderen tauschen:
| Pin | LM358 (Doppel-OPV) | LM741 (Einzel-OPV) |
|---|---|---|
| 1 | 1OUT – Ausgang A | Offset Null (Offsetabgleich) |
| 2 | 1IN− – invertierender Eingang A | Invertierender Eingang (−) |
| 3 | 1IN+ – nichtinvertierender Eingang A | Nichtinvertierender Eingang (+) |
| 4 | GND (V−) | V− (negative Versorgung) |
| 5 | 2IN+ – nichtinvertierender Eingang B | Offset Null (Offsetabgleich) |
| 6 | 2IN− – invertierender Eingang B | Ausgang |
| 7 | 2OUT – Ausgang B | V+ (positive Versorgung) |
| 8 | VCC (V+) | NC (nicht belegt) |
| Eigenschaft | LM358 | LM741 | MCP6002 |
|---|---|---|---|
| Kanäle | 2 | 1 | 2 |
| Versorgung | 3–30 V einfache Versorgung | ±10–±18 V symmetrisch empfohlen | 1,8–6 V einfache Versorgung |
| An einfachen 5 V | Funktioniert | Funktioniert praktisch nicht | Funktioniert |
| An 3,3 V | Schwach (Ausgang max. ~1,8 V) | Funktioniert nicht | Sehr gut |
| Eingangsbereich | 0 V bis V+ − 1,5 V | ~3 V innerhalb der Schienen | Bis 0,3 V über die Schienen hinaus |
| Ausgangsbereich (bei 5 V) | ~0,02–3,5 V | Unbrauchbar | 0,025–4,975 V (Rail-to-Rail) |
| GBW / Anstiegsrate | 0,7 MHz / 0,3 V/µs | ~1 MHz / 0,5 V/µs | 1 MHz / 0,6 V/µs |
| Stromaufnahme | 0,35 mA / Kanal | 1,7 mA | 0,1 mA / Kanal |
Der LM741 ist seit 1968 der Star der Lehrbücher, wurde aber für eine symmetrische Versorgung wie ±15 V entwickelt: Seine Eingänge müssen etwa 3 V, sein Ausgang 1–3 V innerhalb der Schienen bleiben. Bei einfachen 5 V bleibt nach Abzug dieser Reserven kein brauchbarer Bereich übrig; wenn eine LM741-Schaltung am 5V-Pin des Arduino nicht funktioniert, liegt es daran. Der LM358 dagegen wurde für einfache Versorgung entwickelt: Seine Eingänge schließen 0 V ein, sein Ausgang kommt bis auf wenige Millivolt an 0 V heran, und sein einziger Nachteil ist, dass er oben bei V+ − 1,5 V endet. Auf 3,3-V-Boards wie ESP32 und Pico nimmst du einen Rail-to-Rail-OPV wie den MCP6002; er hat dieselbe Pinbelegung wie der LM358 und passt deshalb direkt in die Schaltung. Brauchst du vier Kanäle, ist der 14-polige LM324 der Vierfach-Bruder des LM358.
Betrieb mit einfacher Versorgung: virtuelle Masse und Rail-to-Rail
Die meisten OPV-Schaltungen in Lehrbüchern nutzen eine symmetrische Versorgung wie ±15 V, und das Signal schwingt zu beiden Seiten von 0 V. In der Arduino-Welt hast du meist nur 5 V oder 3,3 V. Für Gleichspannungssignale, die immer positiv bleiben, etwa von einem Thermoelement, einem Shunt-Widerstand oder einem LM35, ist das kein Problem; sie lassen sich direkt mit einem OPV verstärken, dessen Eingangsbereich 0 V einschließt. Wechselspannungssignale wie die eines Mikrofons, die positiv und negativ schwingen, musst du aber zuerst in die Mitte der Versorgung anheben. Dazu erzeugst du mit zwei Widerständen eine Mittenspannung und setzt einen 10-µF-Kondensator daneben, um Rauschen zu verringern. Diesen Punkt nennt man virtuelle Masse oder Referenz; das Signal wird über einen Koppelkondensator darauf überlagert.
- Wähle den richtigen OPV: Modelle, deren Eingangsbereich 0 V nicht einschließt, etwa LM741 oder TL072, clippen an einfacher Versorgung unerwartet; nimm einen LM358, LM324 oder MCP6002.
- Beachte die Ausgangsgrenzen: Der Ausgang des LM358 reicht bei 5 V etwa von 0,02 bis 3,5 V, deshalb ist für Wechselsignale ein Mittelpunkt um 1,8 V ausgewogener als 2,5 V. Der MCP6002 kommt bis auf etwa 25 mV an beide Schienen heran, sein Mittelpunkt kann also genau VCC/2 sein.
- Versorge den OPV mit derselben Spannung wie das Board: Ein OPV an 12 V kann bei falscher Verstärkung mehr als 10 V auf einen Pin des ESP32 oder Pico geben.
- Nutze eine gemeinsame Masse: Die GND-Anschlüsse von Sensor, OPV und Board müssen verbunden sein; warum, erfährst du in der Anleitung zur gemeinsamen Masse.
- Lass den unbenutzten Kanal nicht offen: Beschalte die freie Hälfte des LM358 als Spannungsfolger (Ausgang an −-Eingang) und lege ihren +-Eingang an GND oder an den Mittelpunkt; offene Eingänge können Schwingungen und unnötige Stromaufnahme verursachen.
Mikrofonsignal verstärken: Vorverstärker für ein Elektret-Mikrofon
Elektret-Mikrofone haben typisch eine Empfindlichkeit von etwa −44 dBV/Pa; selbst bei einem lauten Schalldruck von 94 dB liefern sie also nur etwa 6 mV. Normale Sprache aus einem Meter Entfernung bleibt bei rund 0,1 mV, ein Klatschen direkt am Mikrofon kann einige zehn Millivolt erreichen. Mit dem 4,88-mV-Schritt des Arduino taucht dieses Signal entweder gar nicht auf oder bewegt sich nur um wenige Schritte; das erklärt auch, warum der Analogausgang von Modulen wie dem Schallsensor KY-038 so schwach ist. Die Lösung ist ein nichtinvertierender Wechselspannungsverstärker mit einer Verstärkung von etwa 100. Die folgende Schaltung nutzt Kanal A des LM358:
| Bauteil | Wert | Anschluss |
|---|---|---|
| Speisewiderstand des Mikrofons | 2,2 kΩ | Zwischen 5V und dem +-Anschluss des Mikrofons (−-Anschluss an GND) |
| Koppelkondensator C1 | 1 µF | Vom +-Anschluss des Mikrofons zu LM358 Pin 3 (1IN+) |
| Widerstände für den Mittelpunkt | 100 kΩ und 56 kΩ | 100 kΩ von Pin 3 nach 5V, 56 kΩ von Pin 3 nach GND (etwa 1,8 V) |
| Rückkopplung Rf | 100 kΩ | Zwischen Pin 1 (1OUT) und Pin 2 (1IN−) |
| Rg und C2 | 1 kΩ + 10 µF | In Reihe von Pin 2 nach GND (−-Anschluss von C2 an GND) |
| Versorgung | Pin 8 und Pin 4 | Pin 8 an 5V, Pin 4 an GND, 100 nF dazwischen |
| Ausgang | Pin 1 | Arduino Uno A0 (ESP32 GPIO 34, Pico GP26: mit MCP6002 und 3,3 V) |
Dank des Kondensators C2 ist die Schaltung für Gleichspannung ein Spannungsfolger mit Verstärkung 1; in der Stille ruht der Ausgang am Mittelpunkt, bei etwa 1,8 V. Bei Audiofrequenzen wirkt C2 dagegen wie ein Kurzschluss, und die Verstärkung wird 1 + 100k / 1k = 101 (40 dB). Die untere Grenzfrequenz bestimmen Rg und C2: 1 / (2π × 1 kΩ × 10 µF) ≈ 16 Hz. Die obere Grenze zieht das Verstärkungs-Bandbreite-Produkt des OPV: beim LM358 0,7 MHz / 101 ≈ 7 kHz, was für Sprache reicht. Willst du mehr Verstärkung, denk daran, dass die Bandbreite im selben Verhältnis schrumpft; brauchst du eine Verstärkung von 1000, teilst du sie besser auf zwei Stufen mit je etwa 32 auf.
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}Der Code nimmt 50 ms lang so viele Messwerte wie möglich auf, sucht den kleinsten und größten Wert und rechnet die Differenz in Volt um; das ist die Spitze-Spitze-Amplitude des Schalls. Teilt man das Ergebnis durch 101, erhält man die Spannung, die das Mikrofon selbst erzeugt. In einem leisen Raum bewegt sich der Ausgang nur um wenige ADC-Schritte (0,01–0,02 V), ein Klatschen in der Nähe überschreitet dagegen leicht 1 V. Wenn das Signal clippt, der Ausgang also an 0 V oder 3,5 V stößt, verringere Rf auf 47 kΩ. Wie du die Messung ruhiger machst, erfährst du in der Anleitung zum Filtern von Sensordaten.
Thermoelement verstärken: Typ K und LM358
Ein Thermoelement Typ K erzeugt eine kleine Spannung, die proportional zum Temperaturunterschied an der Verbindungsstelle zweier verschiedener Metalle ist: etwa 41 µV/°C. Bei 100 °C misst du 4,1 mV, bei 500 °C 20,6 mV und bei 1000 °C 41,3 mV. Direkt am Arduino entspricht ein ADC-Schritt (4,88 mV) etwa 119 °C; das ist keine Messung. Ein nichtinvertierender Verstärker mit Verstärkung 101 auf Kanal B des LM358 hebt das Signal auf 4,14 mV/°C: Jetzt entspricht ein Schritt etwa 1,2 °C, und die Ausgangsgrenze des LM358 von 3,5 V erlaubt je nach Offset Messungen bis etwa 700–800 °C. Die Verdrahtung: +-Anschluss des Thermoelements an Pin 5 (2IN+), −-Anschluss an GND; Rf = 100 kΩ zwischen Pin 7 und Pin 6, Rg = 1 kΩ zwischen Pin 6 und GND; Pin 7 geht an A1 des Arduino. Beim Typ K ist der Alumel-Draht, also der −-Anschluss, leicht magnetisch, ein praktischer Weg, die Anschlüsse zu unterscheiden.
Ein Thermoelement misst eigentlich den Unterschied zwischen der Messstelle und der Vergleichsstelle, an der seine Drähte auf die Kupferverbindung treffen. Für die echte Temperatur musst du die Temperatur der Vergleichsstelle separat messen und addieren; das nennt man Vergleichsstellenkompensation. Der Code unten nutzt dafür einen LM35 direkt neben den Anschlussklemmen (Ausgang an A2). Außerdem wird auch die Eingangs-Offsetspannung des LM358 von 3–7 mV mit 101 multipliziert und erzeugt am Ausgang einen Fehler von 0,3–0,7 V, also 70–170 °C. Der Code misst diesen Offset beim Start und zieht ihn von späteren Messungen ab; schalte das Board deshalb ein, während der Fühler Raumtemperatur hat.
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}Anpassung an den Arduino-ADC: das Signal in den richtigen Bereich bringen
Die eigentliche Aufgabe eines OPV in Arduino-Projekten ist, ein Sensorsignal in den Bereich zu verschieben, den der ADC am besten nutzt. Die Regel ist einfach: Der Höchstwert des Signals soll sich dem oberen Ende des ADC-Bereichs nähern, darf aber nicht in die Ränder reichen, an denen OPV und ADC nicht linear sind. Der LM35 zum Beispiel liefert zwischen 0 und 50 °C 0–500 mV; direkt am Uno gemessen erhältst du eine Auflösung von 0,49 °C pro Schritt. Verstärkst du dasselbe Signal mit 6,6 auf 0–3,3 V, sinkt die Auflösung auf 0,074 °C. So gehst du Schritt für Schritt vor:
- Ausgangsbereich des Sensors bestimmen: Notiere aus dem Datenblatt die kleinste und größte Ausgangsspannung (LM35, 0–50 °C: 0–0,5 V).
- Zielbereich wählen: Sicher sind etwa 0,02–3,5 V für einen Uno mit LM358, 0,15–2,5 V für einen ESP32 und 0,03–3,25 V für einen Pico mit MCP6002.
- Verstärkung berechnen: G = oberer Zielwert / oberer Sensorwert = 3,3 / 0,5 = 6,6. Für 1 + Rf / Rg = 6,6 im nichtinvertierenden Verstärker wählst du Rf = 56 kΩ und Rg = 10 kΩ.
- Offset entfernen: Arbeitet der Sensor in einem Bereich, der nicht bei null beginnt, etwa 1–2 V, ziehe zuerst die Referenzspannung ab (Uref im invertierenden Verstärker oder ein Differenzverstärker) und verstärke dann.
- Schützen und filtern: Setze einen 1-kΩ-Serienwiderstand zwischen OPV-Ausgang und ADC-Pin und 100 nF zwischen Pin und GND. Dieses RC-Filter dämpft Rauschen oberhalb von etwa 1,6 kHz und begrenzt einen möglichen Fehlerstrom in den Pin.
- In der Software zurückrechnen: Teile die gemessene Spannung durch die Verstärkung, um die echte Sensorspannung zu erhalten (Usensor = Uadc / G); miss die Widerstände mit dem Multimeter, um die Verstärkung genau festzulegen.
| Board | ADC | Empfohlener Eingangsbereich | Schritt | Analoge Pins |
|---|---|---|---|---|
| Arduino Uno | 10 Bit | 0–5 V (0–1,1 V mit interner Referenz) | 4,88 mV (1,07 mV) | A0–A5 |
| ESP32 | 12 Bit | Etwa 0,15–2,5 V (Standard-Dämpfung 11 dB) | ~0,8 mV | GPIO 32–39 (ADC1, funktioniert auch mit WLAN) |
| Raspberry Pi Pico | 12 Bit | 0–3,3 V | 0,81 mV | GP26, GP27, GP28 |
OPV-Ausgang mit dem ESP32 lesen: Klatschschalter
Da der ESP32 mit 3,3 V arbeitet, baust du dieselbe Mikrofonschaltung mit einem MCP6002 auf und versorgst sie vom 3V3-Pin; für den Mittelpunkt nimmst du zwei 100-kΩ-Widerstände (1,65 V). Versorgst du einen LM358 mit 5 V, kann sein Ausgang 3,5 V erreichen und den Pin des ESP32 überlasten. Schließe den OPV-Ausgang an GPIO 34 an, einen der ADC1-Kanäle, die auch bei eingeschaltetem WLAN funktionieren. Der Code unten misst die Spitze-Spitze-Amplitude in 20-ms-Fenstern, nutzt kalibrierte Millivoltwerte von analogReadMilliVolts() und setzt mit zwei getrennten Schwellen eine Hysterese in Software um: Jedes Klatschen schaltet die Onboard-LED um. Nutzt du das Board zum ersten Mal, beginne mit den Einrichtungsschritten in der Anleitung Was ist der 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 und MicroPython: Strom mit einem Shunt-Widerstand messen
Eine weitere praktische Aufgabe für einen OPV ist die Strommessung. Setzt du einen 0,1-Ω-Shunt-Widerstand zwischen den Minusanschluss eines Motors oder LED-Streifens und GND, fallen bei 1 A nur 100 mV daran ab. Ein nichtinvertierender Verstärker mit einem MCP6002 (Rf = 100 kΩ, Rg = 4,7 kΩ) verstärkt diese Spannung um den Faktor 22,3: 1 A wird zu 2,23 V, und mit dem 3,3-V-Bereich des Pico misst du bis etwa 1,45 A. Das obere Ende des Shunts geht an Pin 3 des MCP6002, der OPV-Ausgang (Pin 1) an den Pin GP26 (ADC0) des Pico; der OPV wird über den Pin 3V3(OUT) versorgt, und die Masse der Lastversorgung wird mit der des Pico verbunden. Bei 1,5 A setzt der Shunt 0,225 W in Wärme um, nimm also einen Widerstand mit mindestens 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)Beim Start misst der Code bei ausgeschalteter Last den Offset des OPV und zieht ihn von späteren Messungen ab; der Mittelwert aus 100 Messungen dämpft das ADC-Rauschen. Für größere Ströme verringerst du den Shuntwert oder die Verstärkung; Spannungsabfall und Verlustleistung am Shunt prüfst du mit dem Werkzeug Ohmsches Gesetz. Willst du eine fertige Lösung, misst der Stromsensor ACS712 mit Hall-Effekt den Strom, während die Last galvanisch von deiner Schaltung getrennt bleibt. Richtest du den Pico zum ersten Mal ein, erklärt die Anleitung Was ist der Raspberry Pi Pico die Installation von MicroPython.
Weitere OPV-Schaltungen
| Schaltung | Formel / Verhalten | Wo wird sie eingesetzt? |
|---|---|---|
| Summierverstärker (Mischer) | Uaus = −Rf × (U1/R1 + U2/R2 + …) | Audiomischer, mehrere Signale zusammenführen |
| Differenzverstärker | Uaus = (R2 / R1) × (U2 − U1) | Offset abziehen, Differenz zwischen zwei Punkten messen |
| Instrumentenverstärker | Hohe Verstärkung über einen einzigen Widerstand, sehr gute Gleichtaktunterdrückung | Wägezellen, Wheatstone-Brücken, biomedizinische Signale |
| Integrierer | Kondensator in der Rückkopplung; der Ausgang ist das zeitliche Integral des Eingangs | Dreieckgenerator, PI-Regelung |
| Aktivfilter (Sallen-Key) | Filter zweiter Ordnung mit zwei Widerständen und zwei Kondensatoren | Audiofilter, Anti-Aliasing-Filter vor dem ADC |
| Schmitt-Trigger | Komparator mit Mitkopplung, zwei getrennte Schwellen | Sauberer Digitalausgang aus einem verrauschten Signal |
Für Brückensensoren wie Wägezellen, bei denen beide Ausgänge in der Mitte der Versorgung liegen und die Differenz zwischen ihnen nur wenige Millivolt beträgt, sind fertige Chips praktischer: Der HX711 enthält einen Verstärker mit bis zu 128-facher Verstärkung und einen 24-Bit-ADC. Der OPV auf der Platine eines Pulssensors wiederum verstärkt und filtert das schwache Signal des Lichtsensors, deshalb sieht der Arduino schon beim ersten Versuch eine klare Pulswelle.

Projektideen mit Operationsverstärkern
- Klatschlampe: Steuere mit dem Mikrofonvorverstärker und dem ESP32-Code mit Hysterese ein Relaismodul.
- VU-Meter: Mach aus der Spitze-Spitze-Amplitude einen Balken, der auf einem WS2812B-LED-Streifen mit der Musik steigt.
- Ofenthermometer: Miss mit dem Thermoelementverstärker bis 500 °C und zeige den Wert auf einem OLED-Display an.
- Nachtlicht ohne Code: Baue mit einem LDR und einem LM358 als Komparator eine LED, die im Dunkeln angeht, ganz ohne Mikrocontroller.
- Digitale Waage: Lies mit dem HX711 eine Wägezelle aus und baue eine grammgenaue Küchenwaage.
- Motorstrom-Überwachung: Miss den Motorstrom deines Roboterautos mit Shunt und OPV und stoppe den Motor, wenn der Strom beim Blockieren ansteigt.
Häufige Fehler und Lösungen
| Symptom | Mögliche Ursache | Lösung |
|---|---|---|
| Ausgang ständig bei 0 V oder ganz oben | Keine Rückkopplung oder am falschen Eingang; Verstärkung zu hoch; Eingang außerhalb des Eingangsbereichs | Prüfen, ob Rf zum −-Eingang führt, Verstärkung senken, sicherstellen, dass der Eingang zwischen 0 und V+ − 1,5 V liegt |
| LM741-Schaltung funktioniert an 5 V nicht | Der LM741 braucht eine symmetrische, höhere Versorgung | LM358 oder MCP6002 verwenden |
| Ausgang kommt nicht über 3,5 V | Der Ausgang des LM358 endet bei V+ − 1,5 V | Verstärkung danach wählen oder Rail-to-Rail-OPV verwenden |
| Messwerte verrauscht und zappelig | Keine Abblockung der Versorgung, lange Leitungen, unnötig hohe Verstärkung | 100 nF an die Versorgungspins, kurze Leitungen, RC-Filter am Ausgang, Mittelwert in der Software |
| Schaltung schwingt von selbst | Der OPV treibt direkt ein langes Kabel oder eine große kapazitive Last | 100–470 Ω in Reihe an den Ausgang setzen |
| Komparatorausgang geht nie auf High | Der LM393 ist Open-Collector, es fehlt der Pull-up | 4,7–10 kΩ zwischen Ausgang und Versorgung schalten |
| Pin am ESP32 oder Pico defekt | Der OPV lief an 5 V oder 12 V, der Ausgang überschritt 3,3 V | OPV mit 3,3 V versorgen oder Teiler und Klemmdiode an den Ausgang setzen |
| Ausgang hängt bei kleinen Signalen bei 0 V | Eine negative Eingangs-Offsetspannung drückt den Ausgang bei einfacher Versorgung nach unten | Präzisions-OPV verwenden oder dem Eingang eine kleine Vorspannung geben |
Ein Operationsverstärker ist ein Übersetzer, der die analoge Welt in eine Sprache bringt, die der Mikrocontroller versteht: Kennst du die zwei Regeln und die zwei Verstärkungsformeln, kannst du jedes Signal ADC-tauglich machen, egal ob es von einem Mikrofon, einem Thermoelement, einem Shunt-Widerstand oder einem Brückensensor kommt. Probiere Werte mit dem Werkzeug OPV-Verstärkung aus; in der BlueGrays-App findest du analoge Projekte wie Lichtmessung mit LDR, Nachtlicht, Digitalvoltmeter, Temperaturmessung mit NTC sowie Flammen- und Gassensor Schritt für Schritt mit Schaltplänen und Code.
Häufige Fragen
Wofür braucht man einen Operationsverstärker?
Ein Operationsverstärker verstärkt schwache Signale, vergleicht zwei Spannungen, addiert oder subtrahiert Signale, filtert sie und puffert hochohmige Quellen. In Arduino-Projekten hebt er vor allem Signale im Millivoltbereich, etwa von Mikrofon, Thermoelement oder Shunt-Widerstand, auf einen Pegel, den der ADC lesen kann.
Wie berechnet man die Verstärkung eines OPV?
Beim nichtinvertierenden Verstärker gilt V = 1 + Rf / Rg, beim invertierenden Verstärker V = −Rf / Rein. Mit Rf = 100 kΩ und Rg = 1 kΩ beträgt die nichtinvertierende Verstärkung also 101 und die invertierende −100. In Dezibel rechnet man 20 × log10(Verstärkung).
Was ist der Unterschied zwischen LM358 und LM741?
Der LM358 enthält zwei OPVs in einem Gehäuse, arbeitet mit einfacher Versorgung von 3–30 V, und sein Eingangsbereich schließt 0 V ein; deshalb lässt er sich direkt an den 5 V des Arduino betreiben. Der LM741 ist ein Einzel-OPV für symmetrische Versorgung wie ±15 V und funktioniert an einfachen 5 V praktisch nicht. Auch die Pinbelegung ist verschieden.
Funktioniert ein OPV mit einfacher 5-V-Versorgung?
Ja, Modelle für einfache Versorgung wie LM358, LM324 und MCP6002 funktionieren. Für Wechselsignale musst du den Eingang in die Mitte der Versorgung anheben und die Ausgangsgrenzen beachten; der Ausgang des LM358 erreicht an 5 V nur etwa 3,5 V.
Was ist der Unterschied zwischen OPV und Komparator?
Ein OPV ist frequenzkompensiert, damit er mit Gegenkopplung stabil bleibt, und sein Ausgang kann Strom liefern und aufnehmen. Komparatoren wie der LM393 sind für schnelles Schalten ohne Rückkopplung gebaut, und die meisten haben einen Open-Collector-Ausgang mit Pull-up-Widerstand. Ein OPV taugt als langsamer Komparator, ein Komparator sollte aber nicht als Verstärker eingesetzt werden.
Was ist ein Rail-to-Rail-Operationsverstärker?
Bei einem Rail-to-Rail-OPV kommen Eingang oder Ausgang bis auf wenige zehn Millivolt an die Versorgungsspannungen heran. Der MCP6002 liefert an 5 V zum Beispiel 0,025–4,975 V, der LM358 dagegen nur etwa 3,5 V. Auf 3,3-V-Boards wie ESP32 und Raspberry Pi Pico brauchst du einen Rail-to-Rail-OPV, um den ganzen ADC-Bereich zu nutzen.
Projekte, die du danach bauen kannst
Alle Projekte ansehen
Lichtstärke messen mit LDR
Willst du sehen, wie hell dein Zimmer ist, und zwar als Zahl? Der LDR, ein kleines lichtempfindliches Bauteil, misst das Umgebungslicht, und der Arduino schreibt den Wert jede halbe Sekunde auf deinen

Nachtlicht mit LDR
Ein kleines Nachtlicht, das von selbst angeht, wenn es dunkel wird, und am Morgen wieder ausgeht. Ein Lichtsensor misst, wie hell es im Zimmer ist; ist es dunkel genug, schaltet der Arduino die LED ei

Messung der Lichtintensität mit dem ESP32-LDR-Modul
Echtzeit-Anzeige des ADC-Rohwerts des LDR-Moduls und des anhand von Dunkel- und Hellreferenzwerten berechneten relativen Lichtwerts in Prozent im Serial Monitor. Dieser Prozentwert ist keine Lux-Messung. Vermittelt die Kalibrierungslogik des Moduls. Sollte idealerweise vor Projekt 10 durchgeführt werden, da es zur Festlegung des Schwellenwerts dient.

Digitales Voltmeter mit LCD-Anzeige
Finde mit einem selbstgebauten Messgerät heraus, wie viel Spannung eine Batterie oder ein Netzteil liefert. Ein Teiler aus zwei Widerständen senkt hohe Spannungen auf ein Niveau, das die Platine lesen

Temperaturmessung mit NTC und 2x16 Lcd Display
Miss die Umgebungstemperatur mit einem Sensor, der aussieht wie eine kleine Perle. Dieses Bauteil namens NTC lässt Strom umso leichter durch, je wärmer es wird; der Arduino liest diese Änderung, rechn

Verwendung des Flammensensors
Ein kleiner Wächter, der Feuer in Küche oder Werkstatt vor dir bemerkt. Der Flammensensor fängt das unsichtbare Licht auf, das Feuer abgibt; ist alles in Ordnung, leuchtet die grüne LED, sieht er eine

Verwendung von Gassensoren
Ein kleiner Wächter, der ein Gasleck in der Küche bemerkt, bevor du es tust. Der Gassensor schnuppert ständig an der Luft; solange alles in Ordnung ist, leuchtet die grüne LED, übersteigt das Gas in d

ESP32: LED-Helligkeit mit Potentiometer (Analog → PWM)
In diesem Projekt steuern wir die Helligkeit einer LED analog über ein Potentiometer. Der ADC-Pin des ESP32 liest die vom Potentiometer kommende Spannung von 0-3,3 V aus, woraufhin dieser Wert in ein PWM-Signal (Pulsweitenmodulation) umgewandelt und an die LED gesendet wird. So leuchtet die LED beim Drehen des Potentiometers stufenweise auf und erlischt wieder. Mit Arduino Core 3.0+ kann analogWrite() direkt verwendet werden; bei ESP32-S2/S3 ist die ADC-Auflösung auf 12 Bit festgelegt.
Weitere Artikel
BlueGrays-App
Diese Schaltung Schritt für Schritt auf dem Handy nachbauen
Schaltplan, Code und Teileliste auf einem Bildschirm. Über 200 Arduino-, ESP32- und Pico-Projekte zum Nachbauen.
Mit dem Handy scannen
Richte die Kamera auf den Code, dann öffnet sich der App-Store deines Handys.
oder im Store öffnen

