Forum: Mikrocontroller und Digitale Elektronik LED als Photodiode zur Versorgung einer LED


von Merve (Gast)


Lesenswert?

Hallo Zusammen,

ich möchte gerne eine LED als Photodiode zur Spannungserzeugung 
verwenden.
Die erzeugte Spannung soll dann eine andere LED einschalten. Dies 
versuche ich mit AD Wandler.
Ich habe die LED (Anode) am Pin Analog Eingang meines Arduino Uno's 
angeschlossen. Kathode mit GND.
Die Werte habe ich dann am Serielle Monitor ausgegeben.
Ist das soweit richtig?

Hier sieht der Code so aus:

int ledrot=0; // Analoger Eingang
int ledgruen=8;
int wert;
void setup() {
 Serial.begin(9600);
 pinMode(ledrot,INPUT);

}

void loop() {
  wert=analogRead(ledrot);
  Serial.println(wert);
  delay(500);
}


Ich bekomme die Werte zwischen 210-215. Die Spannung ist glaube ich zu 
niedrig, muss ich das mit einem Transistor verstärken? Wie kann ich 
jetzt die Werte was ich bekomme für die andere LED zum leuchten bringen? 
Gibt es dafür vielleicht ein Befehl so wie ledgruen.set(value)?
Könnt ihr mir bitte helfen, ich bin absolute Anfängerin :(

Für Antworte würde mich sehr drauf freuen.

Liebe Grüße
Merve

von Holger L. (max5v)


Lesenswert?

Da wären mal ein zwei Links zu dem Thema:

http://www.b-kainka.de/kosmos/microelec3.htm
http://www.elektronik-labor.de/Lernpakete/OPV/OPV_3.html
http://www.elektronik-labor.de/Lernpakete/Kalender11/Lichtschalter.html

Unterschiedliche LED- Farben / Typen sollte man übrigens auch mal 
ausprobieren.

von Pandur S. (jetztnicht)


Lesenswert?

Du verwendest die LED als Sensor. Da kommt aber nur sehr wenig Strom 
raus. Dabei ist zu beachten, dass die erzeugte Spannung die Bandgap 
Spannung nicht ueberschreiten kann, die Photonen Spannung auch nicht. 
Die rote Photospannung ist vielleicht 1.8V, die Gruene bei 2.3V. Die 
Bandgap kann aber tiefer sein. Dazu muss man hochomig messen. Ob der 
Eingangswiderstand des ADC reicht weiss ich grad nicht. Und nein 
verstaerken muss man die Spannung nicht, die sollte gut messbar sein. 
Vergleich die Werte.
Einmal dunkel messen, einmal hell. Wenn sich die Werte hinreichend 
unterscheiden ist gut.

von Sascha W. (sascha-w)


Lesenswert?

Merve schrieb:
> Hallo Zusammen,

> Ich bekomme die Werte zwischen 210-215. Die Spannung ist glaube ich zu
> niedrig, muss ich das mit einem Transistor verstärken?
Ich sehe in deinem Programm keine Kofigurationszeile für den ADC!
Der Messwert den du erhälst ist auch von der verwendeten 
Referenzspannung des ADC abhängig. Da die zu messende Spannung eh schon 
klein ist würde es sich natürlich anbieten die interne Ref. mit 1.1 
statt z.B. Vcc mit 5V zu nehmen.

> Wie kann ich
> jetzt die Werte was ich bekomme für die andere LED zum leuchten bringen?
> Gibt es dafür vielleicht ein Befehl so wie ledgruen.set(value)?
Das scheint wohl Arduino-Wunschdenken zu sein ;-)
Wie währe einfach eine Schleife die regelmäßig den Wert einliest und 
dann mit zwei IF Abfragen prüft ob ein oberer Wert überschritten wurde 
-> LED an; bzw ein unterer Wert unterschritten -> LED aus

Sascha

von Manfred (Gast)


Lesenswert?

Sascha W. schrieb:
> Ich sehe in deinem Programm keine Kofigurationszeile für den ADC!

Braucht die Arduino-IDE nicht, per default macht die mit Vcc.

> Der Messwert den du erhälst ist auch von der verwendeten
> Referenzspannung des ADC abhängig. Da die zu messende Spannung eh schon
> klein ist würde es sich natürlich anbieten die interne Ref. mit 1.1
> statt z.B. Vcc mit 5V zu nehmen.

Was dann "analogReference (INTERNAL);" im setup sein muss.

Sascha W. schrieb:
> Wie währe
Wäre darf man auch mal richtig schreiben!

>  einfach eine Schleife die regelmäßig den Wert einliest und
> dann mit zwei IF Abfragen prüft ob ein oberer Wert überschritten wurde

Dazu hat er Empfehlungen auf Lernpakete bekommen, wenn das nicht hilft, 
hat jegliche Unterstützung durch das Forum keinerlei Sinn.

(Die Schleife ist schon da, eine If - Else oder zwei If hinter 
"analogRead" sind nicht wirklich schwer)

von Merve (Gast)


Lesenswert?

Guten Morgen Zusammen,

erst mal vielen Dank für Ihre schnelle Antwort! Ich habe die 
Vorgeschlagene Seiten mir angeguckt. Muss noch gucken was Bandgap 
Spannung bedeutet :)

