Zum Inhalt springen
Arduino LDR Fotowiderstand

Lektion 17 – Die Sonne spielt Musik! Die analoge Eingabe

    Neben der digitalen Eingabe gibt es auch die analoge Eingabe. Damit kann man z.B. Drehregler und Sensoren auslesen. Stell dir vor, wir wollen messen, wie hell es ist. Dafür wäre das Erkennen von an und aus wie bei der digitalen Eingabe ein bisschen wenig.

    Helligkeit kann man mit Lichtsensoren, sogenannten Fotowiderständen, messen. Ein Fotowiderstand besteht aus einem Material, das je nach Lichteinfall seinen Widerstand ändern kann. Je mehr Licht darauf triff, desto kleiner wird der Widerstand, je weniger Licht einfällt, desto größer wird der Widerstand.

    Fotowiderstand

    Diesen Widerstand können wir mit Arduino auslesen, und zwar in einem Bereich von 0 bis 1023. Dazu verwenden wir die analogen Input-Pins. Diese befinden sich am unteren Rand des Arduinos.

    Arduino Analog Inputs

    Wie auch beim Taster gehört ein extra Widerstand zum Fotowiderstand. Diesen Widerstand nennt man Referenzwiderstand und Arduino braucht diesen, um ein relatives Verhältnis zwischen beiden Widerständen auszurechnen.


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    Arduino Lichtwiderstand Referenzwiderstand

    Der Referenzwiderstand sollte ungefähr so groß sein, wie der Widerstand des Fotowiderstands bei mittlerem Lichteinfall. Man kann aber auch ausprobieren, ob der Widerstand OK ist. Probier erstmal 100 Kilo-Ohm aus.

    Benötigte Bauteile

    Bauteile Fotowiderstand

    Schaltung

    Arduino Fotowiderstand Bauplan

    Super. Jetzt haben wir einen Referenzwiderstand (100 kOhm) und einen Fotowiderstand. Sie sind mit dem Analog In 0 des Arduinos verbunden.

    Der Befehl, um den analogen Wert auszulesen, ist

    analogRead(pin);

    Er gibt einen Wert von 0 bis 1023 zurück. Nun schreiben wir ein Programm, das einen Ton erzeugt. Dieser Ton soll vom Lichteinfall auf den Fotowiderstand abhängig sein. Um das zu erreichen, können wir den Befehl analogRead(sensorPin) einfach an die Methode tone() übergeben:

    int sensorPin = 0;
    int speakerPin = 9;
    
    void setup() {
    
    }
    
    void loop() {
      tone(speakerPin,analogRead(sensorPin));
      delay(20);
    }

    Das war schon nicht schlecht, oder? Aber woher wissen wir, welche analogen Werte denn überhaupt erreicht werden? Es wäre doch schön, wenn man die sich irgendwo anzeigen lassen könnte.

    Serial Monitor

    Dafür gibt es bei Arduino den Serial Monitor. Dieser stellt eine Datenverbindung zum Arduino-Board her. Wenn wir also die richtigen Werte an die Datenverbindung schicken, können wir uns ansehen, wie die aussehen. Um die serielle Ausgabe auf dem Arduino-Board einzuschalten, müssen wir ins Setup:

    Serial.begin(9600);

    schreiben. Die 9600 ist dabei die Datengeschwindigkeit (Baud-Rate).

    Um nun einen Wert zu senden, schreiben wir einfach:

    Serial.println(wert);

    Als Wert können wir Variablen, Text oder auch Methoden schreiben, die einen Rückgabewert besitzen, also z.B. analogRead(sensorPin). Das sieht dann so aus:

    int sensorPin = 0;
    int speakerPin = 9;
    
    void setup() {
      Serial.begin(9600);
    }
    
    void loop() {
      Serial.println(analogRead(sensorPin));
      tone(speakerPin,analogRead(sensorPin));
      delay(20);
    }

    Und wo werden die Daten jetzt angezeigt? Klicke in der Arduino-Software oben rechts auf das Lupen-Symbol, dann öffnet sich ein neues Fenster: Der Serial Monitor.

    Arduino Serieller Monitor Icon
    Arduino Serieller Monitor

    Wie sind die Werte? Gehen sie von 0 bis 1023? Meistens erreicht man nicht ganz die Grenzen, aber ein Wertebereich von 600 bis 900 wäre auch schon super.

    4 Gedanken zu „Lektion 17 – Die Sonne spielt Musik! Die analoge Eingabe“

    1. Hallo Phillip

      Ich persönlich finde deine Website faszinirend.
      Eihgentlich verstehe ich nicht viel von Computern, aber dieses Seite hat mir viel geholfen mehr zu verstehen wie der Arduino funktionirt und voralem das Piepsen hat mir viel Spaß gemacht :)

      fiele Grüse

    2. Hallo Philipp, hallo Stefan!

      Das hier auftretende Problem liegt an der wackeligen Genauigkeit der Alltagssprache. Mathematische Formulierungen sind eindeutig, hier in dem Basiskurs aber nicht sinnvoll. Die alltagssprachliche Formulierung “… gibt Werte von 0 bis 1023 …” lässt nun mal ohne Kontext (aus dem Zusammenhang gerissen) 4 Möglichkeiten zu:
      a) der Wert 0 ist dabei und der Wert 1023 auch und alle Werte zwischen 0 und 1023: 1024 Werte
      b) der Wert 0 ist nicht dabei, der Wert 1023 ist nicht dabei, aber alle Werte zwischen 0 und 1023: 1022 Werte
      c) der Wert 0 ist nicht dabei, der Wert 1023 schon und alle Werte zwischen 0 und 1023: 1023 Werte
      d) der Wert 0 ist dabei, der Wert 1023 aber nicht, aber alle Werte zwischen 0 und 1023: 1023 Werte

      Übersichtlicher tabellarisch:

      a) 0, 1, 2, 3, ……, 1019, 1020, 1021, 1022, 1023 : 1024 Werte
      b) (0) 1, 2, 3, ……, 1019, 1020, 1021, 1022 (1023): 1022 Werte
      c) (0) 1, 2, 3, ……, 1019, 1020, 1021, 1022, 1023 : 1023 Werte
      d) 0, 1, 2, 3, ……, 1019, 1020, 1021, 1022 (1023): 1023 Werte

      Etwas klarer ist die Aussage “…. zwischen 0 & 1024 ….”. Zwischen meint hier sowohl in der Alltagssprache als auch in der Mathematik die Zahlen “1, 2, 3, ….., 1019, 1020, 1021, 1022 und 1023”, das sind 1023 Werte, weil sie zwischen der Zahl 0 und der Zahl 1024 liegen.

      FG an Alle

    3. Guten Tag,

      Einmal schreiben Sie, dass der Fotowiderstand 1024 Werte ausgeben kann (also von 0 – 1023)
      Weiter unten im Text schreiben Sie, dass der Befehl analogRead einen Wert zwischen 0 & 1024 ausgibt. Wären das dann nicht aber 1025 Werte?

      Entweder habe ich das falsch Verstanden, oder ich konnte Ihren Formulierungen nicht folgen (bitte nicht als Vorwurf verstehen)

      1. Hallo Philipp,

        auch hier hast Du Recht. Es gibt 1024 Möglichkeiten. Die gehen von 0 bis 1023. Du bist ein wirklich aufmerksamer Leser. Danke auch für den Hinweis, das macht diese Seite besser. :-)

        Liebe Grüße

        Stefan

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

     

    Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.