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

Drucktaster

1 - Testschaltung 1 mit Drucktaster

Testschaltung 1 mit Drucktaster
Material
  • 1x Arduino UNO oder NANO ESP32
  • 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

Abb. 1a - Testschaltung mit Taster und LED
Abbildung 1b - Schaltskizze und Schaltungsaufbau Drucktaster

Wie arbeitet die Testschaltung?

Wird der Drucktaster nicht betätigt, ist er offen. Dies wird links in Abbildung 2 gezeigt. Ein Strom kann aufgrund der Unterbrechung (offener Stromkreis) nicht vom Plus-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 (linkes Bild) - Schalter geschlossen (rechtes Bild)

2 - Testschaltung 2 mit Drucktaster

 

In der folgenden Schaltung (s. Abb. 3a) 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 und das ist in diesem Fall der Weg über T1.

Schaltskizze und Schaltungsaufbau

Abb. 3a - Schaltung mit Taster T1 und LED; T1 liegt parallel zur LED.
Abbildung 3b - Schaltungsskizze und Schaltungsaufbau
Testschaltung 2 mit Drucktaster
Material
  • 1x Arduino UNO oder NANO ESP32
  • 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 - Den Zustand eines Tasters 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 (D3) als Eingang gesetzt. Wird nun ein Taster, der mit dem Eingangspin 3 (D3) 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 Tasters abfragen
Material
  • 1x Arduino UNO oder NANO ESP32
  • 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.
  • Überprüfe, ob die eingebaute LED aufleuchtet, sobald der Taster gedrückt wird und erlischt, wenn der Taster nicht gedrückt ist.
Abb. 5a - Schaltskizze mit Taster T1, LED und zwei Widerständen. Bei einem Arduino UNO liegen 5V, bei einem NANO 3,3V an.

 

 

 

 

 

 

 

 

 

 

 

 

Abb. 5b

Schaltungsaufbau zum Programm led_taster_01.ino

mit einem Arduino NANO ESP32.

Programm led_taster_01.ino

// =================================================

// Eingesetzte Hardware:          Arduino NANO ESP32

// https://www.rahner-edu.de

// =================================================

#define LED_Pin D13

#define TASTER_Pin D4

int LED_Status = LOW;

int TZustand = 0;

 

void setup() {

  pinMode(LED_Pin, OUTPUT);

  pinMode(TASTER_Pin, INPUT);

}

 

void loop() {

 TZustand = digitalRead(TASTER_Pin);

  if (TZustand == LOW) {

    digitalWrite(LED_Pin, LOW);

  } else

  {

    digitalWrite(LED_Pin, HIGH);

  }

}

Wie arbeitet die Schaltung?

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

Wird der Schalter geschlossen, teilt sich der Strom im Punkt K auf; ein großer Anteil des Stromes fließt über den 10 kW Widerstand nach GND ein anderer - sehr geringer Teil - über den 470 W Widerstand und den hochohmigen Pin 3 nach GND. Zwischen K und GND liegt jetzt nahezu die volle Spannung von +5V an. Der Eingang D3 erkennt, dass HIGH anliegt.

 

Zum Einlesen des Status von einem Schalter (geschlossen 1, offen 0), muss der Pin Eingang auf ein festes Potential gesetzt werden. Bei offenem Schalter T1 wirkt der 10 kW Widerstand als sogenannter pull-down Widerstand, er zieht den Punkt K auf GND in einen für den Eingang D3 definierten und damit lesbaren Spannungszustand.

4 - Taster, LED, Polling und Interrupt

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

  • Bei der Polling-Methode wird bei jedem Schleifendurchlauf des steuernden Programms abgefragt, ob der Taster gedrückt ist.
  • Bei der Interrupt-Methode reagiert das Programm sofort, sobald der Taster gedrückt wird.

Im Programm led_taster_01.ino wurde die Polling-Methode genutzt, um den Zustand des Tasters abzufragen.

Die Aktivierung eines internen Pull-up Widerstandes für einen als Ausgang deklarierten Pin erfolgt dadurch, daß man im Setup-Teil des Programms den Pin über pinMode nicht als Ausgang deklariert. Ein nachfolgender digitalWrite Befehl im loop-Bereich nutzt dann den internen Pull-up Widerstand.

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 simulieren und so programmieren, dass sie die oben genannte Bedingung erfüllt.

Schaltskizze und Schaltungsaufbau

Abb. 7a - Schaltungskizze zur Treppenhausbeleuchtung mit zwei Tastern und zwei LEDs
Abb. 7b - Schaltungsaufbau zur Treppenhausbeleuchtung mit zwei Tastern und zwei LEDs

In der Schaltskizze werden beide Taster über Pin 2 (D2) abgefragt. Wird einer der beiden Taster, T1 oder T2, gedrückt, wird ein Interrupt ausgelöst und der Zustand der Treppenhausbeleuchtung für ca. 8 sec 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 Arduino UNO oder NANO ESP32
  • 1x  Steckbrett
  • 1x  Schaltnetzteil
  • 1x  USB-Verbindungskabel
  • 2x  Taster, offen
  • 2x  LED, rot
  • 2x  Widerstand, 220 W
  • 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 Treppenhausleuchten_UNO_WiFi_R2.ino

6 - Bemerkungen zur Funktion attachInterrupt()

  • Die Arduino UNO, Nano und Mini verfügen über zwei digitale Interrupt-Pin: D2 und D3.
  • Bei einem Arduino UNO WiFi R2 und Arduino Nano Every sind alle digitalen Pins interruptfähig.
  • Informiere dich über das Datenblatt deines benutzten Arduino Boards, welche Pinanschlüsse interruptfähig sind.

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

Druckversion | Sitemap
© Reinhard Rahner - Gettorf