5.3 - Helligkeitsmessung mit einem Fotowiederstand
Ein Fotowiderstand oder auch LDR genannt, ändert je nach Lichtstärke seinen Widerstandswert. Diese Änderung können wir nutzen um an einem Analogen Eingang des Arduinos die Spannung zu messen. Der Arduino wandelt die anliegende analoge Spannung von 0V - 5V in einen digitalen Wert zwischen 0 - 1023 um, mit dem wir dann arbeiten können.
So kann man Beispielsweise einen Dämmerungsschalter bauen, oder die Beleuchtungsstärke seines Computers je nach Umgebungslicht automatisch steuern.
So kann man Beispielsweise einen Dämmerungsschalter bauen, oder die Beleuchtungsstärke seines Computers je nach Umgebungslicht automatisch steuern.
Teileliste
-
Arduino IDE (Tutorial wurde mit 1.6 erstellt)
-
Arduino Uno (oder ein anderes Modell)
Anschlussplan
Code
// Konstanten const int abfrageZahl = 5; // Je mehr abfragen, desto stabiler isr das Ergebnis const int ldr = A0; // Pin für den Fotowiederstand const int led = 2; // Variablen int helligkeit = 0; // Variable für die Helligkeit int abfrage[abfrageZahl]; // Array Variable für das Mitteln der Temperatur float durchschnitt = 0; // Variable für das Mitteln der Temperatur void setup() { Serial.begin(9600); // Baudrate für die Ausgabe am Serial Monitor pinMode(ldr, INPUT); // Pin des NTC Wiederstands als Eingang pinMode(led, OUTPUT); } void loop() { // Nimmt N Abfragen in einer Reihe, mit einem kurzen delay for (int i=0; i < abfrageZahl; i++) { abfrage[i] = analogRead(ldr); delay(10); } // Mittelt alle Abfragen durchschnitt = 0; for (int i=0; i < abfrageZahl; i++) { durchschnitt += abfrage[i]; } helligkeit = durchschnitt/abfrageZahl; // Ausgabe an den Seriellen Monitor Serial.print("LDR "); Serial.println(helligkeit); // Schalte bei Dunkelheit die LED an if(helligkeit > 950) { digitalWrite(led, HIGH); } else { digitalWrite(led, LOW); } }
abfrageZahl und abfrage hängen zusammen und bestimmen mit wie vielen Messwerten des LDR gemittelt wird. Je höher der Wert, desto weniger sprunghaft ist der Helligkeitsrwert, allerdings dauert die Erfassung auch länger.
Nachdem alle Variablen gesetzt und die Ein- und Ausgänge deklariert wurden, beginnt der Loop mit einer for Schleife in der 5 mal hintereinander der Helligkeitswert am Analogpin A0 gelesen wird.
In der nächsten for Schleife werden dann die fünf Ergebnisse in der Variable durchschnitt zusammengezählt und danach durch fünf geteilt um so eine gemittelte Messung zu erhalten. Das Ergebnis wird nun am Seriellen Monitor ausgegeben.
Nachdem alle Variablen gesetzt und die Ein- und Ausgänge deklariert wurden, beginnt der Loop mit einer for Schleife in der 5 mal hintereinander der Helligkeitswert am Analogpin A0 gelesen wird.
In der nächsten for Schleife werden dann die fünf Ergebnisse in der Variable durchschnitt zusammengezählt und danach durch fünf geteilt um so eine gemittelte Messung zu erhalten. Das Ergebnis wird nun am Seriellen Monitor ausgegeben.
Wenn man nun Beispielsweise einen Dämmerungsschalter bauen möchte, muss eigentlich nur noch eine if Abfrage in den Code eingebaut werden und ein Pin als Ausgang deklariert werden.
Anschlussplan
Code
// Konstanten const int abfrageZahl = 5; // Je mehr abfragen, desto stabiler isr das Ergebnis const int ldr = A0; // Pin für den Fotowiederstand const int led = 2; // Pin für die LED // Variablen int helligkeit = 0; // Variable für die Helligkeit int abfrage[abfrageZahl]; // Array Variable für das Mitteln der Temperatur float durchschnitt = 0; // Variable für das Mitteln der Temperatur void setup() { Serial.begin(9600); // Baudrate für die Ausgabe am Serial Monitor pinMode(ldr, INPUT); // Pin des NTC Wiederstands als Eingang pinMode(led, OUTPUT); // Pin der LED als Ausgang } void loop() { // Nimmt N Abfragen in einer Reihe, mit einem kurzen delay for (int i=0; i < abfrageZahl; i++) { abfrage[i] = analogRead(ldr); delay(10); } // Mittelt alle Abfragen durchschnitt = 0; for (int i=0; i < abfrageZahl; i++) { durchschnitt += abfrage[i]; } helligkeit = durchschnitt/abfrageZahl; // Ausgabe an den Seriellen Monitor Serial.print("LDR "); Serial.println(helligkeit); // Schalte bei Dunkelheit die LED an if(helligkeit > 950) { digitalWrite(led, HIGH); } else { digitalWrite(led, LOW); } }
Hier wird lediglich noch eine if Abfrage eingefügt, bei der ab einem Wert von 950 (wurde aus dem Seriellen Monitor ausgelesen) die LED angeht und darunter aus ist.
Das war es auch schon
Einen Kommentar verfassen
Einloggen um Kommentare zu verfassen
Als Gast kommentieren