Ich glaub ich habe es aber hinbekommen. Nämlich habe ich statt eine LED 
zwei LEDs benutzt (also die in Reihe geschaltet) und somit habe ich am 
pin Analog Eingang die doppelte Werte.(könnte man wahrscheinlich auch 
OPV benutzen). Was ich auch noch gelernt habe, dass die pin Analog 10 
bit => 2 hoch 10 = 1024 ist. Am Serielle Monitor habe ich die Werte 
zwischen 510-525 bekommen gehabt. Nach kleine Rechnerei habe ich es die 
Spannung berechnet:
1024 entspricht 5 V
 510 entspricht  x     =>  x = 2,49 V.

Die Spannung was ich am Analog Eingang Pin gelesen habe, könnte ich mit 
einem Befehl analogWrite(ledgruen, wert/4) auf dem LED pin schreiben. 
Somit hab ich dann erreicht, die erzeugte Spannung auf eine andere LED 
zu nutzen.
Da die PWM pin 8 bit ist musste ich den Wert durch 4 teilen 1024/4= 256.

Ich habe es dann auch mit ein Multimeter zur Sicherheit die Spannung am 
pin grueneled gemessen, war auch ungefähr 2,49 V.

Das sieht dann so weit richtig aus oder?

Noch ne Frage, und zwar der funktion void loop() ist eh doch eine 
Schleife und der führt die code in einer unendlichen Schleife durch. 
Stimmt?
Deswegen habe ich keine if schleife benutzt.
Es hat auch funktioniert. Wenn ich mit der Hand die 2 rote lED bedeckt 
habe war dann die grueneled dunkler. Wenn ich die Hand weggemacht habe, 
war dann deutlich heller.

Ich freue mich schon für Ihre Antworte! :)

LG
Merve

von Eric B. (beric)


Lesenswert?

Merve schrieb:
> Deswegen habe ich keine if schleife benutzt.

http://www.if-schleife.de/

von Georg (Gast)


Lesenswert?

Eric B. schrieb:
> http://www.if-schleife.de/

"if not fertig goto anfang" ist doch eine wunderschöne if-Schleife.

Georg

von c-hater (Gast)


Lesenswert?

Georg schrieb:

> "if not fertig goto anfang" ist doch eine wunderschöne if-Schleife.

Also nö:
1
if not fertig goto anfang
2
3
anfang:

Ist erstmal keine Schleife und schon gar keine "if-Schleife". Und 
selbst:
1
anfang:
2
3
if not fertig goto anfang

ist zwar eine Schleife, aber IMMER NOCH keine "if-Schleife", sondern 
allerhöchstens eine "goto-Schleife", denn erst das goto kann immerhin 
eine Schleife bilden. if kann das niemals.

Das liegt daran, das if eine Struktur mit genau definiertem Verhalten 
ist, was sie zu einem unverzichtbaren Mitglied der Elemente der 
strukturierten Programmierung macht. Goto hingegen ist ein räudiger 
Bastard, der Schleifen bilden kann, aber nicht muss.

von Georg (Gast)


Lesenswert?

c-hater schrieb:
> Also nö:

Du nimmst das viel zu ernst. Aber für einen Programmier-Anfänger ist die 
Frage, ob if eine Schleife ist oder sonstwas unendlich viel unwichtiger 
als andere Fragen, schliesslich hat das ja noch nicht mal was mit 
Programmierstil zu tun, sondern ist nur eine Frage der Namensgebung. 
Relevant ist höchstens die Frage, ob man an der Uni dafür einen 
Notenabzug bekommt, da zählen ja solche formalen Fragen mehr als ein 
funktionierendes Programm.

Im übrigen bist du ja ein Verfechter von Assembler und damit für die Ifs 
der höheren Programmiersprachen garnicht zuständig.

Georg

von Manfred (Gast)


Lesenswert?

Merve schrieb:
> Noch ne Frage, und zwar der funktion void loop() ist eh doch eine
> Schleife und der führt die code in einer unendlichen Schleife durch.
> Stimmt?
> Deswegen habe ich keine if schleife benutzt.

Loop = Schleife
If = Wenn, Bedingung

Also: In der loop rennt das Programm unendlich lange herum, die muß 
immer da sein. In Deinem Konstrukt fragt diese alle 500ms den Eingang 
ab, richtig.

Du willst die Ausgangs-LED schalten, nicht in ihrer Helligkeit 
steuern? Damit ist das Durchreichen des Analogwertes per PWM falsch.

Jetzt baust Du innerhalb der Schleife zwei Wenn-Bedingungen:
If (gelesener Wert) größer 520 setze LED-Ausgang High
If (gelesener Wert) kleiner 515 setze LED-Ausgang Low

(die genaue Schreibweise suchst Du Dir in einschlägigen Tutorials 
selbst)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Georg schrieb:
> Im übrigen bist du ja ein Verfechter von Assembler und damit für die Ifs
> der höheren Programmiersprachen garnicht zuständig.

Vielleicht ist er ja als C-Hasser auch Verfechter der arithmetischen
IF-Anweisung von FORTRAN. :-))

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.