Arduino как подключить кнопку без резистора

Как подключить кнопку к Arduino

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

Инструкция по подключению кнопки к Arduino

1 Виды кнопок

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

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

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

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

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

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

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

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

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

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

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

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

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

READ  Jetbalance jb 621 как подключить

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

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

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

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

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

Источник

Arduino.ru

Работа с кнопками. В помощь новичку.

ВСЕМ НЕОФИТАМ, ЖАЖДУЩИМ ЗАДАТЬ ВОПРОС!

ДАННАЯ ТЕМА НЕ ПРЕДНАЗНАЧЕНА ДЛЯ ОБУЧЕНИЯ ВАС ОСНОВАМ ЯЗЫКА И ПРИЕМАМ СОВОКУПЛЕНИЯ ДВУХ И БОЛЕЕ СКЕТЧЕЙ. В ТЕМЕ РАССМАТРИВАЮТСЯ СПОСОБЫ ПОДКЛЮЧЕНИЯ КНОПОК, ПОДАВЛЕНИЕ ДРЕБЕЗГА, ФИКСАЦИЯ СОБЫТИЙ.

ВСЕ ВЫХОДЯЩЕЕ ЗА ОЗНАЧЕННЫЕ РАМКИ К РАБОТЕ С КНОПКАМИ НЕ ОТНОСИТСЯ И ОБСУЖДАЕТСЯ ВО ВНОВЬ СОЗДАННЫХ ИЛИ ПОДХОДЯЩИХ ТЕМАХ.

ОТВЕТЫ НА ОСНОВНЫЕ ВОПРОСЫ, ПО КНОПКАМ, МОЖНО НАЙТИ НА ПЕРВЫХ ПЯТИ СТРАНИЦАХ ТЕМЫ, УЧИТЕСЬ ЧИТАТЬ.

Ардуино и кнопка.

Кнопка – простейшее электромеханическое устройство.
Кнопки бывают двух видов.

1.Кнопки (переключатели) с фиксированным положением.
2.Так называемые тактовые кнопки (которые возвращаются в исходное положение).

В этой статье я расскажу, как правильно подключить кнопку к МК и как работать с ней программно. Так же расскажу, как подключить несколько кнопок к одному пину МК.

Обычно, самый первый раз, кнопку пытаются подключить вот так.
Это НЕ ПРАВИЛЬНОЕ подключение.

Дело в том, что пин МК (в режиме входа) должен иметь заранее известное состояние (1или 0).
В «подвешенном» состоянии будет собирать внешние наводки (статические, электрические и электромагнитные излучения).
Чтобы привести пин в заранее известное состояние и используют подтягивающие резисторы.
Они бывают двух видов, верхние и нижние подтяжки.
Верхние (pull-up) подключаются к плюсу питания и нижние (pull-down) к минусу.
В ардуино есть встроенные подтягивающие резисторы (pull-up) которые можно включить программно, но я не советую их использовать.

ПРАВИЛЬНОЕ подключение кнопки.

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

В итоге, при нажатой кнопке, у нас будет стабильный сигнал (+5в), а при отпущенной кнопке будет стабильный ноль.

Рассмотрим несколько простых программных примеров.

Это самый простой пример. Немного усложним его

Этот пример можно инвертировать. Когда кнопка не жата светодиод горит, когда нажата – нет.

READ  Как подключить фотоаппарат к компьютеру вместо веб камеры

Если удерживать кнопку, то получим мерцание светодиода с частотой заданной функией delay.

А если нам нужно включить что то по удержанию кнопки?

Для этого введем переменную val.

Здесь я использовал простейший «самодельный» таймер.

Рассмотрим пример с более сложным таймером.

Основной плюс этого таймера это то, что он не использует паразитную функцию delay и, соответственно, не тормозит программу.
Очень не советую использовать функцию pulseIn для данных целей (да и вообще не советую).
Потому что эта функция использует все программные таймеры ардуино.
С функцией pulseIn НЕ будут работать
Tone()
Millis()
analogWrite()
Так же не будут работать сервоприводы.

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

Алгоритм такой. Нажали кнопку – загорелся светодиод, удерживаем кнопку – ничего не происходит (светодиод горит). Отпустили кнопку – светодиод горит.
Для того чтобы погасить светодиод нужно повторно нажать кнопку.
Т.е. нажали – горит, отпустили, нажали – не горит.

Можно инвертировать действие вот так

Нажали – ничего, отпустили – горит. Повторно нажали, отпустили – не горит.

