Sådan Slipper Du For Kontaktspring, Når Du Tilslutter En Knap Til Arduino

Indholdsfortegnelse:

Sådan Slipper Du For Kontaktspring, Når Du Tilslutter En Knap Til Arduino
Sådan Slipper Du For Kontaktspring, Når Du Tilslutter En Knap Til Arduino

Video: Sådan Slipper Du For Kontaktspring, Når Du Tilslutter En Knap Til Arduino

Video: Sådan Slipper Du For Kontaktspring, Når Du Tilslutter En Knap Til Arduino
Video: GUIDE: Sådan slipper du for straf, når du er sigtet for narkokøb på nettet 2024, November
Anonim

Vi har allerede set på at forbinde en knap til Arduino og rørt spørgsmålet om "hoppende" kontakter. Dette er et meget irriterende fænomen, der forårsager gentagne tryk på knapperne og gør det svært at programmatisk håndtere klik på knapper. Lad os tale om, hvordan man kan slippe af med kontaktspring.

Kontakt afvisningseffekt
Kontakt afvisningseffekt

Nødvendig

  • - Arduino;
  • - taktknap
  • - modstand med en nominel værdi på 10 kOhm;
  • - Lysdiode;
  • - tilslutning af ledninger.

Instruktioner

Trin 1

Kontaktspring er et almindeligt fænomen i mekaniske afbrydere, trykknapper, vippekontakter og relæer. På grund af det faktum, at kontakter normalt er lavet af metaller og legeringer, der har elasticitet, når de fysisk er lukket, opretter de ikke straks en pålidelig forbindelse. Inden for en kort periode lukker kontakterne flere gange og afviser hinanden. Som et resultat får den elektriske strøm en steady-state-værdi ikke med det samme, men efter en række op- og nedture. Varigheden af denne forbigående effekt afhænger af kontaktmateriale, størrelse og design. Illustrationen viser et typisk oscillogram, når taktknappens kontakter er lukket. Det kan ses, at tiden fra skift til øjeblikket er flere millisekunder. Dette kaldes "bounce".

Denne effekt er ikke synlig i elektriske kredsløb til styring af belysning, motorer eller andre inertisensorer og enheder. Men i kredsløb, hvor der er hurtig læsning og behandling af information (hvor frekvenserne er i samme rækkefølge som "bounce" -impulser eller højere), er dette et problem. Især Arduino UNO, der fungerer ved 16 MHz, er fremragende til at fange kontaktspring ved at acceptere en sekvens af ens og nuller i stedet for en enkelt 0 til 1 switch.

Kontakt bounce, når du trykker på en knap
Kontakt bounce, når du trykker på en knap

Trin 2

Lad os se, hvordan kontaktstød påvirker den korrekte drift af kredsløbet. Lad os forbinde urknappen til Arduino ved hjælp af et pull-down modstandskredsløb. Ved at trykke på knappen lyser vi LED'en og lader den være tændt, indtil der trykkes på knappen igen. For klarhedens skyld tilslutter vi en ekstern LED til den digitale pin 13, selvom den indbyggede kan undgås.

Tilslutning af en knap til en Arduino ved hjælp af et pull-up modstandskredsløb
Tilslutning af en knap til en Arduino ved hjælp af et pull-up modstandskredsløb

Trin 3

For at udføre denne opgave, den første ting, der kommer til at tænke på:

- husk den forrige tilstand af knappen;

- sammenligne med den aktuelle tilstand;

- hvis tilstanden har ændret sig, ændrer vi LED-tilstanden.

Lad os skrive sådan en skitse og indlæse den i Arduino-hukommelsen.

Når kredsløbet er tændt, er effekten af kontaktspring straks synlig. Det manifesterer sig i det faktum, at lysdioden ikke lyser straks efter at have trykket på knappen eller lyser og derefter slukkes eller ikke slukkes straks efter tryk på knappen, men forbliver tændt. Generelt fungerer kredsløbet ikke stabilt. Og hvis dette ikke er så kritisk for en opgave med at tænde lysdioden, så er det for andre mere alvorlige opgaver simpelthen uacceptabelt.

Skitse af bearbejdningsknap ved at trykke uden at tage højde for kontaktspring
Skitse af bearbejdningsknap ved at trykke uden at tage højde for kontaktspring

Trin 4

Vi vil forsøge at løse situationen. Vi ved, at kontaktspring finder sted inden for få millisekunder efter en kontaktlukning. Lad os sige, siger, 5ms efter at have ændret tilstanden på knappen. Denne gang for en person er næsten et øjeblik, og at trykke på en knap fra en person tager normalt meget længere tid - flere titusinder af millisekunder. Og Arduino fungerer godt med så korte perioder, og disse 5ms giver det mulighed for at afskære kontaktspring fra at trykke på en knap.

I denne skitse erklærer vi proceduren for debounce () ("bounce" på engelsk er bare "bounce", præfikset "de" betyder den omvendte proces), hvis input vi leverer den tidligere tilstand af knappen. Hvis et knaptryk varer mere end 5 msek, er det virkelig et tryk.

Ved at detektere pressen ændrer vi LED-tilstanden.

Upload skitsen til Arduino-tavlen. Alt er meget bedre nu! Knappen fungerer uden fejl, når den trykkes på, skifter LED'en tilstand, som vi ønskede.

Skitse af behandling af et knaptryk under hensyntagen til afvisning af kontakt
Skitse af behandling af et knaptryk under hensyntagen til afvisning af kontakt

Trin 5

Lignende funktionalitet leveres af specielle biblioteker såsom Bounce2-biblioteket. Du kan downloade det fra linket i afsnittet "Kilder" eller på hjemmesiden https://github.com/thomasfredericks/Bounce2. For at installere biblioteket skal du placere det i biblioteksmappen i Arduino-udviklingsmiljøet og genstarte IDE.

Biblioteket "Bounce2" indeholder følgende metoder:

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

ugyldigt interval (ms) - indstiller forsinkelsestiden i millisekunder;

void attach (pin nummer) - indstiller den pin, som knappen er tilsluttet til;

int opdatering () - opdaterer objektet og returnerer sandt, hvis pin-tilstanden er ændret, og ellers falsk;

int read () - læser pinens nye tilstand.

Lad os omskrive vores skitse ved hjælp af biblioteket. Du kan også huske og sammenligne knapens tidligere tilstand med den aktuelle, men lad os forenkle algoritmen. Når der trykkes på knappen, tæller vi presserne, og hvert ulige tryk tænder lysdioden, og hvert lige tryk slukker den. Denne skitse ser kortfattet ud, let at læse og nem at bruge.

Anbefalede: