Теплица

ZagZag
Offline
Зарегистрирован: 08.05.2014

Уже давно разрабатываю проект на досуге. Он никак не связан с основной работой, поэтому разработка идет медленно. Основная задумка - выращивать растения в закрытом боксе (огурцы, например, ага)

Собственно, еще не определился будет это гидропоника или земля.

Освещение планируется светодиодное 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

 
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

расскажу вам кое что про такие лампы. у меня 3*2Вт, и то нагреваются прилично, ваша наверно будет просто раскалятся

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

лучше отделать стены отражающим покрытием

полив исходя из разницы температуры еще не встречал, ну дело ваше

а вам света солнца точно не хватит?

можете не заморачиваться с автоматическим поливом, сейчас удобнее, стабильнее и дешевле обойдется капельный полив

ZagZag
Offline
Зарегистрирован: 08.05.2014

Список команд для терминала:

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 градуса

ZagZag
Offline
Зарегистрирован: 08.05.2014

Вообще мысль всетаки о гидропонике с периодическим затоплением. Главное, чтобы прямоты рук хватило это реализовать.

На счет разницы температур сам не уверен. Где-то валяется DHT-21 (датчик влажности)

Лампу пока прислали одну, еще 3 будут через пару месяцев. На buyincoins.com не первый раз такие закидоны. Есть мысль купить нормальную садоводческую лампу на 400 ватт, натриевую, но она греется и жрёт побольше светодиодных.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

мое мнение лучше купить 36вт ламп дневных - палок. да спектр неидельный, но зато доступно, легкая замена, легко достигается нужный световой поток

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

ZagZag
Offline
Зарегистрирован: 08.05.2014

Вода тухнет или цветет, если на нее попадает свет. Нужно хорошо светоизолировать емкость с водой.

Световой поток (люмены) и освещенность (люксы) - совсем разные понятия.

Световой поток не складывается из  количества ламп, а зависит от мощности. Не знаю насколько он хорош у светодиодов, тут дело больше в экономию упирается. Лампы LED мне достались за дешево.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а ну раз так вы и сами знаете что делать

ZagZag
Offline
Зарегистрирован: 08.05.2014

Ну в теории-то да, практика покажет насколько знаю. Сложнее освоить составление растворов для гидропоники. Ph-метр есть

buka
buka аватар
Offline
Зарегистрирован: 07.06.2012

ZagZag пишет:

Освещение планируется светодиодное 4 лампы по 54 ватта http://www.buyincoins.com/item/42980.html

Лампы левые. 99.9% обыкновенные синие и красные диоды и 90% что одноваттные. Замерьте ток.

buka
buka аватар
Offline
Зарегистрирован: 07.06.2012

Хорошие форумы на http://gidroponika.com/  и http://www.ponics.ru/. Информация на самих сайтах мало обновляется, но форумы активны и народу опытного хватает. Сам потихоньку выращиваю помидоры-керамзит-периодика и огурцы-торф-капля. Ну и зелень всякая. Свет люмки и диоды. Светильники диодные лучше самому собирать из 3ваттных диодов сажая их на алюминиевый профиль. Если делать под бокс, то и охлаждать их значительно проще. Легко сделать охлаждение вентилятором, не затрагивая основной объем бокса.

ZagZag
Offline
Зарегистрирован: 08.05.2014

