Что такое тактовая кнопка – Тактовые кнопки

Внутри кнопок: sfrolov

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

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

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

В этой кнопке конструкция другая, но принцип такой же.

А вот эта мне понравилась. В ней контакт образуется скользящим пружинным зажимом. Он и контакт обеспечит своей поверхностью, и если что грязь собой сотрет.

Наверно на ней и остановлюсь.

sfrolov.livejournal.com

Тактовая кнопка

Тактовая кнопка — простой, всем известный механизм, замыкающий цепь пока есть давление на толкатель.

 

 

Кнопки с 4 контактами стоит рассматривать, как 2 пары рельс, которые соединяются при нажатии.

 

Эффект дребезга

 

 

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

 

Схема подключения

 

Напрашивается подключение напрямую. Но это наивный, неверный способ.

 

 

Пока кнопка нажата, выходное напряжение Vout = Vcc, но пока она отпущена, Vout ≠ 0. Кнопка и провода в этом случае работают как антенна, и Vout будет «шуметь», принимая случайные значения «из воздуха».

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

 

Схема со стягивающим резистором

 

 

Схема с подтягивающим резистором

 

С оригиналом статьи вы можете ознакомиться на сайте Amperka.ru

virtuallab.by

Кнопка (Troyka-модуль) [Амперка / Вики]

Модуль тактовой кнопки — самый простой элемент управления для вашего проекта. Вам не придётся возиться с пайкой и беспокоиться о подтягивающем резисторе — он уже присутствует на модуле.

Подключение и настройка

Кнопка — это простой цифровой датчик. Пока кнопка не зажата, датчик отдаёт логическую единицу, когда кнопка зажата — логический ноль.

Кнопка (Troyka-модуль) общается с управляющей платой по трём проводам.

Подключение Arduino или Iskra JS упростит Troyka Shield.
Если хотите оставить минимум проводов —
воспользуйтесь Troyka Slot Shield.

Примеры работы

Пример работы для Arduino

В качестве примера выведем в Serial-порт текущее состояние кнопки и будем обновлять его каждые 100 миллисекунд.

button.ino
#define BUTTON_PIN  4
 
void setup()
{
  // открываем монитор Serial-порта
  Serial.begin(9600);
  // настраиваем пин в режим входа
  pinMode(BUTTON_PIN, INPUT);
}
 
void loop()
{
  // считываем состояние пина
  int buttonState = digitalRead(BUTTON_PIN);
  // выводим в Serial-порт
  Serial.println(buttonState);
  delay(100);
}

В результате вы увидите бегущие единицы, а как только нажмёте на кнопку они сменятся нулями.

Пример программы для Iskra JS

Поймаем нажатие кнопки с помощью библиотеки для Iskra JS.

button.js
var myButton = require('@amperka/button')
  .connect(P4, {
  });
 
myButton.on('press', function() {
  console.log("Button is press");
});

Что то пошло не так

Элементы платы

Тактовая кнопка

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

Подтягивающий резистор

Пока кнопка нажата, выходное напряжение на сигнальном пине S = LOW. Когда кнопка отпущена, провода работают как антенна и набирают наведённый сигнал — на пине S появляются «шумы». Эти шумы легко устранить, добавив в цепь резистор на 10 кОм.

Контакты подключения 3-проводного шлейфа

  • Земля (G) — чёрный провод. Соедините с пином GND микроконтроллера.

  • Питание (V) — красный провод. Соедините с пином 5V микроконтроллера.

  • Сигнальный (S) — жёлтый провод. Подключите к любому цифровому пину микроконтроллера.

Характеристики

  • Сопротивление изолятора кнопки: 100 МОм

  • Рабочий ток кнопки: 50 мА

  • Сопротивление подтягивающего резистора: 10 кОм

  • Рабочее напряжение: 12 В

  • Диаметр колпачка: 11,8 мм

  • Габариты: 25,4×25,4 мм

Ресурсы

wiki.amperka.ru

Эксперимент 10. Кнопочный переключатель [Амперка / Вики]

