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.

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.

Hast du weitere Fragen? Probier doch mal unser brandneues Forum zu Arduino aus!

3 thoughts on “Lektion 17 – Die Sonne spielt Musik! Die Analoge Eingabe

  1. 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

  2. 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.

Ich akzeptiere

 

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