Hvordan Bli Kvitt Kontaktstopp Når Du Kobler En Knapp Til Arduino

Innholdsfortegnelse:

Hvordan Bli Kvitt Kontaktstopp Når Du Kobler En Knapp Til Arduino
Hvordan Bli Kvitt Kontaktstopp Når Du Kobler En Knapp Til Arduino

Video: Hvordan Bli Kvitt Kontaktstopp Når Du Kobler En Knapp Til Arduino

Video: Hvordan Bli Kvitt Kontaktstopp Når Du Kobler En Knapp Til Arduino
Video: Управление 32 сервомоторами с помощью PCA9685 и Arduino: V3 2024, November
Anonim

Vi har allerede sett på å koble en knapp til Arduino og berørt spørsmålet om å "sprette" kontakter. Dette er et veldig irriterende fenomen som forårsaker gjentatte knappetrykk og gjør det vanskelig å programmatisk håndtere knappeklikk. La oss snakke om hvordan du kan bli kvitt kontaktstopp.

Kontakt spretteeffekt
Kontakt spretteeffekt

Nødvendig

  • - Arduino;
  • - taktknapp;
  • - motstand med en nominell verdi på 10 kOhm;
  • - Lysdiode;
  • - tilkobling av ledninger.

Bruksanvisning

Trinn 1

Kontaktstopp er et vanlig fenomen i mekaniske brytere, trykknapper, vippebrytere og releer. På grunn av det faktum at kontakter vanligvis er laget av metaller og legeringer som har elastisitet, når de er fysisk lukket, oppretter de ikke umiddelbart en pålitelig forbindelse. I løpet av kort tid lukkes kontaktene flere ganger og avviser hverandre. Som et resultat får den elektriske strømmen en steady-state-verdi ikke umiddelbart, men etter en rekke opp- og nedturer. Varigheten av denne forbigående effekten avhenger av kontaktmateriale, størrelse og design. Illustrasjonen viser et typisk oscillogram når kontaktene til taktknappen er lukket. Det kan sees at tiden fra det øyeblikket du bytter til steady state er flere millisekunder. Dette kalles "sprett".

Denne effekten er ikke merkbar i elektriske kretser for å kontrollere belysning, motorer eller andre inertisensorer og enheter. Men i kretser der det er rask lesing og prosessering av informasjon (hvor frekvensene er i samme rekkefølge som "sprett" -pulsene, eller høyere), er dette et problem. Spesielt Arduino UNO, som opererer ved 16 MHz, er utmerket til å fange kontaktsprett ved å akseptere en sekvens av ener og nuller i stedet for en enkelt 0 til 1 bryter.

Kontakt sprette når du trykker på en knapp
Kontakt sprette når du trykker på en knapp

Steg 2

La oss se hvordan kontaktstopp påvirker riktig drift av kretsen. La oss koble klokkeknappen til Arduino ved hjelp av en nedtrekkbar motstandskrets. Ved å trykke på knappen vil vi tenne LED-lampen og la den være på til knappen trykkes på igjen. For klarhetens skyld kobler vi en ekstern LED til digital pin 13, selv om den innebygde en kan dispenseres.

Koble en knapp til en Arduino ved hjelp av en mottakerkrets
Koble en knapp til en Arduino ved hjelp av en mottakerkrets

Trinn 3

For å utføre denne oppgaven, er det første du kommer opp i tankene:

- husk den forrige tilstanden til knappen;

- sammenligne med gjeldende tilstand;

- hvis staten har endret seg, endrer vi tilstanden til lysdioden.

La oss skrive en slik skisse og laste den inn i Arduino-minnet.

Når kretsen er slått på, er effekten av kontaktsprett umiddelbart synlig. Det manifesterer seg i det faktum at LED ikke lyser umiddelbart etter at du har trykket på knappen, eller lyser og deretter slukkes, eller ikke slukkes umiddelbart etter at du har trykket på knappen, men forblir på. Generelt fungerer ikke kretsen stabilt. Og hvis dette ikke er så viktig for en oppgave å slå på LED-en, er det rett og slett uakseptabelt for andre mer alvorlige oppgaver.

Skisse av bearbeidingsknapp ved å trykke uten å ta hensyn til kontaktstopp
Skisse av bearbeidingsknapp ved å trykke uten å ta hensyn til kontaktstopp

Trinn 4

Vi vil prøve å fikse situasjonen. Vi vet at kontaktstopp forekommer i løpet av få millisekunder etter en kontaktstenging. La oss vente, si, 5ms etter å ha endret tilstanden til knappen. Denne tiden for en person er nesten et øyeblikk, og det å trykke på en knapp av en person tar vanligvis mye lengre tid - flere titalls millisekunder. Og Arduino fungerer bra med så korte perioder, og disse 5 ms vil tillate det å kutte av sprette av kontakter fra å trykke på en knapp.

I denne skissen vil vi erklære debounce () -prosedyren ("bounce" på engelsk er bare "bounce", prefikset "de" betyr omvendt prosess), hvor vi leverer den forrige tilstanden til knappen. Hvis et knappetrykk varer mer enn 5 ms, er det virkelig et trykk.

Ved å oppdage pressen, endrer vi tilstanden til lysdioden.

Last opp skissen til Arduino-brettet. Alt er mye bedre nå! Knappen fungerer uten å mislykkes, når den trykkes på, endrer LED-en tilstand slik vi ønsket.

Skisse av behandling av et knappetrykk, med tanke på kontaktstopp
Skisse av behandling av et knappetrykk, med tanke på kontaktstopp

Trinn 5

Lignende funksjonalitet leveres av spesielle biblioteker som Bounce2-biblioteket. Du kan laste den ned fra lenken i "Kilder" -delen eller på nettstedet https://github.com/thomasfredericks/Bounce2. For å installere biblioteket, plasser det i bibliotekkatalogen i Arduino-utviklingsmiljøet og start IDE på nytt.

Biblioteket "Bounce2" inneholder følgende metoder:

Bounce () - initialisering av "Bounce" -objektet;

tomrumsintervall (ms) - angir forsinkelsestiden i millisekunder;

void attach (pin number) - angir pin som knappen er koblet til;

int update () - oppdaterer objektet og returnerer true hvis pin-tilstanden har endret seg, og falsk ellers;

int read () - leser den nye tilstanden til pinnen.

La oss skrive om skissen vår ved hjelp av biblioteket. Du kan også huske og sammenligne knappenes tidligere tilstand med den nåværende, men la oss forenkle algoritmen. Når du trykker på knappen, teller vi pressene, og hvert oddetrykk slår på LED-en, og hvert jevne trykk slår den av. Denne skissen ser kort, enkel å lese og enkel å bruke.

Anbefalt: