Optokoppler als an Input-PIN

Hallo an Alle,

gleich vorneweg zu mir. Ich bin kein Elektroniker und kein Programmierer. Im Berufsleben beschäftigt mich eher die Welt zwischen Soll und Haben.

Ich habe mir nun allerdings vorgenommen ein keines Lichtprojekt für meinen Sohn zu realisieren.
(Lichtsteuerung für seinen E-Traktor)
Nun bin ich fast fertig und es funktioniert alles soweit einwandfrei bis auf das Bremslicht.

Hier habe ich mir überlegt die anliegende Spannung am E-Motor mittels eines Optokopplers abzunehmen und als Eingangssignal am Arduino zu verwenden. Sobald die Spannung praktisch unterbrochen wird, soll das Bremslicht angehen.

Momentan ist alles mittels eines 9V Netzteils für die Versorgung des Arduinos sowie der LEDs und einem 12V Netzteil als "Motorspannungsersatz" für den Optokoppler aufgebaut.

Optokoppler ist ein 4N35. Auf LED Seite angeschlossen mit einem 220 Ohm Widerstand an der Anode und eben GND an Kathode. Am Kollektor ist der Input Pin angeschlossen. Am Emitter GND

Sketch sieht momentan so aus:

int SchalterBrems = 2;
int Bremslicht = 3;

void setup() {
  pinMode(Bremslicht, OUTPUT);
  pinMode(SchalterBrems, INPUT);
}

void loop() 
{
if (digitalRead(SchalterBrems) == LOW) 
{
      digitalWrite(Bremslicht, HIGH);
      }
if (digitalRead(SchalterBrems) == HIGH)
{
      digitalWrite(Bremslicht, LOW);
}
}

Wenn ich nun die die 12V der LED unterbreche geht das Bremslicht zwar an, aber es flackert oder pulsiert (mit sehr hoher Frequenz. Man wird irre wenn man da reinschaut)

Nun habe ich auch schon versucht wie überall beschrieben die 5V mit einem 10K Pullup-Widerstand mit an den Emitter zu hängen, dann funktioniert allerdings gar nichts mehr. Ebenso beim Einschalten des internen Pullups. Das Licht bleibt immer aus. Egal ob die 12V anliegen oder nicht.
(Bei Pullup dann natürlich HIGH und LOW vertauscht)

An den LEDs kann es auch nicht liegen. Bei einem Test mit einem handelsüblichen Schalter und dem entsprechenden Sketch funktionieren die LEDs wie sie sollen.

Mir kommt es so vor, als ob der das Signal nicht richtig ausgewertet werden kann. Als ob der Arduino beim Trennen der 12V nicht richtig interpretieren kann ob HIGH oder LOW.

Ist im übrigen korrekt, dass ich von Emitter zu GND am Optokoppler eine negative Spannung messe?

Ich bin nun auf jeden Fall am Ende meiner Vorstellungskraft und erhoffe mir hier einen Tipp zu erhalten.

Hierfür sage ich schon mal im Voraus besten Dank.

Grüße

Beilando

Nun habe ich auch schon versucht wie überall beschrieben die 5V mit einem 10K Pullup-Widerstand mit an den Emitter zu hängen

Der Emitter auf Masse ist schon korrekt. Der Pullup kommt an den Eingang/Kollektor um diesen auf eine definierte Spannung zu legen. Der Transistor zieht den Pin dann auf Masse wenn er geschaltet wird

Normal hat man die rechte Schaltung:
https://www.mikrocontroller.net/articles/Optokoppler#Beschaltung

Widerstand am Emitter wie Links ist ein Pulldown

Ah, Mist.

Hatte mich verschrieben. Natürlich an den Kollektor. Aber wie geschrieben hatte ich es ja auch schon mit dem internen PULLUP versucht.

Bei bei beiden Varianten funktioniert nichts mehr.

Was noch auffällt: 220 Ohm sind für 5V dimensioniert. Nicht für 12V

Die LED kannst du mit 5-10mA betreiben. Mit R = (12V - 1,3V) / I hast du also zwischen 1 und 2,2 kOhm

Bei 220 Ohm fließen fast 50mA. Das ist etwa was der Optokoppler maximal verträgt

EDIT: Vergessen die LED Flußspannung zu berücksichtigen. Aber das spielt bei höheren Spannung keine so wichtige Rolle

'funktioniert nichts mehr' ist - auch in der Welt von Soll und Haben - keine adäquate Beschreibung - zumindest bekomme ich damit keinen Kredit.

Wenn unklar ist, wo der Arduino hängen bleibt, baue Dir Ausgaben ein.
Wenn kein Terminal greifbar ist (der Arduino bewegt Sich wohl mit dem Traktor mit) nimm eine LED, Die Dir Blink-Codes gibt, damit Du sehen kannst, WO der Arduino gerade steckt.

MfG

Hatte ich auch schon mit einem 1K versucht.

