Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

Drucktaster

1 - Testschaltung für einen Drucktaster

Testschaltung für einen Drucktaster - 1
Material

1x  Arduino UNO

1x  Drucktaster als Schließer

1x  Widerstand 470 Ohm (gelb-violett-braun)

1x  LED rot

1x  Steckdrähte

1x  USB Kabel

Aufgaben
  • Baue die Schaltung aus Abb. 1 auf dem Steckbrett auf.
  • Überprüfe die Funktion des Tasters und der LED. Notiere deine Ergebnisse.

Schaltskizze und Schaltungsaufbau

Abbildung 1 - Schaltskizze und Schaltungsaufbau Drucktaster

Wie arbeitet die Testschaltung?

Wird der Drucktaster nicht betätigt, ist er offen. Dies wird links Abbildung 2 gezeigt. Ein Strom kann aufgrund der Unterbrechung (offener Stromkreis) nicht vom + - Pol zum Minuspol fließen. Die LED leuchtet nicht.

Im rechten Bild ist der Taster geschlossen. Der Stromkreis ist geschlossen und die elektrische Ladung fließt vom Pluspol über den Taster T1, den Widerstand und die LED zum Minuspol. Die LED leuchtet.

Abbildung 2 - Schalter offen - Schalter geschlossen

2 - Der Taster wird anders platziert

In der folgenden Schaltung verhält sich die LED anders, weil der Taster parallel zur LED geschaltet ist. Wird der Taster nicht gedrückt, leuchtet die LED, wird er gedrückt, erlischt sie. Der Grund dafür liegt in der Tatsache begründet, dass der elektrische Strom sich immer den Weg des geringsten Widerstands nimmt.

Schaltskizze und Schaltungsaufbau

Abbildung 3 - Schaltungsskizze und Schaltungsaufbau
Testschaltung für einen Drucktaster - 2
Material

1x  Arduino UNO

1x  Drucktaster als Schließer

1x  Widerstand 470 Ohm (gelb-violett-braun)

1x  LED rot

4x  Steckdrähte

1x  USB Kabel

Aufgaben
  • Baue die Schaltung nach Abbildung 3 auf.
  • Überprüfe die Funktion des Tasters und der LED. Notiere deine Ergebnisse.

3 - Zustand abfragen

Wir wissen jetzt, wie ein Taster zu beschalten ist. Wie erkennt ein Mikrocontroller aber, ob ein Taster gedrückt wurde oder nicht?

Das wird uns in dieser Übung beschäftigen. Dazu wird ein Pinanschluss (P3) als Eingang gesetzt. Wird nun ein Taster, der mit dem Eingang P3 verbunden ist, gedrückt, dann soll die volle Betriebsspannung (5V -> entspricht 1) am Eingang anliegen, wird er nicht gedrückt, liegen 0V (entspricht 0) an.

In bestimmten Zeitabständen (ca. alle 2s) soll der Taster abgefragt und das Ergebniss im Terminalfenster dokumentiert werden. Wie das aussehen könnte, zeigt Abb. 5.

Soweit die Theorie, jetzt kommt die Praxis, und die verlangt ein bisschen Wissen aus der Physik.

Standardmäßig sind die digitalen Eingänge eines Arduino UNO als Eingänge voreingestellt. Sie besitzen einen hohen Eingangswiderstand und es ist im allgemeinen nicht nötig, die Eingänge zu Programmanfang in der Methode setup() mit pinMode festzulegen. Wir werden dies aber aus Konsistenzgründen immer tun.

Abbildung 4 - Terminalausgabe des Tasterzustandes
Zustand eines Drucktasters abfragen
Material

1x  Arduino UNO

1x  Drucktaster – Schließer

1x  Widerstand 10kOhm (braun-schwarz-orange)

1x  Widerstand 470 Ohm (gelb-violett-braun)

3x  Steckdraht

1x  USB Verbindungskabel

Aufgaben
  • Baue die Schaltung nach Abbildung 5 auf.
  • Übertrage das Programm Taster0.ino in den Editor und speichere es ab.
  • Starte das Programm.
  • Überzeuge dich, dass der Controller eine 1 im Terminal anzeigt, wenn der Taster gedrückt wird und eine 0, wenn nichts passiert.
Abbildung 5 - Schaltskizze und Schaltungsaufbau mit Drucktaster und Spannungsteiler

Programm Taster0.ino

Programm Taster0.ino

Wie arbeitet die Schaltung?

Im Normalzustand ist der Drucktaster geöffnet. Es fließt kein Strom vom Plus- zum Minuspol. Der Eingang P3 "sieht", dass eine 0 anliegt.

Wird der Schalter geschlossen, fließt ein Strom vom Pluspol (5V) über den 10kOhm Widerstand nach GND. Zwischen K und GND liegt jetzt nahezu die volle Spannung von +5V an oder anders ausgedrückt - über dem Widerstand fällt nahezu die komplette Spannung von 5V ab. Der Eingang P3 erkennt, dass eine 1 anliegt.

Zum Einlesen des Status von einem Schalter (ist er geschlossen, liegt eine 1 an oder ist er offen, dann liegt eine 0 an), muss der Pin Eingang auf ein festes Potential gesetzt werden. Das haben wir eben mit dem Spannungsteiler aus einem 470 Ohm und einem 10 kOhm Widerstand getan. Bei offenem Schalter T1 wirkt der 10 kOhm Widerstand als sogenannter pull-down Widerstand, er zieht den Punkt K auf GND in einen für den Eingang P3 definierten und damit lesbaren Spannungszustand.

In der eben benutzten Schaltung aus Abb. 5 wurde der 10kOhm Widerstand direkt mit GND verbunden. Ein solcher Widerstand wirkt als pull-down Widerstand, da er den Spannungswert bei geöffnetem Taster an P3 auf 0V herunterzieht.

4 - Taster, LED und Polling

Grundsätzlich gibt es zwei Möglichkeiten, den Zustand eines Tasters abzufragen:

  • in dem man bei jedem Schleifendurchlauf des steuernden Programms abfragt, ob der Taster gedrückt wurde. Diese Methode bezeichnet man auch als Polling.
  • in dem man, sobald ein Taster gedrückt wird, das Programm sofort darauf reagieren lässt. Dies bezeichnet man als Interrupt-Methode.

Im folgenden Schaltbild benutzen wir einen pull-up Widerstand, der die Spannung auf 5V anhebt. Wird der Taster nicht gedrückt, liegt eine 1 und die LED ist aus, wird er gedrückt, liegt eine 0 an und die LED geht an.

Die Aktivierung eines internen Pull-up Widerstandes erfolgt beim Arduino in der Funktion setup() in zwei Schritten:

  1. Pin als Eingang setzen, z. B. mit pinMode(4, INPUT);
  2. Internen Pull-up einschalten mit digitalWrite(4, HIGH);
Abfrage des Tasters mit der Polling Methode
Material

1x  Arduino UNO

1x  Steckernetzteil

1x  USB Verbindungskabel

1x  LED rot

1x  Widerstand 220 Ohm

1x  Widerstand 10 kOhm

1x  Taster, offen

5x  Steckdraht

Aufgaben
  • Baue die Schaltung aus der Vorlage der Schaltskizze auf dem Steckbrett auf.
  • Übertrage das Programm Taster1.ino in den Editor und speichere es ab.
  • Starte das Programm.
  • Überzeuge dich davon, dass mit jedem Tastendruck die LED an geht und wenn der Taster los gelassen wird auch wieder aus.

Schaltskizze und Schaltungsaufbau

Das Programm Taster1.ino

5 - Treppenhausbeleuchtung und Interrupt

In einem Treppenhaus gibt es auf jeder Etage einen Lichtschalter. Drückt man ihn, geht die Treppenhausbeleuchtung in allen Etagen an und erlischt nach einer gewissen Zeit wieder.

Wir werden eine solche Treppenhausbeleuchtung mit zwei LEDs nachbauen und so programmieren, dass sie die oben genannte Bedingung erfüllt.

Schaltskizze und Schaltungsaufbau

In der Schaltskizze werden beide Taster über P2 abgefragt. Wird einer der beiden Taster, T1 oder T2, gedrückt, wird ein Interrupt ausgelöst und der Zustand der Treppenhausbeleuchtung auf EIN gestellt. Für beide Taster wurde der interne Pull-Up Widerstand des Arduino eingeschaltet. Das macht den Schaltungsaufbau etwas übersichtlicher und erklärt auch den Unterschied zwischen der Schaltskizze mit Tastern und dem Schaltungsaufbau.

Treppenhausbeleuchtung mit Interrupt
Material

1x  Steckbrett

1x  Schaltnetzteil

1x  USB-Verbindungskabel

2x  Taster, offen

2x  LED, rot

2x  Widerstand, 220 Ohm

9x  Steckdraht

Aufgaben
  • Baue die Schaltung nach Schaltskizze auf dem Steckbrett auf.
  • Übertrage das Programm Taster_2LED_INTERRUPT.ino in den Editor und speichere es ab.
  • Überprüfe, ob beide LEDs leuchten, sobald einer der beiden Taster gedrückt wird und für ca. 8 Sekunden an bleiben.

Das Programm Taster_2LED_INTERRUPT.ino

6 - Bemerkungen zur Funktion attachInterrupt()

Die meisten Arduino Boards verfügen über zwei externe Interrupt-Pin: 0 (am Portpin 2) und 1 (am Portpin 3). Andere Arduino Boards verfügen über bis zu fünf Interrupt-Pin.

Einschränkunken durch die Funktion attachInterrupt()

  • Über die Funktion wird bei einem ausgelösten Interrupt eine sogenannte Internet Service Routine (ISR) aufgerufen.
  • Innerhalb der Funktion attachInterrupt funktioniert die Funktion delay() nicht.
  • Seriell empfangene Daten können während der Ausführung eines Interrupts verloren gehen.
  • Alle Variablen, die innerhalb der Funktion attachInterrupt() verändert werden, sollten als volatile deklariert werden.
  • Eine ISR sollte nur wenige Programmzeilen enthalten; am besten nur eine!
  • Es kann zur Zeit immer nur eine ISR ausgeführt werden; während der Ausführung eines Interrupts werden die anderen vom Programm ignoriert, bis der Interrupt abgearbeitet worden ist.
  • Da die Funktionen delay() und millis() auf Interrupts beruhen, funktionieren sie während eines ISR nicht.
  • DelayMicroseconds() beruht nicht auf Interrupts und funktioniert innerhalb einer ISR.

Mehr Informationen zur Funktion attachInterrupt() gibt es bei arduino.org unter reference.

Druckversion | Sitemap
© Reinhard Rahner - Gettorf