Com Desfer-se Del Rebot De Contacte En Connectar Un Botó A Arduino

Taula de continguts:

Com Desfer-se Del Rebot De Contacte En Connectar Un Botó A Arduino
Com Desfer-se Del Rebot De Contacte En Connectar Un Botó A Arduino

Vídeo: Com Desfer-se Del Rebot De Contacte En Connectar Un Botó A Arduino

Vídeo: Com Desfer-se Del Rebot De Contacte En Connectar Un Botó A Arduino
Vídeo: Botón antirrebote con Arduino (Contador de pulsos) 2024, Maig
Anonim

Ja hem analitzat la possibilitat de connectar un botó a l'Arduino i hem tractat el tema dels contactes "rebots". Aquest és un fenomen molt molest que provoca repetides pulsacions de botons i dificulta la gestió programàtica de clics de botons. Parlem de com desfer-se dels rebots de contacte.

Efecte de rebot de contacte
Efecte de rebot de contacte

Necessari

  • - Arduino;
  • - botó tàctil;
  • - resistència amb un valor nominal de 10 kOhm;
  • - Díode emissor de llum;
  • - cables de connexió.

Instruccions

Pas 1

El rebot de contacte és un fenomen habitual en interruptors mecànics, polsadors, interruptors alternatius i relés. A causa del fet que els contactes solen estar fets de metalls i aliatges que tenen elasticitat, quan estan tancats físicament, no estableixen immediatament una connexió fiable. En un curt període de temps, els contactes es tanquen diverses vegades i es repel·leixen. Com a resultat, el corrent elèctric adquireix un valor estacionari no a l’instant, sinó després d’una sèrie d’alts i baixos. La durada d’aquest efecte transitori depèn del material de contacte, la mida i el disseny. La il·lustració mostra un oscil·lograma típic quan es tanquen els contactes del botó tàctil. Es pot veure que el temps des del moment de canviar a l'estat estacionari és de diversos mil·lisegons. Això s’anomena “rebot”.

Aquest efecte no es nota als circuits elèctrics per controlar la il·luminació, els motors o altres sensors i dispositius inercials. Però en els circuits on hi ha una lectura i processament ràpid d’informació (on les freqüències són del mateix ordre que els impulsos de “rebot” o superiors), això és un problema. En particular, l’Arduino UNO, que funciona a 16 MHz, és excel·lent per captar rebots de contacte acceptant una seqüència d’uns i zeros en lloc d’un únic commutador de 0 a 1.

Rebot de contacte en prémer un botó
Rebot de contacte en prémer un botó

Pas 2

Vegem com afecta el rebot de contacte al correcte funcionament del circuit. Connectem el botó del rellotge a l’Arduino mitjançant un circuit de resistència desplegable. Prement el botó, encendrem el LED i el deixarem encès fins que es torni a prémer el botó. Per a més claredat, connectem un LED extern al pin 13 digital, tot i que es pot prescindir de l’incorporat.

Connectar un botó a un Arduino mitjançant un circuit de resistència pull-up
Connectar un botó a un Arduino mitjançant un circuit de resistència pull-up

Pas 3

Per dur a terme aquesta tasca, el primer que ens ve al cap:

- recordeu l'estat anterior del botó;

- Comparar amb l'estat actual;

- Si l'estat ha canviat, canviarem l'estat del LED.

Escrivim aquest esbós i el carreguem a la memòria Arduino.

Quan el circuit està engegat, l'efecte del rebot de contacte és immediatament visible. Es manifesta en el fet que el LED no s’il·lumina immediatament després de prémer el botó, o s’encén i després s’apaga o no s’apaga immediatament després de prémer el botó, sinó que roman encès. En general, el circuit no funciona de manera estable. I si per a una tasca amb l’encesa del LED això no és tan crític, és senzillament inacceptable per a altres tasques més greus.

Esbós del botó de processament que es prem sense tenir en compte el rebot de contacte
Esbós del botó de processament que es prem sense tenir en compte el rebot de contacte

Pas 4

Intentarem solucionar la situació. Sabem que els rebots de contacte es produeixen uns quants mil·lisegons després del tancament del contacte. Esperem, per exemple, 5 ms després de canviar l'estat del botó. Aquesta vegada per a una persona és gairebé un instant, i prémer un botó per una persona sol trigar molt més temps, diverses desenes de mil·lisegons. I Arduino funciona molt bé amb períodes de temps tan curts, i aquests 5 ms li permetran tallar el rebot dels contactes prement un botó.

En aquest esbós, declararem el procediment debounce () ("bounce" en anglès només és "bounce", el prefix "de" significa el procés invers), a l'entrada del qual proporcionem l'estat anterior del botó. Si premeu un botó dura més de 5 msec, és realment una pulsació.

En detectar la premsa, canviem l’estat del LED.

Pengeu l’esbós a la placa Arduino. Ara tot està molt millor! El botó funciona sense cap error, quan es prem, el LED canvia d’estat, tal com volíem.

Esbós de processament d'un botó prement, tenint en compte el rebot de contacte
Esbós de processament d'un botó prement, tenint en compte el rebot de contacte

Pas 5

Funcions similars són proporcionades per biblioteques especials com la biblioteca Bounce2. Podeu descarregar-lo des de l'enllaç de la secció "Fonts" o al lloc web https://github.com/thomasfredericks/Bounce2. Per instal·lar la biblioteca, col·loqueu-la al directori de biblioteques de l'entorn de desenvolupament Arduino i reinicieu l'IDE.

La biblioteca "Bounce2" conté els mètodes següents:

Bounce (): inicialització de l'objecte "Bounce";

void interval (ms): estableix el temps de retard en mil·lisegons;

void attach (número de pin): estableix el pin al qual està connectat el botó;

int update (): actualitza l'objecte i torna true si l'estat del pin ha canviat, i falseja en cas contrari;

int read (): llegeix el nou estat del pin.

Reescrivim el nostre esbós amb la biblioteca. També podeu recordar i comparar l’estat passat del botó amb l’actual, però simplifiquem l’algorisme. Quan es prem el botó, comptarem les premses i cada premsa imparell encendrà el LED i cada pulsació parella l’apagarà. Aquest esbós sembla concís, fàcil de llegir i fàcil d’utilitzar.

Recomanat: