Už sme sa pozreli na pripojenie tlačidla k Arduinu a dotkli sme sa otázky „skákacích“kontaktov. Toto je veľmi nepríjemný jav, ktorý spôsobuje opakované stlačenia tlačidiel a sťažuje programové zvládnutie kliknutí na tlačidlá. Poďme si povedať, ako sa zbaviť kontaktného odskoku.
Nevyhnutné
- - Arduino;
- - taktovacie tlačidlo;
- - odpor s nominálnou hodnotou 10 kOhm;
- - Dióda vyžarujúca svetlo;
- - spojovacie vodiče.
Inštrukcie
Krok 1
Kontaktné odskoky sú bežným javom v mechanických spínačoch, tlačidlách, páčkových prepínačoch a relé. Vzhľadom na to, že kontakty sú zvyčajne vyrobené z kovov a zliatin, ktoré majú pružnosť, po fyzickom uzavretí okamžite nenadviažu spoľahlivé spojenie. V krátkom čase sa kontakty niekoľkokrát uzavrú a navzájom sa odpudia. Výsledkom je, že elektrický prúd nadobúda ustálenú hodnotu nie okamžite, ale po sérii výkyvov. Trvanie tohto prechodného javu závisí od materiálu kontaktu, veľkosti a prevedenia. Obrázok zobrazuje typický oscilogram, keď sú kontakty taktovacieho tlačidla zatvorené. Je vidieť, že čas od okamihu prepnutia do ustáleného stavu je niekoľko milisekúnd. Toto sa nazýva „odskočiť“.
Tento efekt nie je viditeľný v elektrických obvodoch na riadenie osvetlenia, motorov alebo iných zotrvačných senzorov a zariadení. Ale v obvodoch, kde dochádza k rýchlemu čítaniu a spracovaniu informácií (kde sú frekvencie rovnakého rádu ako „odrazové“impulzy alebo vyššie), to predstavuje problém. Najmä Arduino UNO, ktoré pracuje na 16 MHz, je vynikajúce pri chytaní kontaktného odrazu tým, že namiesto jedného prepínača 0: 1 prijíma postupnosť jednotiek a núl.
Krok 2
Pozrime sa, ako odrazenie kontaktu ovplyvňuje správnu činnosť obvodu. Pripojme hodinové tlačidlo k Arduinu pomocou sťahovacieho obvodu odporu. Stlačením tlačidla rozsvietime LED a necháme ju svietiť, kým tlačidlo opäť nestlačíte. Pre prehľadnosť pripojíme externú LED k digitálnemu kolíku 13, aj keď od zabudovanej sa dá upustiť.
Krok 3
Pri uskutočňovaní tejto úlohy by ma ako prvé napadlo:
- zapamätajte si predchádzajúci stav tlačidla;
- porovnanie so súčasným stavom;
- ak sa stav zmenil, tak zmeníme stav LED.
Poďme si napísať taký náčrt a načítať ho do pamäte Arduino.
Po zapnutí obvodu je okamžite viditeľný účinok odrazu kontaktu. Prejavuje sa to tým, že LED dióda sa nerozsvieti ihneď po stlačení tlačidla, alebo sa rozsvieti a potom zhasne, prípadne sa nevypne ihneď po stlačení tlačidla, ale zostane svietiť. Všeobecne obvod nefunguje stabilne. A ak to pre úlohu so zapnutím LED nie je také kritické, potom pre iné, závažnejšie úlohy, to je jednoducho neprijateľné.
Krok 4
Pokúsime sa situáciu napraviť. Vieme, že kontaktné odskoky sa vyskytujú v priebehu niekoľkých milisekúnd po uzavretí kontaktu. Po zmene stavu tlačidla počkáme povedzme 5 ms. Tento čas pre človeka je takmer okamžitý a stlačenie tlačidla človekom zvyčajne trvá oveľa dlhšie - niekoľko desiatok milisekúnd. A Arduino s tak krátkymi časovými obdobiami funguje skvele a týchto 5 ms mu umožní prerušiť odskakovanie kontaktov od stlačenia tlačidla.
V tomto náčrte vyhlásime procedúru debounce () („bounce“v angličtine znamená iba „bounce“, predpona „de“znamená opačný proces), na vstup ktorej zadáme predchádzajúci stav tlačidla. Ak stlačenie tlačidla trvá viac ako 5 ms, potom ide skutočne o stlačenie.
Detekciou lisu zmeníme stav LED.
Nahrajte náčrt na dosku Arduino. Všetko je teraz oveľa lepšie! Tlačidlo funguje bezchybne, po stlačení LED zmení stav, ako sme chceli.
Krok 5
Podobnú funkčnosť poskytujú špeciálne knižnice, napríklad knižnica Bounce2. Môžete si ho stiahnuť z odkazu v sekcii „Zdroje“alebo na webovej stránke https://github.com/thomasfredericks/Bounce2. Ak chcete knižnicu nainštalovať, umiestnite ju do adresára libraries vývojového prostredia Arduino a reštartujte IDE.
Knižnica "Bounce2" obsahuje nasledujúce metódy:
Bounce () - inicializácia objektu "Bounce";
void interval (ms) - nastavuje čas oneskorenia v milisekundách;
void attach (číslo PIN) - nastaví pin, ku ktorému je tlačidlo pripojené;
int update () - aktualizuje objekt a vráti true, ak sa zmenil stav PIN, inak false;
int read () - načíta nový stav kódu PIN.
Poďme náš náčrt prepísať pomocou knižnice. Môžete si tiež zapamätať a porovnať minulý stav tlačidla s aktuálnym stavom, zjednodušíme však algoritmus. Po stlačení tlačidla spočítame stlačenia a každé nepárne stlačenie rozsvieti LED a každé párne stlačenie zhasne. Táto skica vyzerá stručne, ľahko sa číta a ľahko sa používa.