Как подключить кнопку к Arduino
Кажется, что может быть проще, чем подключить кнопку? Тем не менее, и тут есть свои подводные камни. Давайте разберёмся.
Инструкция по подключению кнопки к Arduino
- Arduino UNO или иная совместимая плата;
- тактовая кнопка;
- резистор 10 кОм (вот отличный набор резисторов с основными номиналами от 10 Ом до 10 МОм);
- макетная плата (breadboard);
- соединительные провода (рекомендую вот такой набор);
- персональный компьютер со средой разработки Arduino IDE.
1 Виды кнопок
Кнопки бывают разные, но все они выполняют одну функцию – физически соединяют (или, наоборот, разрывают) между собой проводники для обеспечения электрического контакта. В простейшем случае – это соединение двух проводников, есть кнопки, которые соединяют большее количество проводников.
Виды кнопок, их внешний вид и обозначение на электрической схеме
Некоторые кнопки после нажатия оставляют проводники соединёнными (фиксирующиеся кнопки), другие – сразу же после отпускания размыкают цепь (нефиксирующиеся кнопки).
Также кнопки делят на:
- нормально разомкнутые,
- нормально замкнутые.
Первые при нажатии замыкают цепь, вторые – размыкают.
Сейчас нашёл широкое применение тип кнопок, которые называют «тактовые кнопки». Тактовые – не от слова «такт», а от слова «тактильный», т.к. нажатие хорошо чувствуется пальцами. Но этот ошибочный термин устоялся, и теперь эти кнопки у нас повсеместно так называют. Это кнопки, которые при нажатии замыкают электрическую цепь, а при отпускании – размыкают, т.е. это нефиксирующиеся, нормально разомкнутые кнопки.
2 Дребезг контактов
Кнопка – очень простое и полезное изобретение, служащее для лучшего взаимодействия человека и техники. Но, как и всё в природе, она не идеальна. Проявляется это в том, что при нажатии на кнопку и при её отпускании возникает т.н. «дребезг» («bounce» по-английски). Это многократное переключение состояния кнопки за короткий промежуток времени (порядка нескольких миллисекунд), прежде чем она примет установившееся состояние. Это нежелательное явление возникает в момент переключения кнопки из-за упругости материалов кнопки или из-за возникающих при электрическом контакте микроискр.
Дребезг контактов в момент нажатия и отпускания кнопки
В следующей статье подробно описаны основные способы борьбы с «дребезгом» при замыкании и размыкании контактов. А пока что рассмотрим варианты подключения кнопки к Arduino.
3 Некорректное подключение кнопки
Чтобы подключить нормально разомкнутую тактовую кнопку к Arduino, можно поступить самым простым способом: один свободный проводник кнопки соединить с питанием или землёй, другой – с цифровым выводом Arduino. Но, вообще говоря, это неправильно. Дело в том, что в моменты, когда кнопка не замкнута, на цифровом выводе Ардуино будут появляться электромагнитные наводки, и из-за этого возможны ложные срабатывания.
Неправильное подключение кнопки к Arduino
Чтобы избежать наводок, цифровой вывод обычно подключают через достаточно большой резистор (10 кОм) либо к земле, либо к питанию. В первом случае это называется «схема с подтягивающим резистором», во втором – «схема со стягивающим резистором». Давайте рассмотрим каждую из них.
4 Подключение кнопки по схеме с подтягивающим резистором
Сначала подключим к Arduino кнопку по схеме с подтягивающим резистором. Для этого один контакт кнопки соединим с землёй, второй – с цифровым выходом «2». Цифровой выход «2» также подключим через резистор номиналом 10 кОм к питанию +5 В.
Схема подключения кнопки к Arduino по схеме с подтягивающим резистором
Напишем вот такой скетч для обработки нажатий на кнопку и загрузим в Arduino.
Встроенный светодиод на выводе «13» постоянно горит, пока не нажата кнопка. Т.е. на порте «2» Arduino всегда присутствует высокий логический уровень HIGH. Когда нажимаем кнопку, напряжение на «2» порте принимает состояние LOW, и светодиод гаснет.
5 Подключение кнопки по схеме со стягивающим резистором
Теперь соберём схему со стягивающим резистором. Один контакт кнопки соединим с питанием +5 В, второй – с цифровым выходом «2». Цифровой выход «2» подключим через резистор номиналом 10 кОм к земле. Скетч менять не будем.
Подключение кнопки к Arduino по схеме со стягивающим резистором
При включении схемы на цифровом порте «2» Arduino низкий уровень LOW, и светодиод не горит. При нажатии на кнопку на порт «2» поступает высокий уровень HIGH, и светодиод загорается.
Тактовая кнопка, как подключить правильно к «+» или «-» .
Вы никогда не задумывались, почему в схемах иногда кнопки подтягивают к «+» питания, а иногда к общему проводу? Если прямо сейчас набрать в поиске: «тактовая кнопка ардуино» — то на большинстве картинок мы увидим именно прямое подключение, когда резистор подключен на землю. Но, если посмотреть схемы без участия ардуино, то ситуация меняется в корне, чаще можно будет встретить инвертированное включение. Так как же будет подключать кнопку правильнее? Давайте вместе попробуем разобраться в этом вопросе!
Тактовая кнопка является одним из наиболее часто встречающихся устройств дискретного ввода во встраиваемых системах. И даже появление сенсорных экранов все равно их не вытеснило.
Тактовая кнопка имеет нормально разомкнутый контакт. Т.е. цепь, в которой задействована кнопка, будет разорвана, пока не произошло нажатие. Для опроса состояния кнопки, как правило, используются входы цифровых микросхем, находящиеся в состоянии высокого импеданса (Z-состояние). Электрическое состояние таких входов определяется параметрами внешней схемы.
Чаще всего кнопки устанавливают между выводом микросхемы и общим проводом схемы. Соответственно, при нажатии кнопка может подключать вывод микросхемы на землю, формируя электрический уровень логического нуля.
Чтобы гарантировать устойчивый уровень логической единицы на входе микросхемы, пока кнопка не нажата, необходимо использовать подтягивающий резистор к плюсу питания. Таким образом, если кнопка не нажата, вход микросхемы примет состояние логической единицы. А при нажатии — примет логический ноль.
Инвертированное включение кажется нелогичным, т.к. логическая единица удерживается на входе микроконтроллера, пока кнопка не нажата.
Обычно сопротивление резистора выбирают 100кОм. Входы CMOS микросхем фактически представляют собой затвор полевого транзистора, сопротивление которого носит емкостной характер, и имеет величину в единицы пикофарад. Если сопротивление подтяжки будет очень большим, то ток, который заряжает входную емкость, может оказаться недостаточным для обеспечения необходимой скорости установки высокого уровня напряжения и его стабильного удержания. Если же сопротивление подтяжки будет очень низким, то это будет дополнительно увеличивать нагрузку на цепи питания при нажатии на кнопку.
Подтягивающий резистор также необходим для предотвращения короткого замыкания между цепями питания при замкнутых контактах кнопки.
Несмотря на то, что при нажатии кнопки на выводе микросхемы считывается логический ноль, а когда кнопка не нажата – единица, такой способ подключения я лично считаю предпочтительнее. Хотя логичнее кажется другое подключение, когда единица считывается при нажатии кнопки.
Прямое включение кнопки. При нажатии микроконтроллер будет считывать логическую единицу. Если кнопка не нажата — то ноль.
И все-таки инвертированное включение кнопки применяется чаще. Рассмотрим причины такого выбора. Предположим, что кнопки выведены на лицевую панель прибора и подключены к печатной плате по средством жгута проводов или гибким шлейфом. Как правило, все элементы конструкции подключают к нулевому потенциалу схемы управления (на землю).
Обратите внимание на состав шлейфов. При прямом включении кнопок шлейф содержит проводники обоих потенциалов питания: плюсового и общего. При инвертированном включении кнопок шлейф содержит только общий провод питания.
При замыкании проводников в шлейфе в результате механического повреждения для прямого включения кнопок произойдет короткое замыкание между шинами питания. Для инвертированного включения кнопки в аналогичном случае замыкание цепей питания не произойдет. И схема управления получит меньше электрических повреждений.
Пожалуй, именно по этой причине я предпочитаю инвертированное включение кнопки, и готов из-за этого терпеть некоторые неудобства при программировании.
Еще одна особенность обработки тактовых кнопок связана с несовершенством их механической конструкции. Сухие контакты реальных кнопок ни когда не замыкаются и не размыкаются мгновенно. При замыкании или размыкании возникает дребезг контактов. Т.к. современные цифровые микросхемы имеют достаточно высокие рабочие частоты, дребезг контактов может быть обработан как многократное повторное срабатывание кнопки.
Самый простой способ борьбы с дребезгом контактов, это подключение параллельно кнопки керамического конденсатора примерно 0,1мкФ. При нажатии конденсатор мгновенно разряжается через замкнутый контакт кнопки на землю, и не мешает ее срабатыванию.
А когда контакты кнопки размыкаются, заряд конденсатора происходит значительно дольше через высокое сопротивление подтягивающего резистора, сглаживая эффект дребезга.
Так как современные микроконтроллеры обладают достаточно высокой производительностью, защиту от дребезга преимущественно выполняют программным способом. К тому же, конденсатор – это дополнительный и весьма дорогостоящий компонент, удаление которого из схемы снижает ее себестоимость и повышает технологичность.
Самым простым программным способом борьбы с дребезгом контактов является увеличение времени между опросами состояния кнопки. Дополнительная пауза между опросам должна превышать длительность переходных процессов. Тогда программа “не заметит” дребезг и проигнорирует любые кратковременные замыкания кнопки.
Также стоит отметить, что большинство современных микроконтроллеров имеют встроенные программно управляемые подтягивающие резисторы. Это решение дополнительно позволяет упростить схему устройства.
Как подключить кнопку к Ардуино
Как подключить тактовую кнопку к цифровым и аналоговым входам на Arduino Uno правильно. Расскажем, как избежать «дребезг контактов», рассмотрим схему подключения одной и нескольких кнопок к плате Ардуино. Рассмотрим функции digitalRead и analogRead в языке программирования C++, которые часто требуется использовать при создании различных проектов на Ардуино для начинающих.
Работа с тактовыми кнопками на Ардуино
Главная проблема использования кнопок для управления Arduino заключается в «дребезге контактов». Дело в том, что механические контакты в тактовых кнопках никогда не замыкаются и размыкаются мгновенно. В течении нескольких миллисекунд происходит многократное замыкание и размыкание контактов — в итоге на микроконтроллер поступает не единичный сигнал, а серия импульсов.
Подключение кнопки к Ардуино и дребезг
Для того, чтобы исключить на микроконтроллере Arduino дребезг кнопки используют различные электрические схемы с триггерами и конденсаторами. Но намного удобнее и проще использовать программный способ борьбы с возможным дребезгом тактовой кнопки — для этого применяют задержку на несколько миллисекунд или используют библиотеку Bounce2.h для борьбы с дребезгом контактов для Arduino.
Подключение кнопки к Ардуино
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- макетная плата;
- 1 светодиод;
- резисторы на 220 Ом и 10 кОм;
- 1 тактовая кнопка;
- провода «папа-папа» и «папа-мама».
Используем цифровые порты на плате для подключения тактовой кнопки и команду digitalRead для считывания данных. Соберите схему, как на рисунке выше и загрузите скетч. Обратите внимание, что при отпущенной кнопке на Pin2 поступает логический «0». С помощью кнопки будем выключать и включать встроенный светодиод, подключенный к цифровому 13 порту на плате микроконтроллера Ардуино.
Скетч подключение кнопки к цифровому входу
Пояснения к коду:
- процедура setup выполняется один раз, используется процедура для конфигурации портов микроконтроллера (назначение режима работы портов);
- процедуры setup и loop должны присутствовать в любой программе (скетче);
- использованные константы: INPUT , OUTPUT , LOW , HIGH , пишутся заглавными буквами, иначе компилятор их не распознает и выдаст ошибку.
Скетч подключения кнопки к аналоговому входу
Можно также сделать подключение кнопок к аналоговому входу Ардуино (обозначены, как Analog In на плате). Принципиальное отличие данной схемы — это использование аналогового порта на микроконтроллере. Для включения и выключения светодиода будем также использовать встроенный светодиод на плате. Переключите тактовую кнопку к аналоговому входу A1 и загрузите в плату следующий скетч.
Пояснения к коду:
- в данном скетче мы используем функцию analogRead для считывания значений с аналогового входа A1 , при этом порт можно использовать, как цифровой;
- значения на аналоговом входе могут отличаться (все зависит от сопротивления резистора в схеме) и могут принимать значения в диапазоне от 0 до 1023.
Заключение. В этом обзоре мы рассмотрели подключение кнопки и светодиода к Ардуино (светодиод можно подключить к 13 пину платы). Более интересное подключение, с использованием режима INPUT_PULLUP для порта, рассмотрено при подключении модуля тактовой кнопки — здесь. Если у вас остались вопросы по данному обзору — оставляйте их в комментариях к этой записи.