Спасибо. А по деньгам сильно дорого выходит? Читал, как кто-то выращивал помидоры, получалось дешевле магазинных и вкуснее, само собой.

 18 ваттные лампы. Не замерял, но разобрал одну. Там так и написано 18 ватт :(

Светодиодный прожектор светит гораздо ярче, а он 36 ваттный.

Поставлю натриевую лампу 250 ваттную для начала (на квадратный метр)

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Поверьте, натриевые лампы, впрочем как и ДРЛ, потребляют не больше светодиодных светильников. Ну разве чуточку больше, а цена им копейки. Идея с двумя термометрами хорошая.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

копейки? если только сами лампы рублей 400. блоки питания к ним в 5 раза дороже лампы

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Да ладно, не всё так плохо. http://shop220.ru/cat2292.htm

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

схему приведите. вы так сами делали?
 

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

http://www.youtube.com/watch?v=dNhqhKjignk

Извините, забыл ИЗУ добавить.

Сам не подключал, но подключенные видел много раз в теплицах.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

и сколько стоит изу?

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

200-250р

И еще один момент. Во всяких Осрамах и Филлипсах по 350р и выше ИЗУ уже встроен и не требуется.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ссылку дайте на лампы с изу и изу за 250 рублей

либо магазины в которых смотрел накручивают в 10 раз цены, либо вы что то путаете

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

growhobby.ru/izu-1m-100600.html
Если в 10 раз накручивают, то лучше брать лампы со встроенной электронной начинкой и просто в розетку включать. Как энергосберегайки. Натриевая лампа та же газоразрядная по сути. Я тупо ДРЛ 400 повесил в теплицу на зимний период.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

дайте пожалуйста ссылку на лампу со встроенной электроникой, аналог наших дрл

вот самый дешевый комплект на 400 ватт

http://growhobby.ru/komplekt-dnat-400-jekonom.html

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

http://electricalschool.info/main/lighting/459-sovremennye-natrievye-lam...

Фирма OSRAM предлагает также серию маломощных ламп, не требующих зажигающего устройства (горелки содержат смесь Пеннинга). Однако их световая отдача на 14 — 15 % ниже, чем у стандартных ламп.

Одно из достоинств ламп, не требующих импульсного зажигающего устройства, — возможность их установки в светильники для ртутных ламп (при прочих необходимых условиях). Например, лампа NAV E 110 со световым потоком 8000 лм вполне взаимозаменяема со ртутной лампой типа ДРЛ-125> имеющей номинальный световой поток 6000 — 6500 лм. Подобные отечественные разработки давно применяются в нашей стране. В настоящее время ОАО ЛИСМА, например, выпускает лампы ДНаТ 210 и ДНаТ 360, предназначенные для прямой замены ДРЛ 250 и ДРЛ 400 соответственно.

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Это потому что Вы на растениеводческих сайтах смотрите, а в электротоварах, особенно на оптовых складах, можно без проблем вдвое дешевле взять. Да и 400Вт лампа не слабо светить будет и теплицу греть. Тут от площади зависит конечно. Ну и от солнышка тоже. Я в январе начинаю рассаду сажать, световой день короткий и пасмурно почти всегда. Для марта-апреля совсем другая досветка нужна. А с мая и дальше вообще не нужна имхо.

buka
buka аватар
Offline
Зарегистрирован: 07.06.2012

Ну Вы что. Какой ДРЛ. Вы хоть читайте, что автор темы пишет. Бокс. Не теплица. На метр квадратный. Там ДРЛ ватт под 500 надо будет, если не больше. С ее то КПД. Ему греть не надо, если конечно не на балконе будет. Ему свет надобен. Так что либо ДНАТ, 250вт скорее всего мало если жарко будет, к ней бы хорошо синеньких диодов на 440нм добавить ватт на 30, либо чисто диоды. ДНАТ надо отделять от основного бокса и отдельно охлаждать. С диодами тепло отводить проще.

buka
buka аватар
Offline
Зарегистрирован: 07.06.2012

По деньгам не могу сказать. У меня на счет электричества пока коммунизм. Удобрение копейки если не покупать разные фирменные для гидропоники.

ZagZag
Offline
Зарегистрирован: 08.05.2014

Спасибо, но хотелось про скетч услышать. На счет оборудования полезу в садоводческие форумы.

Запись на SD карту не проверял, у меня модуль ща сломан немного. И сама идея с двумя датчиками пока не проверена.

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Идея с двумя датчиками должна учитывать, что ночью воздух быстрее почвы (или в чем там будут расти огурцы) остывать будет.

buka
buka аватар
Offline
Зарегистрирован: 07.06.2012

Честно говоря, сперва надо определиться, в чем выращивать. Если периодика та там датчик в почве не нужен. У меня просто через 40-50 минут  в зависимости от температуры включается помпа и минут 10 качает. Датчик уровня стоит докуда качать.  Но тут надо подбирать в зависимости от объёма и типа субстрата. Ну и от растения завист. SD не очень удобно. Датчик влажности обязательно. Хотя бы DHT22. 

buka
buka аватар
Offline
Зарегистрирован: 07.06.2012

Не будет это работать, так как там много параметров учитывать надо. В том числе и разницу во влажности почвы и воздуха ))

Soladisom
Offline
Зарегистрирован: 19.06.2015

А у меня вот какая мысль возникла. Не так  давно  стала увлекаться выращиванием на гидропонике -  очень интересно . А сейчас хочу гроутент купить , будут "работать" одновременно  с теплиуцей. Можно  найерное тоже назвать своеобразной теплицей, только по другой технологии.