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.

Schaltplan

Benötigte Bauteile

Bauteile Fotowiderstand

1

Arduino Fotowiderstand Bauplan

2

Arduino Fotowiderstand Bauplan

3

Arduino Fotowiderstand Bauplan

4

Arduino Fotowiderstand Bauplan

5

Arduino Fotowiderstand Bauplan

6

Arduino Fotowiderstand Bauplan

7

Arduino Fotowiderstand Bauplan

8

Arduino Fotowiderstand Bauplan

9

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.

1

Arduino Serieller Monitor Icon

2

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.