mikrocontroller.net

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


Autor: Merve (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Holger L. (max5v)
Datum:

Bewertung
0 lesenswert
nicht 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/Kalender...

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

Autor: Zitronen Falter (jetztnicht)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sascha Weber (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Manfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Merve (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Eric B. (beric)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Merve schrieb:
> Deswegen habe ich keine if schleife benutzt.

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

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eric B. schrieb:
> http://www.if-schleife.de/

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

Georg

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Georg schrieb:

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

Also nö:
if not fertig goto anfang

anfang:

Ist erstmal keine Schleife und schon gar keine "if-Schleife". Und 
selbst:
anfang:

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.

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Manfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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. :-))

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.