Hat ja allerdings nichts mit der "anderen Seite" zu tun. Schalten tut der Opto ja.

Hi

Auf externe 12V kann man auch anders prüfen, ohne Opto-Koppler, wenn man beide Spannungen an GND zusammen bringen kann, reicht eine Diode.

  • GNDs verbinden
  • Arduino INPUT_PULLUP über Diode (Anode zum Arduino !!) auf das zu prüfende Signal

Wenn das Signal LOW ist, fließt der PullUP über die 12V-Last ab - wir erkennen ein LOW.
Wenn das Signal 12V ist, sperrt die Diode (die 12V kommen NICHT zum Arduino), die 5V des PullUP können aber auch nicht dahin abfließen - wir messen HIGH.

Hierbei ist wichtig, daß beide Spannungen (Last und Arduino) den gleichen GND haben und die Last nach GND geschaltet ist - also +12V die Last einschaltet.
(sonst kann bei abgeschalteter Last die 5V PullUP nicht über diese Last abfließen)

Sonst, wie Du schon angefangen hast, der Last eine LED parallel schalten und Diese abfragen - also der Opto-Koppler.
Hier muß halt auch wieder der Arduino-Pin vorgespannt sein - wenn der OK nach GND ziehen soll, muß der Pin per PullUP hochgezogen werden, wenn der Opto nach 5V schalten soll, muß per PullDN nach GND gezogen werden, damit wir IMMER ein sicheres Potential haben.

MfG

Hm?

Komme immer noch nicht mit/weiter.

Also versuche ich es nochmal genauer. Folgend der zugrunde liegende Sketch:

int SchalterBrems = 2;
int Bremslicht = 3;

void setup() {
  pinMode(Bremslicht, OUTPUT);
  pinMode(SchalterBrems, INPUT);
}

void loop() 
{
if (digitalRead(SchalterBrems) == LOW)
  {
      digitalWrite(Bremslicht, HIGH);
      }
if (digitalRead(SchalterBrems) == HIGH)
{
      digitalWrite(Bremslicht, LOW);
}
}

Mein Schaltbild:

Optokoppler (LED-Seite) in der Reihenfolge
+12,27V -> 1K Widerstand -> Anode -> Kathode -> GND

Optokoppler (Sensor-Seite)
[(PIN) und (5V-Ausgang -> 10K Pullup Widerstand)] -> Kollektor -> Emitter -> GND

Nun sind die LEDs immer aus. Egal ob ich die 12,27 V unterbreche oder nicht.

Messungen:

Bei geschlossenen 12,27 V

  • Anode -> Kathode: 1,21 V
  • Kollektor -> Emitter: -1,37 V
  • 5V -> Kollektor: -0,60 V
  • 5V -> GND: -1,97 V

Bei offenen 12,27 V

  • Anode -> Kathode: -3,10 V
  • Kollektor -> Emitter: -1,97 V
  • 5V -> Kollektor: 0,00 V
  • 5V -> GND: -1,97 V

Soweit...

Wenn ich nun den 10K Pullup und damit gleichzeitig den 5V von der Schaltung nehme, dann gehen die LEDs bei Unterbrechung des 12V-Stromkreises an, aber sie flackern.

Messungen mit diesem Schaltbild ergeben:

12V geschlossen:

  • Anode -> Kathode: 1,21 V
  • Kollektor -> Emitter: -1,34 V
  • Emitter -> GND: 0,00 V

12V offen:

  • Anode -> Kathode: -2,3 V
  • Kollektor -> Emitter: -2,88 V

Für weitere Unterstützung im Voraus besten Dank.

Gruß

Beilando

  • 5V -> GND: -1,97 V

Das bedeutet, du hast gar keine 5V ? (Oder verstehe ich es nicht?)

Hallo,

zeichne doch bitte mal ein korrektes Schaltbild von deinem Projekt, damit wir das auch richtig verstehen.
Anhand deiner Beschreibung verstehe ich das nicht.

Asche über mein Haupt... Wenn der Buchhalter die Elektronen tanzen lässt... :roll_eyes:

Wenn man den Emitter tatsächlich an GND hängt und nicht an Vin, dann, Wunder, tut es was es soll.

Trotzdem ein Danke an alle für die Unterstützung.

Evtl. benötige ich nochmals Hilfe beim Verfeinern meines gesamten Sketches. Dann erstelle ich natürlich ein neues Thema.

Bis dahin...

Gruß

Beilando

beilando:
Asche über mein Haupt... Wenn der Buchhalter die Elektronen tanzen lässt... :roll_eyes:

Wenn man den Emitter tatsächlich an GND hängt und nicht an Vin, dann, Wunder, tut es was es soll.

Mit einem Schaltbild wäre das wohl nicht passiert.

Wahrscheinlich doch.

Ich hätte es ja in festem Glauben an die Korrektheit erstellt. Ich bin auf meinem Ausgangs-Board einfach eine Schraubklemme verrutscht.

Sorry...