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

Наши квартиры и дома не обходятся без цветов и растений, ведь они украшают, улучшают воздух и делают жилище более комфортным. Однако, за ними требуется уход - полив, в разное время и разным количеством воды. Это отличная область применения домашней автоматизации.

Часто такие решения делают полностью автоматическими. Проблема их в том, что они должны быть довольно сложными, чтобы качественно справляться с этой работой: легко настраиваться, визуализировать показания, не поливать ночью, учитывать контекст и т.п.

Куда выгоднее всю логику вынести в контроллер и настроить его заботиться о вашем растении. Итак, для этого вам потребуются следующие компоненты.

Название Назначение Цена, руб.
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

Автополив домашних растений