Ардуино: кнопки

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

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

button_6

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

button_5

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

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

button_4

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

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

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

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

button_sh_2

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

button_sh

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

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

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

button_схема

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

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

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

ledx1&buttonx1_схема

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

button_sh_3

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

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

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

3. Программа

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

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

Эта функция возвращает логическое значение, которое Ардуино считала с заданного контакта. Это означает, что если на контакт подать напряжение +5В, то функция вернет истину*. Если контакт соединить с землей, то получим значение ложь. В языке C++, истина и ложь эквивалентны числам 1 и 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 );
        }
    } 
}

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

button_led_300

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

Примечания:

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


Изменено:

Ардуино: кнопки: 3 комментария

    • for( int i=0; i<3; i++ ){
      digitalWrite( led, HIGH );
      delay( 500 );
      digitalWrite( led, LOW );
      delay( 500 );
      }
      Это цикл. Означает, что всё, что находится между {…} повторится 3 раза

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *