Arduino UNO R4 - PC817 Optokoppler: 12V/24V-DC-Eingangssignal überwachen
In dieser Anleitung lernen wir, wie man den PC817-Optokoppler mit dem Arduino UNO R4 verwendet, um eine Frage zu einem 12V- oder 24V-Gerät zu beantworten – läuft es gerade wirklich? –, ohne diese Spannung an das Board anzuschließen. Im Einzelnen lernen wir:
- Wie ein PC817-Optokoppler-Modul den Arduino UNO R4 schützt
- Wie man die richtige Modulvariante für ein 3,3V-, 5V-, 12V- oder 24V-Signal auswählt
- Wie man das Modul mit dem Arduino UNO R4 verdrahtet und herausfindet, ob sein Ausgang aktiv LOW oder aktiv HIGH ist
- Wie man das Modul parallel an einem Gerät anschließt, sodass der Messwert dem Gerät selbst folgt
- Wie man den Arduino UNO R4 programmiert, um den isolierten digitalen Eingang zu lesen
- Wie man denselben Eingang aus dem nackten PC817-Chip aufbaut, wenn Sie lieber löten als kaufen

Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables STEM V4 IoT Starter-Kit (Arduino enthalten) | |
| 1 | × | DIYables STEM V4B IoT Starter-Kit (Arduino enthalten) | |
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Kaufen Sie eine Modulvariante – diejenige, die zu dem Signal passt, das Sie überwachen möchten. Die Tabelle weiter unten sagt Ihnen, welche.
Über den PC817-Optokoppler
Der PC817 ist ein 4-poliger Optokoppler, der auch unter den Namen Fotokoppler und Opto-Isolator verkauft wird. In seinem Kunststoffgehäuse sitzt eine Infrarot-LED, die über einen isolierenden Spalt hinweg auf einen Fototransistor gerichtet ist: Wenn Strom durch die LED fließt, schaltet ihr Licht den Transistor ein, sodass das Signal als Licht statt als Strom übertragen wird – deshalb bleiben die beiden Seiten elektrisch getrennt.
Genau dieser Spalt macht den PC817 für Besitzer eines Arduino UNO R4 nützlich. Eine 12V- oder 24V-Leitung, die direkt an einen digitalen Pin angeschlossen wird, zerstört das Board. Über einen PC817 sieht der Arduino UNO R4 immer nur seine eigenen 5V, während die Hochspannungsseite auf der anderen Seite des Spalts bleibt. Typische Aufgaben vom Hobby bis zur Werkstatt sehen so aus:
- Den 12V-Ausgang einer Garagentor- oder Torsteuerung überwachen, damit ein Sketch weiß, wann das Tor angetrieben wird
- Prüfen, ob eine 12V-Zubehörleitung im Fahrzeug Spannung führt, bevor ein Projekt Strom daraus bezieht
- Die 24V-Freigabeleitung eines Labornetzteils überwachen
Bei jeder dieser Aufgaben lautet die eigentliche Frage nicht, ob eine Leitung Spannung führt, sondern ob das Gerät am Ende dieser Leitung in diesem Moment ein- oder ausgeschaltet ist – und genau diese Antwort liefert der PC817 an den Sketch.
Der Arduino UNO R4 verdient hier eine besondere Anmerkung. Anders als die meisten modernen 3,3V-Boards arbeitet der UNO R4 mit 5V an seinen I/O-Pins, daher wird die Ausgangsseite des Optokopplers auf diesem Board auf 5V hochgezogen, und ein Pin liest entweder 5V oder 0V.
Technische Daten
| Parameter | Wert |
|---|---|
| Gehäuse | 4-poliges DIP |
| Durchlassspannung der Eingangs-LED (Vf) | typisch etwa 1,2V, max. 1,4V |
| Durchlassstrom der Eingangs-LED (If) | normaler Bereich 5-20 mA, max. 20 mA dauerhaft |
| Kollektor-Emitter-Spannung am Ausgang (VCEO) | max. 35V |
| Kollektorstrom am Ausgang (IC) | max. 50 mA |
| Kollektor-Verlustleistung | 150 mW |
| Isolationsspannung | 5000 Vrms für 1 Minute |
| Stromübertragungsverhältnis (CTR) | 50% bis 600% je nach Klasse (A 80-160%, B 130-260%, C 200-400%, D 300-600%) |
| Schaltgeschwindigkeit | Anstiegszeit etwa 4 us, Abfallzeit etwa 3 us |
| Betriebstemperatur | -30 C bis +100 C |
Das PC817-Optokoppler-Modul
Die praktische Art, einen PC817 mit dem Arduino UNO R4 zu verwenden, ist das fertige Isolationsmodul, und genau dieses verdrahtet der Rest dieser Anleitung. Module gibt es in Versionen mit 1, 2, 4 und 8 Kanälen. Jeder Kanal trägt einen PC817, seinen Vorwiderstand und meist eine Status-LED, bereits bestückt, und die externen Leitungen werden an Schraubklemmen statt an blanken Pins angeschlossen.
- Eingangsseite: eine Schraubklemme + (oder IN+) und eine Schraubklemme - (oder IN-) für das externe Signal
- Ausgangsseite: Stiftleisten-Pins VCC, GND und OUT (oder DO / OUT1..OUTn) für den Arduino UNO R4
Auf diesem Board wird die Ausgangsseite über den 5V-Pin statt über 3,3V versorgt, da der UNO R4 5V-Logik liest. Das ist eine eigene Entscheidung, unabhängig von der Eingangsseite weiter unten, und sie ist bei jeder Modulvariante gleich.
Hier ist der Punkt, an dem viele stolpern. Der Vorwiderstand befindet sich bereits auf der Platine, und er ist für eine Eingangsspannung dimensioniert. Es gibt kein Modul, das alles kann. Die Module werden in drei Varianten verkauft, und Sie kaufen diejenige, die zu dem Signal passt, das Sie überwachen möchten.
Welches PC817-Optokoppler-Modul brauche ich?
Lesen Sie die Spannung des Signals ab, das Sie abgreifen möchten, und wählen Sie dann die passende Zeile:
| Signal, das Sie überwachen möchten | Zu kaufende Modulvariante | Typische Quelle |
|---|---|---|
| 3,3V- oder 5V-Logik | 3-5V-Modul | Ausgangspin eines anderen Boards, eine 5V-Steuerplatine, ein separat versorgter Sensor |
| 12V DC | 12V-Modul | Tor- und Garagentorsteuerungen, Zubehörleitungen im Fahrzeug, Alarmzentralen |
| 24V DC | 24V-Modul | Freigabeleitungen von Labornetzteilen, SPS-Ausgänge, Industriesensoren |
Die Wahl der Variante ist beim Modul das Gegenstück zur Dimensionierung eines Widerstands – sie ist die einzige Kaufentscheidung auf dieser Seite, die wirklich zählt. Zwei Arten, es falsch zu machen:
- Ein 12V-Modul an einer 24V-Leitung bekommt ungefähr den doppelten Strom, für den sein Widerstand ausgelegt wurde, und die interne LED wird beschädigt. Das ist der teure Fehler, und er passiert in Sekunden.
- Ein 24V-Modul an einer 12V-Leitung steuert die LED zu schwach an. Nichts brennt durch, aber der Ausgang schaltet möglicherweise verspätet, nur manchmal oder gar nicht – und das sieht aus wie ein Verdrahtungsfehler, obwohl es in Wirklichkeit ein Einkaufsfehler ist.
Liegt Ihr Signal zwischen den Angaben, wählen Sie die nächstgelegene Variante, ohne darüber zu liegen, und überprüfen Sie das Ergebnis auf dem Labortisch mit der Status-LED, bevor Sie dem Messwert vertrauen.
Warum ein 5V- oder 3,3V-Signal an einem 5V-Board isolieren?
Die erste Zeile dieser Tabelle verdient eine eigene Antwort, denn das 3-5V-Modul wirkt an einem 5V-Board sinnlos. Der Arduino UNO R4 arbeitet selbst mit 5V-I/O, daher kann es so aussehen, als würde das Isolieren eines anderen 5V-Signals gar nichts bewirken. Das stimmt nicht. Bei der Isolation ging es nie um das Anpassen von Spannungen – es geht darum, keine gemeinsame Masse zu teilen. Zwei 5V-Schaltungen, die jeweils ein eigenes Netzteil haben oder an entgegengesetzten Enden einer langen Kabelstrecke sitzen, sind sich nicht einig, wo 0V liegt, und wenn man ihre Massen einfach verbindet, können Rückströme, Störungen und Fehler zwischen ihnen wandern. Wird das Signal über einen PC817 geführt, gelangt die Information hinüber, während die Massen getrennt bleiben.
Das ist das Argument für die 3-5V-Variante, und auf diesem Board ist es ein starkes: eine separat versorgte Steuerplatine, eine Leitung quer durch die ganze Werkstatt, ein Motortreiber direkt neben der Verdrahtung oder die 5V-Logikplatine in einem netzbetriebenen Gerät. Es ist die Variante der Wahl, wann immer die andere Schaltung auf Logikpegel arbeitet, aber nicht an Ihrer Versorgung hängt.
Es lohnt sich auch, klarzustellen, worauf der PC817-Eingang reagiert: auf Strom, nicht auf Spannung. Eine 5V-Schiene, die 20 A liefern kann, belastet den Optokoppler nicht stärker als eine, die nur 20 mA liefern kann, denn der auf dem Modul bestückte Widerstand legt den LED-Strom in beiden Fällen fest. Was das große Netzteil verändert, ist, wie viel Schaden ein Verdrahtungsfehler an anderer Stelle anrichten kann – ein Grund mehr, es auf der anderen Seite des Spalts zu halten.
Aktiv LOW oder aktiv HIGH: In welche Richtung liest Ihr Modul?
Beim nackten Chip, verdrahtet wie in dieser Anleitung beschrieben, ist die Antwort eindeutige Physik. Der Kollektor geht an einen digitalen Eingangspin, der von einem Pull-up-Widerstand auf HIGH gehalten wird – der interne Pull-up des Arduino UNO R4 ist die einfachste Wahl, und auf diesem Board zieht er den Pin auf 5V hoch. Ein 10-kOhm-Widerstand vom Pin zu 5V erfüllt denselben Zweck. So oder so ist der Messwert im Vergleich zu dem, was Anfänger erwarten, umgekehrt:
- Externes Signal VORHANDEN ⇒ LED an ⇒ Transistor leitet ⇒ der Pin liest LOW
- Externes Signal NICHT VORHANDEN ⇒ LED aus ⇒ Transistor aus ⇒ der Pin liest HIGH
Bei einem Modul ist das nicht so eindeutig. Die meisten Module geben dieses Verhalten direkt weiter, sodass ein vorhandenes Signal weiterhin LOW liest, aber manche Hersteller invertieren auf der Platine, sodass OUT stattdessen dem Eingang folgt. Beide Arten sind im Handel, manchmal mit nahezu identischem Aufdruck, also gehen Sie nicht von etwas aus – finden Sie es heraus. Das dauert weniger als eine Minute:
- Verdrahten Sie das Modul wie unten gezeigt, laden Sie den Sketch aus dieser Anleitung hoch und öffnen Sie den seriellen Monitor mit 9600.
- Lassen Sie die Eingangsklemmen ohne Spannung und notieren Sie, was das Board ausgibt.
- Legen Sie Spannung an die externe Leitung an und notieren Sie, was es jetzt ausgibt.
- Was auch immer erscheint, während die Leitung Spannung führt, ist der aktive Pegel Ihres Moduls. Wenn es LIVE ohne Eingangssignal und IDLE bei anliegender Spannung ausgibt, haben Sie die invertierende Variante.
- Gleichen Sie das mit der eigenen Status-LED des Moduls ab, die leuchtet, sobald an der Eingangsseite Spannung anliegt. Leuchtet die LED, aber der ausgegebene Zustand ändert sich nicht, lesen Sie den falschen Pegel – der Abgriff ist nicht defekt.
Um statt der Anzeige LIVE/IDLE den rohen Pin zu beobachten, fügen Sie für die Dauer des Tests diese Zeile in loop() ein:
Sobald Sie es wissen, erledigt eine einzige Änderung die Sache endgültig: die Konstante MODULE_ACTIVE_LOW am Anfang des Sketches. Lassen Sie sie für das übliche aktiv-LOW-Modul auf true und setzen Sie sie auf false für ein Modul, dessen Ausgang dem Eingang folgt. Sonst ändert sich nichts im Code. Aktiv LOW ist dieselbe Eigenart, die Sie bei vielen Relaismodulen finden, und der interne Pull-up ist derselbe wie im Tutorial Arduino UNO R4 - Taster.
WARNING
Verbinden Sie die Masse der 12V- oder 24V-Schaltung NICHT mit GND des Arduino UNO R4. Die beiden Massen müssen getrennt bleiben, und genau diese Trennung ist der ganze Grund, warum der Optokoppler da ist. Wenn Sie die Massen verbinden, schaltet der PC817 zwar weiterhin, aber die Isolation ist weg, und ein Fehler auf der 12V/24V-Seite kann das Board erreichen.
Verdrahtungsdiagramm
- Schaltplan für den Arduino UNO R4 und das PC817-Optokoppler-Isolationsmodul: Das externe 12V- oder 24V-Signal geht an die Schraubklemmen IN+ und IN- der passenden Modulvariante, und VCC, GND und OUT gehen an 5V, GND und Pin 2 des Arduino UNO R4 – der Vorwiderstand ist bereits auf dem Modul bestückt, daher muss keiner hinzugefügt werden.

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Siehe Der beste Weg, den Arduino Uno R4 und andere Komponenten mit Strom zu versorgen.
- Schaltplan für den Arduino UNO R4 und den nackten PC817-Chip, für den optionalen Aufbau am Ende dieser Anleitung: Das 12V-Signal erreicht Pin 1 über einen 1-kOhm-Widerstand (verwenden Sie 2,2 kOhm für ein 24V-Signal), Pin 2 geht zurück zur Masse der 12V-Schaltung, Pin 4 geht an Pin 2 des Arduino UNO R4 und Pin 3 an GND des Arduino UNO R4.
Den PC817 parallel zum zu überwachenden Gerät anschließen
Nehmen wir den Torantrieb als durchgerechnetes Beispiel. Seine Steuerung schickt 12V über ein Leitungspaar zum Relais des Tormotors, sobald das Tor angetrieben wird, und der Arduino UNO R4 soll das bemerken. Der Moduleingang gehört über diese beiden Leitungen, parallel zum Gerät, genau dort, wo ein Voltmeter sitzen würde. Er kommt niemals in die Leitung hinein.
WARNING
Schalten Sie den PC817-Eingang NICHT in Reihe mit dem Gerät. In Reihe müsste der gesamte Laststrom des Tormotors, der Relaisspule oder der Lampe durch eine interne LED fließen, die für 20 mA ausgelegt ist, und der PC817 wird in dem Moment zerstört, in dem das Gerät eingeschaltet wird. Parallel zum Gerät – niemals in Reihe damit.
An der bestehenden Torverdrahtung wird nichts aufgetrennt oder umgelegt. Es kommen drei Verbindungen hinzu, und das ist die ganze Arbeit:
- Die geschaltete Plusklemme des Geräts an die Schraubklemme IN+ des Moduls – ohne eigenen Vorwiderstand, da das Modul bereits den Widerstand trägt, für den seine Variante gebaut ist
- Die Minus- oder Rückleiterklemme desselben Geräts an die Schraubklemme IN-
- Die Ausgangsseite bleibt genau so, wie sie ist: OUT an Pin 2 des Arduino UNO R4, VCC an 5V, GND an GND
Der Abgriff kostet nur den kleinen Strom der Eingangs-LED, für den das Modul ausgelegt ist. Neben den Ampere, die ein Tormotor, eine Relaisspule, ein Ventil oder eine Lampe zieht, ist das nichts, sodass sich das Gerät genauso verhält wie vor dem Abgriff. Die Messung ist rein lesend.
Drei Details entscheiden, ob der Abgriff auf Anhieb funktioniert:
- Die Polarität ist nicht optional. Die Eingangsseite ist eine LED, und eine LED leitet nur in eine Richtung. Verdrahten Sie IN+ und IN- falsch herum, geht nichts kaputt – das Modul schaltet einfach nie ein, seine Status-LED bleibt dunkel und der Sketch meldet für immer IDLE. Messen Sie den Abgriff mit einem Messgerät nach und stellen Sie fest, welche Seite positiv ist, bevor Sie ihn verdrahten.
- Eine induktive Last braucht eine Klemmdiode. Ein Tormotor, eine Relaisspule, ein Schütz, ein Magnetventil oder ein Ventil erzeugt eine große Rückspannungsspitze, wenn die Versorgung unterbrochen wird, und die Eingangs-LED des PC817 ist in Sperrrichtung nur für 6V ausgelegt. Eine gewöhnliche Diode, die antiparallel direkt über die Klemmen IN+ und IN- gesetzt wird – Kathode der Diode an IN+, Anode der Diode an IN- –, fängt sie ab. Im Normalbetrieb ist diese Diode in Sperrrichtung gepolt und tut überhaupt nichts; bei einer Spitze leitet sie und begrenzt die Rückspannung auf deutlich unter ein Volt. Eine 1N4148 reicht für einen kleinen Abgriff, eine 1N4007 für einen stärkeren.
- Ein Halbleiterausgang mit Leckstrom täuscht den Abgriff. Manche SPS-Transistorausgänge, Triac-Ausgänge und LED-Lampentreiber lassen auch im ausgeschalteten Zustand einen kleinen Strom durch. Genug von diesem Leckstrom lässt die Eingangs-LED des Moduls teilweise leuchten, und der Sketch behauptet dann, das Gerät sei an, obwohl es offensichtlich aus ist. Das verräterische Zeichen ist ein Messwert, der nie auf IDLE zurückfällt, während die Status-LED schwach glimmt. Setzen Sie einen Ableitwiderstand von etwa 4,7 kOhm bis 10 kOhm über die Klemmen IN+ und IN-, damit der Leckstrom durch den Widerstand statt durch die LED fließt.
Eine letzte Einschränkung: Der Moduleingang ist eine einzelne LED, daher reagiert er nur auf eine Polarität und nur auf Gleichspannung. Um eine Wechselspannungsleitung zu erfassen, benötigen Sie einen Optokoppler, dessen Eingangsstufe stattdessen zwei antiparallele LEDs enthält.
Erkennen, ob das Gerät tatsächlich läuft
Die Parallelschaltung zum Gerät macht den Messwert ehrlich. Der Pin folgt nicht einem bestimmten Taster oder einem bestimmten Steuerungsausgang – er folgt der Energie, mit der das Gerät tatsächlich versorgt wird. Ein Tor, das per Handsender, per Wandschalter oder per Schlüsselschalter geöffnet wird, sieht für den Sketch identisch aus, weil der Sketch den Motor beobachtet und nicht den Auslöser. Ebenso nützlich: Ein Tor, das den Befehl zum Öffnen bekam, aber nichts erhielt, lässt den Pin auf IDLE, und diese Stille ist selbst schon die Fehlermeldung.
Genau das macht aus einem einzeiligen digitalen Lesevorgang etwas, das sich zu protokollieren lohnt: Betriebsstundensummen für den Tormotor, eine Warnung, wenn ein Öffnungsvorgang länger als die üblichen zwanzig Sekunden dauert, eine Aufzeichnung der Stillstandszeit einer Maschine oder eine einfache Prüfung „Ist es wirklich angelaufen?“ einige Sekunden nach dem Befehl.
Zu all dem gehört eine ehrliche Einschränkung: Der PC817 meldet, dass das Gerät mit Spannung versorgt wird, nicht, dass es funktioniert – ein festgefressener Motor oder ein durchgebranntes Heizelement zieht auf dieser Leitung trotzdem Strom und wird trotzdem als LIVE gelesen.
Optional: Denselben Eingang aus dem nackten PC817-Chip aufbauen
Löten Sie lieber selbst? Dann wird aus der Wahl der Variante die Wahl eines Widerstands: Sie setzen den Widerstand ein, den das Modul getragen hätte.

