Fotowiderstand

Dieses Modul ist durch Schülerinnen und Schüler der Informatik-Kurses 9 (2018/2019) am Stiftischen Gymnasium erstellt worden. Vielen Dank für die Mühen!


Ein Fotowiderstand(light dependent resistor(LDR)) ist ein Lichtsensor, ein lichtempfindlicher Widerstand, und durch den Fotowiderstand kann man beispielsweise die Helligkeit des Raumes herausfinden.

…Unter der Haube

Im weiteren Verlauf wird neben dem Auslesen des Sensorwertes die map-Funktion verwendet, welche in der Lage ist, Sensorwerte so zu manipulieren, dass man in einem gewünschten Wertebereich landet (um z.B. krumme Sensorwerte in einem bestimmten Interval umzuwandeln in Prozent):

Als erstes schreibt man, welchen Wert man umrechnen möchte (hier: int leseWert), dann schreibt man (= map). Als nächstes schreibt man den Bereich auf den der Fotowiderstand misst, dann in den Bereich in den es umberechnet werden soll.(hier: wert, 0, 1023,1 , 10) 

…was wir benötigen

  • Steckbrett
  • 1x Fotowiderstand
  • 1x Ohmscher Widerstand (10 Kiloohm)
  • Kabel (männlich)

Schaltung und Quelltext für einfaches Beispiel

int analogPin=0;    // Variable für Pin A0 
int ldrWert=0;      // Variable für den  ldrWert
                                                     

  
void setup() { 
   Serial.begin(9600);   //Serielle Schnittstelle öffnen
} 
  
void loop() { 
  delay(1000);
  ldrWert = analogRead(analogPin);  // den Wert an Pin A0 lesen 
  Serial.println(ldrWert);   // nicht umgewandelten Wert ausgeben lassen
  int leseWert = map(ldrWert,0,1023,1,10); 
  Serial.println(ldrWert); // umgerechneten Wert ausgeben lassen                           
}

Tipp: Die fettgedruckten Stellen müssen evtl. anhand der nicht umgewandelten Werte angepasst werden. Wäre z.B. bei Nacht der Wert 23 herrschen und bei Tag der Wert 987, so müsste man die Anweisung wie folgt schreiben, um diesen Wertebereich in den Bereich von 0 bis 100 (und damit in Prozentwerte) zu verschieben:
int leseWert = map(ldrWert,23,987,0,100);

Die Schaltung

 

Aufgaben

Aufgabe 1

Baue die obige Schaltung nach und verändere die Werte der Map-Methode so, dass die gemessenen Lichtwerte bei Nacht und Tag umgewandelt zwischen 0 und 100 liegen.

Hierbei helfen dir der obige Quelltext und der obige Schaltplan sowie der unter dem Quelltext abgedruckte Tipp.

Aufgabe 2

Nun versuche ein Programm und eine Schaltung zu entwickeln,

bei der die Werte, die der Fotowiderstand miss, nicht über den

Seriellenmonitor ausgegeben werden sondern mit Hilfe von 10 LED’s.

Falls ihr nicht weiterkommt kann euch der Quelltext helfen.

int led[]= {2,3,4,5,6,7,8,9,10,11};                      // Variable für die LEDs 
int analogPin=0;                                         // Variable für Pin A0 
int ldrWert=0;                                           // Variable für den  
                                                         // gemessenen Analogwert 
  
  
void setup() { 
   
   for(int i=0;i<10;i++)                                 
   {                                                     
       pinMode(led[i], OUTPUT);                          // LEDs als Ausgang 
                                                         // setzen 
                                                         
   }                                                     
  
} 
  
void loop() { 
  
   ldrWert = analogRead(analogPin);                   // den Wert an Pin A0 l
                                                      // lesen
   setzeLED(ldrWert);                                 // führe die Methode 
                                                      // setzeLED 
                                                      // aus und übergebe 
                                                      // ldrWert 
}                                                     // als Parameter 
  
void setzeLED(int wert)                               // die definierte Methode  
{                                                     // setzeLED 
   int leseWert = map(wert,0,1023,1,10);              // rechne den Analogwert 
                                                      // in eine Zahl zwischen 0 
                                                      // und 10 um 
                                                          
   for(int i=0;i<10;i++)                              // Vergleiche den 
   {                                                  //Analogwert
 
       digitalWrite(led[i], (leseWert >=i)? HIGH:LOW);  // mit der LED Array 
   }                                                   // und mache LED an oder 
                                                      // aus
    
}

 

Quellen

https://www.mymakerstuff.de/2016/04/06/arduino-tutorial-der-lichtsensor/

https://www.arduino.cc/reference/en/language/functions/math/map/