Ons het reeds gekyk na die koppeling van 'n knoppie aan die Arduino en die kwessie van "weerkaatsende" kontakte aangeraak. Dit is 'n baie irriterende verskynsel wat herhaaldelike knoppies indruk en dit moeilik maak om knoppieklikke programmaties te hanteer. Kom ons praat oor hoe om kontakweiering ontslae te raak.
Nodig
- - Arduino;
- - taktknoppie;
- - weerstand met 'n nominale waarde van 10 kOhm;
- - Liguitstralende diode;
- - verbindingsdrade.
Instruksies
Stap 1
Kontak weiering is 'n algemene verskynsel in meganiese skakelaars, drukknoppies, skakelaars en relais. As gevolg van die feit dat kontakte gewoonlik gemaak word van metale en legerings wat elastisiteit het, is dit nie onmiddellik 'n betroubare verbinding as dit fisies gesluit is nie. Binne 'n kort tydperk sluit die kontakte verskeie kere en stoot mekaar. As gevolg hiervan kry die elektriese stroom 'n bestendige waarde nie onmiddellik nie, maar na 'n reeks op en af. Die tydsduur van hierdie kortstondige effek hang af van die kontakmateriaal, grootte en ontwerp. Die illustrasie toon 'n tipiese ossillogram wanneer die kontakte van die knoppie gesluit is. Daar kan gesien word dat die tyd vanaf die oomblik van oorskakeling na die bestendige toestand 'n paar millisekondes is. Dit word 'weiering' genoem.
Hierdie effek is nie opvallend in elektriese stroombane om beligting, motors of ander traagheidssensors en -toestelle te beheer nie. Maar in stroombane waar daar vinnig inligting gelees en verwerk word (waar die frekwensies van dieselfde orde is as die "weiering" -pulse, of hoër), is dit 'n probleem. In die besonder is die Arduino UNO, wat op 16 MHz werk, uitstekend in staat om kontak weiering te vang deur 'n reeks eenhede en nulle te aanvaar in plaas van 'n enkele 0 tot 1 skakelaar.
Stap 2
Kom ons kyk hoe kontakweiering die korrekte werking van die stroombaan beïnvloed. Laat ons die klokknop aan die Arduino koppel met behulp van 'n aftrekweerstandskring. Deur op die knoppie te druk, brand ons die LED en laat dit brand totdat die knoppie weer gedruk word. Vir die duidelikheid sluit ons 'n eksterne LED aan op digitale pen 13, alhoewel die ingeboude een nie beskikbaar is nie.
Stap 3
Om hierdie taak te verrig, is die eerste ding wat by u opkom:
- onthou die vorige toestand van die knoppie;
- vergelyk met die huidige toestand;
- as die toestand verander het, dan verander ons die toestand van die LED.
Kom ons skryf so 'n skets en laai dit in die Arduino-geheue.
As die stroombaan aangeskakel word, is die effek van kontakbons onmiddellik sigbaar. Dit manifesteer in die feit dat die LED nie onmiddellik brand nadat die knoppie gedruk is nie, of brand en dan uitgaan, of nie dadelik uitskakel nadat die knoppie gedruk is nie, maar aan bly. Oor die algemeen werk die stroombaan nie stabiel nie. En as dit nie so van kritieke belang is vir 'n taak om die LED aan te skakel nie, dan is dit eenvoudig onaanvaarbaar vir ander, meer ernstige take.
Stap 4
Ons sal probeer om die situasie reg te stel. Ons weet dat kontak weiering binne enkele millisekondes plaasvind nadat 'n kontak gesluit is. Kom ons wag, sê, 5ms nadat ons die status van die knoppie verander het. Hierdie tyd vir 'n persoon is byna 'n oomblik, en om op 'n knoppie deur 'n persoon te druk, duur gewoonlik baie langer - enkele tientalle millisekondes. En Arduino werk uitstekend met sulke kort tydperke, en hierdie 5ms sal dit moontlik maak om die weiering van kontakte af te sny deur op 'n knoppie te druk.
In hierdie skets verklaar ons die debounce () -prosedure ("bounce" in Engels is slegs "bounce", die voorvoegsel "de" beteken die omgekeerde proses), waarna ons die vorige status van die knoppie gee. As 'n druk op die knoppie langer as 5 ms duur, is dit regtig 'n druk.
Deur die pers op te spoor, verander ons die toestand van die LED.
Laai die skets op die Arduino-bord. Alles is nou baie beter! Die knoppie werk sonder versuim. As dit ingedruk word, verander die LED soos ons wou.
Stap 5
Soortgelyke funksies word verskaf deur spesiale biblioteke soos die Bounce2-biblioteek. U kan dit aflaai vanaf die skakel in die afdeling "Bronne" of op die webwerf https://github.com/thomasfredericks/Bounce2. Om die biblioteek te installeer, plaas dit in die biblioteekgids van die Arduino-ontwikkelingsomgewing en herbegin die IDE.
Die "Bounce2" -biblioteek bevat die volgende metodes:
Bounce () - inisialisering van die "Bounce" -voorwerp;
leemte interval (ms) - stel die vertragingstyd in millisekondes in;
void attach (pin number) - stel die pen waaraan die knoppie gekoppel is;
int update () - werk die voorwerp op en gee waar terug as die penstaat verander het, en anders vals;
int read () - lees die nuwe toestand van die pen.
Kom ons herskryf ons skets met behulp van die biblioteek. U kan ook die vorige toestand van die knoppie onthou en vergelyk met die huidige, maar laat ons die algoritme vereenvoudig. As die knoppie ingedruk word, tel ons die druk, en elke onewe druk skakel die LED aan, en elke ewe druk sal dit uitskakel. Hierdie skets lyk bondig, maklik om te lees en maklik om te gebruik.