Optokoppler

Optokoppler PC817

Wenn man ein Signal zwischen zwei galvanisch getrennten Stromkreisen übertragen möchte, bietet sich ein Optokoppler an, der das Signal mit Licht anstatt durch elektrischen Strom oder Spannnung überträgt.
Optokoppler werden oft in einem DIL-Gehäuse untergebracht. Der hier verwendete Koppler besitzt ein 4-poliges Gehäuse. Die Seite der Leuchtdiode ist durch eine kleine Kerbe gekennzeichnet.

Optokoppler im analogen Stromkreis

Funktionsweise & Schaltplan

Schaltplan
Abb.: Schaltplan

Die interne Leuchtdiode des Optokopplers wird wie eine normale Leuchtdiode angesteuert. Der Fototransistor schaltet entsprechend beim Auftreffen des Lichtes durch und gibt den Strom für die Leuchtdiode LED1 frei, welche dementsprechend aufleuchtet.
Um eine wirkliche, galvanische Trennung zwischen Sender und Empfänger zu ermöglichen, müsste die Seite mit LED1 mit einer anderen Stromquelle versorgt werden als die Seite mit dem Mikrotaster.

Verwendete Bauteile

Aufbau

Aufbau der Schaltung
Abb.: Aufbau der Schaltung

Optokoppler in Verbindung mit Arduino

Als weitere typische Anwendung wird ein Optokoppler auch oft in Verbindung mit einem Mikrocontroller verwendet, welcher eine größere Last schalten soll.

Verwendete Bauteile

Aufbau

Im Aufbau ist auf der Seite des Arduinos eine zusätzliche Silizium-Diode zu sehen. Diese ist für diesen Aufbau optional und soll nur veranschaulichen, wie man einen Verpolungsschutz realisieren könnte, um die Leuchtdiode des Optokopplers zu schützen.
Auf der rechte Seite mit der Last (=LED mit Vorwiderstand) wird einzusätzlicher Transistor zum Schalten dieser Last verwendet. Vor allem bei höheren Spannungen ist dies erforderlich, da der Optokoppler sonst zerstört werden könnte.

Aufbau der Schaltung
Abb.: Schaltplan mit Optokoppler an einem Arduino
#define PIN_OPTO_LED 9

void setup()
{
    pinMode(PIN_OPTO_LED, OUTPUT);
}

void loop()
{
    for (byte i = 0; i < 5; i++) {
        digitalWrite(PIN_OPTO_LED, !digitalRead(PIN_OPTO_LED));
        delay(1000);
    }

    for (byte j = 0; j < 10; j++) {
        for (byte i = 0; i < 250; i += 10) {
            analogWrite(PIN_OPTO_LED, i);
            delay(10);
        }
    }
}
zurück