Forum: Mikrocontroller und Digitale Elektronik Siganlauswertung mit Optokopler an Input-PIN (Arduino UNO)


von Stefan B. (beilando)


Lesenswert?

Hallo an alle,

ich habe ein kleines Problem mit einer Schaltung und/oder einem Sketch 
auf einem Arduino UNO und hoffe, dass ich in diesem Forum richtig damit 
bin.

Ich möchte erwähnen, dass Ich das Problem bereits in einem anderen Forum 
geschildert habe, bin dort allerdings nicht so recht weiter gekommen. 
Deshalb möchte ich es hier noch einmal versuchen. (Bitte nicht falsch 
verstehen, falls einige User hier und dort Unterwegs sind. Ich will 
damit niemandem auf den Schlips treten, aber vielleicht gibt es hier 
noch jemand der mir, für mich verstäändlich, helfen kann)

Außerdem noch zu mir: Ich bin keine Elektroniker und kein Programmierer. 
Meine Welt ist eher die zwischen Soll und Haben ,im weitesten Sinne.

Nun habe ich mir allerdings trotzdem vorgenommen ein kleines 
Lichtprojekt für meinen Sohn zu realisieren. (Eine Lichtsteuerung für 
seinen E-Traktor).
Nun bin ich fast fertig. Es funktioniert fast alles wie gewünscht außer 
dem geplanten Bremslicht.

Hierfür habe ich gedacht nehme ich einen Optokoppler um den Zustand am 
E-Motor (12 V Spannung ja oder nein) auszuwerten und an den Arduino zu 
geben.
Also praktisch 12V anliegend -> Bremslicht aus / 12V "nicht anliegend" 
-> Bremslicht an.

Meine Schaltung habe ich wie folgt aufgebaut:

LED-Seite Optokoppler (4N35):
+12V -> 1K Widerstand -> [Anode -> Kathode] -> GND-12V

Sensor-Seite Optokoppler:
[(5V-Ausgang Arduino -> 10K Pullup-Widerstand) + (Input-PIN)] -> 
[Kollektor -> Emiiter] -> GND-Arduino

Mein Sketch:
1
int SchalterBrems = 2;
2
int Bremslicht = 3;
3
4
void setup() {
5
  pinMode(Bremslicht, OUTPUT);
6
  pinMode(SchalterBrems, INPUT);
7
}
8
9
void loop()
10
{
11
if (digitalRead(SchalterBrems) == LOW)
12
  {
13
      digitalWrite(Bremslicht, HIGH);
14
      }
15
if (digitalRead(SchalterBrems) == HIGH)
16
{
17
      digitalWrite(Bremslicht, LOW);
18
}
19
}

Das beschriebene im Zusammenspiel bringt nun allerdings keinen Effekt.
Das Bremslicht bleibt aus, egal ob ich den 12V-Stromkreis schließe oder 
öffne.

Folgende Messungen hierzu kann ich beschreiben:

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

Nun ist mir beim testen folgendes noch aufgefallen:
Sobald ich den 10K Pullup Widerstand und damit gleichzeitig die 5V von 
vom Kollektor nehme, funktioniert das Bremslicht. Geht an und aus je 
nach Zustand des 12V-Stromkreises. Allerdings flackern die LEDS (mit 
sehr hoher Frequenz)

Die Messungen hierzu sehen dann wie folgt aus:

Bei geschlossenen 12,27 V
  - Anode -> Kathode: 1,21 V
  - Kollektor -> Emitter: -1,34 V

Bei offenen 12,27 V
  - Anode -> Kathode: -2,3 V
  - Kollektor -> Emitter: -2,88 V

An den Bremslicht-LEDs kann es denke ich nicht liegen. Die funktionieren 
mit einem Drehschalter und dem entsprechenden Sketch einwandfrei.

Lange Rede...
Kann mir jemand sagen, wie ich die Bremslichter entweder mit dem Pullup 
bzw. ohne flackern zum leuchten bringe?

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

Gruß

Beilando

von Wolfgang (Gast)


Lesenswert?

Die negativen Spannungswerte sind sehr merkwürdig, insbesondere soetwas 
wie

Stefan B. schrieb:
> - 5V -> GND: -1,97 V

ist völlig unklar.

Miss alle Spannungen auf der Ausgangsseite vom Optokoppler gegen Gnd vom 
Arduino, alle auf der Eingangsseite gegen den Gnd der 12V.
Vielleicht zeigst du doch mal einen Schaltplan.

von Stefan B. (beilando)


Angehängte Dateien:

Lesenswert?

Anbei mal ein Schaltplan.

Bitte nicht steinigen. Aber so ist es sinngemäß aufgebaut.

Messenungen nehme ich heute abend nochmal vor.

Danke schon mal...

Gruß

Beilando

von Wolfgang (Gast)


Lesenswert?

Stefan B. schrieb:
> Aber so ist es sinngemäß aufgebaut.

Der Schaltplan ist ok, solange das "sinngemäß" nicht irgendwelche Tücken 
verbirgt ;-)
Der Strom durch die LED des Optokopplers kann ohne Probleme auch einen 
Faktor 2..3 kleiner sein.

von Joster (Gast)


Lesenswert?

Stefan B. schrieb:

> Das beschriebene im Zusammenspiel bringt nun allerdings keinen Effekt.
> Das Bremslicht bleibt aus, egal ob ich den 12V-Stromkreis schließe oder
> öffne.

Hast du im eingebauten Zustand getestet, oder mit einem separaten 
Netzteil?

