Тактовая кнопка схема. Подключение кнопки

Кнопка — всем известное механическое устройство, которое может замыкать и размыкать электрическую цепь по желанию человека. Есть множество видов кнопок, работающих по разным правилам. Например, тактовая кнопка (push button), используемая в этом уроке, замыкает цепь только пока палец давит на неё. Кнопка на размыкание, напротив, разрывает цепь при нажатии.

Затем мы создаем условную функцию, которая при обнаружении нажатия кнопки загорается светодиод. Второй способ управления кнопками. Измените предыдущий код так, чтобы при нажатии кнопки загорелся светодиод, а затем выключите его. Помните о предыдущем состоянии микропереключателя.

Когда кнопки открыты или закрыты, контакты имеют тенденцию вибрировать. Это совершенно механическое явление и может быть устранено программно. Каждая кнопка ведет себя по-разному, время вибрации различно для разных кнопок. Обычно этого достаточно, чтобы реализовать задержку около 50 мс в программе. Если это не помогает, и индикатор продолжает мигать во время включения питания, выключите его соответствующим образом.

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

Тактовые кнопки, можно найти практически в каждом электронном приборе: в клавиатуре компьютера, в телефоне, в пульте от телевизора, и т.д.

Сначала мы создаем переменную, которая содержит статус диода. Мы присваиваем ему высокое значение, которое заставляет его загораться, как только включается питание. Затем мы определяем временную переменную, которая хранит значение 50, которое будет использоваться для программного устранения феномена контактного тряски.

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


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

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

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

Или другой вариант — большие кнопки для экстренной остановки оборудования. Они окрашены в яркие цвета, чтобы привлекать внимание человека. По сути — обычные тактовые кнопки на размыкание, или кнопки с фиксацией.


Это лишь некоторые варианты. Кроме кнопок, в мире электричества есть и другие механизмы, например, тумблеры и рубильники. Все они призваны механически управлять течением тока в цепи.

Каждая из кнопок имеет 4 фута, которые соединены парами. Когда кнопка нажата, ноги закорочены вместе. Если по ошибке такая кнопка поворачивается на 90 градусов, это вызовет вечное короткое замыкание в системе и, таким образом, не будет выполнять свою роль.

Другая кнопка - рычажный переключатель, который имеет 3 фута. Средняя нога является общей ногой, а конечности открыты и закрыты. Изменяя рычаги, мы меняем концы ног на противоположное. В Интернете вы можете найти такие переключатели, которые будут иметь два или три положения переключателя.

1. Подключение

Итак, мы будем работать с самой простой тактовой кнопкой, которую попробуем подключить к Ардуино Уно . Обычно, при работе с беспаечными макетными платами используется кнопка с выводами под пайку. На фото в начале урока видно, что у такой кнопки есть четыре немного загнутых вывода. Есть кнопки и с двумя прямыми выводами, они тоже подходят для наших занятий.

Используйте встроенные подтягивающие резисторы

Последняя большая кнопка на картинке, это ничего, кроме кнопки микропереключателя, встроенной в корпус и подсветку. Принцип работы такой же, как и описанная первая кнопка. Для правильного подключения кнопки используйте резистор, который будет выполнять роль размагничивания. Это означает, что если кнопка нажата на порт, вы получите высокий статус, если вы нажмете эту кнопку, она будет низкой. Если бы мы не использовали резисторы, ситуация была бы в том, что когда вы отпускаете кнопку на порту, вы получаете неопределенное состояние или некоторый шум или нарушение.

На электрических схемах кнопка изображается так:

А вот так выглядит схема контактов в нашей кнопке:

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

Подключение без подтягивания

Поэтому мы можем отпустить установку внешних резисторов. Если мы используем внутреннюю подтяжку, наш макет будет выглядеть очень просто. Макет на испытательной пластине Схема расположения. Если вы не хотите использовать подтягивание, вам нужно поставить резистор на каждую кнопку. Макет будет выглядеть следующим образом.

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

Так кнопка втыкается в макетную плату:


Теперь попробуем собрать на макетной плате самую простую цепь, которая продемонстрирует работу кнопки. Будем зажигать светодиод.


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

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

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

2. Подключение к Ардуино Уно

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

Эта библиотека очень полезна, поскольку вначале мы определяем параметры чтения, а затем достаточно, чтобы прочитать состояние кнопки. Если мы не использовали библиотеку, мы добавили бы задержку для каждой функции, которая считывает состояние кнопки, если кнопка все еще нажата через определенное время. Благодаря этой библиотеке мы не только помогаем нам в нашей работе, но и улучшаем ясность нашего кода, что будет легче проверить, если что-то не так.

Если вы хотите физически удалить контактные колебания, вы должны подумать об использовании, например, емкостных кнопок или полупроводниковых реле. Резисторная лестница представляет собой элемент, состоящий из нескольких идентичных резисторов. Мы можем купить их в готовых случаях или сделать это сами с обычными резисторами.

На этой схеме мы видим уже привычную цепь для . Также видим кнопку, соединенную с выводом Ардуино №3. Здесь может вполне резонно возникнуть вопрос: зачем мы соединили кнопку ещё и с землей, через резистор 10кОм? Чтобы разобраться с этим вопросом, представим что мы подключили кнопку по «наивной» схеме без всяких подтяжек:)

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

Мой пример будет представлен на простой макет, состоящий из диода и трех кнопок. При нажатии первый светодиод мигает один, второй, второй и аналогичный для третьего - три. Запустите схему подключения. Начнем с того, что мы напишем простую программу, которая расскажет вам, какие значения читаются, когда мы нажимаем каждую кнопку.

Здесь между выводом №3 и землей изображен небольшой конденсатор, который способен накапливать заряд. Такая особенность есть у многих микроконтроллеров.

Теперь представим, что мы замыкаем кнопку. Ток начинает бежать от +5В, прямиком в контакт №3, попутно заряжая ёмкость. Ардуино успешно регистрирует нажатие кнопки. Но после того, как мы убираем палец с тактовой кнопки, вопреки нашим ожиданиями, микроконтроллер продолжает считать что кнопка нажата! Еще бы, ведь заряженный конденсатор постепенно отдает накопленный заряд в ногу №3. Это будет продолжаться до тех пор, пока ёмкость не разрядится ниже уровня логической единицы.

Мы устанавливаем потенциометр примерно наполовину. Это позволит нам в будущем для любой калибровки. Конечно, мы можем просто пропустить это. Мы запускаем программу и нажимаем кнопки один за другим. Благодаря этим данным, мы можем начать писать другой код, на этот раз выполнив некоторые действия - в этом случае мигание диода.

И этого будет достаточно, программа может быть изменена в соответствии с нашими потребностями. Конечно, мы можем добавить больше кнопок. Мы добавляем пары резисторных кнопок, отмеченных красным прямоугольником на первом рисунке. На его примере мы узнали о том, как создать проект и как обрабатывать цифровые выходы контроллера.

3. Программа

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

DigitalRead(номер_контакта);

Мы подключим кнопку к цифровому входу контроллера. Диаграмма показана ниже. Остается только кнопка. К разъему подключите контакт кнопки и положительный источник питания. Кнопки можно разделить в зависимости от типа контактов. Пример подключения показан на рисунке ниже.

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

Эта функция возвращает логическое значение, которое Ардуино считала с заданного контакта. Это означает, что если на контакт подать напряжение +5В, то функция вернет истину* . Если контакт соединить с землей, то получим значение ложь . В языке C++, истина и ложь эквивалентны числам 1 и 0 соответственно.

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

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

С помощью этой опции вам больше не нужно писать дополнительный код для обработки вибрации. Просто измерьте максимальное время вибрации, а затем установите более длительное время в поле «Фильтры ввода». Начать по умолчанию в 6. 4 мс. Чтобы повысить прозрачность проекта, мы создадим две таблицы. Созданные таблицы показаны ниже. Каждый тег имеет соответствующий тег.

PinMode(номер_контакта, INPUT);

Наконец, соберем всё вместе, и напишем программу.

Const int led = 2; const int button = 3; int val = 0; void setup(){ pinMode(led, OUTPUT); pinMode(button, INPUT); } void loop(){ val = digitalRead(button); if(val){ for(int i=0; i<3; i++){ digitalWrite(led, HIGH); delay(500); digitalWrite(led, LOW); delay(500); } } }

Загружаем программу на Ардуино Уно, и проверяем работу программы. Если всё сделано правильно, должно получиться как на картинке:

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

Последним этапом проекта является компиляция и программирование драйвера. Сначала вы должны скомпилировать весь проект. Если вы не допустили каких-либо ошибок, вы увидите результат отказа в контрольном окне. Теперь выполните программирование драйвера.

Если вы закончили программирование драйвера и правильно подключили электрический драйвер, проверьте работу всей системы. Вы должны увидеть что-то подобное, как показано на рисунке ниже. Вы видите, что каждый из этих светодиодов горит, то есть цифровой вход и цифровой выход высоки.

Ну вот и всё. Теперь мы можем управлять нашими устройствами при помощи кнопок. Если вы уже прошли урок по , то мы вполне сможем сделать часы с будильником!

Примечания:

* В стандартах TTL логики, истина соответствует напряжению от 2В до 5В, а ложь от 0В до 0.8В

Вам понадобится

  • Arduino;
  • тактовая кнопка;
  • резистор 10 кОм;
  • макетная плата;
  • соединительные провода.

1 Виды кнопок

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

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

Некоторые кнопки после нажатия оставляют проводники соединёнными (фиксирующиеся кнопки ), другие - сразу же после отпускания размыкают цепь (нефиксирующиеся кнопки ).

Также кнопки делят на:

  • нормально разомкнутые ,
  • нормально замкнутые .
Первые при нажатии замыкают цепь, вторые - размыкают.

Сейчас нашёл широкое применение тип кнопок, которые называют «тактовые кнопки» . Тактовые - не от слова «такт», а от слова «тактильный», т.к. нажатие хорошо чувствуется пальцами. Но этот ошибочный термин устоялся, и теперь эти кнопки у нас повсеместно так называют. Это кнопки, которые при нажатии замыкают электрическую цепь, а при отпускании - размыкают, т.е. это нефиксирующиеся, нормально разомкнутые кнопки.

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

Кнопка - очень простое и полезное изобретение, служащее для лучшего взаимодействия человека и техники. Но, как и всё в природе, она не идеальна. Проявляется это в том, что при нажатии на кнопку и при её отпускании возникает т.н. «дребезг» ("bounce" по-английски). Это многократное переключение состояния кнопки за короткий промежуток времени (порядка нескольких миллисекунд), прежде чем она примет установившееся состояние. Это нежелательное явление возникает в момент переключения кнопки из-за упругости материалов кнопки или из-за возникающих при электрическом контакте микроискр.



В следующей статье мы подробно рассмотрим способы борьбы с «дребезгом» при замыкании и размыкании контактов. А пока что рассмотрим варианты подключения кнопки к Arduino.

3 Некорректное подключение кнопки

Чтобы подключить нормально разомкнутую тактовую кнопку к Arduino, можно поступить самым простым способом: один свободный проводник кнопки соединить с питанием или землёй, другой - с цифровым выводом Arduino. Но, вообще говоря, это неправильно. Дело в том, что в моменты, когда кнопка не замкнута, на цифровом выводе Ардуино будут появляться электромагнитные наводки, и из-за этого возможны ложные срабатывания.



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

4 Подключение кнопки по схеме с подтягивающим резистором

Сначала подключим к Arduino кнопку по схеме с подтягивающим резистором. Для этого один контакт кнопки соединим с землёй, второй - с цифровым выходом "2". Цифровой выход "2" также подключим через резистор номиналом 10 кОм к питанию +5 В.



Напишем вот такой скетч для обработки нажатий на кнопку и загрузим в Arduino.

// Задаём номера выводов: const int buttonPin = 2; const int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); } void loop() { int buttonState = digitalRead(buttonPin); // считываем состояние кнопки if (buttonState == HIGH) { digitalWrite(ledPin, HIGH); // зажигаем светодиод при нажатии кнопки } else { digitalWrite(ledPin, LOW); // гасим светодиод при отпускании кнопки } }

Встроенный светодиод на выводе "13" постоянно горит, пока не нажата кнопка. Т.е. на порте "2" Arduino всегда присутствует высокий логический уровень HIGH. Когда нажимаем кнопку, напряжение на "2" порте принимает состояние LOW, и светодиод гаснет.

5 Подключение кнопки по схеме со стягивающим резистором

Теперь соберём схему со стягивающим резистором. Один контакт кнопки соединим с питанием +5 В, второй - с цифровым выходом "2". Цифровой выход "2" подключим через резистор номиналом 10 кОм к земле. Скетч менять не будем.



При включении схемы на цифровом порте "2" Arduino низкий уровень LOW, и светодиод не горит. При нажатии на кнопку на порт "2" поступает высокий уровень HIGH, и светодиод загорается.

Вверх