Ардуино для начинающих. Урок 6. Дребезг контактов

В этом уроке мы поговорим о том: что такое дребезг контактов, почему он появляется и как от него избавится. В среде Arduino это сделать достаточно просто. Для этого не понадобится дополнительно усложнять схему или подключать лишние библиотеки. В прошлом уроке мы уже говорили о дребезге контактов и написали небольшую функцию, которая помогала нам считывать чистые значения с кнопки. Сейчас я решил более подробно разобраться с дребезгом контактов.

Так что же такое дребезг контактов?

Дребезг контактов — это явление, происходящее в электромеханических устройствах и аппаратах (кнопках, реле, герконах, переключателях, контакторах), длящееся некоторое время после замыкания электрических контактов. После замыкания (нажатия кнопки, включения реле и т.д.) происходят многократные неконтролируемые замыкания и размыкания контактов за счет упругости материалов и деталей контактной системы — некоторое время контакты «подпрыгивают» при соударениях, размыкая и замыкая электрическую цепь. На графике ниже схематически изображен дребезг при нажатии кнопки.

график дребезга контактов
график дребезга контактов

Как понятно из определения дребезг контактов это временное явление. Оно может длиться от 0,5 до нескольких сотен миллисекунд. Все зависит от материалов, размеров и устройства электромеханического прибора. В масштабах ардуино это несколько миллисекунд. Именно поэтому в прошлом уроке мы написали функцию подавления дребезжания с помощью задержки в 5 миллисекунд.

Как избавиться от дребезга контактов на Arduino?

Все очень просто. Мы делали это в прошлом уроке. Возьмем пример от туда. Схема и скетч будут следующие:

Управление яркостью светодиода
Управление яркостью светодиода
 // переменные с пинами подключенных устройств
int switchPin = 8;
int ledPin = 11;

// переменные для хранения состояния кнопки и светодиода
boolean lastButton = LOW;
boolean currentButton = LOW;
int ledLevel = 0;

void setup() {
	pinMode(switchPin, INPUT);
	pinMode(ledPin, OUTPUT);
}

// функция для подавления дребезга
boolean debounse(boolean last) {
	boolean current = digitalRead(switchPin);
	if(last != current) {
		delay(5);
		current = digitalRead(switchPin);
	}
	return current;
}

void loop() {
	currentButton = debounse(lastButton);
	if(lastButton == LOW && currentButton == HIGH) {
		ledLevel = ledLevel + 51;
	}
	lastButton = currentButton;

	if(ledLevel > 255) ledLevel = 0;
	analogWrite(ledPin, ledLevel);
}

2 комментариев

  1. Евгений

    и чё это за буквочки?????????
    ничерта не понятно!!!

  2. Владимир.

    Если пишешь статью для начинающих, то и веди себя подобающе. Каждую строку объясни комментарием. Или вообще ничего не пиши. Конечно, кто захочет и сам разберется, но тогда какой толк от твоей статьи?…

Добавить комментарий

Ардуино