Тактовая кнопка распиновка. Подключение кнопки по схеме с подтягивающим резистором. Подключение к Ардуино Уно

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

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

Кнопки, электрические компоненты

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

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

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

Электрическая схема с кнопками

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

Применение растягивающего и выпадающего сопротивления с помощью кнопок

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


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

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

Электрическая схема с выпадающими кнопками и сопротивлением

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

Электрическая схема с кнопками и сопротивлением подтягивания

Схема будет следующей.

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


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

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

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

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

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

Учебное пособие по прерыванию

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

Преимущества и недостатки использования прерываний

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

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

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

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

Режимы включения прерываний

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

Код, связанный с прерываниями

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

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

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


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


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

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

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

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

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

Если у вас есть какие-либо сомнения, вы хотите сообщить нам свой опыт с перерывами и т.д. оставьте свой комментарий. Использование кнопки для управления светом не кажется слишком сложным. Емкостный сенсорный датчик → Цифровой контакт 2 Релейный модуль → Цифровой контакт 12.

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

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

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

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

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

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

Подключите кнопку без резисторов. Вытяните или вытяните

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

Избегание неопределенного значения в записи

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

3. Программа

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

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

Отображение одного сообщения на экран

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

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

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

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

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

Хотя сначала это может показаться немного сложным, вы скоро увидите, что он действительно прост в использовании и, прежде всего, веселый! Очень скоро вы будете оправдываться, чтобы включить его во все ваши проекты, даже если вам это не нужно. Это можно сделать несколькими способами. Чтобы установить его, загрузите здесь двоичный файл.

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); } } }

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

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

Мы использовали 3 переменные: текущий статус, предыдущий статус и счетчик. Если мы хотим, чтобы действие имело место при активации толкателя, необходимо только изменить условие строки 18 и поместить это другое «если». Кроме того, у нас есть счетчик, который учитывает все изменения состояния, с помощью которых мы можем использовать этот код в кодах или других подобных устройствах.

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

Примечания:

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

Первая программа должна управлять светодиодом с помощью кнопки:

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

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

  • при нажатой кнопке светодиод светится;
  • при отжатой кнопке светодиод не светится.

Подключение кнопки и светодиода к плате Ардуино.

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

У цифрового выхода есть только два состояния высокое и низкое. Высокое состояние соответствует напряжению на выходе порядка 5 В, низкое состояние – 0 В. Выход допускает подключение нагрузки с током до 40 мА.

Когда вывод определен как вход, считав его состояние, можно определить уровень напряжения на входе. При напряжении близком к 5 В (реально более 3 В) будет считано высокое состояние, соответствующее константе HIGH. При напряжении близком к 0 (менее 1,5 В) будет считано низкое состояние, или константа LOW.

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

Светодиод подключается через резистор, ограничивающий ток. Вот типичная схема.

Резистор рассчитывается по формуле I = Uвыхода – Uпадения на светодиоде / R.

Uвыхода = 5 В, Uпадения на светодиоде можно принять равным 1,5 В (более точно указывается в справочнике). Получается, то в нашей схеме ток через светодиод задан на уровне 10 мА.

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

Кнопку подключаем к любому другому выводу, например, 12. Аппаратная часть схемы подключения кнопки должна обеспечивать уровни напряжений 0 В при нажатой кнопке и 5 В при свободной. Это можно сделать простой схемой.



При отжатой кнопке резистор формирует на выводе 5 В, а при нажатой – вход замыкается на землю. Рекомендации по выбору резистора я напишу в заключительном уроке про кнопки. Сейчас предложу другой вариант. Все выводы платы имеют внутри контроллера резисторы, подключенные к 5 В. Их можно программно включать или отключать от выводов. Сопротивление этих резисторов порядка 20-50 кОм. Слишком много для реальных схем, но для нашей программы и кнопки, установленной вблизи контроллера, вполне допустимо.

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



Кнопку можно припаять на проводах к разъему. Я установил ее на макетную плату без пайки. Купил специально для демонстрации уроков.


Функции управления вводом/выводом.

Для работы с цифровыми выводами в системе Ардуино есть 3 встроенные функции. Они позволяют установить режим вывода, считать или установить вывод в определенное состояние. Для определения состояния выводов в этих функциях используются константы HIGH и LOW, которые соответствуют высокому и низкому уровню сигнала.

pinMode(pin, mode)

Устанавливает режим вывода (вход или выход).

Аргументы: pin и mode.

  • pin – номер вывода;
  • mode – режим вывода.

Функция не возвращает ничего.

digitalWrite(pin, value)

Устанавливает состояние выхода (высокое или низкое).

Аргументы pin и value:

  • pin – номер вывода;
  • value – состояние выхода.

Функция не возвращает ничего.

digitalRead(pin)

Считывает состояние входа.

Аргументы: pin - номер вывода.

Возвращает состояние входа:

digitalRead(pin) = LOW низкий уровень на входе
digitalRead(pin) = HIGH высокий уровень на входе

Программа управления светодиодом.

С учетом предыдущего урока теперь у нас есть вся необходимая информация для написания программы. Программа в Ардуино состоит из двух функций setup() и loop. В setup() мы устанавливаем режимы выводов, а в loop() считываем состояние кнопки в переменную buttonState и передаем его на светодиод. По пути инвертируем, т.к. при нажатой кнопке низкое состояние сигнала, а светодиод светится при высоком.

/* Программа scetch_5_1 урока 5
*/

boolean buttonState; // создаем глобальную переменную buttonState

void setup() {
pinMode(13, OUTPUT); //

}

// бесконечный цикл
void loop() {



}

Для хранения промежуточного значения состояния кнопки создаем переменную buttonState с типом boolean. Это логический тип данных. Переменная может принимать одно из двух значений: true (истинно) или false (ложно). В нашем случае - светодиод светится и не светится.

Скопируйте или перепишите код программы в окно Arduino IDE. Загрузите в контроллер и проверьте.

Для сохранения проектов Ардуино я создал папку d:\Arduino Projects\Lessons\Lesson5. В каждом уроке программы называю scetch_5_1, scetch_5_2, … Вы можете поступать также или ввести свою систему сохранения файлов.

Блок программы:

buttonState = digitalRead(12); // считываем состояние 12 входа (кнопки) и записываем в buttonState
buttonState = ! buttonState; // инверсия переменной buttonState
digitalWrite(13, buttonState); // записываем состояние из buttonState на выход 13 (светодиод)

можно записать без использования промежуточной переменной buttonState.

digitalWrite(13, ! digitalRead(12));

В качестве аргумента для функции digitalWrite() выступает функция digitalRead(). Хороший стиль это именно такой вариант. Не требуются дополнительные переменные, меньше текст.

Т.е. функцию можно использовать как аргумент другой функции. Функции можно вызывать из функций.

Другой вариант этой же программы, использующий условный оператор if.

/* Программа scetch_5_2 урока 5
Зажигает светодиод (вывод 13) при нажатии кнопки (вывод 12) */

void setup() {
pinMode(13, OUTPUT); // определяем вывод 13 (светодиод) как выход
pinMode(12, INPUT_PULLUP); // определяем вывод 12 (кнопка) как вход
}

// бесконечный цикл
void loop() {
if (digitalRead(12) == LOW) digitalWrite(13, HIGH);
else digitalWrite(13, LOW);
}

В бесконечном цикле проверяется состояние вывода 12 (кнопка), и если оно низкое (LOW), то на выводе 13 (светодиод) формируется высокое состояние (HIGH). В противном случае состояние светодиода низкое (LOW).

Директива #define.

Во всех примерах для функций ввода/вывода мы указывали аргумент pin, определяющий номер вывода, в виде конкретного числа - константы. Мы помнили, что константа 12 это номер вывода кнопки, а 13 – номер вывода светодиода. Гораздо удобнее работать с символьными именами. Для этого в языке C существует директива, связывающая идентификаторы с константами, выражениями.

Директива #define определяет идентификатор и последовательность символов, которая подставляется вместо идентификатора, каждый раз, когда он встречается в тексте программы.

В общем виде она выглядит так:

#define имя последовательность_символов

Если в наших программах мы напишем:

#define LED_PIN 13 //

то каждый раз, когда в программе встретится имя LED_PIN, при трансляции вместо него будет подставлены символы 13. Функция включения светодиода выглядит так:

digitalWrite(LED_PIN, HIGH);

Окончательный вариант программы с использованием #define.

/* Программа урока 5
Зажигает светодиод (вывод 13) при нажатии кнопки (вывод 12) */

#define LED_PIN 13 // номер вывода светодиода равен 13
#define BUTTON_PIN 12 // номер вывода кнопки равен 12

void setup() {
pinMode(LED_PIN, OUTPUT); // определяем вывод 13 (светодиод) как выход
pinMode(BUTTON_PIN, INPUT_PULLUP); // определяем вывод 12 (кнопка) как вход
}

// бесконечный цикл
void loop() {
digitalWrite(LED_PIN, ! digitalRead(BUTTON_PIN));
}

Обратите внимание, что после директивы #define точка с запятой не ставится, потому что это псевдо оператор. Он не совершает никаких действий. Директива задает константы, поэтому принято имена для нее писать в верхнем регистре с разделителем – нижнее подчеркивание.

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

Вверх