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

0

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

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

Ардуино кнопка и светодиод ► рассмотрим несколько примеров: включение и выключение светодиода от кнопки, управление яркостью и мигание светодиода Arduino.

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

Расчет параметров схемы

Формулы расчета параметров электрической цепи
НапряжениеСила токаСопротивлениеМощностьРеактивное сопротивление конденсатора
U= I*RI=U/RR=U/IP=Ur*IRc=2*π*£*C(ф);
Rc=314*C(ф)

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

Подбираем резистор

Алгоритмы

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

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

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

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

Избавиться от дребезга контактов можно как аппаратно, так и программно: аппаратно задача решается при помощи RC цепи, то есть резистора (

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

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


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

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

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

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

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

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

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

Без резистора

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

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

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

К платформе следует присоединить 3 провода. Первый прикрепить к 1 из ножек, провести через резистор и заземлить. Следующий присоединить ко второй ножке, провести к Arduino-контакту с 5-Вольтовым напряжением. Последний подсоединить к третьей, не имеющей контактов ни с одной из двух предыдущих, и подвести ко второму цифровому, который станет считывать состояние кнопки.

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

В режиме input-pullup

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

Есть альтернативная версия, в которой вместо обозначенной команды можно использовать пин OUTPUT.

digitalRead()

Функция digitalRead() считывает значение с заданного контакта. В результате ей будет присвоено значение HIGH или LOW, соответственно логические 1 и 0.

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

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

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

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

Принципиальная схема подключения кнопки и светодиода

Соединим 2 цифровой контакт на плате ардуино с синей шиной на макетной плате через резистор 20 кОм. Также соединим один из контактов кнопки с этой же группой контактов на макетной плате.

Второй контакт кнопки соединим с красной шиной макетной платы.

Анод светодиода через резистор 220 Ом соединяем с 9 пином на ардуино, а Катод с землей.

И соединим синюю шину макетной платы с контактом gnd на плате ардуино, а красную с контактом 5в.

Переключение режимов с помощью кнопки

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

Факт нажатия мы определяем с помощью функции digitalRead(). В результате мы получим HIGH (1, TRUE) или LOW(0, FALSE), в зависимости от того, как подключили кнопку. Если мы подключаем кнопку с помощью внутреннего подтягивающего резистора, то нажатие кнопки приведет к появлению на входе уровня 0 (FALSE).

Для хранения информации о нажатии на кнопку можно использовать переменную типа boolean:

boolean keyPressed = digitalRead(PIN_BUTTON)==LOW;

Почему мы используем такую конструкцию, а не сделали так:

boolean keyPressed = digitalRead(PIN_BUTTON);

Все дело в том, что digitalRead() может вернуть HIGH, но оно не будет означать нажатие кнопки. В случае использования схемы с подтягивающим резистором HIGH будет означать, что кнопка, наоборот, не нажата. В первом варианте (digitalRead(PIN_BUTTON)==LOW ) мы сразу сравнили вход с нужным нам значением и определили, что кнопка нажата, хотя и на входе сейчас низкий уровень сигнала. И сохранили в переменную статус кнопки. Старайтесь явно указывать все выполняемые вами логические операции, чтобы делать свой код более прозрачным и избежать лишних глупых ошибок.

Как переключать режимы работы после нажатия кнопки?

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

Логика работы программы очень проста:

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

Как определить нажатие нескольких кнопок?

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

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

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


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

Напишем вот такой скетч для обработки нажатий на кнопку и загрузим в 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, и светодиод гаснет.

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

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

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

Внешний вид макета

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

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

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

Чтобы такого не случилось и нужен так называемый стягивающий резистор (или подтягивающий к земле). При замыкании кнопки ток пойдет по пути наименьшего сопротивления, то есть на вывод №3. А вот как только кнопка будет отжата, паразитная ёмкость мгновенно разрядится на землю, через резистор.

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

В данном скетче мы будем использовать новую функцию analogRead(), которая поможет нам считывать состояние кнопки. Для определения pin Arduino, к которому подключена кнопка как вход, будем использовать INPUT. Код получится в несколько строчек.

Рассмотрим основные строки кода:

Инициализирует пин ардуино как вход. Что позволяет считывать состояние кнопки.

Сохраняем состояние кнопки в переменную.

Проверяем, нажата кнопка или нет. Если нажата, то включаем светодиод.

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

Загружаем код в Arduino UNO.

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

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

Если у вас возникли сложности с загрузкой кода, посмотрите эту статью:

Понравился Урок 7. Подключаем тактовую кнопку к Arduino и управляем светодиодом? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

голоса
Рейтинг статьи
Читать еще:  Как накачать колесо электронасосом на машине
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии