Проходной выключатель с обратной связью + Raspberry pi.

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

Как? Обо всем по порядку!

Общий принцип следующий:
Для коммутации нагрузки (лампы) будет использоваться обычное импульсное реле (еще его иногда называют бистабильное импульсное реле).
Для создания импульсов на наше импульсное реле будут использоваться механические кнопочные (пружинные) выключатели и коммутируемое реле на 220V с 3-5 вольтовой логикой управления.
Кнопочных выключателей может быть произвольное количество, все они подключаются параллельно и монтируются куда необходимо. Для примера мы воспользуемся одним выключателем.
К микроконтроллеру (в нашем случае Raspberry pi) подключается одно коммутируемое реле на 220V c 3-5 вольтовой логикой управления.
Параллельно к нагрузке (лампе) подключается опторазвязка или произвольный датчик контроля наличия 220V, который сообщает текущее состояние на линии в наш контроллер.
Теперь раскроем каждый пункт чуть подробнее.

Импульсное реле

Импульсное реле коммутирует реальную нагрузку, то есть нашу лампу (люстру и тд). Как работает импульсное реле? Это, как правило, электромеханическое реле, которое может иметь два состояния (отсюда название «бистабильное»). Состояние реле изменяется только при приходящем импульсе. Пришел импульс — реле замкнулось и напряжение пошло, пришел еще импульс — реле разомкнулось и электрическая цепь разорвана. И так далее, по кругу, импульс за импульсом. Существуют различные импульсные реле, отличающиеся количеством фаз и вольтажом входного импульса. Обычно входные импульсы — это 12 или 24 вольт кратковременного постоянного тока или 220 вольт переменного. Данные входные импульсы приходят по сигнальным линиям от кнопочных выключателей или программного реле — генератора импульсов контроллера.
В нашем примере я буду использовать простейшее однофазное импульсное реле Finder 20-ой серии, если конкретно — Finder 20.21.8. для установки на DIN рейку. Данное реле управляется импульсами от сети 220v.
Плюсы: не нужно строить отдельную сигнальную линию другого вольтажа и согласовывать входящие уровни во всех управляющих элементах.
Минусы: сигнальный провод — это провод на 220 вольт. Cтоимость такого будет несколько выше, чем провода, подходящего для 24V. К тому же, нужно будет всегда помнить о технике безопасности — вы будете работать с 220 вольт!
Какой импульсник взять — не принципиально. Главное — правильно подбирайте номиналы для вашей реальной нагрузки.

 

Клавишный выключатель

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

Реле

Для программной генерации импульса можно использовать как электромагнитное, так и твердотельное реле на 220V c сигналом управления 3-5V от нашего Raspberry pi.
Ампераж такого реле может быть существенно ниже, чем на ипульсном, так как нагрузки на таком реле не предвидится, оно просто будет создавать кратковременные импульсы в сети.
В данном примере я буду использовать электромагнитное реле на 16 ампер. Взял первое, какое лежало под рукой 🙂
Более подробно о таких реле и способах их подключения можно почитать тут.

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

Опторазвязка

Как говорилось выше, можно воспользоваться готовым датчиком определения наличия 220V. Но мне было проще и дешевле собрать такой самому (да и интереснее). Суммарная стоимость компонентов не дороже 100 рублей.
В нашем случае у нас будет простейшая оптопара TLP621(GB), один диод 1N4007 и 2 резистора номиналами 130Ком и 4,7Ком. Вот и вся схема.

схема датчика наличия 220V

Принцип схемы таков, что когда напряжение 220V в сети есть — диод внутри оптопары загорается, транзистор открывается и ток от Raspberry pi, поданный на контакт питания, протекает на сигнальный контакт. При этом у нас присутствует гальваническая развязка между сетью 220v и  5-и вольтовым Raspberry pi. На малине нет встроенного АЦП, но это не критично, данной схемы вполне хватит, чтобы программно ловить текущее состояние по входящему сигналу на любом контроллере.


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

Общая схема подключения всего нашего хозяйства

импульсное реле + электромагнитное реле + выключатель + raspberry:

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

Завершающий этап — скрипты контроля и управления

Сначала напишем питоновский скрипт для управления электромагнитным реле. Мы должны будем генерировать импульсы электромагнитным реле для нашего импульсного реле.
Для этого достаточно просто ненадолго подавать на сигнальный провод  26 GPIO pin логическую единицу.

В сценарии я пользуюсь конфигом пинов, чего и вам крайне советую.
Содержание конфига /home/pi/global_config.conf:

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

Не забываем сделать сценарий исполняемым, и можем попробовать погенерировать импульсы:

Ваше электромагнитное реле должно будет загораться примерно на секунду после каждого исполнения скрипта.
После каждого включения на  импульсник будет приходить импульс и реле будет менять состояние. Лампа должна загораться и гаснуть после каждого переключения. Тот же самый эффект должен происходить и при механическом нажатии на выключатель. Не важно откуда вы будете генерировать импульс — при каждом следующем импульсе импульсное реле будет щелкать.
Чтож, половина дела сделана. Осталось получить обратную связь. Мы всегда должны знать программным способом, включена  сейчас лампа или нет. Не важно, включили ли вы свой raspberry pi только что, перезагрузились или он работает уже несколько месяцев — мы должны получить от него актуальное состояние о лампе с нашей опторазвязки.

С точки зрения программы, мы будем получать на 17 GPIO pin входящую последовательность нулей и единиц, если свет включен и ничего не будем получать, если свет выключен.
Запустим несколько классов: один для постоянного контроля входящей последовательности, второй для информативности и записи в файловую систему текущего состояния света.
Что-то очень похожее на proc, если вы понимаете, о чем я 🙂
Есть единица в директории, отвечающей за нашу опторазвязку, значит свет горит.
Нет единички в директории — на опторазвязке тишина, света не должно быть.
Все это дело удобно для множества программ, которым потребуется узнавать, как дела у нашей опторазвязки. Не будем дергать ее из разных мест множественными одновременными запусками.

Создадим сразу все необходимые директории:

Считывание и определение сигнала из опторазвязки:

Разрешаем исполнение.

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

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

Успехов в проектах, подписывайтесь на блог и да прибудет с вами терпение!

Один комментарий к “Проходной выключатель с обратной связью + Raspberry pi.

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

А не бот ли вы? *