Close

Proč je u tlačítka rezistor?

Arduino externí PULLUP rezistor

Možná si říkáte, proč je někdy potřeba použít u tlačítka rezistor a někdy zase ne. Odpovědi naleznete v tomto článku.

Jak funguje tlačítko

Spínací tlačítko je jednoduchá mechanická součástka, která slouží ke spojení a rozpojení obvodu. Stejnou roli by mohly mít dva dráty, které bychom spojovali a rozpojovali. S tlačítkem je to ale o něco pohodlnější.

Arduino: Schématická značka a obrázek tlačítka

Schématická značka a obrázek tlačítka

Všimněme si, že vždy jsou uvnitř tlačítka spojeny dvě protější nožičky (naznačeno barevně). Také je důležité si uvědomit, že pokud tlačítko na obrázku není stisknuté, je obvod rozpojený. Existují i tlačítka, která jsou spojená a stisknutím se obvod rozpojí.

Připomeňme si způsoby zapojení

Různými možnostmi, co lze s tlačítkem dělat se zabývá několik dílů seriálu Arduino základy (konkrétně díly 4, 8, 9, 10). Dnes se však budeme tlačítkem zabývat hlavně ze strany hardware. V obou případech je digitální pin použit jako vstup – čeká tedy na nějakou hodnotu napětí – krajní meze této hodnoty odpovídají GND a VCC.

Zapojení tlačítka s rezistorem

Arduino: Tlačítko s rezistorem

Tlačítko s rezistorem

Pokud máme tlačítko zapojeno tímto způsobem, použijeme v kódu:

    pinMode(2, INPUT);

Tím říkáme, že pin 2 budeme používat jako vstup a máme tlačítko s připojeným externím rezistorem. Funkce digitalRead() při stisku tlačítka vrací hodnotu 1. Ptáte se proč? Podívejte se do schématu. Pin 2 je přes 10k Ohm rezistor připojený ke GND – v nestisknutém stavu je tedy na vstupu 0. Pokud tlačítko stiskneme, dojde k zároveň k připojení pinu 2 na VCC a změně stavu měření na 1. V tomto případě je zde rezistor proto, aby nedošlo k přímému spojení GND na VCC, po kterém by následoval zkrat.

Díky nově nabytým zkušenostem si možná říkáte, jestli by nešlo tlačítko pozměnit tak, aby na něm při stisku byla naměřena hodnota 0 a při uvolnění 1. Nabízí se možnost použití tlačítka, které se otevře při stisku. Můžeme ale také pozměnit zapojení.

Arduino: Tlačítko s rezistorem

Tlačítko s rezistorem

V tomto případě je pin 2 připojen přes rezistor na VCC a na vstupu je tak v nestisknutém stavu tlačítka měřená hodnota 1. Po stisknutí dojde k připojení vstupu na GND a hodnota se změní na 0.

V anglické literatuře se můžete setkat s názvy PULL-DOWN rezistor. To je ten, který je připojený ke GND (pull-down by se dalo přeložit jako „stáhnout“). Rezistor připojený k VCC se nazývá PULL-UP („vytáhnout“).

Zapojení tlačítka bez rezistoru

Pokročilé zapojení tlačítka k Arduinu

Zapojení tlačítka bez rezistoru

Tento název je trochu matoucí. Skutečně sice nepotřebujete rezistor ke tlačítku zapojit, ale je to proto, protože pin Arduina rezistor obsahuje uvnitř čipu. Ten je připojen na VCC (tedy PULL-UP). Arduinu sdělíme, že se chystáme použít interní rezistor pomocí:

    pinMode(2, INPUT_PULLUP);

Jak už jsem zmínil na konci předchozí části, jelikož je rezistor připojen na VCC a stisk tlačítka připojí pin ke GND, je při stisknutém tlačítku na pinu měřená hodnota 0 a při rozpojeném hodnota 1.

Na co tedy ten rezistor?

Možná si říkáte, proč vadí, když rezistor vynecháte. Tlačítko připojí pin třeba k VCC, při stisku tedy naměříte 1. Když k pinu nic nepřipojíte, přeci by na něm měla být 0. To ale není pravda.

Představte si, že k pinu připojíte jeden drát, který necháte volně ve vzduchu. Potom pin funguje jako jakási anténa, která může chytat elektromagnetický šum z okolí. Jak jsme si řekli na začátku, tlačítko můžete nahradit dvěma dráty. Když nejsou spojené, funguje ten z nich, který je připojený k Arduinu, jako anténa. A občas je naměřená hodnota tak velká, že ji Arduino vyhodnotí jako logickou jedničku.

Pokud tedy rezistor vynecháme, pin „plave“ ve vzduchu a může dojít k falešnému měření hodnot.

Níže na obrázku vidíte rozsahy napětí. Mlhavá oblast je pro Arduino neurčitá hodnota, napětí v hodní části je vyhodnoceno jako logická 1, v dolní části jako logická 0.

Arduino 5V logické úrovně

Arduino 5V logické úrovně (zdroj: https://learn.sparkfun.com/tutorials/logic-levels/arduino-logic-levels )

Zbyšek Voda

5 Comments on “Proč je u tlačítka rezistor?

lukas.vacek
7.8.2017 at 21:03

Fajn článek, někdy se hodí pak taky ošetření vícenásobného odražení tlačítka kondenzátorem.

eng: button debounce (viz google obrázky)

viz např. https://hackadaycom.files.wordpress.com/2015/11/debounce-sch.png

sela77
22.2.2017 at 23:35

Dobrý den, u těch obrázků by měl být odpor nad tlačítkem připojený k PIN2 a ne jen mezi VCC a GND.

Zbyšek Voda
23.2.2017 at 9:03

Dobrý den, jestli myslíte mezi tlačítkem a PIN2 (místo modrého vodiče), tak máte pravdu.
Nějaký rezistor by tam být měl a když ho tam dáte, je to jistota.

Co jsem ale četl, tak se nepoužívá, protože stačí velice malý odpor a ten má samotný pin dostatečný.

J P
29.8.2016 at 8:55

Podle mě tak jak jsou ty obvody nakreslený tak plavou ve vzduchu oba jak Pull Up tak Pull Down. Ale možná jenom špatně interpretuju rádoby schéma zapojení.

Tomáš
20.3.2016 at 22:31

Napsat komentář