Открытая платформа для создания заботливой квартиры
Умная подсветка обладает следующими возможностями:
- включает освещение при обнаружении движения, затем отключает его по прошествии заданного времени;
- управляется через интерфейс 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, с которого идет сигнал на реле.
Дополнительные материалы