Як позбутися від брязкоту контактів при підключенні кнопки до arduino - що таке брязкіт контактів

"Брязкіт" контактів - це явище, властиве механічним перемикачів, кнопок, тумблери і реле. Через те, що контакти зазвичай роблять з металів і сплавів, які мають пружністю, при фізичному замиканні вони не відразу встановлюють надійне з'єднання. Протягом короткого проміжку часу контакти кілька разів змикаються і відштовхуються один від одного. В результаті цього електричний струм приймає стале значення не моментально, а після низки наростань і спадів. Тривалість цього перехідного ефекту залежить від матеріалу контактів, від їх розміру і конструкції. На ілюстрації показана типова осцилограма при замиканні контактів тактовою кнопки. Видно, що час від моменту перемикання до усталеного стану становить кілька мілісекунд. Це і називається "дребезгом".

Цей ефект не помітний в електричних ланцюгах управління освітленням, двигунами або іншими інерційними датчиками і приладами. Але в ланцюгах, де йде швидке зчитування та обробка інформації (де частоти того ж порядку, що і імпульси "брязкоту", або вище), це є проблемою. Зокрема, Arduino UNO, який працює на частоті 16 МГц, відмінно ловить "брязкіт" контактів, приймаючи послідовність одиниць і нулів замість одиничного перемикання від 0 до 1.

Як позбутися від брязкоту контактів при підключенні кнопки до arduino - що таке брязкіт контактів

Давайте подивимося, як брязкіт контактів впливає на правильну роботу схеми. Підключимо до Arduino тактову кнопку за схемою зі стягує резистором. Будемо після натискання кнопки запалювати світлодіод і залишати включеним до повторного натискання кнопки. Для наочності підключимо до цифрового висновку 13 зовнішній світлодіод, хоча можна обійтися і вбудованим.

Як позбутися від брязкоту контактів при підключенні кнопки до arduino - що таке брязкіт контактів

Щоб реалізувати це завдання, перше, що спадає на думку:
- запам'ятовувати попередній стан кнопки;
- порівнювати з поточним станом;
- якщо стан змінилося, то міняємо стан світлодіода.
Напишемо такий скетч і завантажимо в пам'ять Arduino.
При включенні схеми в роботу, відразу видно ефект від впливу брязкоту контактів. Він проявляється в тому, що світлодіод спалахує не відразу після натискання кнопки, або загоряється і тут же гасне, або не вимикається відразу після натискання кнопки, а продовжує горіти. Загалом, схема працює не стабільно. І якщо для завдання з включенням світлодіода це не настільки критично, то для інших, більш серйозних завдань, це просто неприйнятно.

Як позбутися від брязкоту контактів при підключенні кнопки до arduino - що таке брязкіт контактів

Постараємося виправити ситуацію. Ми знаємо, що брязкіт контактів проявляє себе протягом декількох мілісекунд після замикання контактів. Давайте після зміни стану кнопки вичікувати, скажімо, 5 мсек. Це час для людини є практично миттю, і натискання кнопки людиною зазвичай відбувається значно довше - кілька десятків мілісекунд. А Arduino прекрасно працює з такими короткими проміжками часу, і ці 5 мсек дозволять йому відсікти брязкіт контактів від натискання кнопки.
В даному скетчі ми оголосимо процедуру debounce () ( "bounce" по-англійськи - це якраз "брязкіт", приставка "de" означає зворотний процес), на вхід якої ми подаємо попередній стан кнопки. Якщо натискання кнопки триває більше 5 мсек, значить це дійсно натискання.
Визначивши натискання, ми змінюємо стан світлодіода.
Завантажимо скетч в плату Arduino. Тепер все набагато краще! Кнопка спрацьовує без збоїв, при натисканні світлодіод змінює стан, як ми і хотіли.

Як позбутися від брязкоту контактів при підключенні кнопки до arduino - що таке брязкіт контактів

Як позбутися від брязкоту контактів при підключенні кнопки до arduino - що таке брязкіт контактів