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.

    0 0 votes
    Article Rating
    Abonnieren
    Benachrichtige mich bei

    Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..

    6 Comments
    Newest
    Oldest Most Voted
    Inline Feedbacks
    Alle Kommentare anzeigen
    lukas hoppe
    25 Tage zuvor

    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

    Andreas
    2 Jahre zuvor

    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

    Alois
    9 Jahre zuvor

    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

    Philipp
    9 Jahre zuvor

    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)

    lukas hoppe
    Antworte an  Philipp
    25 Tage zuvor

    ok wen juckts

    6
    0
    Ich würde mich über deine Meinung freuen.x