Již jsme se podívali na připojení tlačítka k Arduinu a dotkli jsme se problému „poskakujících“kontaktů. Jedná se o velmi nepříjemný jev, který způsobuje opakované stisknutí tlačítek a ztěžuje programové zpracování kliknutí na tlačítka. Pojďme si promluvit o tom, jak se zbavit kontaktního odrazu.
Nezbytné
- - Arduino;
- - taktovací tlačítko;
- - odpor se jmenovitou hodnotou 10 kOhm;
- - světelná dioda;
- - připojení vodičů.
Instrukce
Krok 1
Odskok kontaktu je běžným jevem u mechanických spínačů, tlačítek, kolébkových spínačů a relé. Vzhledem k tomu, že kontakty jsou obvykle vyrobeny z kovů a slitin, které mají pružnost, když jsou fyzicky uzavřeny, nevytvářejí okamžitě spolehlivé spojení. Během krátké doby se kontakty několikrát uzavřou a navzájem se odpudí. Výsledkem je, že elektrický proud nabývá hodnoty ustáleného stavu ne okamžitě, ale po sérii výkyvů. Doba trvání tohoto přechodného jevu závisí na materiálu kontaktu, velikosti a designu. Obrázek ukazuje typický oscilogram, když jsou kontakty dotykového tlačítka sepnuty. Je vidět, že doba od okamžiku přepnutí do ustáleného stavu je několik milisekund. Tomu se říká „odskočit“.
Tento efekt není patrný v elektrických obvodech pro ovládání osvětlení, motorů nebo jiných setrvačných senzorů a zařízení. Ale v obvodech, kde dochází k rychlému čtení a zpracování informací (kde jsou frekvence stejného řádu jako pulzy „odrazu“nebo vyšší), to představuje problém. Zejména Arduino UNO, které pracuje na 16 MHz, je vynikající v chytání kontaktního odrazu tím, že přijímá posloupnost jedniček a nul místo jediného přepínače 0: 1.
Krok 2
Podívejme se, jak odraz kontaktů ovlivňuje správnou funkci obvodu. Připojte hodinové tlačítko k Arduinu pomocí stahovacího obvodu odporu. Stisknutím tlačítka rozsvítíme LED a necháme ji svítit, dokud tlačítko znovu nestisknete. Pro přehlednost připojíme externí LED k digitálnímu kolíku 13, i když od zabudovaného nelze upustit.
Krok 3
K dosažení tohoto úkolu přijde na mysl první věc:
- zapamatujte si předchozí stav tlačítka;
- porovnat se současným stavem;
- pokud se stav změnil, změníme stav LED.
Napišme si takovou skicu a nahrajeme ji do paměti Arduino.
Když je obvod zapnutý, účinek odrazu kontaktů je okamžitě viditelný. Projeví se tím, že LED se nerozsvítí ihned po stisknutí tlačítka, nebo se rozsvítí a poté zhasne, nebo se nevypne ihned po stisknutí tlačítka, ale zůstane rozsvícená. Obecně obvod nefunguje stabilně. A pokud to pro úkol se rozsvícením LED není tak důležité, pak pro jiné, vážnější úkoly, je to prostě nepřijatelné.
Krok 4
Pokusíme se situaci napravit. Víme, že kontaktní odskok nastane během několika milisekund po uzavření kontaktu. Počkejte, řekněme, 5 ms po změně stavu tlačítka. Tato doba pro člověka je téměř okamžitá a stisknutí tlačítka člověkem obvykle trvá mnohem déle - několik desítek milisekund. A Arduino s tak krátkou dobou funguje skvěle a těchto 5 ms mu umožní odříznout odskakování kontaktů od stisknutí tlačítka.
V tomto náčrtu deklarujeme proceduru debounce () („bounce“v angličtině je jen „bounce“, předpona „de“znamená obrácený proces), na vstup kterého zadáme předchozí stav tlačítka. Pokud stisknutí tlačítka trvá déle než 5 ms, pak se jedná skutečně o stisknutí.
Detekcí lisu změníme stav LED.
Nahrajte náčrt na desku Arduino. Všechno je teď mnohem lepší! Tlačítko funguje bezchybně, po stisknutí LED změní stav, jak jsme chtěli.
Krok 5
Podobné funkce poskytují speciální knihovny, jako je knihovna Bounce2. Můžete si jej stáhnout z odkazu v části „Zdroje“nebo na webu https://github.com/thomasfredericks/Bounce2. Chcete-li nainstalovat knihovnu, umístěte ji do adresáře knihoven vývojového prostředí Arduino a restartujte IDE.
Knihovna "Bounce2" obsahuje následující metody:
Bounce () - inicializace objektu "Bounce";
void interval (ms) - nastavuje dobu zpoždění v milisekundách;
void attach (číslo PIN) - nastaví pin, ke kterému je tlačítko připojeno;
int update () - aktualizuje objekt a vrací true, pokud se změnil stav PIN, jinak false;
int read () - načte nový stav pinu.
Přepíšeme náš náčrt pomocí knihovny. Můžete si také pamatovat a porovnat minulý stav tlačítka s aktuálním, ale zjednodušíme algoritmus. Když je tlačítko stisknuto, budeme počítat stisknutí a každé liché stisknutí rozsvítí LED a každé sudé stisknutí vypne. Tento náčrt vypadá stručně, snadno se čte a snadno se používá.