Ne tashmë kemi parë lidhjen e një butoni me Arduino dhe kemi prekur çështjen e "kërcimit" të kontakteve. Ky është një fenomen shumë i bezdisshëm që shkakton shtypje të përsëritura të butonave dhe e bën të vështirë trajtimin programor të klikimeve të butonave. Le të flasim se si të shpëtojmë nga kërcimi i kontaktit.
E nevojshme
- - Arduino;
- - butoni takt;
- - rezistencë me një vlerë nominale prej 10 kOhm;
- - Diodë që lëshon dritë;
- - telat lidhës.
Udhëzimet
Hapi 1
Kërcimi i kontaktit është një fenomen i zakonshëm në ndërprerësit mekanikë, butonat, çelsin këmbyes dhe stafetën. Për shkak të faktit se kontaktet zakonisht bëhen prej metaleve dhe lidhjeve që kanë elasticitet, kur mbyllen fizikisht, ato nuk krijojnë menjëherë një lidhje të besueshme. Brenda një periudhe të shkurtër kohe, kontaktet mbyllen disa herë dhe sprapsin njëri-tjetrin. Si rezultat, rryma elektrike merr një vlerë të qëndrueshme jo në çast, por pas një serie ngritjesh dhe ngritjesh. Kohëzgjatja e këtij efekti kalimtar varet nga materiali i kontaktit, madhësia dhe modeli. Ilustrimi tregon një oshilogram tipik kur kontaktet e butonit takt janë të mbyllura. Mund të shihet se koha nga momenti i kalimit në gjendje të qëndrueshme është disa milisekonda. Kjo quhet "fryrje".
Ky efekt nuk vërehet në qarqet elektrike për të kontrolluar ndriçimin, motorët ose sensorë dhe pajisje të tjera inerciale. Por në qarqet ku ka një lexim dhe përpunim të shpejtë të informacionit (ku frekuencat janë të të njëjtit rend me impulset "kërcim", ose më të larta), ky është një problem. Në veçanti, Arduino UNO, i cili operon në 16 MHz, është i shkëlqyeshëm në kapjen e kërcimit të kontaktit duke pranuar një sekuencë të njësive dhe zero në vend të një çelësi të vetëm 0 me 1.
Hapi 2
Le të shohim se si kërcimi i kontaktit ndikon në funksionimin e duhur të qarkut. Le të lidhim butonin e orës me Arduino duke përdorur një qark të rezistencës tërheqëse. Duke shtypur butonin, ne do të ndezim LED dhe do ta lëmë të ndezur derisa butoni të shtypet përsëri. Për qartësi, ne lidhim një LED të jashtëm me kunjin dixhital 13, megjithëse i integruari mund të shpërndahet.
Hapi 3
Për të përmbushur këtë detyrë, gjëja e parë që vjen në mendje:
- mbani mend gjendjen e mëparshme të butonit;
- krahasoni me gjendjen aktuale;
- nëse gjendja ka ndryshuar, atëherë ne ndryshojmë gjendjen e LED.
Le të shkruajmë një skicë të tillë dhe ta ngarkojmë atë në kujtesën Arduino.
Kur qarku është ndezur, efekti i kërcimit të kontaktit është menjëherë i dukshëm. Ajo manifestohet në faktin se LED nuk ndizet menjëherë pasi të shtypni butonin, ose ndizet dhe pastaj fiket, ose nuk fiket menjëherë pasi të shtypni butonin, por mbetet e ndezur. Në përgjithësi, qarku nuk funksionon në mënyrë të qëndrueshme. Dhe nëse për një detyrë me ndezjen e LED kjo nuk është aq kritike, atëherë për detyra të tjera, më serioze, është thjesht e papranueshme.
Hapi 4
Ne do të përpiqemi ta rregullojmë situatën. Ne e dimë që kërcimi i kontaktit ndodh brenda disa milisekondave pas mbylljes së kontaktit. Le të presim, të themi, 5ms pasi të ndryshojmë gjendjen e butonit. Kjo kohë për një person është pothuajse e menjëhershme dhe shtypja e një butoni nga një person zakonisht zgjat shumë - disa dhjetëra milisekonda. Dhe Arduino funksionon shkëlqyeshëm me periudha kaq të shkurtra kohore, dhe këto 5ms do ta lejojnë atë të ndërpresë kërcimin e kontakteve nga shtypja e një butoni.
Në këtë skicë, ne do të deklarojmë procedurën e zbritjes () ("kërcimi" në anglisht është vetëm "kërcim", prefiksi "de" do të thotë procesi i kundërt), në hyrjen e së cilës ne furnizojmë gjendjen e mëparshme të butonit. Nëse një shtypje butoni zgjat më shumë se 5 msec, atëherë është me të vërtetë një shtypje.
Duke zbuluar shtypjen, ne ndryshojmë gjendjen e LED.
Ngarko skicën në bordin Arduino. Tani gjithçka është shumë më mirë! Butoni funksionon pa dështuar, kur shtypet, LED ndryshon gjendjen, siç dëshironim.
Hapi 5
Funksionalitet i ngjashëm sigurohet nga bibliotekat speciale siç është biblioteka Bounce2. Mund ta shkarkoni nga lidhja në seksionin "Burimet" ose në faqen në internet https://github.com/thomasfredericks/Bounce2. Për të instaluar bibliotekën, vendoseni atë në drejtorinë e bibliotekave të mjedisit zhvillimor Arduino dhe rifilloni IDE.
Biblioteka "Bounce2" përmban metodat e mëposhtme:
Bounce () - inicializimi i objektit "Bounce";
interval i pavlefshëm (ms) - vendos kohën e vonesës në milisekonda;
lidhja e pavlefshme (numri i kunjit) - vendos kunjin në të cilin është lidhur butoni;
int update () - azhurnon objektin dhe kthen true nëse gjendja pin ka ndryshuar, dhe false përndryshe;
int lexoj () - lexon gjendjen e re të kunjit.
Le të rishkruajmë skicën tonë duke përdorur bibliotekën. Ju gjithashtu mund të mbani mend dhe krahasoni gjendjen e kaluar të butonit me atë aktual, por le të thjeshtojmë algoritmin. Kur shtypet butoni, ne do të numërojmë shtypjet, dhe çdo shtypje e çuditshme do të ndezë LED, dhe secila shtyp çift do ta fikë. Kjo skicë duket koncize, e lehtë për t’u lexuar dhe e lehtë për t’u përdorur.