Открытая платформа для создания заботливой квартиры

В этом сценарии мы реализуем дистанционное управление освещением, с обратной связью, интегрированное в инфраструктуру заботливой квартиры, с такими функциями:

  • включение/отключение освещения через интерфейс Home Assistant и при помощи сценариев;
  • включение/отключение освещения дистанционно при помощи сенсорного выключателя;
  • контроль за электроприборами, измерение электроэнергии, потребленной светильником.

Итак, для автоматизации освещения вам потребуются эти компоненты:

Название Назначение Цена, руб.
BLE JDY-08 Радиомодуль Bluetooth LE 140
Arduino Nano Микроконтроллер для снятия показаний датчика и управления реле 180
Hi-Link HLK PM-01 5V Изолированный модуль питания 5В 150
G3MB-202P DC-AC 5V Твердотельное реле 56
ACS712 Модуль измерения силы тока в цепи 90
MX-05V Радиоприемник (433 МГц), продается вместе с передатчиком 80

Собранное устройство состоит из двух частей: силовой (блок питания, реле, модуль измерения силы тока) и логики (микроконтроллер, BLE-модуль, радиоприемник). Устройство легко размещается в потолочной чаши светильника.

Светильник подключенный к умной квартире

Чтобы детям было удобнее включать/выключать освещение, соберите сенсорный дистанционный выключатель, работающий от двух батареек CR2032. Для этого вам потребуются следующие компоненты:

Название Назначение Цена, руб.
Arduino Pro Mini 3V Микроконтроллер для считывания касания и передачи сигнала в светильник 135
MX-FS-03V Радиопередатчик (433 МГц), продается вместе с радиоприемником 65
TTP223 Сенсор прикосновения 9

Сенсорный дистанционный выключатель

Программируем светильник

О том как настроить Arduino IDE и подключить микроконтроллер к ПК читайте в этой коротенькой инструкции. Для компиляции программы необходимо загрузить библиотеки и добавить их в Arduino IDE через меню Sketch - Install library:

#include <jdy8.h>
#include <LowPower.h>
#include <RCSwitch.h>
#include <ACSensor.h>

#define RC_PIN 2
#define RELEY_PIN 4
#define BLE_IOPIN 5
#define RC_COMMAND 5121
#define AC_SENSOR_PIN A1

JDY8 ble(3, 7, 10); // RX, TX, Reset
RCSwitch sensorButton = RCSwitch();
ACSensor currentSensor(AC_SENSOR_PIN, 185.0, 9.0); // sensor pin, ACS sensitivity (mV/A), ACS noise level (mV)
unsigned int lastValue = 0;
bool buttonState = false;

void setup()
{
  // get zero of AC sensor
  currentSensor.calibrate();

  // turn on light when power is on
  pinMode(RELEY_PIN, OUTPUT);
  digitalWrite(RELEY_PIN, HIGH);

  ble.configure("Light-1", 0, 1);
  ble.major(1, false);

  // listen for sensor button
  sensorButton.enableReceive(0);
}

void loop()
{
  if (sensorButton.available()) {
    if ( sensorButton.getReceivedValue() == RC_COMMAND ) {
      buttonState = !buttonState;
      digitalWrite(RELEY_PIN, buttonState ? HIGH : LOW);
      ble.setIOPin(2, buttonState ? 1 : 0, false);
      delay(2000);
    }
    sensorButton.resetAvailable();
  }

  // set relay state based on BLE IO pin state
  pinMode(BLE_IOPIN, INPUT);
  pinMode(RELEY_PIN, OUTPUT);
  digitalWrite(RELEY_PIN, digitalRead(BLE_IOPIN) == HIGH ? HIGH : LOW);

  // read AC sensor value
  unsigned int nowValue = currentSensor.getWatt();
  if ( nowValue == lastValue ) return;
  lastValue = nowValue;

  // configure BLE if sensor values have changed since the last measure
  ble.major(lastValue, false);
}

Собираем по схеме

Схема умного управления освещением

Программируем сенсорный выключатель

О том как настроить Arduino IDE и подключить микроконтроллер к ПК читайте в этой коротенькой инструкции. Для компиляции программы необходимо загрузить библиотеки и добавить их в Arduino IDE через меню Sketch - Install library:

#include <LowPower.h>
#include <RCSwitch.h>

#define SENSOR_TOUCH_PIN 4
#define LED_PIN 3
#define RC_PIN 12
#define RC_COMMAND 5121

RCSwitch remote = RCSwitch();

void setup() {
  remote.enableTransmit(RC_PIN);
}

void loop() 
{
  pinMode(SENSOR_TOUCH_PIN, INPUT);
  int touch = digitalRead(SENSOR_TOUCH_PIN);

  if ( touch == HIGH ) 
  {
    remote.send(RC_COMMAND, 24);

    pinMode(LED_PIN, OUTPUT);
    fadeIn();
    fadeOut();
    fadeIn();
    fadeOut();
    pinMode(LED_PIN, INPUT);
  }

  // fall a sleep
  LowPower.powerDown(SLEEP_500MS, ADC_OFF, BOD_OFF);
}

void fadeIn() {
    for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
      analogWrite(LED_PIN, fadeValue);
      delay(15);
    }
}

void fadeOut() {
    for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {
      analogWrite(LED_PIN, fadeValue);
      delay(15);
    }
}

Собираем по схеме

Схема сенсорного дистанционного выключателя

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

Сенсорный дистанционный выключатель схема

Радиопередатчик в режиме ожидания потребляет ~90 мкА. Для более-менее устойчивой радиосвязи добавлен второй элемент питания, чтобы поднять напряжение на радиомодуле до 6В. Остальные компоненты питаются от одного элемента 3В и потребляют ~90 мкА.

Программируем HASS

Файл: /config/configuration.yaml

switch:
  - platform: cutecare
    name: Remote Light
    mac: 0C:B2:B7:3E:C3:E5
    threshold: 5
    pin: 2

sensor:
  - platform: cutecare
    scan_interval: 60
    mac: 0C:B2:B7:3E:C3:E5
    monitored_conditions:
      - watt
    name: remote_light

Параметр "threshold" позволяет указать границу срабатывания датчика обратной связи. Параметр "pin" позволяет указать номер пина JDY-08, с которого идет сигнал на реле.

Дополнительные материалы