Умный автоматизированный домашний сад на Arduino — Система ухода за растениями
Компоненты и материалы
- Arduino Nano R3 — 1 шт.
- Bluetooth-модуль HC-05 или HC-06 — 1 шт.
- Модуль ESP-01 (опционально) — 1 шт.
- Датчик освещённости BH1750 (I2C) — 1 шт.
- Датчик температуры и влажности DHT11 — 1 шт.
- Датчик влажности почвы (ёмкостной/резистивный) — 1 шт.
- Белые LED (фитолампа) — несколько шт.
- Насос для полива (12 В) — 1 шт.
- Вентилятор 12 В DC — 1 шт.
- Печатная плата (PCB) от JLCPCB (форма листа) — 1 шт.
- Расходники: разъёмы, резисторы, транзисторы/МОП-транзисторы для управления нагрузками
О проекте

Проект реализует упрощённую систему автоматизированного домашнего сада на базе Arduino. Устройство контролирует три ключевых параметра: свет, воду и воздух. Сборка заняла 7 дней: 3 дня — железо и пайка, 4 дня — код и Android-приложение для Bluetooth-управления.
Что вы узнаете
- Подбор компонентов под функции проекта
- Разработка схемы и печатной платы
- Сборка и тестирование
- Управление через Android-приложение по Bluetooth
Основные потребности растений
- Свет — минимум 6 часов качественного света в сутки. Датчик BH1750 измеряет освещённость (1–65535 лкс) и управляет яркостью фитолампы.
- Вода — датчик влажности почвы сигнализирует о необходимости полива. Используется насос 12 В.
- Воздух — датчик DHT11 следит за температурой и влажностью. При перегреве (>30 °C) включается вентилятор.


Датчики и исполнительные механизмы
Датчики
- BH1750 — цифровой датчик освещённости по I2C, высокое разрешение.
- Датчик влажности почвы — аналоговый/цифровой. Примечание: резистивные датчики быстро корродируют; лучше использовать ёмкостные.
- DHT11 — дешёвый цифровой датчик температуры и влажности (опрос не чаще 1 раза в 2 сек).
Исполнительные механизмы
- Белые LED / фитолампа — ШИМ-управление яркостью.
- Насос 12 В — включение через MOSFET/транзистор.
- Вентилятор 12 В — ШИМ-управление скоростью.
Печатная плата (JLCPCB)
Плата заказана на JLCPCB — крупнейшем китайском прототипировщике. Цена ~$2 за 5 шт., доставка 3 дня. Качество отличное: форма листа, все надписи и логотипы чёткие, что исключает ошибки пайки.




Сборка
Пайка по надписям на плате. Рекомендуется проверять каждый узел тестовым скетчем сразу после установки. Используйте чистый паяльник — это залог качественных соединений.






Корпус выполнен из МДФ 5 мм лазерной резкой (DXF-файлы прилагаются).
Android-приложение
Приложение подключается по Bluetooth, позволяет в ручном режиме включать/выключать вентилятор, свет, насос, и запрашивать показания датчиков кнопкой «Get Data». В автоматическом режиме система сама регулирует яркость света по BH1750, полив по датчику почвы и вентилятор по температуре.



Код Arduino (основные фрагменты)
#include "DHT.h" #include#include const int Pump = 4; const int Fan = 5; // PWM const int Light = 6; // PWM const int TempHum = 7; // DHT11 const int Moisture = 8; // Digital входа датчика влажности const int TestLED = 9; const int Brightness = 12; const int analogMoistue = A0; #define DHTTYPE DHT11 DHT dht(TempHum, DHTTYPE); BH1750 lightMeter; char Data = 'x'; String cmd = ""; int flagModeAuto = 0; int sprayCMD = 0; // порог влажности для полива int LightCMD = 0; // порог освещённости int lightLevelPlus = 0; float temperature = 0, humidity = 0; uint16_t lux = 0; void setup() { Wire.begin(); dht.begin(); lightMeter.begin(); Serial.begin(9600); Serial.setTimeout(100); pinMode(Pump, OUTPUT); pinMode(Fan, OUTPUT); pinMode(Light, OUTPUT); pinMode(Moisture, INPUT); pinMode(TestLED, INPUT); delay(1000); digitalWrite(Pump, LOW); digitalWrite(Fan, LOW); digitalWrite(Light, LOW); } void loop() { while (Serial.available()) { delay(10); Data = Serial.read(); cmd += Data; } // Команды от приложения: "o" - авто, "m" - ручной, "f/x" - вент, "l/k" - свет, "w/y" - насос // Запросы данных: "dt" - влажность, "dh" - свет, "db" - температура if (cmd == "o") flagModeAuto = 1; if (cmd == "m") flagModeAuto = 0; if (flagModeAuto) { autoPump(); lightBrightness(); autoFan(); } else { // ручное управление if (cmd == "f") analogWrite(Fan, 255); if (cmd == "x") analogWrite(Fan, 0); if (cmd == "l") analogWrite(Light, 255); if (cmd == "k") analogWrite(Light, 0); if (cmd == "w") analogWrite(Pump, 255); if (cmd == "y") analogWrite(Pump, 0); } if (cmd == "dt") Serial.print(humidity); if (cmd == "dh") Serial.print(lux); if (cmd == "db") Serial.print(temperature); cmd = ""; lux = lightMeter.readLightLevel(); temperature = dht.readTemperature(); humidity = dht.readHumidity(); } void autoPump() { if (analogRead(analogMoistue) < sprayCMD) { digitalWrite(Pump, HIGH); delay(1000); digitalWrite(Pump, LOW); delay(1000); } } void lightBrightness() { while (lux < LightCMD) { analogWrite(Light, lightLevelPlus); delay(100); lightLevelPlus++; lux = lightMeter.readLightLevel(); } } void autoFan() { if (temperature > 30) analogWrite(Fan, 255); else analogWrite(Fan, 0); }
Полный код и файлы для заказа PCB (Gerber) и резки корпуса (DXF) доступны в репозитории проекта.
Производственный процесс
- Создание потрясающей системы Ambilight для монитора на Arduino
- Создание классической игры Pong на Arduino UNO с OLED-дисплеем: пошаговый урок
- Детектор аудиочастот на Arduino: измеряем пик громкости с высокочувствительным модулем
- Собираем свой Tamagotchi на Arduino: цифровой питомец своими руками
- Умный беспроводной выключатель света: Arduino-контроллер для удаленного управления
- Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом
- Умный водяной пистолет с датчиком движения на Arduino Nano
- Сборка надежного таймера обратного отсчета на Arduino с 7-сегментным дисплеем SparkFun
- Arduino Sunflower: электронный подсолнух, следящий за солнцем
- Набор для создания робота с умной внутренней навигацией на базе Arduino