Hoe Zich Te Ontdoen Van Contact Bounce Bij Het Aansluiten Van Een Knop Op Arduino

Inhoudsopgave:

Hoe Zich Te Ontdoen Van Contact Bounce Bij Het Aansluiten Van Een Knop Op Arduino
Hoe Zich Te Ontdoen Van Contact Bounce Bij Het Aansluiten Van Een Knop Op Arduino

Video: Hoe Zich Te Ontdoen Van Contact Bounce Bij Het Aansluiten Van Een Knop Op Arduino

Video: Hoe Zich Te Ontdoen Van Contact Bounce Bij Het Aansluiten Van Een Knop Op Arduino
Video: Arduino Button Debounce Tutorial 2024, April
Anonim

We hebben al gekeken naar het aansluiten van een knop op de Arduino en hebben het probleem van "stuiterende" contacten besproken. Dit is een zeer vervelend fenomeen dat herhaaldelijk drukken op een knop veroorzaakt en het moeilijk maakt om het klikken op een knop programmatisch af te handelen. Laten we het hebben over hoe je van contact bounce af kunt komen.

Contact bounce-effect
Contact bounce-effect

Noodzakelijk

  • -Arduino;
  • - tact-knop;
  • - weerstand met een nominale waarde van 10 kOhm;
  • - Lichtgevende diode;
  • - aansluitdraden.

instructies:

Stap 1

Contact bounce is een veelvoorkomend verschijnsel bij mechanische schakelaars, drukknoppen, tuimelschakelaars en relais. Omdat contacten meestal gemaakt zijn van metalen en legeringen met elasticiteit, brengen ze, wanneer ze fysiek gesloten zijn, niet meteen een betrouwbare verbinding tot stand. Binnen korte tijd sluiten de contacten meerdere keren en stoten ze elkaar af. Als gevolg hiervan neemt de elektrische stroom niet onmiddellijk een stabiele waarde aan, maar na een reeks ups en downs. De duur van dit voorbijgaande effect is afhankelijk van het contactmateriaal, de grootte en het ontwerp. De afbeelding toont een typisch oscillogram wanneer de contacten van de tact-knop gesloten zijn. Het is te zien dat de tijd vanaf het moment van overschakelen naar de stabiele toestand enkele milliseconden is. Dit wordt "bouncen" genoemd.

Dit effect is niet merkbaar in elektrische circuits om verlichting, motoren of andere traagheidssensoren en apparaten te regelen. Maar in circuits waar informatie snel wordt gelezen en verwerkt (waar de frequenties van dezelfde orde zijn als de "bounce"-pulsen, of hoger), is dit een probleem. Met name de Arduino UNO, die werkt op 16 MHz, is uitstekend in het opvangen van contact bounce door een reeks enen en nullen te accepteren in plaats van een enkele 0 tot 1 schakelaar.

Contact stuiteren bij het indrukken van een knop
Contact stuiteren bij het indrukken van een knop

Stap 2

Laten we eens kijken hoe contact bounce de juiste werking van het circuit beïnvloedt. Laten we de klokknop verbinden met de Arduino met behulp van een pull-down weerstandscircuit. Door op de knop te drukken, lichten we de LED op en laten deze aan totdat de knop opnieuw wordt ingedrukt. Voor de duidelijkheid sluiten we een externe LED aan op digitale pin 13, al kan de ingebouwde achterwege blijven.

Een knop verbinden met een Arduino met behulp van een pull-up weerstandscircuit
Een knop verbinden met een Arduino met behulp van een pull-up weerstandscircuit

Stap 3

Om deze taak te volbrengen, is het eerste dat in je opkomt:

- onthoud de vorige status van de knop;

- vergelijk met de huidige staat;

- als de status is veranderd, dan veranderen we de status van de LED.

Laten we zo'n schets schrijven en in het Arduino-geheugen laden.

Wanneer de schakeling is ingeschakeld, is het effect van contactbouncing direct zichtbaar. Dit komt tot uiting in het feit dat de LED niet direct oplicht na het indrukken van de knop, of oplicht en vervolgens uitgaat, of niet direct uitgaat na het indrukken van de knop, maar blijft branden. Over het algemeen werkt het circuit niet stabiel. En als dit voor een taak met het inschakelen van de LED niet zo kritisch is, dan is het voor andere, serieuzere taken gewoon onaanvaardbaar.

Schets van het indrukken van de verwerkingsknop zonder rekening te houden met contact bounce
Schets van het indrukken van de verwerkingsknop zonder rekening te houden met contact bounce

Stap 4

We zullen proberen de situatie op te lossen. We weten dat contact bounce optreedt binnen enkele milliseconden na het sluiten van een contact. Laten we wachten, laten we zeggen, 5 ms na het wijzigen van de status van de knop. Deze tijd is voor een persoon bijna een moment en het indrukken van een knop door een persoon duurt meestal veel langer - enkele tientallen milliseconden. En Arduino werkt geweldig met zulke korte tijdsperioden, en deze 5 ms zal het mogelijk maken om het stuiteren van contacten af te snijden door op een knop te drukken.

In deze schets zullen we de debounce-procedure () declareren ("bounce" in het Engels is gewoon "bounce", het voorvoegsel "de" betekent het omgekeerde proces), aan de invoer waarvan we de vorige status van de knop leveren. Als een druk op de knop langer duurt dan 5 msec, dan is het echt een druk.

Door de pers te detecteren, veranderen we de status van de LED.

Upload de schets naar het Arduino-bord. Alles is nu veel beter! De knop werkt zonder mankeren, wanneer ingedrukt, verandert de LED van status, zoals we wilden.

Schets van het verwerken van een druk op de knop, rekening houdend met contact bounce
Schets van het verwerken van een druk op de knop, rekening houdend met contact bounce

Stap 5

Soortgelijke functionaliteit wordt geleverd door speciale bibliotheken zoals de Bounce2-bibliotheek. U kunt het downloaden via de link in het gedeelte "Bronnen" of op de website https://github.com/thomasfredericks/Bounce2. Om de bibliotheek te installeren, plaatst u deze in de bibliothekenmap van de Arduino-ontwikkelomgeving en start u de IDE opnieuw.

De bibliotheek "Bounce2" bevat de volgende methoden:

Bounce () - initialisatie van het "Bounce"-object;

void interval (ms) - stelt de vertragingstijd in milliseconden in;

void attach (pinnummer) - stelt de pin in waarop de knop is aangesloten;

int update () - werkt het object bij en retourneert true als de pinstatus is gewijzigd, en anders false;

int read () - leest de nieuwe status van de pin.

Laten we onze schets herschrijven met behulp van de bibliotheek. U kunt de vorige status van de knop ook onthouden en vergelijken met de huidige, maar laten we het algoritme vereenvoudigen. Wanneer de knop wordt ingedrukt, tellen we het aantal keren dat u op de knop drukt, en bij elke oneven druk gaat de LED branden en bij elke keer drukken wordt deze uitgeschakeld. Deze schets ziet er beknopt, gemakkelijk te lezen en gemakkelijk te gebruiken uit.

Aanbevolen: