
LED-Messung mit Arduino
von Heinz D.
Elektronik-Labor
Projekte
AVR
Siehe auch:
Goniometer mit AT13
LED-Licht und physikalische Größen
Im
laufe der Zeit liegen LED's herum, aber man weiss nicht mehr woher sie
sind, geschweige denn, wie hell sie sind. Eine absolute
Helligkeitsmessung wäre wünschenswert. Für den Hobbybereich ist ein
exakter Messwert nicht so wichtig. Wichtiger ist die Reproduzierbarkeit
der Messwerte (auch nach längerer Zeit) bei einfachem Messaufbau.
Der
Diffusor ist von einer Lichterkette. Das schwarze Tuch (hinten) wird
zur Messung übergelegt. Es können Farbfilter dazwischen gesetzt werden.
Ohne RGB-Sensor muss dann jedoch mit (bekannten) farbigen Sende-LEDs
die Dämpfung bestimmt werden.
Überlegungen:
1.
Bei
konstantem Strom (9-10mA) nimmt eine blaue LED mehr Leistung auf, als
eine IR-LED. Multipliziert man die Leistung mit der Durchlasskurve der
BPW34, erhält man bei gleichem Wirkungsgrad etwa den gleichen Fotostrom
bis ~470nm.
2.
Misst
man mit einem LDR, der spektral recht ausgewogen ist, wünscht man sich
farbunabhängig immer die gleiche Leistung an der Led. Bei +5V konstant
und Rled 270 Ohm erreicht man bei etwa 21mW einen Fehler von meist
unter +-10%.
Mir
gefällt die 2. Variante, weil das auch mit einem Ohmmeter geht. Sie
sollten jedoch einen LDR zur Referenz machen und immer den gleichen
Abstand (20 Noppen*8mm=160mm) einhalten, um bei kleinen Tolleranzen
nicht gleich eine Fehlmessung zu erhalten. Für Arduino ist ein
'Servo-Schwenker' angefügt. Es kann leicht angepasst werden, um z.B.
Leds umzuschalten.
Download: optische_bank-ino.zip
// Optische Bank, Led an Pin 4, LDR an Pin A4, Servo an Pin 11
// schwenkt den Servo und gibt die Ad-Werte aus
//##################################################################################
#include <Servo.h> //benutzt Timer 1
Servo servo1; Servo servo2; Servo servo3;
byte tmpb=0;
word tmpw=0;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void setup() {
Serial.begin(9600);
pinMode(0, INPUT_PULLUP); pinMode(1, INPUT_PULLUP); pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP);
pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); //Out-Port
pinMode(8, INPUT); pinMode(12, INPUT); pinMode(13, OUTPUT); //US
pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); //Servo
digitalWrite(A4, HIGH); digitalWrite(A5, HIGH); //Pullup Ad4+5
digitalWrite(4,HIGH); // Led on
servo3.attach(11);
}//################################################################################## MAIN
void loop() {
servo3.write(90);
delay(999);
for (int i=90; i <= 180; i++){ // Grad
servo3.write(i);
tmpw = analogRead(A4);
Serial.print("Winkel= "); Serial.print(i);
Serial.print(" Ad4= "); Serial.println(tmpw);
delay(199);
}
servo3.write(0);
delay(999);
for (int i=0; i <= 90; i++){ // Grad
servo3.write(i);
tmpw = analogRead(A4);
Serial.print("Winkel= "); Serial.print(i);
Serial.print(" Ad4= "); Serial.println(tmpw);
delay(199);
}
}//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Elektronik-Labor
Projekte
AVR