Кнопка ардуино проекты

Arduino и кнопка

Описание

Кнопка – самый базовый элемент ввода данных в микроконтроллер. Функционально кнопка замыкает контакт при нажатии, что может быть использовано для передачи через неё электрического сигнала на пин МК. МК читает значение пина и таким образом понимает, нажата кнопка или нет.

Важный момент: кнопки из набора могут использоваться только для подачи напряжения на пины МК или логические входы некоторых модулей, то есть передавать чисто логический сигнал. Коммутировать относительно мощную (моторы, лампочки, вентиляторы), а также высоковольтную нагрузку с их помощью нельзя!

Работа с пинами и ручной опрос кнопки относятся к базовым понятиям и очень подробно разобраны в уроках:

Подключение к МК

Кнопка может быть подключена на любой цифровой пин (в случае Arduino NANO – D0-D13, A0-A5) и опрашиваться как цифровое значение при помощи digitalRead(pin) . Также можно работать на аналоговых пинах с аналоговой величиной, но это не рационально. Так как напряжение на цифровом пине должно быть точно определено, при подключении кнопки обязательно осуществляется “подтяжка” пина к противоположному от кнопки значению, подробнее об этом см. в уроке. Мы всегда будем подключать кнопку на GND, а пин подтягивать встроенной подтяжкой при помощи pinMode(pin, INPUT_PULLUP) . Пример подключения двух кнопок на макетке:

Кнопки из набора не очень приспособлены для подключения на макетной плате: у них очень широкие изогнутые ножки, которые туго входят в отверстия. Можно выпрямить их, а затем скрутить на 90 градусов при помощи пинцета. Так они не будут излишне растягивать контакты платы. Вторую пару ножек можно отогнуть или откусить кусачками.


Подключение к модулям

Кнопка может быть использована для управления модулями с логическим входом: реле, транзистор и другим подобным. Рассмотрим подключение при питании от сетевого адаптера:

Библиотеки

С кнопкой можно работать без библиотек, просто опрашивая пин, основные алгоритмы подробно разобраны в уроках по ссылкам выше. Но для удобства можно использовать библиотеки, предоставляющие удобные функции для расширенного опроса кнопки (клик, несколько кликов, удержание и так далее):

В примерах на этом сайте мы будем использовать EncButton как самую лёгкую и универсальную, также она позволяет работать с энкодером и энкодером с кнопкой. Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию EncButton. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.

Источник

Работа с кнопками

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

  • С фиксацией – кнопка остаётся нажатой после отпускания, без фиксации – отключается обратно.
  • Нормально разомкнутая (Normal Open, NO) – при нажатии замыкает контакты. Нормально замкнутая (Normal Closed, NC) – при нажатии размыкает контакты.
  • Тактовые кнопки – замыкают или размыкают контакт. У обычных тактовых кнопок ноги соединены вдоль через корпус (см. картинку ниже). Переключатели – обычно имеют три контакта, общий COM, нормально открытый NO и нормально закрытый NC. При отпущенной кнопке замкнута цепь COM-NC, при нажатой замыкается COM-NO.

Подключение и подтяжка

