Официальный сайт компании Arduino по адресу arduino.cc
Теплица
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Уже давно разрабатываю проект на досуге. Он никак не связан с основной работой, поэтому разработка идет медленно. Основная задумка - выращивать растения в закрытом боксе (огурцы, например, ага)
Собственно, еще не определился будет это гидропоника или земля.
Освещение планируется светодиодное 4 лампы по 54 ватта http://www.buyincoins.com/item/42980.html
С поливом еще точно не определился, но реализовано пока так: есть 2 датчика температуры, один сухой, другой влажный (неглубоко в земле), если разница между датчиками будет меньше указанной, то включается полив (на указанное время).
Реализовано 2 термостата (на тех же двух датчиках).
Освещение можно настроить на весь цикл выращивания (по дням, хоть на целый год)
Настройка производится через терминал (com порт) и сохраняется в EEPROM.
Лог ведется в текстовик на SD-карте (не проверял еще)
Управление нагрузками (свет, полив, нагреватели 1 и 2, охладители 1 и 2) производится через твердотельные реле (пока есть 3 штуки на 25 ампер) http://www.buyincoins.com/item/9224.html#.U98_mGPDAdU
Работа с часами реального времени DS3231 http://www.ebay.com/itm/281163978761?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649
Уже давно разрабатываю проект на досуге. Он никак не связан с основной работой, поэтому разработка идет медленно.
Основная задумка - выращивать растения в закрытом боксе (огурцы, например, ага)
Собственно, еще не определился будет это гидропоника или земля.
Освещение планируется светодиодное 4 лампы по 54 ватта http://www.buyincoins.com/item/42980.html
С поливом еще точно не определился, но реализовано пока так: есть 2 датчика температуры, один сухой, другой влажный (неглубоко в земле), если разница между датчиками будет меньше указанной, то включается полив (на указанное время).
Реализовано 2 термостата (на тех же двух датчиках).
Освещение можно настроить на весь цикл выращивания (по дням, хоть на целый год)
Настройка производится через терминал (com порт) и сохраняется в EEPROM
Управление нагрузками (свет, полив, нагреватели 1 и 2, охладители 1 и 2) производится через твердотельные реле (пока есть 3 штуки на 25 ампер) http://www.buyincoins.com/item/9224.html#.U98_mGPDAdU
Работа с часами реального времени DS3231 http://www.ebay.com/itm/281163978761?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649
Вначале скетча есть определения для настройки функционала. Можно эмулировать ускоренное время, фейковую температуру датчиков, отключать запись на SD и вывод на LCD.
За лето достаточно хорошо оптимизировал код. Не очень разобрался со спящим режимом.
Вобщем, пока вываливаю все как есть. Походу разработки буду дополнять. Критика и советы приветствуются.
// Часы (3 варианта) //#define TIME_FAKE // время для отладки основного цикла, если вместе FAKE_TEMP = x3000 к скорости :) //#define TIME_WD // встроенный таймер, тикает раз в 8 секунд, без коррекции сильно отстает от реального (коррекция примерно +1 сек, +2 мин) #define TIME_DS3231 // часы реального врмемени DS3231 #define FAKE_TEMP // Эмуляция показаний температуры //#define SLEEPMODE // Работает вместе с TIME_WD, не отлажена работа с DS3231 #define LCD // Поддержка экранчика 16х2 (примерно +1100 байт) без LCD неверно работает DS3231 //#define SDCARD // Поддержка записи на SD карту (примерно +6740 байт) // Выводы Arduino const byte PIN_CS = 4; // Chip select для SD карты const byte PIN_LATCH = 8; // Затвор сдвигового регистра (ST_CP) const byte PIN_ONEWIRE = 9; // Шина для датчиков температуры (OneWire) const byte PIN_DATA = 11; // Данные для сдвигового регистра (DS) const byte PIN_CLOCK = 12; // Тактирование сдвигового регистра (SH_CP) const byte PIN_LED = 13; // Индикаторный светодиод // В разработке... const byte PIN_POWER = 6; // Датчик наличия электроэнергии const byte PIN_PIR = 7; // Датчик движения const byte PIN_WATERCONTROL = A0; // Проверка уровня воды в резервуаре const byte PIN_LIGHTCONTROL = A1; // Проверка уровня освещенности const byte PIN_CO2CONTROL = A2; // Проверка уровня углекислого газа // A4, A5 зарезервированы для I2C // Общее #include <EEPROM.h> #include <Streaming.h> // snprintf #include <Wire.h> const int DS3231_I2C_ADDRESS = 0x68; char buf[30]; // Буфер для вывода snprintf // Термодатчик DS18B20 #include <OneWire.h> #include <DallasTemperature.h> OneWire oneWire(PIN_ONEWIRE); DallasTemperature sensors(&oneWire); // Спящий режим #include <avr/sleep.h> #include <avr/power.h> #include <avr/wdt.h> // I2C LCD #ifdef LCD #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display #endif // SD карта #ifdef SDCARD #include <SD.h> // On the Ethernet Shield, CS is pin 4. Note that even if it's not // used as the CS pin, the hardware CS pin (10 on most Arduino boards, // 53 on the Mega) must be left as an output or the SD library // functions will not work. byte sd_ready = false; #endif // Часы byte day = 1; byte hours = 0; byte minutes = 0; byte seconds = 0; // Время в гексаминутах (так в 1 байт помещается любое время суток с точностью до 1/10 часа) byte time = 0; // Время суток byte water_time = 0; // Время последнего полива // Состояние системы // 0 - работает // 1 - цикл закончен byte restart = false; // Теплостаты byte t_online[2] = {false, false}; // Наличие термодатчиков float t_val[2] = {22.0, 23.5}; // Значение термодатчиков // Сдвиговый регистр byte switches = 0; // Состояние выводов сдвигового регистра const byte LIGHT = 0; const byte WATER = 1; const byte T1_UP = 2; const byte T1_DOWN = 3; const byte T2_UP = 4; const byte T2_DOWN = 5; // Настройки (EEPROM) const byte CONF_ADDR = 0; // Адрес размещения настроек в EEPROM const byte CONF_VER = 1; // Версия настроек. Для обнуляения настроек при перепрошивке. struct ConfigStruct { byte version; float t_min[2]; float t_max[2]; float wd; // Разница температур, как условие для полива. Если разница небольшая, то датчик в земле сухой. byte wp; // Время проверки необходимости полива в гексаминутах. byte wt; // Время длительности полива в секундах. byte light[3]; // Световая схема на каждый из ### дней. В гексаминутах. } config = { CONF_VER, {22.00, 21.00} , {26.00, 26.00} , 1.50, 10, 1, // Полив каждый час, если разница датчиков меньше 1.5 градуса, длительность полива 1 секунда {180,120,60} , // Продолжительность дня в гексоминутах. День начинается с полуночи. 120 гексаминут = 12 часов }; // Прерывания #ifdef TIME_WD ISR(WDT_vect) { digitalWrite(PIN_LED, !digitalRead(PIN_LED)); } #endif // Управление через терминал void serialEvent() { float t = 0; int num = 0; char cmd, param; byte light_h, light_m; while (Serial.available()) { cmd = Serial.read(); Serial << "Command: " << cmd << endl; switch (cmd) { case 'l': // Настройки плана освещения light2=12:00 num = Serial.parseInt(); if (num < 1 || num > sizeof(config.light)) { break; } light_h = Serial.parseInt(); light_m = Serial.parseInt(); config.light[num - 1] = light_h * 10 + light_m / 6; time_to_buf(light_h, light_m); Serial << "Set light: " << num << " to " << buf << endl; break; case 'r': param = Serial.read(); switch (param) { case 'e': // restart restart = true; day = 1; break; case 't': // Установить время rtc=1:12:34:56 day = Serial.parseInt(); hours = Serial.parseInt(); minutes = Serial.parseInt(); seconds = Serial.parseInt(); #ifdef TIME_DS3231 ds3231_settime(); #endif break; } break; case 's': param = Serial.read(); switch (param) { case 't': // status status_show(); break; case 'a': // save config_save(); break; case 'w': // switches do_log(); break; } break; case 'w': // watering settings param = Serial.read(); switch (param) { case 'p': // wp config.wp = Serial.parseInt(); // watering period break; case 't': // wt config.wt = Serial.parseInt(); // watering time (in seconds) break; case 'd': // wd config.wd = Serial.parseFloat(); // разница температур для полива break; } break; case 't': // Примеры: t1=25.3 t2max=28 t1min=22.5 // t1, t2 num = Serial.parseInt(); if (num < 1 || num > sizeof(t_online)) { break; } // min=, max= param = Serial.read(); if (param == 'm') { param = Serial.read(); t = Serial.parseFloat(); switch (param) { case 'i': // min config.t_min[num - 1] = t; break; case 'a': // max config.t_max[num - 1] = t; } } #ifdef FAKE_TEMP else { // = t_val[num - 1] = Serial.parseFloat(); } #endif break; default: Serial << "Ask zagzag2008@gmail.com for commands ;)" << endl; } while (Serial.available()) { Serial.read(); } // Serial.flush(); } } void setup() { pinMode(PIN_LED, OUTPUT); pinMode(PIN_LATCH, OUTPUT); pinMode(PIN_CLOCK, OUTPUT); pinMode(PIN_DATA, OUTPUT); #ifdef SDCARD pinMode(10, OUTPUT); sd_ready = SD.begin(PIN_CS); // Попробовать перенести инициализацию в функцию do_log #endif #ifdef LCD lcd.init(); lcd.backlight(); #endif #ifdef TIME_WD // Watchdog timer MCUSR &= ~(1<<WDRF); /* Clear the reset flag. */ WDTCSR |= (1<<WDCE) | (1<<WDE); WDTCSR = 1<<WDP0 | 1<<WDP3; /* 8.0 seconds */ /* set new watchdog timeout prescaler value */ WDTCSR |= _BV(WDIE); /* Enable the WD interrupt (note no reset). */ #endif Serial.begin(9600); sensors.begin(); ds3231_gettime(); config_load(); status_show(); #ifdef RTC_3231 Wire.begin(); Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0x0E); // Wire.write(B00000000); // Wire.write(B10001000); Wire.write(B00011100); // ####Разобраться с флагами! Wire.endTransmission(); #endif } void loop() { #ifdef TIME_FAKE seconds += 60; delay(10); // Обработчик часов и дней if (seconds >= 60) { minutes++; seconds -= 60; if (minutes == 60) { hours++; minutes = 0; if (hours == 24) { day++; hours = 0; if (day > sizeof(config.light)) { restart = true; } } } #endif #ifdef TIME_WD seconds += 8; // Watchdog срабатывает каждые 8 секунд // Обработчик часов и дней if (seconds >= 60) { minutes++; seconds -= 59; // подобранное значение для коррекции if (minutes == 60) { hours++; minutes = 2; // подобранное значение для коррекции if (hours == 24) { day++; hours = 0; if (day > sizeof(config.light)) { restart = true; } } } #endif #ifdef TIME_DS3231 if (ds3231_gettime() == true) { // ds3231_gettime - TRUE при смене минуты #endif // Текущее время в гексаминутах, округляем, да. time = hours * 10 + minutes / 6; // В одном часе 10 гексаминут // Свет switch_set(LIGHT, ((time < config.light[day - 1]) ? HIGH : LOW)); // Опрос термометров #ifdef FAKE_TEMP t_online[0] = true; t_online[1] = true; #else sensors.requestTemperatures(); // byte c = sensors.getDeviceCount(); // for (byte num = 0; num < c; num++) { for (byte num = 0; num < sizeof(t_online); num++) { t_val[num] = sensors.getTempCByIndex(num); t_online[num] = ((t_val[num] == -127.00) ? true : false); } #endif // Полив if (t_online[0] == true && t_online[1] == true) { if (abs(t_val[0] - t_val[1]) < config.wd) { if (abs(time - water_time) >= config.wp) { water_time = time; switch_set(WATER, HIGH); delay(config.wt * 1000); switch_set(WATER, LOW); } } } // Термостат if (t_online[0] == true) { // switch_set(T1_DOWN, ((t_val[0] > config.t_max[0]) ? HIGH : LOW)); // switch_set(T1_UP, ((t_val[0] < config.t_min[0]) ? HIGH : LOW)); switch_set(T1_DOWN, t_val[0] > config.t_max[0]); switch_set(T1_UP, t_val[0] < config.t_min[0]); } if (t_online[1] == true) { // switch_set(T2_DOWN, ((t_val[1] > config.t_max[1]) ? HIGH : LOW)); // switch_set(T2_UP, ((t_val[1] < config.t_min[1]) ? HIGH : LOW)); switch_set(T2_DOWN, t_val[1] > config.t_max[1]); switch_set(T2_UP, t_val[1] < config.t_min[1]); } // Сообщения об ошибках #ifdef LCD lcd.setCursor(0, 1); for (byte num = 0; num < sizeof(t_online); num++) { if (num > 0) { lcd << ", "; } lcd << "T" << (num + 1) << " n/a"; } #endif } #ifdef LCD time_to_buf(); lcd.home(); lcd << buf; #endif // Цикл завершен? if (restart) { Serial << "Cycle restarted. Complete " << (day - 1) << " of " << sizeof(config.light) << " days." << endl; restart = false; day = 1; } #ifdef SLEEPMODE do_sleep(); // В спящий режим #endif } // Функции void time_to_buf() { snprintf(buf, sizeof(buf), "%03d:%02d:%02d:%02d", day, hours, minutes, seconds); } void time_to_buf(byte h, byte m) { snprintf(buf, sizeof(buf), "%02d:%02d", h, m); } void status_show() { Serial << "Temperatures:" << endl; for (byte num = 0; num < sizeof(t_online); num++) { Serial << (num + 1) << " (" << ((t_online[num] == true) ? "on" : "off") << ") = " << t_val[num] << ". min = " << config.t_min[num] << ", max = " << config.t_max[num] << endl; } byte water_time_h = water_time / 10; byte water_time_m = (water_time % 10) * 6; time_to_buf(water_time_h, water_time_m); Serial << "Watering " << config.wt << " sec. every " << (config.wp * 6) << " min. if difference of temp. < " << _FLOAT(config.wd, 2) << endl << "Last watering: " << buf << endl; Serial << "Light: "; byte light_time_h = 0, light_time_m = 0; for (byte num = 0; num < sizeof(config.light); num++) { light_time_h = config.light[num] / 10; light_time_m = (config.light[num] % 10) * 6; time_to_buf(light_time_h, light_time_m); Serial << (num + 1) << '=' << buf << ' '; } Serial << endl; } // CONFIG void config_load() { Serial << "Config: "; if (EEPROM.read(CONF_ADDR) != CONF_VER) { Serial << "DEFAULT"; } else { for (unsigned int t = 0; t < sizeof(config); t++) *((char *)&config + t) = EEPROM.read(CONF_ADDR + t); Serial << "EEPROM"; } Serial << endl; } void config_save() { for (unsigned int t = 0; t < sizeof(config); t++) { EEPROM.write(CONF_ADDR + t, *((char *)&config + t)); } Serial << "Config saved!" << endl; } void switch_set(byte pos, byte state) { static byte switches_old = 0; bitWrite(switches, pos, state); if (switches == switches_old) { return; } switches_old = switches; digitalWrite(PIN_LATCH, LOW); shiftOut(PIN_DATA, PIN_CLOCK, MSBFIRST, switches); // MSBFIRST - с первого (левого) бита digitalWrite(PIN_LATCH, HIGH); do_log(); } #ifdef SLEEPMODE void do_sleep(void) { Serial.flush(); set_sleep_mode(SLEEP_MODE_IDLE); sleep_enable(); // Отрубаем лишнюю периферию power_adc_disable(); power_spi_disable(); power_timer0_disable(); power_timer1_disable(); power_timer2_disable(); power_twi_disable(); sleep_mode(); sleep_disable(); power_all_enable(); } #endif void do_log() { time_to_buf(); Serial << buf; #ifdef SDCARD File dataFile = SD.open("log.txt", FILE_WRITE); if (dataFile) { dataFile << buf; } #endif snprintf(buf, sizeof(buf), " light=%d water=%d t1_up=%d ", bitRead(switches, LIGHT), bitRead(switches, WATER), bitRead(switches, T1_UP)); Serial << buf; #ifdef SDCARD if (dataFile) { dataFile << buf; } #endif snprintf(buf, sizeof(buf), "t1_down=%d t2_up=%d t2_down=%d\n", bitRead(switches, T1_DOWN), bitRead(switches, T2_UP), bitRead(switches, T2_DOWN)); Serial << buf; #ifdef SDCARD if (dataFile) { dataFile << buf; dataFile.close(); } #endif } #ifdef TIME_DS3231 boolean ds3231_gettime() { static byte rtc_day = 0, rtc_day_prev = 0, minutes_prev = 0; Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0x00); Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 4); if (Wire.available()) { seconds = Wire.read(); minutes = Wire.read(); hours = Wire.read(); rtc_day = Wire.read(); seconds = (((seconds & B11110000) >> 4) * 10 + (seconds & B00001111)); minutes = (((minutes & B11110000) >> 4) * 10 + (minutes & B00001111)); hours = (((hours & B00110000) >> 4) * 10 + (hours & B00001111)); rtc_day = (rtc_day & B00000111); // 1-7 if (rtc_day != rtc_day_prev) { if (rtc_day_prev != 0) { // При запуске не прибавляем еще один день day++; if (day > sizeof(config.light)) { restart = true; } } rtc_day_prev = rtc_day; } } if (minutes != minutes_prev) { minutes_prev = minutes; return true; } else { return false; } } void ds3231_settime() { Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0x00); Wire.write(decToBcd(seconds)); Wire.write(decToBcd(minutes)); Wire.write(decToBcd(hours)); Wire.endTransmission(); } byte decToBcd(byte val) { return ((val / 10 * 16) + (val % 10)); } #endif
расскажу вам кое что про такие лампы. у меня 3*2Вт, и то нагреваются прилично, ваша наверно будет просто раскалятся
линзы которые стоят направляют в основном цель в точку, если лампа на 1 небольшое растение пойдет, а если 1 но длиное то нет. нужно светить в разные стороны, чтобы что не попало от этой лампы попало от другой
лучше отделать стены отражающим покрытием
полив исходя из разницы температуры еще не встречал, ну дело ваше
а вам света солнца точно не хватит?
можете не заморачиваться с автоматическим поливом, сейчас удобнее, стабильнее и дешевле обойдется капельный полив
Список команд для терминала:
st - Вывести информацию о настройках и датчиках (status)
sw - вывести текущее время и состояние управляющих пинов (switches)
sa - сохранить настройки в EEPROM (save)
t1=22.5 - установить показание для датчика темературы (при фейковых температурах)
t1max=27.0 - установить максимальный предел температуры для включения охладителя
t1min=22.1 - минимальный порог темепературы для включения нагревателя
l1=12:00 - установить время выключения света для первого дня. В скетче пока прописаны 3 дня, можно увеличить массив на сколько нужно (light)
re - перезагрузить программу (день = 1) (restart)
rt=2:12:34:56 - установить 2 день и время 12:34:56 в RTC
wp=1 - установить время проверки для полива = 6 минут (1/10 часа)
wt=3 - установить продолжительность полива = 3 секунды
wd=1.5 - условие полива, если разница между датчиками меньше 1.5 градуса
Вообще мысль всетаки о гидропонике с периодическим затоплением. Главное, чтобы прямоты рук хватило это реализовать.
На счет разницы температур сам не уверен. Где-то валяется DHT-21 (датчик влажности)
Лампу пока прислали одну, еще 3 будут через пару месяцев. На buyincoins.com не первый раз такие закидоны. Есть мысль купить нормальную садоводческую лампу на 400 ватт, натриевую, но она греется и жрёт побольше светодиодных.
мое мнение лучше купить 36вт ламп дневных - палок. да спектр неидельный, но зато доступно, легкая замена, легко достигается нужный световой поток
с гидропоникой с периодическим затоплением уже намучался. главная проблема что тухнет вода. поэтому важна окружающая температура, чистота, предварительная обработка тары хлоркой и т.п.
Вода тухнет или цветет, если на нее попадает свет. Нужно хорошо светоизолировать емкость с водой.
Световой поток (люмены) и освещенность (люксы) - совсем разные понятия.
Световой поток не складывается из количества ламп, а зависит от мощности. Не знаю насколько он хорош у светодиодов, тут дело больше в экономию упирается. Лампы LED мне достались за дешево.
а ну раз так вы и сами знаете что делать
Ну в теории-то да, практика покажет насколько знаю. Сложнее освоить составление растворов для гидропоники. Ph-метр есть
Освещение планируется светодиодное 4 лампы по 54 ватта http://www.buyincoins.com/item/42980.html
Лампы левые. 99.9% обыкновенные синие и красные диоды и 90% что одноваттные. Замерьте ток.
Хорошие форумы на http://gidroponika.com/ и http://www.ponics.ru/. Информация на самих сайтах мало обновляется, но форумы активны и народу опытного хватает. Сам потихоньку выращиваю помидоры-керамзит-периодика и огурцы-торф-капля. Ну и зелень всякая. Свет люмки и диоды. Светильники диодные лучше самому собирать из 3ваттных диодов сажая их на алюминиевый профиль. Если делать под бокс, то и охлаждать их значительно проще. Легко сделать охлаждение вентилятором, не затрагивая основной объем бокса.
Спасибо. А по деньгам сильно дорого выходит? Читал, как кто-то выращивал помидоры, получалось дешевле магазинных и вкуснее, само собой.
18 ваттные лампы. Не замерял, но разобрал одну. Там так и написано 18 ватт :(
Светодиодный прожектор светит гораздо ярче, а он 36 ваттный.
Поставлю натриевую лампу 250 ваттную для начала (на квадратный метр)
Поверьте, натриевые лампы, впрочем как и ДРЛ, потребляют не больше светодиодных светильников. Ну разве чуточку больше, а цена им копейки. Идея с двумя термометрами хорошая.
копейки? если только сами лампы рублей 400. блоки питания к ним в 5 раза дороже лампы
Да ладно, не всё так плохо. http://shop220.ru/cat2292.htm
А электронный балласт им не обязательно ставить, достаточно обычного дросселя из любой газоразрядной лампы. Даже лампу накаливания в качестве дросселя можно использовать, только не экономично получится.
схему приведите. вы так сами делали?
http://www.youtube.com/watch?v=dNhqhKjignk
Извините, забыл ИЗУ добавить.
Сам не подключал, но подключенные видел много раз в теплицах.
и сколько стоит изу?
200-250р
И еще один момент. Во всяких Осрамах и Филлипсах по 350р и выше ИЗУ уже встроен и не требуется.
ссылку дайте на лампы с изу и изу за 250 рублей
либо магазины в которых смотрел накручивают в 10 раз цены, либо вы что то путаете
growhobby.ru/izu-1m-100600.html
Если в 10 раз накручивают, то лучше брать лампы со встроенной электронной начинкой и просто в розетку включать. Как энергосберегайки. Натриевая лампа та же газоразрядная по сути. Я тупо ДРЛ 400 повесил в теплицу на зимний период.
дайте пожалуйста ссылку на лампу со встроенной электроникой, аналог наших дрл
вот самый дешевый комплект на 400 ватт
http://growhobby.ru/komplekt-dnat-400-jekonom.html
http://electricalschool.info/main/lighting/459-sovremennye-natrievye-lam...
Фирма OSRAM предлагает также серию маломощных ламп, не требующих зажигающего устройства (горелки содержат смесь Пеннинга). Однако их световая отдача на 14 — 15 % ниже, чем у стандартных ламп.
Одно из достоинств ламп, не требующих импульсного зажигающего устройства, — возможность их установки в светильники для ртутных ламп (при прочих необходимых условиях). Например, лампа NAV E 110 со световым потоком 8000 лм вполне взаимозаменяема со ртутной лампой типа ДРЛ-125> имеющей номинальный световой поток 6000 — 6500 лм. Подобные отечественные разработки давно применяются в нашей стране. В настоящее время ОАО ЛИСМА, например, выпускает лампы ДНаТ 210 и ДНаТ 360, предназначенные для прямой замены ДРЛ 250 и ДРЛ 400 соответственно.
Это потому что Вы на растениеводческих сайтах смотрите, а в электротоварах, особенно на оптовых складах, можно без проблем вдвое дешевле взять. Да и 400Вт лампа не слабо светить будет и теплицу греть. Тут от площади зависит конечно. Ну и от солнышка тоже. Я в январе начинаю рассаду сажать, световой день короткий и пасмурно почти всегда. Для марта-апреля совсем другая досветка нужна. А с мая и дальше вообще не нужна имхо.
Ну Вы что. Какой ДРЛ. Вы хоть читайте, что автор темы пишет. Бокс. Не теплица. На метр квадратный. Там ДРЛ ватт под 500 надо будет, если не больше. С ее то КПД. Ему греть не надо, если конечно не на балконе будет. Ему свет надобен. Так что либо ДНАТ, 250вт скорее всего мало если жарко будет, к ней бы хорошо синеньких диодов на 440нм добавить ватт на 30, либо чисто диоды. ДНАТ надо отделять от основного бокса и отдельно охлаждать. С диодами тепло отводить проще.
По деньгам не могу сказать. У меня на счет электричества пока коммунизм. Удобрение копейки если не покупать разные фирменные для гидропоники.
Спасибо, но хотелось про скетч услышать. На счет оборудования полезу в садоводческие форумы.
Запись на SD карту не проверял, у меня модуль ща сломан немного. И сама идея с двумя датчиками пока не проверена.
Идея с двумя датчиками должна учитывать, что ночью воздух быстрее почвы (или в чем там будут расти огурцы) остывать будет.
Честно говоря, сперва надо определиться, в чем выращивать. Если периодика та там датчик в почве не нужен. У меня просто через 40-50 минут в зависимости от температуры включается помпа и минут 10 качает. Датчик уровня стоит докуда качать. Но тут надо подбирать в зависимости от объёма и типа субстрата. Ну и от растения завист. SD не очень удобно. Датчик влажности обязательно. Хотя бы DHT22.
Не будет это работать, так как там много параметров учитывать надо. В том числе и разницу во влажности почвы и воздуха ))
А у меня вот какая мысль возникла. Не так давно стала увлекаться выращиванием на гидропонике - очень интересно . А сейчас хочу гроутент купить , будут "работать" одновременно с теплиуцей. Можно найерное тоже назвать своеобразной теплицей, только по другой технологии.