Der Chip ist ein 4-poliges DIP, wobei Pin 1 durch einen Punkt oder eine Kerbe markiert ist.
- Pin 1 - Anode (A): Anode der Eingangs-LED, gespeist über den Vorwiderstand.
- Pin 2 - Kathode (K): Kathode der Eingangs-LED, an die Masse der externen Schaltung, NICHT an GND des Arduino UNO R4.
- Pin 3 - Emitter (E): Ausgangsseite, an GND des Boards.
- Pin 4 - Kollektor (C): Ausgangsseite, an Pin 2 des Arduino UNO R4.
Dimensionieren Sie den Widerstand für etwa 10 mA LED-Strom mit R = (Vin - 1.2) / 0.01:
| Eingangsspannung | Widerstand |
|---|---|
| 3,3V | 220 Ohm |
| 5V | 390 Ohm |
| 12V | 1 kOhm |
| 24V | 2,2 kOhm, als 1/2-W-Bauteil |
Tauschen Sie den Widerstand aus, wann immer sich die Eingangsspannung ändert. Der Rest dieser Seite – paralleler Abgriff, Klemmdiode, Ableitwiderstand, getrennte Massen – gilt unverändert, und mit dem internen Pull-up ist dieser Aufbau tatsächlich aktiv LOW, also lassen Sie MODULE_ACTIVE_LOW auf true.
Wie man programmiert
- Benennen Sie den Pin, an den die OUT-Leitung des Moduls geht.
- Machen Sie diesen Pin mit pinMode() zu einem Eingang mit Pull-up.
- Lesen Sie den Pin mit digitalRead().
- Wandeln Sie diesen rohen Pegel über die eine Konstante, die Ihr Modul beschreibt, in eine Ja/Nein-Antwort um.
- Geben Sie ihn aus oder reagieren Sie darauf.
Arduino UNO R4 Code - PC817 Optokoppler
Es wird keine Bibliothek benötigt. Das Lesen eines PC817 ist ganz normales Lesen eines digitalen Eingangs.
Schnelle Schritte
Befolgen Sie diese Anweisungen Schritt für Schritt:
- Wenn Sie den Arduino Uno R4 WiFi/Minima zum ersten Mal verwenden, lesen Sie das Tutorial zum Einrichten der Umgebung für Arduino Uno R4 WiFi/Minima in der Arduino IDE.
- Prüfen Sie, ob die Modulvariante auf Ihrem Tisch zur Spannung der Leitung passt, die Sie abgreifen möchten.
- Verdrahten Sie das Modul wie im Schaltplan gezeigt mit dem Arduino UNO R4 und halten Sie die 12V-Masse von GND des Boards fern.
- Verbinden Sie das Arduino Uno R4 Board über ein USB-Kabel mit Ihrem Computer.
- Starten Sie die Arduino IDE auf Ihrem Computer.
- Wählen Sie das passende Arduino Uno R4 Board (Arduino Uno R4 WiFi oder Arduino Uno R4 Minima) und den COM-Port aus.
- Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE.
- Klicken Sie in der Arduino IDE auf die Schaltfläche Upload, um den Code auf den Arduino UNO R4 zu übertragen.
- Öffnen Sie den seriellen Monitor.
- Schalten Sie die 12V-Leitung einige Male ein und aus.
- Überprüfen Sie das Ergebnis im seriellen Monitor.
Wenn die Messwerte genau umgekehrt ausfallen – LIVE im Ruhezustand und IDLE bei anliegender Spannung –, invertiert Ihr Modul auf der Platine; setzen Sie MODULE_ACTIVE_LOW auf false und laden Sie erneut hoch. Wenn es LIVE meldet, obwohl an der Eingangsseite gar nichts angeschlossen ist, prüfen Sie, ob GND wirklich am Modul ankommt und ob der Pin auf INPUT_PULLUP gesetzt ist. Wenn es nie LIVE meldet, überprüfen Sie die Eingangspolarität und ob die Modulvariante zur Spannung dieser Leitung passt. Um diese externe Leitung direkt zu messen, statt sie nur zu erkennen, lesen Sie das Tutorial Arduino UNO R4 - Spannung messen.
Video Tutorial
Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.