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
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.
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
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)
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
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.
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
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)
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. :-))
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