Умная гидропонная система на Arduino Mega 2560 с датчиками
Компоненты и материалы
- Arduino Mega 2560 — 1 шт.
- Датчик температуры и влажности DHT22 — 1 шт. (в описании также упоминается DHT11)
- Реле (generic) — 1 шт.
- Датчик освещенности RobotGeek (LDR) — 1 шт.
- Датчик температуры (LM35) — 1 шт.
- Светодиодная лента/массив — 16 светодиодов (8 красных, 8 синих), соединенных в 4 ряда по 4 в série
- Оптопара 4N35 — для управления светодиодами
- Два вентилятора (охлаждение и нагрев) + лампы накаливания для нагрева
- Насос для капельного орошения — 1 шт.
- Драйвер двигателей — для управления вентиляторами
- Блок питания 12В — для светодиодов
Приложения и сервисы
- Arduino IDE — для программирования
О проекте
Гидропоника — это метод выращивания растений без почвы. Почва теряет питательные вещества со временем, а гидропоника позволяет точно контролировать условия роста: влажность, температуру, освещенность и питательные вещества. Растения, которые растут только в определенное время года, можно выращивать круглый год.
Параметры для салата (модель проекта)
- Температура: 25–30 °C
- Влажность: 50–80%
- Интенсивность света: 250 фотон/сек
В качестве субстрата используется какао-порошок, который легче контролировать, чем почва. Проект управляет тремя ключевыми параметрами: светом, температурой и влажностью.
Управление светом
Используется массив из 16 светодиодов 3 мм (8 красных + 8 синих), соединенных в 4 ряда по 4 последовательно. Каждый ряд требует 12В. Управление осуществляется через оптопару 4N35. Интенсивность света измеряется фоторезистором (LDR), показания пересчитываются в фотоны/сек в коде Arduino.
Управление температурой
Для поддержания температуры используются:
- Два вентилятора: один для охлаждения, второй — для нагрева (вместе с лампой накаливания)
- Датчик температуры LM35
- Лампа накаливания размещена в отдельном коробке, чтобы её свет не влиял на фоторезистор. Нагревательный вентилятор дует горячий воздух из коробки в камеру выращивания.
- Вентиляторы управляются драйвером двигателей, лампа — через реле.
Управление влажностью
Влажность субстрата (какао-порошка) измеряется датчиком DHT11 (используется только для влажности). Для увлажнения применяется капельное орошение: насос с трубкой, в которой сделаны отверстия.
Важные замечания
- DHT11 имеет время отклика 1 Гц — задержка между измерениями не менее 1 секунды.
- Ряды светодиодов (4 в série) требуют 12В питания.
- При работе с 230В соблюдайте технику безопасности: изолируйте оголенные провода.
- Не подавайте сигнал на оптопару напрямую — используйте резистор.
- Бесколлекторные вентиляторы односторонние — монтируйте правильно.
Программный код
Код для Arduino Mega использует библиотеку SimpleDHT. Основные функции:
temperature()— чтение LM35 (пин A10), управление нагревательным/охлаждающим вентиляторами и лампойlight()— чтение LDR (пин A8), расчет люксов и фотонов, управление 4 рядами светодиодовhumidity()— чтение DHT11 (пин 41), управление насосом и вентилятором
#include <SimpleDHT.h>
int pinDHT11 = 41;
int coolingFan = 50;
int heatingFan = 48;
int heater = 3;
int LEDrow1 = 25;
int LEDrow2 = 27;
int LEDrow3 = 29;
int LEDrow4 = 31;
int pump = 31; // Внимание: конфликт с LEDrow4!
SimpleDHT11 dht11;
void setup() {
Serial.begin(115200);
pinMode(coolingFan, OUTPUT);
pinMode(heatingFan, OUTPUT);
pinMode(heater, OUTPUT);
pinMode(LEDrow1, OUTPUT);
pinMode(LEDrow2, OUTPUT);
pinMode(LEDrow3, OUTPUT);
pinMode(LEDrow4, OUTPUT);
pinMode(pump, OUTPUT);
}
void loop() {
temperature();
light();
humidity();
}
void temperature() {
int value = analogRead(A10);
float volts = (value / 1024.0) * 5.0;
float temp = volts * 100.0;
Serial.print("temp=");
Serial.println(temp);
delay(1000);
if (temp < 25) {
digitalWrite(heater, LOW);
digitalWrite(heatingFan, HIGH);
} else {
digitalWrite(heater, HIGH);
digitalWrite(heatingFan, LOW);
}
if (temp > 30) {
digitalWrite(coolingFan, HIGH);
} else {
digitalWrite(coolingFan, LOW);
}
}
void light() {
float ldrdata = analogRead(A8);
float resistorVolt = (1024 - ldrdata) / 1024.0 * 5.0;
float ldrVolt = 5.0 - resistorVolt;
float ldrResistance = ldrVolt / resistorVolt * 5000.0;
float lux = (12518931) * pow(ldrResistance, -1.405);
float photons = lux * 0.019;
delay(1000);
if (photons < 50) {
digitalWrite(LEDrow1, HIGH);
digitalWrite(LEDrow2, HIGH);
digitalWrite(LEDrow3, HIGH);
digitalWrite(LEDrow1, HIGH); // Дубликат?
}
if (photons > 100) {
digitalWrite(LEDrow1, LOW);
digitalWrite(LEDrow2, LOW);
digitalWrite(LEDrow3, LOW);
digitalWrite(LEDrow4, LOW);
}
}
void humidity() {
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(pinDHT11, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
Serial.println(err);
delay(1000);
return;
}
int humid = (int)humidity;
Serial.println(" H");
delay(2000);
if (humid < 85) {
digitalWrite(pump, HIGH);
digitalWrite(coolingFan, LOW);
}
if (humid > 94) {
digitalWrite(coolingFan, HIGH);
digitalWrite(pump, LOW);
}
}
Примечание: В коде есть конфликт: пин 31 используется и для LEDrow4, и для pump. Это нужно исправить при сборке.
Схемы
В проекте представлена схема подключения (изображение в оригинале).
Производственный процесс
- Удобрения: наука, производство и устойчивое будущее
- Датчики влажности почвы: принцип работы и практические применения
- Понимание кислородного (O2) датчика: роль, размещение и признаки отказа
- Управление светодиодом с PIR-датчиком движения на Raspberry Pi
- Построение низкобюджетного датчика влажности почвы на Raspberry Pi для умного полива
- Тестирование датчика температуры DS18B20 на Raspberry Pi
- Создайте домашний монитор температуры на Raspberry Pi с MCP9808, InfluxDB и Grafana
- Sensor Telemetry 2.0.1 — продвинутый мониторинг температуры с Azure IoT Hub
- Датчик эмоций и ЭЭГ: низкобюджетное железо для детекции эмоций в реальном времени
- Датчики Холла: принцип работы, применение и конструкция