Список деталей для эксперимента

Для дополнительного задания

  • еще 1 кнопка

  • еще 2 провода

Принципиальная схема

Схема на макетке

Обратите внимание

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

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

Скетч

p100_led_toggle.ino
#define BUTTON_PIN  3
#define LED_PIN     13
 
boolean buttonWasUp = true;  // была ли кнопка отпущена?
boolean ledEnabled = false;  // включен ли свет?
 
void setup()
{
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
}
 
void loop()
{
  // определить момент «клика» несколько сложнее, чем факт того,
  // что кнопка сейчас просто нажата. Для определения клика мы
  // сначала понимаем, отпущена ли кнопка прямо сейчас...
  boolean buttonIsUp = digitalRead(BUTTON_PIN);
 
  // ...если «кнопка была отпущена и (&&) не отпущена сейчас»...
  if (buttonWasUp && !buttonIsUp) {
    // ...может это «клик», а может и ложный сигнал (дребезг),
    // возникающий в момент замыкания/размыкания пластин кнопки,
    // поэтому даём кнопке полностью «успокоиться»...
    delay(10);
    // ...и считываем сигнал снова
    buttonIsUp = digitalRead(BUTTON_PIN);
    if (!buttonIsUp) {  // если она всё ещё нажата...
      // ...это клик! Переворачиваем сигнал светодиода
      ledEnabled = !ledEnabled;
      digitalWrite(LED_PIN, ledEnabled);
    }
  }
 
  // запоминаем последнее состояние кнопки для новой итерации
  buttonWasUp = buttonIsUp;
}

Пояснения к коду

  • Поскольку мы сконфигурировали вход кнопки как INPUT_PULLUP, при нажатии на кнопку на данном входе мы будем получать 0. Поэтому мы получим значение true («истина») в булевой переменной buttonIsUp («кнопка отпущена»), когда кнопка отпущена.

  • Логический оператор && («и») возвращает значение «истина» только в случае истинности обоих его операндов. Взглянем на так называемую таблицу истинности для выражения buttonWasUp && !buttonIsUp («кнопка была отпущена и кнопка не отпущена»):

buttonWasUp buttonIsUp !buttonIsUp buttonWasUp && !buttonIsUp
0 0 1 0
0 1 0 0
1 0 1 1
1 1 0 0

Здесь рассмотрены все возможные сочетания предыдущего и текущего состояний кнопки и мы видим, что наш условный оператор if сработает только в случае, когда кнопка нажата только что: предыдущее состояние 1 («была отпущена»), а текущее 0 («не отпущена»).

  • Через 10 миллисекунд мы проверяем еще раз, нажата ли кнопка: этот интервал больше, чем длительность «дребезга», но меньше, чем время, за которое человек успел бы дважды нажать на кнопку. Если кнопка всё еще нажата, значит, это был не дребезг.

  • Мы передаем в digitalWrite не конкретное значение HIGH или LOW, а просто булеву переменную ledEnabled. В зависимости от того, какое значение было для нее вычислено, светодиод будет зажигаться или гаситься.

  • Последняя инструкция в buttonWasUp = buttonIsUp сохраняет текущее состояние кнопки в переменную предыдущего состояния, ведь на следующей итерации loop текущее состояние уже станет историей.

Вопросы для проверки себя

  1. В каком случае оператор && возвращает значение «истина»?

  2. Что такое «дребезг»?

  3. Как мы с ним боремся в программе?

  4. Как можно избежать явного указания значения уровня напряжения при вызове digitalWrite?

Задания для самостоятельного решения

wiki.amperka.ru

Тактильные выключатели, или сверхбюджетный ремонт любимой мышки. Микрообзор.

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

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

пришли в пупырчатом конверте, пакетик с кнопками завернут в пупырку. выглядят 100 кнопок так:

мышка выглядит так:

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

внутри

не для слабонервных

отличия кнопок (родная справа, уже разобрана — ранее я чистил внутри, чтобы хоть как-то заработало):

результат:

что имеем в итоге? мышка работает как новая 😉 сколько у нас в радиолавках стоят такие микрики — страшно вспоминать. мне же ремонт обошелся в 1 цент и минут 15 времени на разборку/сборку/чистку/пайку. кнопка не совсем такая как нужно — я сам дурак, но тем не менее вполне встала на место и работает. по ощущениям усилие нажатия существенно выше, что непривычно, но скорее хорошо чем плохо с моей точки зрения — меньше будет случайных нажатий при вращении колеса, что бывало со старой кнопкой. клик четкий и достаточно громкий — но у данного типа кнопок он ИМХО у всех громкий.

UPD: к вопросу о тактовости и тактильности. вот ссылка на каталог mouser. достаточно вроде авторитетный источник? как видим, tactile — оригинальное название класса продуктов. а tact switch — всего лишь ™. тактильную кнопку производители противопоставляют линейной, то есть у которой не слышно момент срабатывания. это вот например 6-ногий переключатель мелкий берем и достаем из него фиксатор. и он начинает работать без фиксации. вот это и есть линейный свитч. и тактильный — это его противоположность с отчетливым кликом в момент срабатывания.

mysku.ru

Кнопка (техника) — Википедия

Материал из Википедии — свободной энциклопедии

Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 24 августа 2015;
проверки требуют 8 правок.
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 24 августа 2015;
проверки требуют 8 правок.

У этого термина существуют и другие значения, см. Кнопка.

Кнопка, не смонтированная в аппаратуру

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

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

Замыкание (размыкание) контак

ru.wikipedia.org

Обработка нажатий тактовой кнопки. » Хабстаб

Обычно первая программа программиста — выводит на экран строку “Hello word”, а эмбеддер мигает светодиодом, может ещё и кнопку прикрутить и с её помощью изменять состояние светодиода. Вот как раз про кнопку и хотел рассказать, обычно кнопку, которая что-либо переключает, называют тактовой кнопкой и подключают её по одной из схем, изображённых ниже.

На двух верхних схемах подтягивающие резисторы не изображены, но этот не значит, что их нет, просто они находятся внутри микросхемы.

Но гораздо более интересный вопрос заключается в том, как опрашивать кнопку, чтобы не пропускать нажатия? Вариант первый — в цикле опрашивать вывод, к которому подключена кнопка, этот способ будет работать пока программа небольших размеров (вкл-выкл светодиод), но по мере разрастания программы начнут пропускаться нажатия. Второй вариант, это настроить таймер, чтобы он переполнялся каждые 30 ms, а по переполнению возникало прерывание и в нём опрашивались выводы, к которым подключены кнопки, ну или кнопка. Почему время опроса 30 ms? Дело в том что кнопка подвержена дребезгу, а такой временной интервал между опросами, позволяет его не чувствовать, давайте рассмотрим этот момент подробнее.


Стрелки на картинке — это моменты возникновения прерываний, на верхней картинке изображен самый простой вариант развития событий, за счёт паузы между опросами, мы проскакиваем дребезг.

На средней картинке прерывание возникает в момент дребезга и как-будто бы кнопка не была нажата, но нас это не смущает, при следующем опросе кнопки фиксируем нажатие.

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

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

Eщё можно попробовать реализовать двойное нажатие, и здесь мне видется два варианта, первый — после того как отпустили кнопку запускаем таймер и определённый промежуток времени ждём второго нажатия, если оно произошло, то фиксируем double_click. Второй способ — вести лог нажатий, то есть если кнопка была нажата и отпущена, то в нашей переменной будет храниться 0b00000010, если удерживается в течение 3 опросов, то 0b00000111, реализовать это просто: в прерывании сдвигаем значение переменной на одну позицию влево и в последний разряд записываем текущее состояние. Потом экспериментально(быстро нажимая два раза на кнопку) находим несколько значений переменной при двойном нажатии, например, у нас получилось 0b00110011, записываем это значение в double_click, теперь, для того чтобы определить двойное нажатие сравниваем значение нашей переменной с double_click. Первый вариант точно работает, а второй — просто мысли вслух.

hubstub.ru