Теперь сделаем небольшое меню.
Меню будет содержать четыре режима (можно сколько угодно, но для примера хватит и четырех).
Меню будет управлять двумя светодиодами.
Введем еще одну переменную – regim.

Внутреннй подтягивающий резистор.

В микроконтроллерах ATmega168 и ATmega328 есть внутренние подтяжки. Они имеют номинал 20Ком и включаются программно. Нужно иметь в виду что внутренняя подтяжка «Прижимает» пин только к +5в.

В связи с этим нужно инвертировать логику.

Одна нога кнопки подключается к GND, другая к пину (никаких внешних резисторов не нужно).

Вот простой пример включения внутренней подтяжки.

Делитель напряжения и ЦАП.

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

Данный делитель рассчитывается по формуле

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

Теперь рассмотрим ЦАП на основе делителя напряжения.

Подключение двух кнопок к одному пину.

На этой схеме изображен простой двух канальный резистивный ЦАП.

Рассмотрим некоторые важные моменты.

Резистор R3 является подтягивающим и его номинал не стоит опускать ниже 4.7К.
В то же время R3 является нижним плечом делителя напряжения.

Когда кнопки не нажаты на пине АЦП – лог 0.

Нажатая кнопка К1 образует делитель напряжения с номиналами плеч R1=4.7K, R2=10K.

Считаем по формуле.
5*10/(4.7+10) = 3.4в

READ  Как подключить впн соединение

В этом случае верхнее плечо делителя будет состоять из двух резисторов R1 и R2 включенных параллельно.

Общий номинал параллельно включенных резисторов считаем по формуле

Rобщ = (4.7*3)/(4.7+3) = 1.83K

Считаем выходное напряжение делителя

Напишем простую программу.

Количество каналов ЦАПа может быть сколь угодно большим (и соответственно количество кнопок).
Нужно точно рассчитывать номиналы резисторов. И уделять особенное внимание соотношениям номиналов между собой.

Ну, вот и все (или почти все) о кнопках.

Данная статья была ранее опубликована мной на http://forumdvrobot.ru/forum/3-21-1

Внутренняя подтяжка тянет только вверх. Внешней можно прижать и к земле.

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

Данная статья и примеры программ не являются «Истиной в последней инстанции». Это мой личный опыт и мой личный путь «Проб и ошибок».

Одно из решений «аналоговой клавиатуры», которое можно подредактировать и под вашу схему:

данный код написан под эту схему

как видите количество кнопок задается параметром NUM_KEYS,
а «диапазоны» акуратненько «лежат» в массиве adc_key_val[].

maksim, в приведенной вами схеме не совсем понятно что будет происходить при одновременно нажатых кнопках.

Убирать скобки очень плохо, формула 5*1/1+1=2.5 убивает, а
5*1/(1+1)=2.5 понимается совсем по другому.

>>Убирать скобки очень плохо, формула 5*1/1+1=2.5 убивает, а
5*1/(1+1)=2.5 понимается совсем по другому. Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

С точки зрения новичка прошу рассмотреть пример подключения кнопки с внутренней подтяжкой.

А так же указать как включать внутреннюю подтяжку.

а про это где можно подробнее почитать? Если я правильно понимаю, то это 3,4в на первой кнопке? Как вообще этот диапазон вычисляется или есть какие-то табличные значения?

>>То есть если нажать S4, то S3 и S2 будут игнорироваться. Схема, кстати, взята с коммерческого шилда. Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

>>а про это где можно подробнее почитать? Если я правильно понимаю, то это 3,4в на первой кнопке? Как вообще этот диапазон вычисляется или есть какие-то табличные значения? Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

С точки зрения новичка прошу рассмотреть пример подключения кнопки с внутренней подтяжкой.

А так же указать как включать внутреннюю подтяжку.

Ладно. Считайте это не «посылом в документацию», а рассказом «где это искать, если нужно».

Работат с подтянутой вверх кнопкой, отличается только одним. Теперь не нажатая кнопка это HIGH, а нажатая LOW. То есть значения «инвертировались».

Вот как выглядит в коде зажигание диода по такой кнопке

В реальности ни разу не видел что-бы кто-нибудь так делал, но для «параноиков» приведу «грамотную схему включения».

Но еще раз. Это просто «предупреждение». Это знать нужно, но обычно считают (и я тоже :), что «уж я-то не ошибусь» поэтому «незачем усложнять схему лишним резистором» 😉

Источник

Поделиться с друзьями
Как подключить и установить...
Adblock
detector