> An den Bremslicht-LEDs kann es denke ich nicht liegen. Die funktionieren
> mit einem Drehschalter und dem entsprechenden Sketch einwandfrei.

Heißt das der Aufbau und der Sketch entsprach dem oben gezeigten und du 
hast nur den Optokoppler durch einen Drehschalter ersetzt?

Falls nein, erst nochmals kontrollieren, ob der aktuelle Aufbau auch mit 
dem gezeigten Schaltplan übereinstimmt. Auch beide Widerstände mit dem 
Ohmmeter kontrollieren, nicht daß du dich da bei den Werten vertan hast.

Ist Pin 6 (B) des Optokopplers wirklich nicht angeschlossen, auch keine 
längere offene Leitung?

Funktioniert das Bremslicht, wenn du mit eingebautem 10k Pullup direkt 
am Optokoppler Pin 4 (E) und 5 (K) kurzschließt?

Falls ja, dann hat dein Optokoppler einen Problem, und schaltet nicht 
mehr richtig gegen GND. Wenn ich das richtig verstanden habe, dann liegt 
die Optokoppler LED parallel zu einem Motor, und wenn er mechanisch 
angetrieben wird arbeitet er als Generator und kann die LED im 
Inversbetrieb schädigen.
Du mußt die LED schützen, indem du eine normale Diode anti-parallel 
schaltest. Also LED-Anode an Schutzdiode-Kathode, und LED-Kathode an 
Schutzdiode-Anode.

von Stefan B. (beilando)


Lesenswert?

> Hast du im eingebauten Zustand getestet, oder mit einem separaten
> Netzteil?

Ist momentan noch alles im Testaufbau mit separaten Netzteilen 
angeschlossen. 12V-Netzteil zur "Motorsimulation" und 9V-Netzteil zur 
Versorgung der LEDs und des Ardunios.

> Heißt das der Aufbau und der Sketch entsprach dem oben gezeigten und du
> hast nur den Optokoppler durch einen Drehschalter ersetzt?

Im Prinzip ja. Allerdings hatte ich für den Drehschalter den internen 
Pullup aktiviert und bei "digitalRead" HIGH und LOW entsprechend 
vertauscht. Außerdem habe ich den Drehschalter auf den Analog-Pins 
angeschlossen.

> Falls nein, erst nochmals kontrollieren, ob der aktuelle Aufbau auch mit
> dem gezeigten Schaltplan übereinstimmt. Auch beide Widerstände mit dem
> Ohmmeter kontrollieren, nicht daß du dich da bei den Werten vertan hast.

Bereits bis zur Verzweiflung getan

> Ist Pin 6 (B) des Optokopplers wirklich nicht angeschlossen, auch keine
> längere offene Leitung?

Nein, die Optokopplerschaltung ist momentan noch auf einem Breadboard 
aufgebaut. (Die LED Schaltungen sind bereits auf den endgültigen 
Platinen verlötet.)

> Funktioniert das Bremslicht, wenn du mit eingebautem 10k Pullup direkt
> am Optokoppler Pin 4 (E) und 5 (K) kurzschließt?

Werde ich neben den Messungen heute abend mal probieren.

> Falls ja, dann hat dein Optokoppler einen Problem, und schaltet nicht
> mehr richtig gegen GND. Wenn ich das richtig verstanden habe, dann liegt
> die Optokoppler LED parallel zu einem Motor, und wenn er mechanisch
> angetrieben wird arbeitet er als Generator und kann die LED im
> Inversbetrieb schädigen.
> Du mußt die LED schützen, indem du eine normale Diode anti-parallel
> schaltest. Also LED-Anode an Schutzdiode-Kathode, und LED-Kathode an
> Schutzdiode-Anode.

Da noch kein Motor dranhängt kann das nicht passiert sein.

Gruß

Beilando

von Joster (Gast)


Lesenswert?

Noch ein kleiner Tipp. Wenn du dir angewöhnst jedes Programmen ein paar 
Kommentare reinzuschreiben, dann ist es für andere einfacher zu 
verstehen was gemeint ist. Und es hilft dir später, wenn du schon wieder 
alles vergessen hast.

Bei 'digitalWrite(Bremslicht, HIGH)' geht da das Bremslicht an oder aus?

Wolfgang schrieb:
> Miss alle Spannungen auf der Ausgangsseite vom Optokoppler gegen Gnd vom
> Arduino, alle auf der Eingangsseite gegen den Gnd der 12V.
> Vielleicht zeigst du doch mal einen Schaltplan.

In deiner gezeigten Schaltung kann es keine gegen GND negative 
Spannungen geben. Wenn dein Multimeter negative Werte anzeigt, hast du 
die Messstrippen verkehrt herum angelegt. Die Messergebnisse werden 
klarer, und du musst weniger beschreiben, wenn du in deinen Schaltplan 
nummerierte Messpunkte einzeichnest und die gemessenen Werte auf diese 
Nummern beziehst.

von Stefan B. (beilando)


Lesenswert?

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

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.

Frage noch: Ist eine 1N4148 Diode geeignet als Verpolungsschutz auf der 
Eingangsseite? (Bezüglich negativ Spannung E-Motor)

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

Bis dahin...

Gruß

Beilando

von Clemens L. (c_l)


Lesenswert?

Stefan B. schrieb:
> Ist eine 1N4148 Diode geeignet als Verpolungsschutz auf der
> Eingangsseite?

Ja. Ist zwar nicht sehr dick, aber robuster als die IR-LED im 
Optokoppler.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.