Открытая платформа для создания заботливой квартиры
Наши квартиры и дома не обходятся без цветов и растений, ведь они украшают, улучшают воздух и делают жилище более комфортным. Однако, за ними требуется уход - полив, в разное время и разным количеством воды. Это отличная область применения домашней автоматизации.
Часто такие решения делают полностью автоматическими. Проблема их в том, что они должны быть довольно сложными, чтобы качественно справляться с этой работой: легко настраиваться, визуализировать показания, не поливать ночью, учитывать контекст и т.п.
Куда выгоднее всю логику вынести в контроллер и настроить его заботиться о вашем растении. Итак, для этого вам потребуются следующие компоненты.
Название | Назначение | Цена, руб. |
---|---|---|
BLE JDY-08 | Радиомодуль Bluetooth LE | 140 |
Arduino Pro Mini | Микроконтроллер для снятия показаний датчика | 135 |
YL-38 | Датчик влажности почвы | 40 |
Breadboard 170 | Небольшая макетка для компоновки модулей датчика | 30 |
Помпа DC 3-6v 120L/H | Помпа для полива | 85 |
Держатель батареек 3x AAA | Лучше использовать щелочные элементы LR03, поскольку помпа потребляет прилично | 80 |
Капельница | Можно купить в любой аптеке | 15 |
Цветочный горшок | Высокий горшок с вкладышем, чтобы организовать резервуар с водой | 200 |
Еще вам потребуются перемычки, транзистор (например, BC327) и резистор на 10 кОм. Из этого набора элементов вы можете собрать устройство, похожее на что-то подобное:
В режиме ожидания устройство потребляет 0.1 мА. В режиме полива - 60 мА, из-за прожорливости помпы. Время полива может составлять около 5 сек. Полив осуществляется раз в день или реже. 3-х элементов питания LR03 должно хватить на несколько месяцев.
Чтобы заполнить резервуар водой, достаточно вынуть из земли датчик влажности, вынуть вкладыш с растением и залить в горшок воду. Кстати, штатных возможностей JDY-08 хватит на то, чтобы добавить еще несколько датчиков, например, уровня воды в резервуаре, температуры и еще чего-нибудь.
Если все элементы спаять на макетной платке, то получится более надежное в эксплуатации устройство:
Программируем микроконтроллер
О том как настроить Arduino IDE и подключить микроконтроллер к ПК читайте в этой коротенькой инструкции. Для компиляции программы необходимо загрузить библиотеку JDY8 и добавить ее в Arduino IDE через меню Sketch - Install library.
#include <jdy8.h>
#include <LowPower.h>
#define MIN_THRESHOLD 11
#define SENSOR_PWR_PIN 12
#define SENSOR_PIN A2
#define BLE_IO_PIN 5
#define PUMP_VCC_PIN 13
#define WAIT_SECONDS 600
JDY8 ble(11, 4, 10); // RX, TX, Reset
short lastMoisture = MIN_THRESHOLD;
int secondsPassed = 0;
void setup()
{
pinMode(BLE_IO_PIN, INPUT);
lastMoisture = measureSensor();
ble.configure("Flower-1");
ble.humidity(lastMoisture);
}
void loop()
{
if ( digitalRead(BLE_IO_PIN) == HIGH || lastMoisture < MIN_THRESHOLD ) {
// reset IO pin
ble.setIOPin(1, 0);
// turn on pump for 10 secs
pinMode(PUMP_VCC_PIN, OUTPUT);
digitalWrite(PUMP_VCC_PIN, HIGH);
delay(10000);
digitalWrite(PUMP_VCC_PIN, LOW);
secondsPassed = WAIT_SECONDS;
}
// fall a sleep
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
secondsPassed += 8;
// check if 5 minutes have passed
if ( secondsPassed < WAIT_SECONDS ) return;
secondsPassed = 0;
// measure sensor value
short nowMoisture = measureSensor();
if ( nowMoisture == lastMoisture ) return;
lastMoisture = nowMoisture;
// configure BLE if sensor values have changed since the last measure
ble.humidity(lastMoisture);
}
short measureSensor()
{
pinMode(SENSOR_PWR_PIN, OUTPUT);
pinMode(SENSOR_PIN, INPUT);
digitalWrite(SENSOR_PWR_PIN, HIGH);
delay(200);
short value = 100 - (short) (((float) analogRead(SENSOR_PIN) / 1024) * 100);
digitalWrite(SENSOR_PWR_PIN, LOW);
pinMode(SENSOR_PWR_PIN, INPUT);
return value;
}
Константа MIN_THRESHOLD позволяет определить минимальное пороговое значение влажности почвы (в процентах), по достижении которого автоматически включится полив растения, независимо от наличия управляющего сигнала от Home Assistant. Это позволяет не беспокоиться о поливе, даже если Home Assistant не будет работать.
Собираем по схеме
Программируем HASS
Файл: /config/configuration.yaml
sensors:
- platform: cutecare
scan_interval: 60
mac: 7C:01:0A:3A:12:37
monitored_conditions:
- moisture
name: flower_1
type: jdy8
light:
- platform: cutecare
mac: 7C:01:0A:3A:12:37
name: flower_1_pump
Файл: /config/automations.yaml
- alias: 'Полить растение'
trigger:
platform: time
minutes: 0
seconds: 0
condition:
condition: numeric_state
entity_id: sensor.flower_1_moisture
above: 0
below: 20
action:
service: homeassistant.turn_on
entity_id: light.flower_1_pump