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

Умная подсветка обладает следующими возможностями:

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

Итак, для создания умной подсветки вам понадобятся:

Название Назначение Цена, руб.
BLE JDY-08 Радиомодуль Bluetooth LE 140
Arduino Pro Mini Микроконтроллер для учета затраченной электроэнергии 135
Hi-Link HLK PM-01 5V Изолированный модуль питания 5В 150
G3MB-202P DC-AC 5V Твердотельное реле 56
ACS712 Модуль измерения силы тока в цепи 90
RCWL-0516 Доплеровский датчик движения 70

Все элементы вы можете разместить на одной макетной плате, изолировав силовой блок от блока с микроконтроллером. Такую плату можно скрытно разместить в месте, где установлено дополнительное освещение (подсветка).

Умная подсветка своими руками

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

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

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

#define RELEY_PIN 4
#define BLE_IOPIN 5
#define RCWL_PIN 12
#define AC_SENSOR_PIN A1
#define WAIT_SECONDS 300

JDY8 ble(11, 7, 10); // RX, TX, Reset
ACSensor currentSensor(AC_SENSOR_PIN, 185.0, 21.0); // sensor pin, ACS sensitivity (mV/A), ACS noise level (mV)
unsigned int lastValue = 0;
bool rcwlState = true;
unsigned int waitSeconds = 0;

void setup()
{
  pinMode(RCWL_PIN, INPUT);
  pinMode(BLE_IOPIN, INPUT);
  pinMode(RELEY_PIN, OUTPUT);

  currentSensor.calibrate();

  ble.configure("Light-2", 0);
  ble.major(0);
}

void loop()
{
  if (digitalRead(RCWL_PIN) == HIGH) {
    rcwlState = true;
    waitSeconds = WAIT_SECONDS;
  }
  else if ( waitSeconds > 0 ) {
    waitSeconds--;
    if ( waitSeconds < 1 ) {
      rcwlState = false;
    }
  }

  // set relay state based on BLE IO1 state and RCWL state
  digitalWrite(RELEY_PIN, digitalRead(BLE_IOPIN) == HIGH && rcwlState ? HIGH : LOW);

  // read sensor value
  unsigned int nowValue = currentSensor.getWatt();
  if ( nowValue != lastValue ) {
    lastValue = nowValue;
    ble.major(lastValue);
  }

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

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

Схема умной подсветки своими руками

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

Файл: /config/configuration.yaml

switch:
  - platform: cutecare
    name: Intellegent 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: intellegent_light

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

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