Из урока про цифровые пины вы помните, что микроконтроллер может считывать напряжение со своей ноги. Соответственно кнопка может подать на пин тот уровень, к которому подключена её вторая нога. В том же уроке мы обсуждали, что не подключенный никуда цифровой пин принимает наводки из воздуха, и считанное с него значение будет практически случайным. То есть подключив к пину 5V (сигнал высокого уровня) через кнопку, мы ничего не добьёмся: при нажатой кнопке на пине будет считываться четкий сигнал высокого уровня, а при отпущенной – случайное значение. Для решения этой проблемы существует такое понятие, как подтяжка (pull) пина. Подтяжка выполняется к земле (pull down) или питанию (pull up) микроконтроллера при помощи резистора. Подтяжка выполняется противоположно принимаемому сигналу, т.е. если нужно ловить высокий сигнал, подтяжка выполняется к земле, если ловить нужно сигнал земли – подтяжка выполняется к питанию. Вот два варианта подключения кнопки, с подтяжкой к VCC и GND соответственно: Как выбирается сопротивление резистора? Тут всё очень просто: при нажатии на кнопку через резистор потечёт ток, так как в любом случае замыкается цепь питание-земля. Чем выше ток, больше потери энергии и нагрев резистора, а это никому не нужно, поэтому сопротивление резистора подтяжки обычно выбирается в диапазоне 5-50 кОм. Если ставить больше – подтяжка может не обеспечить стабильный уровень сигнала на пине, а если ставить меньше – будут больше потери энергии в нагрев резистора: при сопротивлении в 1 ком через него потечёт ток величиной 5 В/1000 Ом = 5 мА, для сравнения плата Ардуино с МК в активном режиме потребляет 20-22 мА. Чаще всего для подтяжки используется резистор на 10 кОм. Как вы помните из урока о цифровых пинах, у МК AVR есть встроенные резисторы для всех GPIO, эти резисторы подключены к питанию (к VCC), то есть буквально дублируют первую схему из этого урока и позволяют не использовать внешний резистор. У микроконтроллеров другой архитектуры бывает подтяжка к GND, или вообще может не быть внутренней подтяжки. При использовании подтяжки к питанию мы получим инвертированный сигнал – функция digitalRead() вернёт 1 при отпущенной кнопке, и 0 при нажатой (при использовании нормально-разомкнутой кнопки). Давайте подключим кнопку на пин D3 (и GND):

Алгоритмы

Отработка нажатия

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

Дребезг контактов

Кнопка не идеальна, и контакт замыкается не сразу, какое-то время он “дребезжит”. Прогоняя данный алгоритм, система опрашивает кнопку и условия приблизительно за 6 мкс, то есть кнопка опрашивается 166’666 раз в секунду! Этого достаточно, чтобы получить несколько тысяч ложных срабатываний. Избавиться от дребезга контактов можно как аппаратно, так и программно: аппаратно задача решается при помощи RC цепи, то есть резистора (

1-10k) и конденсатора (

100nF). Выглядит это следующим образом:

Программно можно ввести простейший таймер нажатия, основанный на millis() , время гашения дребезга примем 100 миллисекунд. Вот так будет выглядеть код:

Рекомендуется конечно же использовать аппаратный способ, так как он не нагружает ядро лишними расчетами. В 99.99% проектов будет достаточно программного антидребезга, так то смело используйте конструкцию с millis() .

“Импульсное” удержание

В устройствах с управлением кнопкой очень часто бывает нужна возможность изменения значения как однократно кликом по кнопке, так и “автоматически” с тем же шагом – при удержании. Такой вариант реализуется очень просто, добавлением ещё одного условия в наш предыдущий алгоритм, а именно: если кнопка была нажата, но ещё не отпущена, и прошло времени больше, чем задано – условие вернёт true . В примере ниже периодичность “нажатий” при удержании настроена на 500 миллисекунд (2 раза в секунду):

Пользоваться таким кодом напрямую будет неудобно, поэтому можно “обернуть” его в класс (читай урок про классы и урок про написание библиотек).

Простейший класс кнопки

Вот так предыдущий пример можно сделать классом (мы делали это вот в этом уроке), положить его в отдельный файл (button.h) и пользоваться:

Другие возможности кнопки

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

  • Работа с нормально замкнутыми и нормально разомкнутыми кнопками
  • Работа с подключением PULL_UP и PULL_DOWN Опрос кнопки с программным антидребезгом контактов (настраиваемое время)
  • Отработка нажатия, удерживания, отпускания, клика по кнопке (+ настройка таймаутов)
  • Отработка одиночного, двойного и тройного нажатия (вынесено отдельно)
  • Отработка любого количества нажатий кнопки (функция возвращает количество нажатий)
  • Функция изменения значения переменной с заданным шагом и заданным интервалом по времени
  • Возможность работы с “виртуальными” кнопками (все возможности библиотеки используются для матричных и резистивных клавиатур)

Подробное описание библиотеки можно почитать в заголовочном файле на странице библиотеки, также там есть много примеров.

Аналоговые клавиатуры

Аналоговые клавиатуры – достаточно глубокая тема, достойная отдельного урока (у меня его пока что нет). Максимально подробный урок-исследование можно посмотреть на сайте Codius.

Видео


Источник

Arduino и сенсорная кнопка

Описание

