Մենք արդեն դիտել ենք Arduino- ին կոճակ միացնելու հարցը և շոշափել ենք «ցատկող» շփումները: Սա շատ տհաճ երեւույթ է, որն առաջացնում է կոճակի կրկնակի սեղմումներ և դժվարացնում է կոճակի կտտոցների ծրագրավորումը: Եկեք խոսենք այն մասին, թե ինչպես ազատվել շփման ցատկումից:
Անհրաժեշտ է
- - Arduino;
- - տակտ կոճակ;
- - 10 kOhm անվանական արժեքով դիմադրություն;
- - լույս արտանետող դիոդ;
- - լարերը միացնող:
Հրահանգներ
Քայլ 1
Կոնտակտային ցատկումը սովորական երեւույթ է մեխանիկական անջատիչների, կոճակների, բանալիների անջատիչների և ռելեների մեջ: Հաշվի առնելով այն փաստը, որ շփումները սովորաբար պատրաստվում են մետաղներից և համաձուլվածքներից, որոնք ունեն առաձգականություն, ֆիզիկապես փակվելիս դրանք անմիջապես չեն հաստատում հուսալի կապ: Կարճ ժամանակահատվածում շփումները մի քանի անգամ փակվում են և վանում միմյանց: Արդյունքում, էլեկտրական հոսանքը կայուն վիճակ է ստանում ոչ թե ակնթարթորեն, այլ մի շարք ելեւէջներից հետո: Այս անցողիկ ազդեցության տևողությունը կախված է շփման նյութից, չափից և դիզայնից: Նկարազարդումը ցույց է տալիս տիպային ոսցիլոգրամա, երբ տակտի կոճակի շփումները փակ են: Տեսանելի է, որ կայուն վիճակին անցնելու պահից ժամանակը մի քանի միլիվայրկյան է: Սա կոչվում է «ցատկում»:
Այս ազդեցությունը նկատելի չէ էլեկտրական շղթաներում ՝ լուսավորությունը, շարժիչները կամ այլ իներցիոն սենսորներն ու սարքերը կառավարելու համար: Բայց այն սխեմաներում, որտեղ առկա է տեղեկատվության արագ ընթերցում և մշակում (որտեղ հաճախականությունները նույն կարգի են, ինչ «ցատկող» իմպուլսները կամ ավելի բարձր), սա խնդիր է: Մասնավորապես, Arduino UNO- ն, որը գործում է 16 ՄՀց արագությամբ, հիանալի է բռնում շփման ցատկումը ՝ ընդունելով նորերի և զրոների հաջորդականություն ՝ մեկ 0-ից 1 անջատիչի փոխարեն:
Քայլ 2
Տեսնենք, թե ինչպես է կոնտակտային ցատկումը ազդում շղթայի ճիշտ աշխատանքի վրա: Եկեք ժամացույցի կոճակը միացնենք Arduino- ին `օգտագործելով քաշվող դիմադրիչի միացում: Սեղմելով կոճակը, մենք կվառենք LED- ը և կթողնենք այն մինչև կոճակը կրկին սեղմվի: Պարզության համար մենք միացնում ենք արտաքին LED- ն թվային քորոցին 13, չնայած ներկառուցվածը կարելի է բաց թողնել:
Քայլ 3
Այս խնդիրը կատարելու համար առաջին բանը, որ գալիս է մտքում.
- հիշեք կոճակի նախորդ վիճակը.
- համեմատել ներկա վիճակի հետ;
- եթե պետությունը փոխվել է, ապա մենք փոխում ենք LED- ի վիճակը:
Եկեք գրենք նման ուրվագիծ և բեռնեք այն Arduino հիշողության մեջ:
Երբ շղթան միացված է, շփման ցատկման ազդեցությունն անմիջապես տեսանելի է: Դա արտահայտվում է նրանով, որ կոճակը սեղմելուց անմիջապես հետո LED- ը չի վառվում, կամ վառվում է, իսկ հետո մարվում է, կամ կոճակը սեղմելուց անմիջապես հետո չի անջատվում, բայց մնում է միացված: Ընդհանուր առմամբ, շղթան կայուն չի աշխատում: Եվ եթե LED- ի միացումով առաջադրանքի համար դա այնքան էլ կարևոր չէ, ապա այլ, ավելի լուրջ խնդիրների համար, դա պարզապես անընդունելի է:
Քայլ 4
Մենք կփորձենք շտկել իրավիճակը: Մենք գիտենք, որ կոնտակտային ցատկումը տեղի է ունենում շփման փակումից հետո մի քանի միլիվայրկյանում: Կոճակի վիճակը փոխելուց հետո սպասենք, ասենք, 5ms: Մարդու համար այս ժամանակը գրեթե ակնթարթային է, և մարդու կողմից կոճակը սեղմելը սովորաբար շատ ավելի երկար է տևում `մի քանի տասնյակ միլիվայրկյան: Եվ Arduino- ն հիանալի է աշխատում նման կարճ ժամանակահատվածներով, և այս 5 մմ-ն թույլ կտա նրան կտրել շփումների ցատկումը կոճակը սեղմելուց:
Այս ուրվագծում մենք կհայտարարենք deboun () կարգի մասին Եթե կոճակի սեղմումը տևում է ավելի քան 5 մվրկ, ապա դա իսկապես սեղմում է:
Մամուլի հայտնաբերմամբ մենք փոխում ենք LED- ի վիճակը:
Վերբեռնեք ուրվագիծը Arduino տախտակին: Հիմա ամեն ինչ շատ ավելի լավ է: Կոճակն աշխատում է առանց խափանման, երբ սեղմում ենք, LED- ը փոխում է վիճակը, ինչպես ուզում էինք:
Քայլ 5
Նմանատիպ ֆունկցիոնալությունը տրամադրվում է հատուկ գրադարանների կողմից, ինչպիսին է Bounce2 գրադարանը:Այն կարող եք ներբեռնել «Աղբյուրներ» բաժնի հղումից կամ https://github.com/thomasfredericks/Bounce2 կայքում: Գրադարանը տեղադրելու համար այն տեղադրեք Arduino զարգացման միջավայրի գրադարանների գրացուցակում և վերագործարկեք IDE- ն:
«Bounce2» գրադարանը պարունակում է հետևյալ մեթոդները.
Ounceատկում () - «ounceատկում» օբյեկտի նախնականացում;
անվավեր միջակայք (ms) - սահմանում է հետաձգման ժամանակը միլիվայրկյաններով.
անվավեր կցորդ (կապի համար) - սահմանում է այն քորոցը, որին միացված է կոճակը;
int update () - օբյեկտը թարմացնում է և վերադառնում է true, եթե փին պետությունը փոխվել է, և հակառակ դեպքում ՝ false.
int read () - կարդում է քորոցի նոր վիճակը:
Եկեք գրենք մեր ուրվագիծը ՝ օգտագործելով գրադարանը: Կարող եք նաև հիշել և համեմատել կոճակի անցյալ վիճակը ընթացիկի հետ, բայց եկեք պարզեցնենք ալգորիթմը: Երբ կոճակը սեղմվում է, մենք կհաշվենք մամուլները, և յուրաքանչյուր տարօրինակ սեղմում կմիացնի LED- ն, և յուրաքանչյուր զույգ սեղմումով այն անջատելու է: Այս ուրվագիծը հակիրճ է, հեշտ ընթերցվող և օգտագործման համար դյուրին: