Analoges I/O

Veröffentlicht von

Inhalte

  • Analoger Input am Arduino mit analogRead
  • Pseudo-analoger Output am Arduino mit analogWrite
  • Spannungsteiler und Potentiometer

Einführung

In den bisherigen Beispielen wurden immer digitale Werte für Input und Output am Arduino verwendet. Digital bedeutet, dass nur binäre Werte zum Einsatz kamen ( LOW oder HIGH , false  oder true , 0 oder 1). Dementsprechend waren auch unsere Input- und Output Optionen auf zwei Werte beschränkt (Taster nicht gedrückt oder Taster gedrückt, LED aus oder LED an).

In der Realität benötigt man zur Beschreibung eines Zustands oft mehr als zwei Werte. Um eine Temperatur zu messen wird ein Thermometer üblicherweise mehr als zwei Zustände anzeigen (also nicht nur HEISS oder KALT, sondern Werte auf einer kontinuierlichen Skala, z.B. zwischen -20° Celsius und +50° Celsius).

Werte, die viele unterschiedliche Zustände annehmen können, bezeichnet man als analoge Werte. Das Arduino hat mehrere Inputs um analoge Spannungen in einem gewissen Spannungsbereich messen zu können. Diese Inputs sind als A0  bis A5  am Board gekennzeichnet.

analog_pins

Analoge Inputs

Die analogen Inputs am Arduino konvertieren die anliegende elektrische Spannung in einen Zahlenwert. Intern kommt hierfür ein Analog-Digital-Konverter (ADC) mit einer Auflösung von 1024 Werten zum Einsatz (Details zur Funktionsweise im Artikel BITS UND BYTES). Dies bedeutet, dass eine anliegende Spannung von 0V den mit dem Wert 0 ausgelesen wird, eine Spannung von 5V (bei anderen Boards auch 3.3V) wird als Wert 1023 ausgelesen. Spannungen dazwischen werden proportional dazwischen verteilt (so bekommt die Hälfte der Spannung von 5V, also 2,5V,  den Wert 511, was ungefähr der Hälfte von 1023 entspricht).

Im Arduino Code wird die Funktion analogRead(PIN_NUMMER)  verwendet um vom ADC einen Wert am entsprechenden Pin auszulesen. Im folgenden Beispiel wird vom Analog-Pin A0  der Wert ausgelesen und in die Variable analogValue  gespeichert:

Pseudo-Analoge Outputs

Um analoge Spannungswerte mit einem Mikrocontroller auszugeben, benötigt man eigentlich einen Digital-Analog-Konverter (DAC). Leider existiert ein solcher auf dem Arduino nicht. Mit einem Trick kann man aber auch nur mittels zwei digitalen Werten analoge Werte simulieren (vereinfacht gesagt werden hierzu die Ausgänge sehr schnell aus- und wieder eingeschalten. Details im Artikel Pulsweitenmodulation).

Am Arduino können nur bestimmte digitale Pins als pseudo-analoge Outputs verwendet werden. Diese sind mit dem Tilde-Zeichen (~) gekennzeichnet.

digital_pins

Mit dem analogWrite(PIN_NR, WERT)  Befehl kann man eine analoge Ausgabe an einem solchen Ausgang simulieren. Der in diesem Befehl angegebene Wert muss zwischen 0 und 255 liegen.

Beispiel 1

In diesem Experiment wird die analoge Spannung an einem analogen Pin mittels analogRead  gemessen. Das Ergebnis dieser Messung wird gleich mittels analogWrite  auf einen Pin geschrieben, der mit einer LED verbunden ist. Um einen Spannungswert zu erhalten, der zwischen 0 und 5V liegt wird ein Spannungsteiler verwendet (das Prinzip hierfür wird weiter unten genauer beschrieben).

spannungsteiler_Steckplatine

Verbinden sie nun eines der drei Kabel mit dem Pin A0.

  • Bei Verbindung mit dem GND-Pin bleibt die LED dunkel.
  • Bei Verbindung mit dem 5V Pin wird die LED hell.
  • Bei Verbindung mit dem Kabel, das zwischen den beiden Widerständen weggeht, leuchtet die LED gedimmt. Die beiden Widerstände fungieren hier als Spannungsteiler, welche die Spannung abhängig von den verwendeten Widerständen reduzieren.

Spannungsteiler

Spannungsteiler bestehend aus ohmschen Widerständen werden verwendet, um eine höhere Spannung auf eine niedrigere Spannung zu reduzieren. Dabei werden zumindest zwei Widerstände in Serie geschalten, sodass sich der Gesamtspannungsabfall auf die beiden Widerstände proportional verteilt.

[GRAFIK Spannungsabfall]

Intuitiv kann man erkennen, dass bei zwei gleich großen Widerstandswerten, die Spannung am Teilungspunkt genau die Hälfte beträgt. Werden unterschiedlich große Widerstandswerte verwendet, kann man sich die Spannungsabfälle mit folgender Formel berechnen:

Rges

Verhaeltnis_1 , weil  Spannungsteiler_U1

Spannungsteiler_U2 , weil  Verhältnis_2

Potentiometer

Ein Potentiometer (kurz „Poti“) ist ein Bauteil, dass einen variablen Spannungteiler realisiert. Es besteht aus einem Widerstand, an dessen vorderem und hinteren Ende zwei verschiedene Spannungspotentiale angelegt werden können. An dem Widerstand ist ein dritter Ausgang angebracht, der sich zwischen den beiden anderen Enden verschieben lässt. Dementsprechend teilt er den gesamten Widerstand in zwei Teilwiderstände auf. Der an diesem Ausgang gemessene Spannungswert entspricht also dem Ort, an dem sich der Punkt der Spannungsabnahme befindet.

Beispiel 2

Wir wiederholen Beispiel 1, dieses Mal mit einem Potentiometer als variablen Spannungsteiler. Bei Verstellung des Potis wird die LED ein- und ausgedimmt.

spannungsteiler_poti_Steckplatine

Aufgabe

Realisieren Sie folgende zwei Aufgabenstellung mit dem Arduino:

[VIDEO Endergebnis]

Teil 1

  • Bauen Sie eine Schaltung mit einem Taster zur Eingabe und einer LED zur Ausgabe.
  • Auf Tastendruck soll die LED eingeschaltet werden. Der Einschaltvorgang soll aber langsam vor sich gehen, d.h. die Helligkeit soll eingedimmt werden. Wenn die LED ihre volle Leuchtkraft erreicht hat, bleibt sie in diesem Zustand.
  • Auf einen weiteren Tastendruck soll die LED ausgedimmt werden, d.h. die Helligkeit soll langsam reduziert werden, bis sie komplett dunkel ist. (Verwenden Sie eine for -Schleife um die Helligkeit kontinierlich zu steigern).

Teil 2

Erweitern Sie Teilaufgabe 1 um ein Potentiometer. Das Potentiometer dient zur Helligkeitseinstellung der LED. Beachten Sie dabei folgendes:

  • Nur im Moment des Einschalten der LED durch Tastendruck wird der Spannungswert am Potentiometer abgelesen und in einer Variable gespeichert.
  • Beim Eindimmen entspricht der maximal-Helligkeitswert der der LED dem beim Tastendruck gemessenen Wert des Potentiometers.

Weiterführende Links

  • http://www.frustfrei-lernen.de/elektrotechnik/spannungsteiler.html
  • http://www.arduino-tutorial.de/2010/06/analog-in/

Kommentar hinterlassen

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