Сенсорная кнопка, она же сенсорная панель или просто сенсорный модуль – довольно интересная замена обычной кнопке. Плата основана на микросхеме TTP223, снабжена светодиодом-индикатором нажатия, антенной (площадка с надписью TOUCH), двумя перемычками для настройки и пинами для подключения. Основные характеристики:

  • Напряжение питания: 2.5-5.5V
  • Потребляемый ток при 5V (без светодиода): 11 мкА “холостой”, 15 мкА “нажат”
  • Потребляемый ток при 3.3V (без светодиода): 7 мкА “холостой”, 9 мкА “нажат”
  • Заявленный ток в режиме сна: 1.5-3 мкА
  • Расстояние срабатывания: около 5 мм на воздухе, также работает через неметаллы (пластик, дерево, картон и т.д.)
  • Максимальный ток цифрового выхода: 8 мА
  • Режим работы по умолчанию: кнопка без фиксации, сигнал при нажатии 0 (HIGH)

Настройки на плате:

  • Чувствительность можно настраивать (понижать) конденсатором 0-50 пФ (корпус 0805), место для него в правом верхнем углу платы (на верхнем фото справа)
  • Запаять перемычку А: сигнал при нажатии 0, при отпускании – 1
  • Запаять перемычку B: режим переключателя (кнопка с фиксацией)
  • Автоматическая калибровка: если удерживать кнопку “нажатой” в одном положении, через несколько секунд она перестанет быть нажатой (откалибруется на это значение)
  • Через 12 секунд неактивности включается режим сна (пониженного потребления), но не на всех моделях чипов

Подключение

Подключается к питанию и любому цифровому пину. Для Wemos питание подключаем к 3.3V

Использование

Сенсорная кнопка является полным аналогом обычной кнопки, см. документацию на кнопку на сайте набора.

Источник

Подключение кнопки к Arduino. GyverButton v3.8

ОБНОВЛЕНИЯ

  • v3.6: добавлен отдельный класс для работы с аналоговыми клавиатурами, см пример analogKeyboardG
  • v3.7: исправления от Dryundel:
    • Любой таймаут удержания
    • Single, Double и Triple теперь не мешают hasClicks и getClicks и работают совместно
    • isStep() тоже теперь ничего не мешает и он работает более корректно
  • v3.8: исправления от Dryundel

ТЕОРИЯ

На сайте есть отдельный подробный урок по работе с кнопками.

Кнопка – простейший орган управления микроконтроллером. Подключить кнопку к Arduino очень просто, но нужно помнить, что пин должен иметь два стабильных состояния – высокое и низкое, GND или VCC. Для этого пин кнопки подтягивают резистором

10 кОм противоположно подключению кнопки, т.е. если кнопка подключена второй ногой к GND, пин подтягивают к VCC, и наоборот.

Микроконтроллер имеет “встроенную” подтяжку ног к VCC, что даёт возможность подключать кнопку только к GND и пину, но режим работы пина нужно выбрать INPUT_PULLUP. Я, например, всегда подключаю отладочную кнопку на D3 вот таким образом:

Также можно подключить несколько кнопок к аналоговому пину, получится так называемая аналоговая клавиатура. Значение функции analogRead() будет зависеть от нажатой кнопки.

БИБЛИОТЕКА

GyverButton v3.8

Для удобной и многофункциональной работы с кнопкой я написал библиотеку GyverButton. Что она умеет:

  • Работа с нормально замкнутыми и нормально разомкнутыми кнопками
  • Работа с подключением PULL_UP и PULL_DOWN Опрос кнопки с программным антидребезгом контактов (настраиваемое время)
  • Отработка нажатия, удерживания, отпускания, клика по кнопке (+ настройка таймаутов)
  • Отработка одиночного, двойного и тройного нажатия (вынесено отдельно)
  • Отработка любого количества нажатий кнопки (функция возвращает количество нажатий)
  • Функция изменения значения переменной с заданным шагом и заданным интервалом по времени
  • Возможность работы с “виртуальными” кнопками (все возможности библиотеки используются для матричных и резистивных клавиатур)

Поддерживаемые платформы: все Arduino (используются стандартные Wiring-функции)

Версия 3.5: значительно увеличена производительность для AVR Ardiuno плат

Источник

Adblock
detector