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