Analoge Eingänge

Programmieren

Willkommen in der analogen Welt! Dieses Mal werden wir einen Dämmerungsschalter mit einem LDR und unserem Arduino bauen.

Analoge Eingänge

In den letzten Tutorials haben wir uns primär mit den digitale Ein- und Ausgänge beschäftigt. Diesmal werden wir uns die analogen Eingänge des Arduino Uno ansehen. Ein Arduino hat sechs analoge Eingangspins A0 bis A5, die zur Spannungsmessung verwendet werden können. Die Spannung wird zwischen dem ausgewählten Pin und GND gemessen, wobei die maximal messbare Spannung etwa 5 V beträgt. Da es eine unendliche Anzahl verschiedener Spannungen zwischen 0 V und 5 V gibt, brauchen wir eine Möglichkeit, dies darzustellen. Dazu wird der Analogwert in eine ganzzahlige Zahl zwischen 0 und 1023 diskretisiert. 0 steht für 0 V und 1023 für 4,995 V. Die Hardwarekomponente, die die Messung und die Diskretisierung durchführt, wird auch als Analog-Digital-Wandler oder kurz ADC bezeichnet. Wenn wir wollten, könnten wir die Spannung mithilfe der folgenden Formel berechnen:

\[ V_{Analog} = {{ADC \cdot V_{Ref}} \over 1024}\]

  • \(ADC\) ist der diskretisierte Wert zwischen 0 und 1023
  • \(V_{Ref}\) ist die Referenzspannung von 5 V

Es gibt auch eine interne 1,1 V Spannungsreferenz, die anstelle der 5 V Versorgungsspannung verwendet werden könnte. Wir werden in diesem Tutorial nicht näher darauf eingehen. Im Falle einer instabilen Versorgungsspannung oder zur Messung der Batteriespannung kann diese interne Spannungsreferenz jedoch sehr nützlich sein.

Unser Ziel

Was ist das Zeil dieses Tutorials? Die heutige Aufgabe besteht darin, einen Dämmerungsschalter zu bauen. Wenn es dunkel wird, wollen wir ein Licht einschalten, in unserem Fall eine LED. Um diesen Dämmerungsschalter zu bauen, brauchen wir einen Sensor um die Helligkeit zu bestimmen. In diesem Tutorial werden wir dazu einen lichtabhängigen Widerstand (LDR), manchmal auch Fotowiderstand genannt, verwenden. Der Widerstand eines LDR nimmt mit zunehmender Helligkeit ab. Wie messen wir dies? Werfen wir einen Blick auf die Schaltung.

Der Schaltkreis

Schaltung für den Dämmerungsschalter auf dem Breadboard Wie üblich habe ich die LED mit einem Widerstand von 220 Ω in Reihe geschaltet. Der interessantere Teil ist die Schaltung, die verwendet wird, um den LDR an den analogen Pin A0 anzuschließen. Der LDR und der feste Widerstand 10 kΩ bilden einen sogenannten Spannungsteiler. Um das etwas klarer zu machen, habe ich den Schaltplan für den entsprechenden Teil der Schaltung beigefügt. LDR und Widerstand bilden einen Spannungsteiler

Die Spannung wird zwischen den beiden Widerständen gemessen. Die Spannungsdifferenz beträgt insgesamt 5 V, aber die bei A0 gemessene Spannung ist je nach Widerstand des LDR nur einen Bruchteil davon. Wir können den Widerstand des LDR mithilfe der gemessenen Spannung berechnen und so die Helligkeit bestimmen. Ich werde ein separates Tutorial über Spannungsteiler und die zugehörigen mathematischen Formeln machen. An diesem Punkt reicht es aus, konzeptionell zu verstehen, was vor sich geht. Wenn beide Widerstände den gleichen Wert haben, ist der Spannungsabfall über jedem Widerstand gleich, und wir messen 2,5 V. Wenn das Licht hell ist, hat der LDR einen geringeren Widerstand als der Festwiderstand und die gemessene Spannung liegt näher an 5 V. Wenn kein Licht vorhanden ist, hat der LDR einen sehr hohen Widerstand und die gemessene Spannung liegt nahe bei 0 V. Für unseren Dämmerungsschalter benötigen wir nicht den tatsächlichen Widerstand des LDR. Wir brauchen nicht einmal die tatsächliche Spannung bei A0. Es reicht zu wissen, dass der ADC-Messwert irgendwo zwischen 0 und 1023 liegen wird und wir bei hoher Helligkeit höhere werde erhalten. Das einzige, was wir für unseren Dämmerungsschalter tun müssen, ist, einen geeigneten Schwellenwert zu finden, an dem es dunkel genug ist, das es sinnvoll ist die LED einzuschalten.

Erstellen des Codes

Das Schreiben des Codes ist diesmal nicht wirklich schwer. Wir brauchen nur eine neue Funktion:

  • analogRead(pin)
    • pin: Analoger Eingang, der für die Messung verwendet werden soll (A0 bis A5)
    • Gibt die Spannung als Wert zwischen 0 und 1023 zurück

Der nächste Schritt besteht darin, den Schwellenwert zu finden. Dazu nutzen wir die serielle Kommunikation, um die gemessenen Rohwerte an den Computer zu übertragen. Wir können die Werte im seriellen Monitor anschauen und so lange experimentieren, bis ein geeigneter Schwellenwert gefunden ist. Der Code ist einfach: Wir benutzen einfach analogRead(A0), um den Spannungspegel auszulesen, speichern den Wert in einer Variablen und senden ihn an den Computer. Der analoge Eingang muss nicht einmal in der setup-Prozedur auf besondere Weise initialisiert werden. Wir können ihn direkt verwenden.

void setup() {
  Serial.begin(9600);
}

void loop() {
  int intensity = analogRead(A0);
  Serial.println(intensity);
}

Wenn du den richtigen Schwellenwert gefunden hast, kannst du den Code für die serielle Kommunikation entfernen und stattdessen eine Bedingung hinzufügen, die prüft ob der Schwellenwert unterschritten wird. Wenn die Lichtintensität unter dem Schwellenwert liegt, schalten wir die LED ein, wenn nicht, schalten wir sie aus. Mehr gibt es dazu nicht zu sagen. Es ist wirklich so einfach.

void setup() {
  pinMode(8, OUTPUT);
}

void loop() {
  int intensity = analogRead(A0);
  if(intensity < 850) {
    digitalWrite(8, HIGH);
  } else {
    digitalWrite(8, LOW);  
  }
}

Das Ergebnis

Ich habe ein kurzes Video erstellt, um dir das Endergebnis zu zeigen. Natürlich musst du selbst einen Schwellenwert finden, der für deinen Anwendungsfall geeignet ist. Meiner ist höchstwahrscheinlich viel zu hoch, da ich beim Filmen ein zusätzliches Licht verwendet habe. Das war einfach, nicht wahr? Die gleiche Methode funktioniert auch für alle anderen widerstandsbasierte Sensoren wie Temperatursensoren oder Potentiometer. Es gibt also eine große Menge an Dingen, mit denen du nach diesem Tutorial selbst experimentieren kannst. Nur noch ein letzter Hinweis, je nachdem, welchen Widerstandswert der Sensor besitzt, musst du eventuell auch den Festwiderstand anpassen und natürlich wieder einen passenden Schwellenwert finden. Natürlich erhalten wir hier keine absoluten Werte. Bei Temperaturfühlern wäre es schön, eine Temperatur in °C zu haben. Ich bin sicher, dass uns dies in einem der zukünftigen Tutorial noch einmal beschäftigen wird.

Vorheriger Beitrag Nächster Beitrag