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
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.
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
Eric B. schrieb: > http://www.if-schleife.de/ "if not fertig goto anfang" ist doch eine wunderschöne if-Schleife. Georg
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. :-))
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.