So Vermeiden Sie Kontaktprellen Beim Anschließen Einer Taste An Arduino

Inhaltsverzeichnis:

So Vermeiden Sie Kontaktprellen Beim Anschließen Einer Taste An Arduino
So Vermeiden Sie Kontaktprellen Beim Anschließen Einer Taste An Arduino

Video: So Vermeiden Sie Kontaktprellen Beim Anschließen Einer Taste An Arduino

Video: So Vermeiden Sie Kontaktprellen Beim Anschließen Einer Taste An Arduino
Video: 7 Verben mit "schließen": abschließen, anschließen, einschließen, verschließen und mehr 2024, November
Anonim

Wir haben uns bereits mit dem Anschluss eines Tasters an den Arduino befasst und das Thema "hüpfende" Kontakte angesprochen. Dies ist ein sehr ärgerliches Phänomen, das wiederholte Tastendrücke verursacht und die programmgesteuerte Handhabung von Tastenklicks erschwert. Lassen Sie uns darüber sprechen, wie Sie Kontaktabbrüche beseitigen können.

Kontakt-Bounce-Effekt
Kontakt-Bounce-Effekt

Notwendig

  • -Arduino;
  • - Takttaste;
  • - Widerstand mit einem Nennwert von 10 kOhm;
  • - Leuchtdiode;
  • - Anschlussdrähte.

Anweisungen

Schritt 1

Kontaktprellen ist ein häufiges Phänomen bei mechanischen Schaltern, Drucktasten, Kippschaltern und Relais. Da Kontakte in der Regel aus elastischen Metallen und Legierungen bestehen, stellen sie im geschlossenen Zustand nicht sofort eine zuverlässige Verbindung her. Innerhalb kurzer Zeit schließen sich die Kontakte mehrmals und stoßen sich gegenseitig ab. Infolgedessen nimmt der elektrische Strom nicht sofort einen stationären Wert an, sondern nach einer Reihe von Höhen und Tiefen. Die Dauer dieses Einschwingeffekts hängt vom Kontaktmaterial, der Größe und der Ausführung ab. Die Abbildung zeigt ein typisches Oszillogramm bei geschlossenen Kontakten der Tasttaste. Es ist ersichtlich, dass die Zeit vom Zeitpunkt des Umschaltens in den stationären Zustand mehrere Millisekunden beträgt. Dies wird als "Bounce" bezeichnet.

Dieser Effekt ist in elektrischen Schaltungen zur Steuerung von Beleuchtung, Motoren oder anderen Trägheitssensoren und -geräten nicht wahrnehmbar. In Schaltungen, in denen Informationen schnell gelesen und verarbeitet werden (wo die Frequenzen in der gleichen Größenordnung wie die "Bounce" -Impulse oder höher liegen), ist dies jedoch ein Problem. Insbesondere der Arduino UNO, der mit 16 MHz arbeitet, eignet sich hervorragend zum Auffangen von Kontaktprellen, indem er eine Folge von Einsen und Nullen anstelle eines einzelnen 0-zu-1-Schalters akzeptiert.

Kontaktprellen beim Drücken einer Taste
Kontaktprellen beim Drücken einer Taste

Schritt 2

Sehen wir uns an, wie sich das Kontaktprellen auf den korrekten Betrieb der Schaltung auswirkt. Verbinden wir die Clock-Taste mit dem Arduino über eine Pull-Down-Widerstandsschaltung. Durch Drücken der Taste leuchten wir die LED auf und lassen sie an, bis die Taste erneut gedrückt wird. Der Übersichtlichkeit halber schließen wir eine externe LED an den digitalen Pin 13 an, wobei auf die eingebaute verzichtet werden kann.

Anschließen einer Taste an einen Arduino mit einer Pull-up-Widerstandsschaltung
Anschließen einer Taste an einen Arduino mit einer Pull-up-Widerstandsschaltung

Schritt 3

Um diese Aufgabe zu erfüllen, fällt mir als erstes ein:

- erinnern Sie sich an den vorherigen Zustand der Schaltfläche;

