Paano Mapupuksa Ang Bounce Ng Contact Kapag Kumokonekta Sa Isang Pindutan Sa Arduino

Talaan ng mga Nilalaman:

Paano Mapupuksa Ang Bounce Ng Contact Kapag Kumokonekta Sa Isang Pindutan Sa Arduino
Paano Mapupuksa Ang Bounce Ng Contact Kapag Kumokonekta Sa Isang Pindutan Sa Arduino

Video: Paano Mapupuksa Ang Bounce Ng Contact Kapag Kumokonekta Sa Isang Pindutan Sa Arduino

Video: Paano Mapupuksa Ang Bounce Ng Contact Kapag Kumokonekta Sa Isang Pindutan Sa Arduino
Video: How to use up to 10 push button switch with 1 Arduino input pin ANPB-V1 2024, Mayo
Anonim

Tiningnan na namin ang pagkonekta ng isang pindutan sa Arduino at hinawakan ang isyu ng "bouncing" na mga contact. Ito ay isang napaka nakakainis na kababalaghan na nagdudulot ng paulit-ulit na pagpindot sa mga pindutan at ginagawang mahirap hawakan ng programatic ang mga pag-click sa pindutan. Pag-usapan natin kung paano mapupuksa ang contact bounce.

Makipag-ugnay sa bounce effect
Makipag-ugnay sa bounce effect

Kailangan

  • - Arduino;
  • - pindutan ng taktika;
  • - risistor na may nominal na halaga ng 10 kOhm;
  • - Light-emitting diode;
  • - pagkonekta ng mga wire.

Panuto

Hakbang 1

Ang contact bounce ay isang pangkaraniwang kababalaghan sa mga mechanical switch, pushbuttons, toggle switch at relay. Dahil sa ang katunayan na ang mga contact ay karaniwang gawa sa mga metal at haluang metal na may pagkalastiko, kapag pisikal na sarado, hindi kaagad nagtatag ng isang maaasahang koneksyon. Sa loob ng maikling panahon, ang mga contact ay nagsasara ng maraming beses at nagtataboy sa bawat isa. Bilang isang resulta, ang kasalukuyang kuryente ay tumatagal ng isang matatag na halaga ng estado na hindi kaagad, ngunit pagkatapos ng isang serye ng mga pagtaas at kabiguan. Ang tagal ng pansamantalang epekto na ito ay nakasalalay sa materyal ng contact, laki at disenyo. Ang ilustrasyon ay nagpapakita ng isang tipikal na oscillogram kapag ang mga contact ng pindutan ng taktika ay sarado. Maaari itong makita na ang oras mula sa sandali ng paglipat sa matatag na estado ay maraming milliseconds. Tinatawag itong "bounce".

Ang epekto na ito ay hindi kapansin-pansin sa mga de-koryenteng circuit upang makontrol ang pag-iilaw, motor, o iba pang mga inertial sensor at aparato. Ngunit sa mga circuit kung saan mayroong mabilis na pagbabasa at pagproseso ng impormasyon (kung saan ang mga frequency ay pareho ng pagkakasunud-sunod ng "bounce" na pulso, o mas mataas), ito ang isang problema. Sa partikular, ang Arduino UNO, na nagpapatakbo sa 16 MHz, ay mahusay sa paghuli ng contact bounce sa pamamagitan ng pagtanggap ng isang pagkakasunud-sunod ng mga isa at mga zero sa halip na isang solong 0 hanggang 1 switch.

Makipag-ugnay sa bounce kapag pinindot ang isang pindutan
Makipag-ugnay sa bounce kapag pinindot ang isang pindutan

Hakbang 2

Tingnan natin kung paano nakakaapekto ang tamang contact sa tamang operasyon ng circuit. Ikonekta natin ang pindutan ng orasan sa Arduino gamit ang isang pull-down resistor circuit. Sa pamamagitan ng pagpindot sa pindutan, sindihan namin ang LED at iiwan ito hanggang sa ang pindutan ay pinindot muli. Para sa kalinawan, kumokonekta kami ng isang panlabas na LED sa digital pin 13, bagaman ang built-in na isa ay maaaring maipamahagi.

Pagkonekta ng isang pindutan sa isang Arduino gamit ang isang pull-up resistor circuit
Pagkonekta ng isang pindutan sa isang Arduino gamit ang isang pull-up resistor circuit

Hakbang 3

Upang magawa ang gawaing ito, ang unang bagay na naisip:

- Alalahanin ang nakaraang estado ng pindutan;

- ihambing sa kasalukuyang estado;

- kung ang estado ay nagbago, pagkatapos ay binabago natin ang estado ng LED.

Isulat natin ang gayong sketch at i-load ito sa memorya ng Arduino.

Kapag ang circuit ay nakabukas, ang epekto ng pag-bouncing ng contact ay agad na nakikita. Ito ay nagpapakita ng kanyang sarili sa ang katunayan na ang LED ay hindi agad na ilaw pagkatapos ng pagpindot sa pindutan, o ilaw at pagkatapos ay lumabas, o hindi agad patayin pagkatapos pindutin ang pindutan, ngunit mananatili pa rin. Sa pangkalahatan, ang circuit ay hindi gumagana ng matatag. At kung para sa isang gawain sa pag-on sa LED hindi ito masyadong kritikal, kung gayon para sa iba pa, mas seryosong mga gawain, ito ay simpleng hindi katanggap-tanggap.

Pag-sketch ng pagpindot sa pindutan ng pagpoproseso nang hindi isinasaalang-alang ang bounce ng contact sa account
Pag-sketch ng pagpindot sa pindutan ng pagpoproseso nang hindi isinasaalang-alang ang bounce ng contact sa account

Hakbang 4

Susubukan naming ayusin ang sitwasyon. Alam namin na ang contact bounce ay nangyayari sa loob ng ilang milliseconds pagkatapos ng isang pagsara sa contact. Maghintay tayo, sabihin natin, 5ms pagkatapos baguhin ang estado ng pindutan. Ang oras na ito para sa isang tao ay halos isang instant, at ang pagpindot sa isang pindutan ng isang tao ay karaniwang tumatagal ng mas matagal - maraming sampu-sampung milliseconds. At ang Arduino ay gumagana nang mahusay sa mga maikling panahon, at papayagan ng mga 5ms na ito na putulin ang bounce ng mga contact mula sa pagpindot sa isang pindutan.

Sa sketch na ito, idedeklara namin ang pamamaraang debounce () ("bounce" sa Ingles ay "bounce" lamang, ang awtomatikong "de" ay nangangahulugang ang pabalik na proseso), sa pag-input kung saan ibinibigay namin ang dating estado ng pindutan. Kung ang isang pindutan ng pindutan ay tumatagal ng higit sa 5 msec, pagkatapos ito ay talagang isang pindutin.

Sa pamamagitan ng pagtuklas ng press, binabago namin ang estado ng LED.

I-upload ang sketch sa Arduino board. Ang lahat ay mas mahusay ngayon! Gumagana ang pindutan nang walang pagkabigo, kapag pinindot, ang LED ay nagbabago ng estado, ayon sa gusto namin.

Sketch ng pagpoproseso ng isang pindutin ang pindutin, isinasaalang-alang ang pag-bounce ng contact sa account
Sketch ng pagpoproseso ng isang pindutin ang pindutin, isinasaalang-alang ang pag-bounce ng contact sa account

Hakbang 5

Ang katulad na pag-andar ay ibinibigay ng mga espesyal na aklatan tulad ng Bounce2 library. Maaari mong i-download ito mula sa link sa seksyong "Mga Pinagmulan" o sa website https://github.com/thomasfredericks/Bounce2. Upang mai-install ang silid-aklatan, ilagay ito sa direktoryo ng mga aklatan ng kapaligiran sa pag-unlad ng Arduino at muling simulan ang IDE.

Naglalaman ang librong "Bounce2" ng mga sumusunod na pamamaraan:

Bounce () - pagsisimula ng object na "Bounce";

void interval (ms) - itinakda ang oras ng pagkaantala sa milliseconds;

walang bisa na ikabit (numero ng pin) - itinatakda ang pin kung saan nakakonekta ang pindutan;

int update () - Ina-update ang object at nagbabalik totoo kung nagbago ang pin state, at false kung hindi man;

int read () - binabasa ang bagong estado ng pin.

Isulat muli ang ating sketch gamit ang library. Maaari mo ring matandaan at ihambing ang nakaraang estado ng pindutan sa kasalukuyang isa, ngunit gawing simple ang algorithm. Kapag pinindot ang pindutan, bibilangin namin ang mga pagpindot, at ang bawat kakaibang pagpindot ay bubukas sa LED, at ang bawat pagpindot kahit ay papatayin nito. Ang sketch na ito ay mukhang maigsi, madaling basahin at madaling gamitin.

Inirerekumendang: