Arduino Tutorial: Taster entprellen - Die RC Schaltung

Neben der Entprellung des Tasters mittels Software, kann man auch den Taster hardwaretechnisch entprellen. Mit einer sogenannten RC- Schaltung kann man die gemessene Spannung in einer definierten Zeit auf- bzw. absteigen lassen. Dazu zeige ich dir erst einmal was eine RC- Schaltung ist.

Die RC- Schaltung

Die RC- Schaltung ist eine Reihenschaltung bestehend aus einem Widerstand und einer Kapazität. An der Kapazität wird die sogenannte Ausgangsspannung Ua am Mikrocontroller gemessen. Dabei hat Ua folgenden Spannungsverlauf.

Ua ist die schwarze Kurve, die sich am Ende auf das Potenzial von Ue zu bewegt,. Die beiden blauen Geraden sind Hilfslinien um Tau zu bestimmen.

Die Konstante Tau definiert die Ladezeit des Kondensators. Nach der Zeit Tau liegt am Kondensator ca. 63% der Eingangsspannung Ue an. Tau kann man mit der richtigen Dimensionierung von R und C bestimmen.

Die Zeit t, die der Kondensator braucht um 99% der Eingangsspannung zu erreichen, beträgt t=5*Tau. Bei einer Änderung des Tasterzustands wird der Ladestrom bzw. Entladestrom zum Beginn maximal und wird durch den Widerstand definiert. Der Arduino kann einen maximalen Strom von 40 mA vertragen. Es empfielt sich aber den Strom auf unter 20 mA zu begrenzen. Nehmen wir einfache Werte und benutzen einen 1 kOhm- Widerstand um den Maximalstrom zu begrenzen. Unsere Eingangsspannung beträgt 5V.

Das heißt mit einen 1000 Ohm Widerstand beträgt der maximale Ladestrom = 5mA.

Du musst jetzt nur noch das richtige C setzen um unser Tau zu erreichen. Lass uns Tau auf 10ms setzen.

Damit kannst du jetzt jede RC- Schaltung richtig dimensionieren. Du kannst die Schaltung jetzt in deinem Testprojekt ausprobieren oder das untenstehende Beispiel übernehmen.

Was benötigst du?

  • 1x Arduino Uno
  • 1x USB Kabel
  • 1x Steckbrett
  • 8x LED
  • 8x Ohmscher Widerstand (200 Ohm)
  • 1x Ohmscher Widerstand (1000 Ohm)
  • 1x Kondensator (10 MikroF)
  • 1x Taster
  • Jump Wire (Männlich)

Wie sieht der Schaltplan aus?

 

 

Achte darauf, dass die Minusseite des Kondensators mit dem GND- Pin am Arduino verbunden ist. Die Plusseite muss über den Widerstand an Pin 4 verbunden sein.

 

 

 

Der Code

int led1 =13;                              //
int led2 =12;                              //
int led3 =11;                              //
int led4 =10;                              //
int led5 =9;                               // Variablen für LEDs
int led6 =8;                               //
int led7 =7;                               //
int led8 =6;                               //

int button = 4;                            // Variable für Taster
int buttonStatus = 1;                      // Hier wird die Information gespeichert, ob Taster gedrückt oder nicht.
int buttonStatusAlt = 1;                   // Hier ist die vorherige Information des Tasters gespeichert
int zaehler = 0;                           // Zählt wie oft auf den Taster gedrückt wurde

void setup() {
 
  pinMode(led1, OUTPUT);                     //
  pinMode(led2, OUTPUT);                     //
  pinMode(led3, OUTPUT);                     //
  pinMode(led4, OUTPUT);                     //
  pinMode(led5, OUTPUT);                     // LEDs als Ausgang definieren
  pinMode(led6, OUTPUT);                     //
  pinMode(led7, OUTPUT);                     //
  pinMode(led8, OUTPUT);                     //

  pinMode(button, INPUT);                    // Taster als Eingang definieren
  digitalWrite(button, HIGH);                // Pull- Up- Widerstand aktivieren

  digitalWrite(led1, LOW);                 //
  digitalWrite(led2, LOW);                 //
  digitalWrite(led3, LOW);                 //
  digitalWrite(led4, LOW);                 //
  digitalWrite(led5, LOW);                 // Alle LEDs ausschalten
  digitalWrite(led6, LOW);                 //
  digitalWrite(led7, LOW);                 //
  digitalWrite(led8, LOW);                 //

}

void loop() {
 
  buttonStatus = digitalRead(button);      // Prüfe, ob Taster gedrückt oder nicht
 
  if (buttonStatusAlt != buttonStatus)     // Wenn der alte Status nicht gleich dem neuen Status ist
  {
     if (buttonStatus == LOW)              // Und wenn der Taster gedrückt wurde
     {
        if (zaehler == 7)                  // Und der Zähler gleich 7 ist
        {
           zaehler = 0;                    // Setze den Zähler zurück auf 0

        }
        else
        {
    
           zaehler++;                     // Wenn der Zähler nicht gleich 7 ist, erhöhe den Zähler um 1
                                          // Bsp:. Wenn Zähler = 3 -> mach Zähler = 4
        }
     }
  }

  buttonStatusAlt = buttonStatus;        // Setze den alten Status = den neuen Status


  if (zaehler == 0)                      // Wenn Zähler gleich null
  {
 
     digitalWrite(led8, LOW);            //Mach LED8 aus und LED1 an
     digitalWrite(led1, HIGH);

  }

  if (zaehler == 1)                      // Wenn Zähler gleich 1
  {
 
     digitalWrite(led1, LOW);            // Mach LED1 aus und LED2 an
     digitalWrite(led2, HIGH);              

  }

  if (zaehler == 2)                      // Das geht so weiter......
  {
 
     digitalWrite(led2, LOW);
     digitalWrite(led3, HIGH);

  }

  if (zaehler == 3)
  {
 
     digitalWrite(led3, LOW);
     digitalWrite(led4, HIGH);

  }

  if (zaehler == 4)
  {
 
     digitalWrite(led4, LOW);
     digitalWrite(led5, HIGH);

  }

  if (zaehler == 5)
  {
 
     digitalWrite(led5, LOW);
     digitalWrite(led6, HIGH);

  }

  if (zaehler == 6)
  {
 
     digitalWrite(led6, LOW);
     digitalWrite(led7, HIGH);

  }

  if (zaehler == 7)                      // Wenn Zähler gleich 7 (Wir sind bei der letzten LED)
  {
 
     digitalWrite(led7, LOW);            // Mach LED7 aus und LED8 an
     digitalWrite(led8, HIGH);

  }
                                         // Prüfe alles von neu
}

 

 

Den Sketch kannst du auch hier herunterladen.

 

 

Review

Wenn alles richtig verschaltet ist, müsste nach einem Tastendruck die nächste LED leuchten

Kommentar schreiben

Kommentare: 0