- mit dem aktuellen Stand vergleichen;

- Wenn sich der Zustand geändert hat, ändern wir den Zustand der LED.

Lassen Sie uns eine solche Skizze schreiben und in den Arduino-Speicher laden.

Beim Einschalten der Schaltung ist der Effekt des Kontaktprellens sofort sichtbar. Sie äußert sich darin, dass die LED nicht sofort nach dem Drücken der Taste aufleuchtet oder aufleuchtet und dann erlischt oder nicht sofort nach dem Drücken der Taste erlischt, sondern an bleibt. Im Allgemeinen arbeitet die Schaltung nicht stabil. Und wenn dies für eine Aufgabe mit dem Einschalten der LED nicht so kritisch ist, ist dies für andere, ernstere Aufgaben einfach inakzeptabel.

Skizze der Bearbeitung des Tastendrucks ohne Berücksichtigung des Kontaktprellens
Skizze der Bearbeitung des Tastendrucks ohne Berücksichtigung des Kontaktprellens

Schritt 4

Wir werden versuchen, die Situation zu beheben. Wir wissen, dass ein Kontaktprellen innerhalb weniger Millisekunden nach einem Kontaktschluss auftritt. Warten wir beispielsweise 5 ms, nachdem wir den Zustand der Schaltfläche geändert haben. Diese Zeit dauert für eine Person fast einen Augenblick, und das Drücken einer Taste durch eine Person dauert normalerweise viel länger - mehrere zehn Millisekunden. Und Arduino funktioniert mit so kurzen Zeiträumen hervorragend, und diese 5 ms ermöglichen es, das Abprallen von Kontakten beim Drücken einer Taste zu unterbrechen.

In dieser Skizze deklarieren wir die debounce()-Prozedur ("bounce" ist im Englischen nur "bounce", das Präfix "de" bedeutet den umgekehrten Vorgang), an deren Eingabe wir den vorherigen Zustand des Buttons liefern. Wenn ein Tastendruck länger als 5 ms dauert, handelt es sich wirklich um einen Tastendruck.

Durch Erkennen der Presse ändern wir den Zustand der LED.

Laden Sie die Skizze auf das Arduino-Board hoch. Jetzt ist alles viel besser! Die Taste funktioniert einwandfrei, wenn sie gedrückt wird, ändert die LED den Zustand, wie wir es wollten.

Skizze zur Verarbeitung eines Tastendrucks unter Berücksichtigung des Kontaktprellens
Skizze zur Verarbeitung eines Tastendrucks unter Berücksichtigung des Kontaktprellens

Schritt 5

Ähnliche Funktionen bieten spezielle Bibliotheken wie die Bounce2-Bibliothek. Sie können es über den Link im Abschnitt "Quellen" oder auf der Website https://github.com/thomasfredericks/Bounce2 herunterladen. Um die Bibliothek zu installieren, legen Sie sie im Bibliotheksverzeichnis der Arduino-Entwicklungsumgebung ab und starten Sie die IDE neu.

Die Bibliothek "Bounce2" enthält folgende Methoden:

Bounce () - Initialisierung des "Bounce"-Objekts;

Leerintervall (ms) - legt die Verzögerungszeit in Millisekunden fest;

void attach (Pinnummer) - legt den Pin fest, mit dem die Taste verbunden ist;

int update() - aktualisiert das Objekt und gibt true zurück, wenn sich der Pin-Status geändert hat, andernfalls false;

int read () - liest den neuen Status des Pins.

Lassen Sie uns unsere Skizze mit der Bibliothek neu schreiben. Sie können sich auch den vergangenen Zustand der Schaltfläche merken und mit dem aktuellen vergleichen, aber vereinfachen wir den Algorithmus. Wenn die Taste gedrückt wird, zählen wir die Drücken, und jedes ungerade Drücken schaltet die LED ein und jedes gerade Drücken schaltet sie aus. Diese Skizze sieht prägnant, leicht zu lesen und einfach zu verwenden aus.

Empfohlen: