Умный Дом
Рано или поздно вы захотите управлять реальными устройствами, работающими от 220 вольт. Перед тем как экспериментировать с этим настоятельно рекомендую понимать, что вы собираетесь делать!
Яйцами и пальцами в солонку не лазить!(с) Тоже самое касается и электричества: 220вольт — это не игрушки. Может и убить! Сомневаетесь в том, что понимаете весь материал — спросите у знающих людей, все ли вы делает правильно. Если таковых нет, не стоит начинать работу без необходимых знаний и трезвого рассудка.
В сети есть множество хороших статей на данную тему. Надеюсь, эта статья будет не лишней.
На рынке представлено достаточно решений по управлению силовыми цепями. Что касается raspberry pi, можно использовать любое реле: электромагнитное, твёрдотельное, импульсное. Любое можно подключить на наш одноплатник. Самое важное — нужно согласовать уровни управляющих сигналов. Например: если реле управляется 24 вольтами, то нам нужно выходной сигнал RPi 3,3V преобразовать к этому уровню. Сделать это можно при помощи транзисторного ключа, а еще лучше, безопасным для малины способом — использовать для согласования оптопару.
В контексте вышеперечисленных реле нет понятия «лучший выбор». В каждом случае реле необходимо выбирать в зависимости от ситуации. Нужно понимать, как часто вы собираетесь переключать — «щелкать» — ваше реле (магнитные реле не рекомендуется переключать чаще раза в секунду); какие токи будут через реле протекать (на токи выше 16А вы врядли найдете магнитное реле); какие нагрузки будут коммутироваться (индуктивные или резистивные); место монтажа вашего реле (твердотельные реле чувствительны к температуре, в некоторых случаях необходима установка пассивного или даже активного охлаждения, что влечет за собой увеличение площади для монтажа); расстояние сигнальных линий от контроллера до реле и т.д. и т.п.
Какое реле и какие номиналы использовать в вашем случае? Советую хорошенько изучить данный вопрос, чтобы не пришлось менять одно на другое или, еще хуже, что-нибудь не погорело.
Сегодня мы остановимся на одном из самых доступных и простых бюджетных решении — 3/5V электромагнитное реле с уже установленной на плату всей необходимой обвязкой.
В текущем примере я буду использовать «амперковское» реле на 16 ампер. Для тестов сгодится и любое китайское ампер на 10 с 3-5 вольтовой логикой управления. Еще раз повторюсь: ампераж реле необходимо расчитывать в зависимости от вашей реальной нагрузки!
ВАЖНО! На плате существуют области, прикосновение к которым приведёт к поражению электрическим током. Это винты контактных колодок и места пайки выводов контактных колодок и реле. Не работайте с платой, если она подключена к бытовой сети. Для готового устройства используйте изолированный корпус!
Немного полезной информации:
Питание (Vсс) — красный провод. На него должно подаваться напряжение 3,3-5 В.
Земля (GND) — чёрный провод. Должен быть соединён с землёй микроконтроллера(Rpi).
Сигнальный (S) — жёлтый провод. Через него происходит управление реле.
Фаза — коричневый провод. Воспользуйтесь обычным пробником-отверткой или мультиметром для ее определения, чтобы коричневый провод реально соответствовал фазе, после коммутации провода.
Нейтраль — синий провод. Нейтраль — это нейтраль, она же — ноль 🙂
Реле
Все электромагнитные реле имеют нормально замкнутый (normal closed, NC) и нормально разомкнутый (normal open, NO) контакты. Если на управляющей обмотке реле отсутствует напряжение, то между нормально замкнутым и коммутируемым контактами есть электрическая связь, а между нормально разомкнутым и коммутируемым — нет. При подаче напряжения на управляющую обмотку нормально разомкнутый контакт замыкается, а нормально замкнутый — размыкается.
Нагрузка
Контакт от источника напряжения подключается к выводу COM, а нагрузка — к контакту NO или NC, в зависимости от задачи, которую должно выполнять реле. Если подключить нагрузку к NC, то при отсутствии на управляющей обмотке реле напряжения (логической единицы на сигнальном проводе S) электрическая связь на нагрузку будет существовать (ток пойдет). То есть, даже если ваш raspberry будет обесточен или будет перезагружаться/выключен, напряжение на COM и NC будет присутствовать. Только если вы подадите напряжение на сигнальный провод S, электрическая цепь разорвется.
С NO дело обстоит ровно наоборот: ток будет проходить только когда на управляющем контакте S будет логическая еденица (3,3V).
Прошу не путать с тем, что само амперковское (как и большинство пяти-вольтовых) реле можно подключить и на 3 и на 5 вольт питания.
Для того чтобы не гадать где какой пин находится и под каким номером, прикреплю красивую табличку для raspberry pi3 (B). Обратите внимание на квадратный пин: по нему можно ориентироваться, где верх схемы, а где низ.
Как уже писал выше, в целях безопасности, с подключенным в бытовую сеть реле работать не стоит.
Поэтому итоговую коммутацию советую производить уже после всех тестов и обкатки управления реле.
Займемся немножко программированием, буквально чуть-чуть.
Следующие пакеты необходимо поставить, если они не присутствуют в системе:
1
|
$ sudo apt—get install python—dev python—rpi.gpio
|
Теперь поиграем реле. Для этого создадим сценарии включения и выключения отдельными файлами.
1
|
$ vim /home/pi/relay_on.py
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import ConfigParser
config = ConfigParser.RawConfigParser() #воспользуемся конфигом
config.read(«/home/pi/global_config.conf») #считаем конфиг
pin_number = config.getint(«relay_pins», «relay1») #пина из конфига присвоем переменной pin_number
print «use pin:»+str(pin_number)
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(pin_number, GPIO.OUT) #устанавливаем пин на выходной сигнал
GPIO.output(pin_number, GPIO.HIGH) #ставим логическую еденицу на выходе
|
В коде сценария я воспользовался модулем ConfigParser. В данном небольшом примере он не очень актуален и можно сразу указать номер gpio пина как число, НО давайте сразу привыкать к правильному! Когда вы напишете десятка два-три таких сценария, вы перестанете контролировать, что на каком пине у вас находится. Я написал уже не одну сотню таких скриптов и поэтому крайне рекомендую использовать один общий глобальный конфиг, в котором будут указаны соответствия pin и их номеров. Конфиг можно вести секционно (даже нужно), между секциями должен быть отступ в пустую строку. Даже если какие-то пины у вас начнут повторяться, с помощью единого конфига можно будет всегда легко это отследить.
Создадим конфиг пинов для нашего сценария:
1
|
$ vim /home/pi/global_config.conf
|
Содержимое файла:
1
2
3
4
5
6
7
8
|
#попытаемся вести тут все необходимые дефолтные конфигурации
#номера пинов с соответсвием им переменных, стандартные таймауты, часто встречающиеся пути и тд.
[relay_pins]
relay1 = 17
[example_test]
test_time=10
test_path=/home/pi/
|
Строго говоря, 17-й pin выбран произвольно. Вы можете выбрать практически любой, но лучше руководствоваться табличкой общей распаковки. Старайтесь использовать для простых операций пины без возможности использования на них протоколов I2C, SPI и т.д. (общие пины).
Отлично. Конфиг создан и сохранен. Теперь создадим второй сценарий на выключение реле:
1
|
$ vim /home/pi/relay_off.py
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import ConfigParser
config = ConfigParser.RawConfigParser() #воспользуемся конфигом
config.read(«/home/pi/global_config.conf») #считаем конфиг
pin_number = config.getint(«relay_pins», «relay1») #пина из конфига присвоем переменной pin_number
print «use pin:»+str(pin_number)
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(pin_number, GPIO.OUT) #устанавливаем пин на выходной сигнал
GPIO.output(pin_number, GPIO.LOW) #ставим логический ноль на выходе
|
Как видите, отличие данного сценария от первого лишь в один параметр.
Осталось сделать наши сценарии исполняемыми:
1
|
$ sudo chmod +x /home/pi/relay_*
|
Теперь поиграем реле, запуская то один, то другой сценарий:
1
2
3
|
$ /home/pi/relay_on.py
$ /home/pi/relay_off.py
...
|
Вы должны увидеть как загорается лампочка на реле при подаче логической единицы на сигнальный пин и происходит щелчок при каждой смене состояния.
Если все так — поздравляю, можно убирать реле в изолированный корпус и подключать реальную нагрузку.
Еще раз, будте внимательны при монтаже: не стоит в разрыв ставить ноль, а не фазу! Проверьте это лишний раз тестером.
приложение умный дом