Подключение кнопки к ардуино
Кнопка (или кнопочный переключатель) – самый простой и доступный из всех видов датчиков. Нажав на нее, вы подаете контроллеру сигнал, который затем приводит к каким-то действиям: включаются светодиоды, издаются звуки, запускаются моторы. В своей жизни мы часто встречаемся с разными выключателями и хорошо знакомы с этим устройством.
Тактовые кнопки и кнопки-переключатели
Как обычно, начинаем раздел с простых вещей, интересных только начинающим. Если вы владеете азами и хотите узнать о различных вариантах подключения кнопки к ардуино – можете пропустить этот параграф.
Что такое кнопка? По сути, это достаточно простое устройство, замыкающее и размыкающее электрическую сеть. Выполнять это замыкание/размыкание можно в разных режимах, при этому фиксировать или не фиксировать свое положение. Соответственно, все кнопки можно поделить на две большие группы:
- Кнопки переключатели с фиксацией. Они возвращаются в исходное состояние после того, как их отпустили. При в зависимости от начального состояния разделяют на нормально-замкнутые и нормально-разомкнутые кнопки.
- Кнопки без фиксации (тактовые кнопки). Они фиксируются и остаются в том положении, в котором их оставили.
Вариантов различных кнопок великое множество, это действительно один из самых распространенных видов электронных компонентов.
Кнопки ардуино для простых проектов
В наших проектах мы будем работать с очень простыми тактовыми кнопками с 4 ножками, которые идут практически в любом наборе ардуино. Кнопка представляет собой переключатель с двумя парами контактов. Контакты в одной паре соединены между собой, поэтому больше одного выключателя в схеме реализовать не удастся, но вы можете одновременно управлять двумя параллельными сегментами, это бывает полезно.
В зависимости от ситуации, вы можете создавать как схемы с нормально замкнутыми, так и с нормально разомкнутыми контактами – для этого нужно будет только соответствующим образом выполнить соединение в схеме.
Для удобства работы в комплекте с тактовой кнопкой обычно идет пластмассовый колпачок какого-то цвета, он достаточно очевидно надевается на кнопку и придает проекту менее хакерский вид.
Радиоуправляемый выключатель своими руками. Часть 3 — Софт выключателя
В предыдущих постах мы спроектировали, сделали и всесторонне протестировали блок двухканального радиоуправляемого выключателя.
Но до сих пор это была «бездушная железка», которая несмотря на всю свою потенциальную мощь, заложенную в МК, — ничего не умеет.
В общем-то, наше основное устройство (если не рассматривать подключение радиомодуля) — нисколько не сложнее самой обычной Ардуинки, к которой подключено две кнопки и пара светодиодов (в результирующем устройстве — светодиоды заменены на транзисторные ключи, управляющие релюшками, но суть это не меняет).
- нет возможности получить диагностические сообщения в «мониторе порта»,
- отсутствует визуальное подтверждение, какое из реле и в каком состоянии находится и т.п.
Макет
Итак, чтобы получить «удобную» среду для подготовки нашего скетча, возьмем беспаечную макетку, любую ардуино-совместимую плату (в моем случае это cArduino Nano), две тактовые кнопки, два светодиода (с токоограничительными резисторами) и несколько перемычек:
Собираем макет, согласно принципиальной схемы из первого поста.
- Кнопку для первого канала подключаем между пином A1 и «землей» (GND),
- Кнопку второго канала — A0 и GND.
- Светодиоды (индикаторы работы соответствующих транзисторных ключей и реле в радиовыключателе) подключаем к D3 и D4, соответственно.
В дальнейшем нужно будет этот скетч загрузить с помощью программатора в финальное устройство без переделок.
Перед началом разработки следует зафиксировать базовые функции, которые хотелось бы реализовать.
Желаемый функционал
Естественно, этот список «хотелок» находится в голове еще перед началом работы над проектом, сейчас просто сформулирую.
Базовые функции
- По краткому нажатию включать/выключать соответствующий канал нагрузки (канал 1 — свет, канал 2 — вентиляция).
- По длинному нажатию (более 2 секунд) — фиксировать факт такого нажатия («взводить флаг»), но пока ничего не делать дополнительно.
- Если свет включен более, чем 1,5 минуты — автоматически включить вытяжку (к примеру, кто-то пошел в душ и забыл включить вентиляцию).
- Если были включены оба канала и первый канал выключается, автоматически выключить второй канал через 10 минут.
- В случае, если любую нагрузку включили, но забыли выключить — автоматически выключить (у каждого канала — свое время автовыключения: 60 и 10 минут соответственно).
Радиоуправление
- Команды включения/выключения, поступившие по радиоканалу должны отрабатываться так, как если бы физически нажимались кнопки выключателя (т.е. полное сохранение базовой логики).
- Через радиоканал нужно иметь возможность изменять все временные параметры работы выключателя.
- Временные параметры работы включателя должны храниться в энергонезависимой памяти (чтобы после каждого выключения электричества не приходилось «переучивать» модуль).
- Все параметры (текущее состояние, флаги «длинного нажатия», временные) должны быть доступны по радиоканалу как по запросу (ответ на запрос), так и на регулярной основе (раз в 15 секунд — «флуд» в эфир с текущими значениями параметров).
Программирование
- Сейчас каналов два, но в дальнейшем их может быть больше/меньше и код должен быть таким, чтобы это можно было просто корректировать (без существенного переписывания).
- Устройство встраиваемое и в случае какого-либо сбоя доставать его из стены крайне проблематично.
Для хранения параметров канала я создал следующую структуру:
Теперь уже можно написать несложный скетч.
В функции setup() проводим всю необходимую инициализацию и взводим «сторожевую собаку».
- Работаем с кнопками (функция button_read()).
- Отрабатываем автовыключение (autoOff()).
- Реализуем дополнительную логику работы (chkLogic()).
- Сбрасываем сторожевой таймер (wdt_reset()).
Базовые функции работают ровно так, как хотелось.
Короткие нажатия кнопок включают соответствующие светодиоды, доп.логика срабатывает. По длинному нажатию любой кнопки — на одну секунду зажигается встроенный светодиод (D13) на ардуино.
Теперь можно реализовывать и беспроводные функции.
Для этого обратимся к одному из моих ранних постов: Беспроводные коммуникации «умного дома».
Основные принципы, которые я там описывал — выдержали проверку временем и претерпели очень незначительные изменения.
Для работы с параметрами подойдет структура:
Для передаваемых данных буду использовать следующую структуру:
Согласно вышесказанного, мой модуль будет описываться следующим образом:
Видно, что все ключевые параметры, описывающие текущее состояние и временные параметры, присутствуют.
Собственно, теперь осталось прошить наш модуль.
Прошил, проверил работу — все ок, но обнаружилось, что в «чистом» МК все байты EEPROM установлены в 255, что дает соответствующие задержки.
По коду, который приведен выше, видно, что установка всех временных параметров производится только через радиоканал. Но про «управляющий модуль» я еще ничего не написал — поэтому надо как-то «изолированно» решить эту проблему.
Для этого можно воспользоваться примерами из библиотеки EEPROM и прямо из них прописать первичные (более актуальные) значения в соответствующие ячейки энергонезависимой памяти.
Последующая проверка показала, что теперь все работает как раз так, как хотелось.
Теперь устройство самодостаточно и готово выполнять свою основную функцию (даже без радиоканала). Можно монтировать.
Установка модуля
Радиоуправляемый модуль будет монтироваться внутрь стены из гипсокартона — поэтому выбрал подходящий корпус (чтобы в него влез собственно модуль и блок питания для него и чтобы этот корпус можно было без проблем пропихнуть в отверстие для установки монтажной коробки).
Плату блока питания взял там же, где и в прошлый раз — распилил блок питания для iPhone. В принципе, можно сделать конденсаторный блок питания или поискать уже готовые варианты (например, тут).
Получилось как-то так (тут уже все подключено — проводил последние тесты перед монтажом в стену):
Корпус оказался несколько великоват, но имеющийся в хозяйстве более мелкий — не подошел.
Правильнее было бы, конечно, сначала выбрать конкретный корпус и делать под него, но у меня не было особых ограничений на размер, поэтому «как получилось».
- Обесточиваем соответствующую цепь освещения.
- Демонтируем имеющийся выключатель (не забываем промаркировать, какие пары идут на свет, а какие — на вытяжку).
- Снимаем монтажную коробку
- Подключаем радиовыключатель к соответствующим проводам (попутно избавляясь от «скруток», которые оставили «добрые строители»).
- Аккуратно заталкиваем все провода и радиовыключатель в промежуток между листами гипсокартона (я решил расположить модуль выше выключателя, чтобы его было проще достать при необходимости).
- Выводим провода, к которым будем подключать кнопочный выключатель в отверстие для установки монтажной коробки (специально взял принципиально отличающийся от остальной проводки кабель — МГТФ, чтобы в случае чего электрику было понятно, что тут «что-то странное» и с этим надо сначала разобраться).
- Теперь можно установить монтажную коробку и подключить кнопочный выключатель.
Результат
Созданное устройство успешно смонтировано и отлично заменило «тупой» выключатель, добавив к нему чуточку «ума» (экономию электроэнергии в случаях «забывчивости» хозяев, автоматическое включение/выключение вытяжки и т.п.).
P.S. В обсуждении первого поста были вопросы по поводу использования другой элементной базы, в том числе и для достижения более компактных размеров.
Это обычное реле (очень тихое) с двумя группами коммутируемых контактов. Может включать/выключать цепи на 220В (мощность небольшая, но для светодиодных ламп — вполне подойдет). Управляется 5В, можно подключать напрямую к выводу МК (без транзистора).
Это я к тому, что не стоит ко всему относиться как к догме (повторять все проекты «один в один») — ищите, подбирайте наиболее адекватные (для каждой конкретной задачи) решения, модифицируйте!
Подключение тумблера с подсветкой в сеть:
Подключаются тумблера с подсветкой при помощи автомобильных конвекторов или путём припаивания проводов к их выводам, но это не самое сложное и наверняка всем известно. Но многие начинающие радиолюбители часто не знают, с какой стороны подступится к тумблеру с подсветкой и как его правильно включить.
Во-первых, вам необходимо просто посмотреть по справочнику тип и назначение выводов вашего тумблера. Во-вторых, достаточно просто прозвонить тестером ваш тумблер, что бы понять, что к чему и как размыкается, переключается.
После того как вы выяснили какой вывод за что отвечает главное правильно включать тумблер в вашу цепь рисунок №2.
Рисунок №2 – Правильное включение тумблера с подсветкой в сеть питания (паяльника на пример)
Как видно из рисунка №2 тумблер включён таким образом, что бы разрывать фазовый провод, и так что бы при коммутации цепи (замыкании контакта) загоралась его внутренняя подсветка.