• Нравится 2
Перейти к публикации

Умная теплица или гроубокс для фрика)

Оцените эту тему


RPSVoloch

Рекомендованные сообщения

Всем доброго времени суток.
 
Часть первая. Начало

 

В интернете много всяких тем по гроубоксам или теплицам с мозгами но все они стоят огого сколько денег! Изучив так сказать рынок и естесно матчасть решил предложить люду своё видение устройства которое поможет не только канаплеводам но и обычному рядовому человеку.
post-31477-0-78783400-1447434354_thumb.jpg
post-31477-0-44662400-1447418364_thumb.jpgpost-31477-0-89391400-1447418382_thumb.jpgpost-31477-0-40315200-1447418397_thumb.jpg
 
Необходимые компоненты:
Общие

Войдите или зарегистрируйтесь для просмотра содержимого. Купить семена конопли.

 (без них работать ничего не будет)
 (надо на каждую ёмкость с раствором по 1 ШТ)
 
Для земли
Для DWC
 
 
 
Маленькая оговорка - если у вас есть желание сделать тепличку размерами больше 3\3м то боюсь вам придётся самим делать конструкцию наружную но все мозги и коды идеально впишутся с небольшими доработками.
 
Фотография готового узла с мозгами и модулями управления Версия конструкции 2.1!!!!
post-31477-0-85838800-1447414152_thumb.jpgpost-31477-0-04971600-1447414164_thumb.jpgpost-31477-0-36778400-1447414188_thumb.jpg
Часть с мозгами версия 3.1 (еле нашёл в своих закромах фотки) БП от компа на 350 ват (не предназначен для самопал ЛЕД понелей!)
post-31477-0-81070200-1447414334_thumb.jpgpost-31477-0-22265100-1447414350_thumb.jpgpost-31477-0-42541600-1447414364_thumb.jpgpost-31477-0-99514200-1447414376_thumb.jpgpost-31477-0-48268400-1447414388_thumb.jpgpost-31477-0-55998000-1447414402_thumb.jpgpost-31477-0-08656300-1447414418_thumb.jpgpost-31477-0-56424700-1447414434_thumb.jpg
Часть с мозгами версия 3.4 (с установленным компрессором для систем DWC)
post-31477-0-53277400-1447414615_thumb.jpgpost-31477-0-26406600-1447414632_thumb.jpgpost-31477-0-80353000-1447414643_thumb.jpgpost-31477-0-66205400-1447414660_thumb.jpgpost-31477-0-82337500-1447414678_thumb.jpgpost-31477-0-07068600-1447414692_thumb.jpgpost-31477-0-11640000-1447414707_thumb.jpg
 
Изначально в планах было сделать просто тепличку для растений и банальной логикой. Но вот Остапа понесло...
 

Часть 2

 

Сборка угольного фильтра для воздуха.
Вариант 1 (поглощает абсолютно все запахи но зараза громоздкий и создаёт большое сопротивление воздуху) 
post-31477-0-11268800-1447414793_thumb.jpgpost-31477-0-18696300-1447414812_thumb.jpgpost-31477-0-75709800-1447414832_thumb.jpgpost-31477-0-07020100-1447414851_thumb.jpg
Собирается по аналогии с вариантом 2 но более геморроен в сборке.
 
Вариант 2 (простенький вариант и не нужно больших вложений)
Корпус делается из гофры для вытяжки, крестовина так же делается из гофры. Прокладка (дабы кокосовый уголь не высыпался берётся из детских салфеток "Салфетки влажные Johnson's baby" (по углам чуть надрезается чтоб было легче укладывать в корпус)
post-31477-0-43473700-1447415900_thumb.jpgpost-31477-0-55980800-1447415913_thumb.jpgpost-31477-0-57086700-1447415926_thumb.jpgpost-31477-0-21657400-1447415941_thumb.jpgpost-31477-0-76640600-1447415960_thumb.jpgpost-31477-0-92928700-1447415973_thumb.jpgpost-31477-0-35101300-1447415988_thumb.jpgpost-31477-0-88394300-1447416003_thumb.jpgpost-31477-0-23276000-1447416036_thumb.jpgpost-31477-0-40430600-1447416053_thumb.jpgpost-31477-0-99526200-1447416068_thumb.jpgpost-31477-0-76015400-1447416087_thumb.jpgpost-31477-0-28070400-1447416100_thumb.jpgpost-31477-0-23617800-1447416116_thumb.jpgpost-31477-0-40812800-1447416128_thumb.jpgpost-31477-0-70147700-1447416142_thumb.jpgpost-31477-0-45387000-1447416157_thumb.jpg
Вуаля у нас есть настоящий угольный фильтр за 30р без особого геморроя и переплаты хрен знает за что.
Самое главное что размеры такого фильтра можно делать разные !
 
 
Часть 3 (свет)
Блок с ЭСЛ (самопал в жосткой конструкции для крепления через направляющую полного выката со стопором)
V1.0 - Была собрана свпециально для тестов (греется как тварь так что систему вентиляции продумывать как следует!!!)
post-31477-0-46026000-1449830653_thumb.jpgpost-31477-0-91510400-1449830766_thumb.jpgpost-31477-0-01935200-1449830854_thumb.jpgpost-31477-0-00495000-1449830917_thumb.jpg
 
 
Лед понель
, , 
Самопальная лед понель
Для того что бы можно было сварганить панель нам понадобиться программа "ExpressPCB"
Панели собраные из диодов 0.25Ват 5мм в диаметре.
 
Очень важно!!!!
При выборе диодов смотрите на показатель MCD так как оменно он характеризует силу света диода бывает большое колличество разновидностей этого показателя но я укажу самые оптимальные: красный - 10000mcd, синий - 15000mcd. При использования диодов с этими показателями ГАРАНТИРУЮ нормальное развитее растения вплоть до начала цветения. На цветении не проверял но исходя из спектра что выдают данные диоды думаю вполне смогут посоревноваться с DNAT на одинаковых мощьностях.
 
Вариант 1 - самый сложный не подразумевает циркуляцию в боксе + питается от 5В и потребляет 20А (попробуйте найдите такой блок питания)
post-31477-0-00633300-1447425349_thumb.jpg
 
К сожалению не могу загрузить саму плату на ресурс (пишет что не могу загружать файлы такого типа) так что довольствуйтесь скриншотом моего экрана.

V1.0

post-31477-0-78941300-1447425349_thumb.jpg

V2.0

post-31477-0-72524500-1447425540_thumb.jpg

Процедура создания модуля в кустарных условиях утюжно-лазерной технологией.

post-31477-0-32046500-1447425220_thumb.jpgpost-31477-0-26124300-1447425232_thumb.jpgpost-31477-0-93141200-1447425242_thumb.jpgpost-31477-0-81787000-1447425259_thumb.jpgpost-31477-0-44192600-1447425269_thumb.jpgpost-31477-0-80451400-1447425274_thumb.jpgpost-31477-0-77223100-1447425286_thumb.jpgpost-31477-0-04422900-1447425295_thumb.jpg Пятно на потолке расстояние 2.3 метра.

И это всего лишь 1 модуль из 19 которые установлены сейчас.

Каждый модуль питается от 12В и потребляет 1.3А (15.6 Вт)

 

ДНаТ и к нему светильник.

Так как в сети полно инструкций как подключить ДНаТ, а к нему и конденсатор то думаю сами справитесь. Для грамотных людей не составит проблемы по схеме на трансформаторе и ИЗУ посмотреть как это всё подключается.

COOLMASTER_final.thumb.png.b3f445741376c83d59bd167973e4f955.png

Конструкция делается исключительно под боксы с которыми сейчас работаю так что габариты под свои нужды пересчитывайте сами (минут 20 времени займёт если понимаешь что и как делать)

 

 

 

Часть 4 (скетч для Arduino)

Версия для тех кто не хочет подключать к ПК

Скрытый текст

// Запуск скетча
#include <LiquidCrystal.h>
#include <DS3231.h>
#include <DHT.h>
DS3231  rtc(SDA, SCL);
Time RTC_T;

// Загрузка начальных настроек
// Основные настройки скрипта. Изменения необходимо произвести под свои нужды!!!
// Скрипт расчитан на день но для тех кому необходимо сберечь деньги советую перенастроить на ночной режим и счётчик будет считать по другому тарифу.

long led_on = 05;              // Время включения диодов (устанавливается в часах)
long led_off = 23;             // Время выключения диодов (устанавливается в часах)
long dnat_on = 05;             // Время включения DNAT (устанавливается в часах)
long dnat_off = 23;            // Время выключения DNAT (устанавливается в часах)
long lumen_on = 05;            // Время включения ЭСЛ (устанавливается в часах)
long lumen_off = 23;           // Время выключения ЭСЛ (устанавливается в часах)
long dosvet_on = 05;           // Время включения досвета (устанавливается в часах)
long dosvet_off = 23;          // Время выключения досвета (устанавливается в часах)
long circ_on = 05;             // Цыркуляция воздуха внутри. Время включения (устанавливается в часах).
long circ_off = 23;            // Цыркуляция воздуха внутри. Время выключения (устанавливается в часах).
/*
// Включение по времени (без контрольно тупо включает и если температура за бортом минус то будет трабл)
long ventilation_on = 05;      // Включение вентиляции (устанавливается в часах) рекомендую устанавливать во время включения света.
long ventilation_off = 23;     // Отключение вентиляции (устанавливается в часах) рекомендую устанавливать через час после выключения света.
*/
long ventilation_on = 27;      // Включение вентиляции (устанавливается в градусах цельсия).

long breeze_on = 01;           // Обдув растишек on (устанавливается в часах).
long breeze_off = 23;          // Обдув растишек off (устанавливается в часах).
long compressor_on = 9;        // Запуск компрессора для нагнетания воздуха в раствор.
long compressor_off = 23;      // Остановка компрессора для нагнетания воздуха в раствор.
long sprayings_on = 23;        // Запускается после выключения света, указываются минуты начала опрыскивания.
long sprayings_off = 24;       // Минуты остановки опрыскивания.
long a_heating_on = 25;        // Температура включения обогрева воздуха (градусы цельсия)
long a_cooling_on = 25;        // Температура включения охлаждения воздуха (градусы цельсия)
long w_heating_on = 25;        // Температура включения обогрева воды (градусы цельсия)
long w_cooling_on = 25;        // Температура включения охлаждения воды (градусы цельсия)
long humidifier_on = 50;       // Минимальная влажность для включения увлажнителя воздуха.

// Инициализация железа
// Пины для подключения к Ардуино датчиков и исполняемых модулей.
// Исполняемые модули
int dnat = 20;             // DNAT  Вместо того реле что покупается на али обязательно поставить по мощьности превышающее в 2 раза потребление лампы иначе залипнет и не будет работать!!!!
int dosvet = 21;           // То что будет использоваться для досвета. (в моём случае это люминисцентные лампы с цоколем G5)
int lumen = 22;            // Люмен
int led = 23;              // Диоды
int circulation = 24;      // Цыркуляция
int breeze = 25;           // Эмитация ветра
int ventilation = 26;      // Вентиляция
int compressor = 27;       // Компрессор
int sprayings = 28;        // опрыскивание
int humidifier = 29;       // Увлажнение воздуха
int a_heating = 30;        // обогрев воздуха
int a_cooling = 31;        // охлождение воздуха
int w_heating = 32;        // обогрев воды (раствора)
int w_cooling = 33;        // охлождение воды (раствора)

//Датчики
int W_Temp = 46;           // Температура воды
#define DHTPIN 47          // Температура и влажность воздуха
#define solution 40        // Датчик уровня раствора

#define DHTTYPE DHT11     // DHT 11
//#define DHTTYPE DHT22   // DHT 22
//#define DHTTYPE DHT21   // DHT 21
DHT dht(DHTPIN, DHTTYPE);

  LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);          // инициализируем LCD, указывая контакты данных

// Устанавливаем системные переменные для начала работы.
 void setup()
 {
 rtc.begin();
 dht.begin();
 Serial.begin(115200);
 pinMode(dnat, OUTPUT);              // Лампа ДНАТ
 pinMode(lumen, OUTPUT);             // Люмен
 pinMode(led, OUTPUT);               // Диоды
 pinMode(circulation, OUTPUT);       // Цыркуляция
 pinMode(ventilation, OUTPUT);       // Вентиляция
 pinMode(breeze, OUTPUT);            // Эмитация ветра
 pinMode(compressor, OUTPUT);        // Компрессор
 pinMode(a_heating, OUTPUT);         // обогрев воздуха
 pinMode(a_cooling, OUTPUT);         // охлождение вохдуха
 pinMode(w_heating, OUTPUT);         // обогрев воды
 pinMode(w_cooling, OUTPUT);         // охлождение воды
 lcd.begin(16, 2);
 lcd.print("Loading");
 delay(500);                // ждем 0.5 секунды
 lcd.print(".");
 delay(500);                // ждем 0.5 секунды
 lcd.print(".");
 delay(500);                // ждем 0.5 секунды
 lcd.print(".");
 delay(1000);               // ждем 1 секунду
 lcd.clear();               //очистка экрана
 }

void loop()
{
 lcd.clear();               //очистка экрана
 RTC_T = rtc.getTime();
 Serial.println(rtc.getTimeStr());
 float a_humidity = dht.readHumidity();
 float a_temp = dht.readTemperature();
 delay (2000);
    if (isnan(a_temp) || isnan(a_humidity)) {
    Serial.println("Failed to read from DHT");
    lcd.print("Failed read DHT.");
    } else {
    Serial.print("Humidity: ");
    Serial.print(a_humidity);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(a_temp);
    Serial.println(" *C");
    lcd.print("T=");
    lcd.print(a_temp);
    lcd.print(" H=");
    lcd.print(a_humidity);
    }
 

  double val_W = analogRead(W_Temp);
  double voltage = val_W*5.0/1024;
  double w_temp = voltage*100 - 273.15;
  float max_a_temp = 0, min_a_temp = 90;              // max/min значения температуры воды
  float max_w_temp = 0, min_w_temp = 90;              // max/min значения температуры раствора
  float max_a_humidity = 0, min_a_humidity = 90;      // max/min значения температуры раствора

// Проверка мин и макс температуры воздуха
    if(a_temp > max_a_temp) {
    max_a_temp = a_temp;
    } // max температура воздуха
    if(a_temp < min_a_temp) {
    min_a_temp = a_temp;
    } // min температура воздуха
// Проверка мин и макс температуры раствора (воды)
    if(w_temp > max_w_temp) {
    max_w_temp = w_temp;
    } // max температура воды
    if(w_temp < min_w_temp) {
    min_w_temp = w_temp;
    } // min температура воды
// Проверка влажности
    if(a_humidity > max_a_humidity) {
    max_a_humidity = a_humidity;
    } // max влажность
    if(a_humidity < min_a_humidity) {
    min_a_humidity = a_humidity;
    } // min влажность

    // Lumen
if ((RTC_T.hour) >= lumen_on && (RTC_T.hour) < lumen_off)
{
     digitalWrite(lumen, HIGH);
 }
else
{
     digitalWrite(lumen, LOW);
}
 
// LED
if ((RTC_T.hour) >= led_on && (RTC_T.hour) < led_off)
{
     digitalWrite(led, HIGH);
 }
else
{
     digitalWrite(led, LOW);
}
// DNAT
if ((RTC_T.hour) >= dnat_on && (RTC_T.hour) < dnat_off)
{
     digitalWrite(dnat, HIGH);
 }
else
{
     digitalWrite(dnat, LOW);
}

// Досвет
if ((RTC_T.hour) >= dosvet_on && (RTC_T.hour) < dosvet_off)
{
     digitalWrite(dosvet, HIGH);
 }
else
{
     digitalWrite(dosvet, LOW);
}
//Цыркуляция
if ((RTC_T.hour) >= circ_on && (RTC_T.hour) < circ_off)
{
  // Включить
      digitalWrite(circulation, HIGH);
}
else
{
  // Выключить
      digitalWrite(circulation, LOW);
}

//  Проветривание
/*
if ((RTC_T.hour) > ventilation_on && (RTC_T.hour) < ventilation_off)
        {
          // Включить
        digitalWrite(ventilation, HIGH);
        }
else
        {
          // Выключить
        digitalWrite(ventilation, LOW);
        }
*/

// ventilation TEMP (TEST)        
if (a_temp > ventilation_on)
        {
          // Включить
        digitalWrite(ventilation, HIGH);
        }
else
        {
          // Выключить
        digitalWrite(ventilation, LOW);
        }
//  Обдув (эмитация ветра)
if ((RTC_T.hour) >= breeze_on && (RTC_T.hour) < breeze_off)
        {
          // Включить
        digitalWrite(breeze, HIGH);
        }
else
        {
          // Выключить
        digitalWrite(breeze, LOW);
        }

//Обогрев
if (a_temp < a_heating_on)
      {
       // Включить обогрев воздуха
       digitalWrite(a_heating, HIGH);
      }
else
      {
      // Выключить обогрев воздуха
       digitalWrite(a_heating, LOW);
      }
if (w_temp < w_heating_on)
      {
       // Включить обогрев воды
       digitalWrite(a_heating, HIGH);
      }
else
      {
      // Выключить обогрев воды
       digitalWrite(a_heating, LOW);
      }
//  Охлаждение
if (a_temp > a_cooling_on)
        {
        // Включить охлождение воздуха
        digitalWrite(a_cooling, HIGH);
        }
else
        {
        // Выключить охлождение воздуха
        digitalWrite(a_cooling, LOW);
       }
if (w_temp > w_cooling_on)
       {
        // Включить охлождение воды
        digitalWrite(w_cooling, HIGH);
        }
else
        {
        // Выключить охлождение воды
        digitalWrite(w_cooling, LOW);
       }
// Компрессор
 if ((RTC_T.hour) >= compressor_on && (RTC_T.hour) < compressor_off)
        {
          // Включить
        digitalWrite(compressor, HIGH);
        }
else
        {
          // Выключить
        digitalWrite(compressor, LOW);
        }

// Опрыскивание
 if ((RTC_T.hour) == led_off && (RTC_T.min) >= sprayings_on && (RTC_T.hour) == led_off && (RTC_T.min) <= sprayings_off)
        {
          // Включить
        digitalWrite(sprayings, HIGH);
        }
else
        {
          // Выключить
        digitalWrite(sprayings, LOW);
        }
// Увлажнение воздуха
 if (a_humidity < humidifier_on)
        {
          // Включить
        digitalWrite(humidifier, HIGH);
        }
else
        {
          // Выключить
        digitalWrite(humidifier, LOW);
        }

        // Датчик уровня раствора    
  if (!digitalRead(solution))
  {
    // Что делать пропишете сами)
    // Низкий уровень раствора
    lcd.setCursor(0, 1);     // устанавливаем курсор в 0-ом столбце, 2 строке
    lcd.print("RASTVOR WARNING");
    }  
else
  {
    // Раствор в норме доливать не надо.
    lcd.setCursor(0, 1);     // устанавливаем курсор в 0-ом столбце, 2 строке
    lcd.print("RASTVOR OK");
  }   
}

 

В скетче вырезаны функции: опрыскивание растений из 4 растворов (работает криво так что будет только 1 вариант).

Скетч без подключения к компьютеру это конечный вариант и более его развития не будет!

Дальнейшее развитие только варианта с подключением к ПК.

 

 

 

Скетч с подключением к компьютеру (веб интерфейс и возможность дистанционного управления)

Скрытый текст

// Запуск скетча
#include <LiquidCrystal.h>
#include <DS3231.h>
#include <DHT.h>
DS3231  rtc(SDA, SCL);
Time RTC_T;

// Загрузка начальных настроек
// Основные настройки скрипта. Изменения необходимо произвести под свои нужды!!!
// Скрипт расчитан на день но для тех кому необходимо сберечь деньги советую переключить на ночной режим и счётчик будет считать по другому тарифу.

long led_on = 05;              // Время включения диодов (устанавливается в часах)
long led_off = 23;             // Время выключения диодов (устанавливается в часах)
long dnat_on = 05;             // Время включения DNAT (устанавливается в часах)
long dnat_off = 23;            // Время выключения DNAT (устанавливается в часах)
long lumen_on = 05;            // Время включения ЭСЛ (устанавливается в часах)
long lumen_off = 23;           // Время выключения ЭСЛ (устанавливается в часах)
long dosvet_on = 05;           // Время включения досвета (устанавливается в часах)
long dosvet_off = 23;          // Время выключения досвета (устанавливается в часах)
long circ_on = 05;             // Цыркуляция воздуха внутри. Время включения (устанавливается в часах).
long circ_off = 23;            // Цыркуляция воздуха внутри. Время выключения (устанавливается в часах).
long ventilation_on = 05;      // Включение вентиляции (устанавливается в часах) рекомендую устанавливать во время включения света.
long ventilation_off = 23;     // Отключение вентиляции (устанавливается в часах) рекомендую устанавливать через час после выключения света.
long breeze_on = 01;           // Обдув растишек on (устанавливается в часах).
long breeze_off = 23;          // Обдув растишек off (устанавливается в часах).
long compressor_on = 05;       // Запуск компрессора для нагнетания воздуха в раствор.
long compressor_off = 23;      // Остановка компрессора для нагнетания воздуха в раствор.
long sprayings_on = 23;        // Запускается после выключения света, указываются минуты начала опрыскивания.
long sprayings_off = 24;       // Минуты остановки опрыскивания.
long a_heating_on = 25;        // Температура включения обогрева воздуха (градусы цельсия)
long a_heating_off = 25;       // Температура выключения обогрева воздуха (градусы цельсия)
long a_cooling_on = 25;        // Температура включения охлаждения воздуха (градусы цельсия)
long a_cooling_off = 25;       // Температура выключения охлождения воздуха (градусы цельсия)
long w_heating_on = 25;        // Температура включения обогрева воды (градусы цельсия)
long w_heating_off = 25;       // Температура выключения обогрева воды (градусы цельсия)
long w_cooling_on = 25;        // Температура включения охлаждения воды (градусы цельсия)
long w_cooling_off = 25;       // Температура выключения охлождения воды (градусы цельсия)
long humidifier_on = 50;       // Минимальная влажность для включения увлажнителя воздуха.
long humidifier_off = 91;      // Максимальная влажность для выключения увлажнителя воздуха.

// Инициализация железа
// Пины для подключения к Ардуино датчиков и исполняемых модулей.
// Исполняемые модули
int dnat = 20;             // DNAT  Вместо того реле что покупается на али обязательно поставить по мощьности превышающее в 2 раза потребление лампы иначе залипнет и не будет работать!!!!
int dosvet = 21;           // То что будет использоваться для досвета. (в моём случае это люминисцентные лампы с цоколем G5)
int lumen = 22;            // Люмен
int led = 23;              // Диоды
int circulation = 24;      // Цыркуляция
int breeze = 25;           // Эмитация ветра
int ventilation = 26;      // Вентиляция
int compressor = 27;       // Компрессор
int sprayings = 28;        // опрыскивание
int humidifier = 29;       // Увлажнение воздуха
int a_heating = 30;        // обогрев воздуха
int a_cooling = 31;        // охлождение воздуха
int w_heating = 32;        // обогрев воды (раствора)
int w_cooling = 33;        // охлождение воды (раствора)

//Датчики
int W_Temp = 46;           // Температура воды
#define DHTPIN 47          // Температура и влажность воздуха
#define solution 40        // Датчик уровня раствора

#define DHTTYPE DHT11     // DHT 11
//#define DHTTYPE DHT22   // DHT 22
//#define DHTTYPE DHT21   // DHT 21
DHT dht(DHTPIN, DHTTYPE);

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);          // инициализируем LCD, указывая контакты данных


// Устанавливаем системные переменные для начала работы.
 void setup()
 {
 rtc.begin();
 dht.begin();
 Serial.begin(115200);
 pinMode(dnat, OUTPUT);              // Лампа ДНАТ
 pinMode(lumen, OUTPUT);             // Люмен
 pinMode(led, OUTPUT);               // Диоды
 pinMode(circulation, OUTPUT);       // Цыркуляция
 pinMode(ventilation, OUTPUT);       // Вентиляция
 pinMode(breeze, OUTPUT);            // Эмитация ветра
 pinMode(compressor, OUTPUT);        // Компрессор
 pinMode(a_heating, OUTPUT);         // обогрев воздуха
 pinMode(a_cooling, OUTPUT);         // охлождение вохдуха
 pinMode(w_heating, OUTPUT);         // обогрев воды
 pinMode(w_cooling, OUTPUT);         // охлождение воды
 lcd.begin(16, 2);
 lcd.print("Loading");
 delay(500);                // ждем 0.5 секунды
 lcd.print(".");
 delay(500);                // ждем 0.5 секунды
 lcd.print(".");
 delay(500);                // ждем 0.5 секунды
 lcd.print(".");
 delay(1000);               // ждем 1 секунду
 lcd.clear();               //очистка экрана
 }

void loop()
{
 lcd.clear();               //очистка экрана
 RTC_T = rtc.getTime();
 Serial.println(rtc.getTimeStr());
 float a_humidity = dht.readHumidity();
 float a_temp = dht.readTemperature();
 delay (2000);
    if (isnan(a_temp) || isnan(a_humidity)) {
    Serial.println("Failed to read from DHT");
    lcd.print("Failed read DHT.");
    } else {
    Serial.print("Humidity: ");
    Serial.print(a_humidity);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(a_temp);
    Serial.println(" *C");
    lcd.print("T=");
    lcd.print(a_temp);
    lcd.print(" H=");
    lcd.print(a_humidity);
    }
 

  double val_W = analogRead(W_Temp);
  double voltage = val_W*5.0/1024;
  double w_temp = voltage*100 - 273.15;

float max_a_temp = 0, min_a_temp = 90;              // max/min значения температуры воды
float max_w_temp = 0, min_w_temp = 90;              // max/min значения температуры раствора
float max_a_humidity = 0, min_a_humidity = 90;      // max/min значения температуры раствора
 
 
 
// Проверка мин и макс температуры воздуха
    if(a_temp > max_a_temp) {
    max_a_temp = a_temp;
    } // max температура воздуха
    if(a_temp < min_a_temp) {
    min_a_temp = a_temp;
    } // min температура воздуха
// Проверка мин и макс температуры раствора (воды)
    if(w_temp > max_w_temp) {
    max_w_temp = w_temp;
    } // max температура воды
    if(w_temp < min_w_temp) {
    min_w_temp = w_temp;
    } // min температура воды
// Проверка влажности
    if(a_humidity > max_a_humidity) {
    max_a_humidity = a_humidity;
    } // max влажность
    if(a_humidity < min_a_humidity) {
    min_a_humidity = a_humidity;
    } // min влажность
 
 
  // попытка подключения к базе данных MqSQL через консоль
  int val_serial = 0;
  if (Serial.available() > 0) {
    val_serial = Serial.read();
Serial.println("mysql -u root -p"); // Подключаемся к базе MySQL с пользователем root
Serial.println("12345"); // Вводим пароль 12345
// Необходимо установить проверку, а то мало ли херь какую нить зашлёт в скетч и будет свет мерцать и включать не то что нужно)


// Подключение удалось считываем данные с ком порта для постоянной работы.

Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'led_on' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) led_on = (val_serial);              // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'led_off' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) led_off = (val_serial);             // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'dnat_on' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) dnat_on = (val_serial);             // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'dnat_off' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) dnat_off = (val_serial);            // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'lumen_on' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) lumen_on = (val_serial);            // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'lumen_off' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) lumen_off = (val_serial);           // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'dosvet_on' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) dosvet_on = (val_serial);           // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'dosvet_off' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) dosvet_off = (val_serial);          // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'circ_on' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) circ_on = (val_serial);             // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'circ_off' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) circ_off = (val_serial);            // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'ventilation_on' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) ventilation_on = (val_serial);      // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'ventilation_off' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) ventilation_off = (val_serial);     // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'breeze_on' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) breeze_on = (val_serial);           // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'breeze_off' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) breeze_off = (val_serial);          // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'compressor_on' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) compressor_on = (val_serial);       // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'compressor_off' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) compressor_off = (val_serial);      // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'sprayings_on' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) sprayings_on = (val_serial);        // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'sprayings_off' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) sprayings_off = (val_serial);       // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'a_heating_on' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) a_heating_on = (val_serial);        // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'a_heating_off' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) a_heating_off = (val_serial);       // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'a_cooling_on' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) a_cooling_on = (val_serial);        // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'a_cooling_off' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) a_cooling_off = (val_serial);       // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'w_heating_on' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) w_heating_on = (val_serial);        // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'w_heating_off' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) w_heating_off = (val_serial);       // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'w_cooling_on' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) w_cooling_on = (val_serial);        // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'w_cooling_off' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) w_cooling_off = (val_serial);       // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'humidifier_on' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) humidifier_on = (val_serial);       // Считываем с консоли показатель и присваиваем его.
Serial.println("mysql  SELECT * FROM   'box' WHERE [field name] = 'humidifier_off' "); // Отправляем запрос на получение данных из MySQL
if (val_serial) humidifier_off = (val_serial);      // Считываем с консоли показатель и присваиваем его.

// Записываем в базу показания датчиков.
Serial.println("min_a_temp");
Serial.println("max_a_temp");
Serial.println("min_w_temp");
Serial.println("max_w_temp");
Serial.println("a_temp");
Serial.println("w_temp");
Serial.println("a_humidity");
Serial.println("max_a_humidity");
Serial.println("min_a_humidity");
Serial.println("mysql exit"); // Отключаемся от MySQL дабы не натворить бед)
    }

    
    
    
    // Lumen
if ((RTC_T.hour) >= lumen_on && (RTC_T.hour) < lumen_off)
{
     digitalWrite(lumen, HIGH);
 }
else
{
     digitalWrite(lumen, LOW);
}
 
// LED
if ((RTC_T.hour) >= led_on && (RTC_T.hour) < led_off)
{
     digitalWrite(led, HIGH);
 }
else
{
     digitalWrite(led, LOW);
}
// DNAT
if ((RTC_T.hour) >= dnat_on && (RTC_T.hour) < dnat_off)
{
     digitalWrite(dnat, HIGH);
 }
else
{
     digitalWrite(dnat, LOW);
}

// Досвет
if ((RTC_T.hour) >= dosvet_on && (RTC_T.hour) < dosvet_off)
{
     digitalWrite(dosvet, HIGH);
 }
else
{
     digitalWrite(dosvet, LOW);
}
//Цыркуляция
if ((RTC_T.hour) >= circ_on && (RTC_T.hour) < circ_off)
{
  // Включить
      digitalWrite(circulation, HIGH);
}
else
{
  // Выключить
      digitalWrite(circulation, LOW);
}

//  Проветривание
if (a_temp > ventilation_on && a_temp < ventilation_off)
        {
          // Включить
        digitalWrite(ventilation, HIGH);
        }
else
        {
          // Выключить
        digitalWrite(ventilation, LOW);
        }

//  Обдув (эмитация ветра)
if ((RTC_T.hour) >= breeze_on && (RTC_T.hour) < breeze_off)
        {
          // Включить
        digitalWrite(breeze, HIGH);
        }
else
        {
          // Выключить
        digitalWrite(breeze, LOW);
        }

//Обогрев
if (a_temp <= a_heating_on && a_temp < a_heating_off)
      {
       // Включить обогрев воздуха
       digitalWrite(a_heating, HIGH);
      }
else
      {
      // Выключить обогрев воздуха
       digitalWrite(a_heating, LOW);
      }
if (w_temp <= w_heating_on && w_temp < w_heating_off)
      {
       // Включить обогрев воды
       digitalWrite(a_heating, HIGH);
      }
else
      {
      // Выключить обогрев воды
       digitalWrite(a_heating, LOW);
      }
//  Охлаждение
if (a_temp <= a_cooling_on && a_temp < a_cooling_off)
        {
        // Включить охлождение воздуха
        digitalWrite(a_cooling, HIGH);
        }
else
        {
        // Выключить охлождение воздуха
        digitalWrite(a_cooling, LOW);
       }
if (w_temp <= w_cooling_on && w_temp < w_cooling_off)
       {
        // Включить охлождение воды
        digitalWrite(w_cooling, HIGH);
        }
else
        {
        // Выключить охлождение воды
        digitalWrite(w_cooling, LOW);
       }
// Компрессор
 if ((RTC_T.hour) >= compressor_on && (RTC_T.hour) < compressor_off)
        {
          // Включить
        digitalWrite(compressor, HIGH);
        }
else
        {
          // Выключить
        digitalWrite(compressor, LOW);
        }

// Опрыскивание
 if ((RTC_T.hour) == led_off && (RTC_T.min) >= sprayings_on && (RTC_T.hour) == led_off && (RTC_T.min) <= sprayings_off)
        {
          // Включить
        digitalWrite(sprayings, HIGH);
        }
else
        {
          // Выключить
        digitalWrite(sprayings, LOW);
        }
// Увлажнение воздуха
 if (a_humidity < humidifier_on && a_humidity > humidifier_off)
        {
          // Включить
        digitalWrite(humidifier, HIGH);
        }
else
        {
          // Выключить
        digitalWrite(humidifier, LOW);
        }
// Датчик уровня раствора    
  if (!digitalRead(solution))
  {
    // Что делать пропишете сами)
    // Низкий уровень раствора
    lcd.setCursor(0, 1);     // устанавливаем курсор в 0-ом столбце, 2 строке
    lcd.print("RASTVOR WARNING");
    }  
else
  {
    // Раствор в норме доливать не надо.
    lcd.setCursor(0, 1);     // устанавливаем курсор в 0-ом столбце, 2 строке
    lcd.print("RASTVOR OK");
  }
}

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

Последний выложен с ошибками и не доделками.


 

Часть 5 (WEB интерфейс)

Для него необходим компьютер подключенный к ардуино (можно и без компьютера но мне удобнее делать так чтоб не париться с отладкой) Вместо компа советую использовать старый нетбук (он 100% слабый и 100% сломан экран иначе бы вы его уже впарили). На него устанавливаем Ubuntu Linux x86 10.4 или ниже. Настраиваем убунту (можно забить на это дело) и устанавливаем нужные пакеты:  SSH  (для удобства в настройке дистанционной),Apache WEB Server, PHP, MySQL. На любителя если хотите поймать гемор можно поставить: DHCP Server, VPN, почтовый сервер  Postfix, SAMBA - файловый сервер. В итоге получаем полноценный сервер для работы чего угодно.

 

Сайт для бокса выглядит на данный момент так:

post-31477-0-79354400-1457530018_thumb.png

 

Реализация:

Реализованно подключение к БД MYSQL (но пока что нет связи с самой ардуиной так как нужен комп для отладки)

Реализованно подключение к камерам (пока в раздумиях по поводу колличества)

Реализован вывод скорости вращения вентиляторов и температуры перед вентиляторами.

Реализовано управление циркуляцией (выключено, старый вариант, новый вариант)

Реализовано управление компрессором (вкл\выкл)  Думаю примастрячить регулировку силы обогощения раствора.

 

Оставшееся выложу когда либо...

 

 

Часть 6 (Температура)

Схема системы циркуляции:
post-31477-0-97372100-1447534362_thumb.jpg
Версия 2.0 обеспечивает сильный обогрев воздуха так как берёт воздух с низу и прогоняет его вдоль люминесцентных  ламп и выдувает сверху на растения. Таким образом более прохладный воздух внизу прогревается быстрее и мы имеем повышенную температуру.
Версия 3.0 обеспечивает переключение перемещения воздуха за счёт чего горячий воздух будет браться сверху и протекать вниз обогреваясь через люмены но на выходе встретит поток холодного воздуха из системы вентиляции.
Так же на входе воздуха из системы вентиляции будут установлены дополнительные микро радиаторы для охлаждения и обогрева (автоматика сама решит что делать)

 

Продолжение следует...

Часть 7 (разъяснения что для чего нужно и как что куда подключать или чем заменить)

 

Всё написанное в этой части написано специально для не знающих людей и с точки зрения технарей некоторые объяснения не верны! Но для обычного рядового человека будут вполне приемлемы (так проще понять).

 

Многие задают вопросы по поводу как подключить то... Как подключить это...  РУКАМИ и без геморроя) Просто нужно быть внимательнее и почитать на устройстве которое вы хотите подключить к чему либо то что ему нужно для работы.

Например:

Есть 2 вида кулеров от компьютера: 1) питается от 5в и потребляет 0.6ма, 2) питается от 12в 0.2 - 0.4ма

В - это вольты (ток)

мА - это МИЛИ Амперы (сила тока очень важный фактор и намного важнее вольтов)

У всей техники есть допускаемые границы в вольтах (к примеру ноутбук питается от 19 но он так же замечательно будет работать от 18 и от 20 вольт) Но если ноутбуку необходимо для работы 4.47А то при подключении зарядника с меньшим количеством ампер будет мерцать подсветка экрана или же не будет работать зарядка батарейки.

Так что если хотите что бы всё работало хорошо то mA умножте на 2 чтоб наверняка (вообще на полтора но лучше больше нежеле ловить дома фейерверки посреди ночи)

Вентиляторы 12в можно запитывать и от 5в (зарядка от мобильника вполне подойдёт но учтите что сила тока должна быть в 3 раза больше т.е. чем меньше вольтаж необходимый устройству тем больше ампер устройство требует для работы но это не значт что работать будет как от 12в - вращение удет происходить медленнее)

 

Блоки питания: 

Рекомендую использовать БП от компа так как они способны питать как мозги так и нетбуки так и исполняемые модули на 12в.

Вольтажи которые выдают БП от компа обычно это стандартный набор: 12в, 5в, 3.3в (дежурка бывает редко но всё же есть) На каждом БП всегда написаны его хар-ки: к примеру БП на 350 ват показывает сколько он кушает с розетки и переводит в пониженный вольтаж который не описывается в ватах, а указывается максимальное - пиковое значение ампер на те или иные силовые части. Т.Е. 12в 10А или 5в 3А и тд и тп (в общем это указано на каждом корпусе от БП так что проявите внимательность).

Распиновка БП от компа: 

Красный - 5в

Жёлтый - 12в

Чёрный - Земля (GND или в простонародье минус)

Фиолетовый - Кидается на минус и БП работает (могу ошибаться так как у себя сразу перепаиваю блок питания и просто не помню какой там цвет)

Зелёный - 3.3в (дежурка- дежурное питание для обеспечения работоспособности материнской платы в выключенном состоянии. Или для обычного люда - чтоб кнопка включения работала на компе)

Зелёный и фиолетовый мог перепутать местами...

 

Можно купить тороидальный трансформатор но он зараза громоздкий и весит тонну(утрированно) да ещё падла жужжит как пчела при работе. И к нему необходимо подключать на каждую пару выходов по диодному мосту и конденсаторам.

 

 

Вентиляторы:

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

Для начала определимся с размерами... Мне по душе 8см вентиляторы от компа. Они бывают разных характеристик и разной толщины что очень важно при выборе. Чем толще вентилятор тем меньше он шумит на одинаковых воздушных потоках! Количество оборотов влияет в первую очередь на воздушный поток и на шум и если первое можно подобрать толщиной то шум увы придётся выбирать в слепую и прикидывая как оно будет работать.

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

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

Добиться оптимального продува можно используя больше 4 вентиляторов на вдув с частотой вращения 1700(слабо шумит) и таких же на выдув в таком же кол-ве (на выдув ставим фильтры они дадут сопротивление и снизят обороты и шум).

Подключать вентилятор можно к чему угодно. Главное знать какие у него потребности для работы (написаны сзади на ярлычке закрывающем подшипник). Так как компьютеры пока не сделали без охлаждения то все разъёмы в нём имеют международный стандарт и естественно вентиляторы тоже. В любом вентиляторе есть красный(+) и чёрный(- или GND) провод! Некоторые имеют маленький конектор для крепления с 3 или 4 выводами, некоторые большой коннектор (молекс) и имеют 2 вывода вышеуказанного цвета. 3-х или 4-х проводные вентиляторы так же питаются по 2 проводам, а лишние провода нужны для считывания частоты вращения и регулировки частоты вращения (оба варианта в 4 контактном, в 3 контактном только считывание).

Не забудьте что подшипники в любых вентиляторах бывают 2 видов: подшипник качения (он состоит из шариков) и подшипник скольжения (выглядит как штырь вставленный в трубку). Если хотите что бы вентилятора вам хватило лет на 5 непрерывной работы при максимальных оборотах то берите на подшипниках качения, их всегда можно смазать литолом или солидолом и он прослужит ещё столько же. Так же скорость вращения лопостей будет сильно выше с подшипником качения, а шуму будет меньше, но стоит зараза больше в 2 раза(

 

 

Световая ловушка.

Зачем нужна:

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

post-31477-0-42242400-1457014401_thumb.jpgpost-31477-0-72189000-1457014426_thumb.jpg

 

 

 

 

 

Это заключительная часть и для её написания нужно много времени...

 

 

 

Тема будет продолжаться по мере поступления запчастей или появлению свободного времени.
Основная часть будет как шапка в ней отображаются все изменения и пополняется новшествами.
 
 
Все предложения и пожелания будут тщательно рассмотрены.
Вся конструктивная критика будет воспринята спокойно за исключением отправлений в дурку и посылов далеко и на долго (матов в мой адрес).
Изменено пользователем RPSVoloch
Ссылка на комментарий
Поделиться на других сайтах

  • Ответы 83
  • Создано
  • Последний ответ

Лучшие авторы в этой теме

  • RPSVoloch

    46

  • Logik

    6

  • bugslayer

    5

  • Рауль

    5

Лучшие авторы в этой теме

Опубликованные изображения

Что за ардуина ? не могу разобрать, не видел такой еще. Если честно, по фото совсем не понятно, из каких узлов состоит система.

Что наверху в черной коробке, к которой 4 гофры подходят ? что в гофрах ? провода ? Черная пластиковая коробка это компрессор ?

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

Ссылка на комментарий
Поделиться на других сайтах

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

По гофрам идёт воздух) Это система циркуляции воздуха.

Внутри чёрной коробки идут 3 вентилятора от компа (каждый по 3200 оборотов) На предшествующих фото есть прозрачная часть этой же коробки.

ЛЕД питается от 1000 ватного БП от компа (на фотках его нет так как версия конструкции старая)

Ссылка на комментарий
Поделиться на других сайтах

В шапку добавлена частично 8 часть. И описание что лучше применять.

Добавлен скетч (прошивка для мозгов)

Добавлена принципиальная схема конструкции.

Ссылка на комментарий
Поделиться на других сайтах

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

Схема системы циркуляции:

post-31477-0-55803200-1447533578_thumb.jpg

Версия 2.0 обеспечивает сильный обогрев воздуха так как берёт воздух с низу и прогоняет его вдоль люминесцентных  ламп и выдувает сверху на растения. Таким образом более прохладный воздух внизу прогревается быстрее и мы имеем повышенную температуру.

Версия 3.0 обеспечивает переключение перемещения воздуха за счёт чего горячий воздух будет браться сверху и протекать вниз обогреваясь через люмены но на выходе встретит поток холодного воздуха из системы вентиляции.

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

 

Проект добавлен в шапку.

Ссылка на комментарий
Поделиться на других сайтах

Единомышленники подсобите с веб мордой для теплицы. Написать код могу, могу отладить и защитить от хакеров и прочей ереси. Но не могу сделать красивый интерфейс!

 

Все кому не лень подсобите своими видением того как оно должно выглядеть красиво.

Ссылка на комментарий
Поделиться на других сайтах

Вот

Войдите или зарегистрируйтесь для просмотра содержимого. Купить семена конопли.

  небольшой пример по разметке страницы.

Ссылка на комментарий
Поделиться на других сайтах

Вот

Войдите или зарегистрируйтесь для просмотра содержимого. Купить семена конопли.

  небольшой пример по разметке страницы.

Ты немножечко не понял.... Мне нужно то как видно на экране а не коды. Коды могу написать любые! У меня с красотой беда( Можно просто строчки вывести на экран, а можно облагородить картинками. Вот мне нужно облагородить картинками)

А по поводу сайтов то их я писал не однократно.

Ссылка на комментарий
Поделиться на других сайтах

Ты немножечко не понял.... Мне нужно то как видно на экране а не коды. Коды могу написать любые! У меня с красотой беда( Можно просто строчки вывести на экран, а можно облагородить картинками. Вот мне нужно облагородить картинками)

А по поводу сайтов то их я писал не однократно.

Перечисли какие именно параметры ты будешь выводить на морду, например:

Температура в боксе

Температура за бортом

Скорость вращения вентилятора

Температура компота( как я понял у тебя гидропонная система)

И т. Д. Не знаю что там у тебя ещё...)

 

Кстати, а чем тебе не нравится веб интерфейс у коллеги bugslyder? По моему все наглядно у него) и кодом мне кажется он поделится) запилишь под себя и время сэкономишь на коде) хотя свой проще писать, чем чужой разбирать... По себе знаю)

 

Войдите или зарегистрируйтесь для просмотра содержимого. Купить семена конопли.

Изменено пользователем Ferma
Ссылка на комментарий
Поделиться на других сайтах

Перечисли какие именно параметры ты будешь выводить на морду, например:

Температура в боксе

Температура за бортом

Скорость вращения вентилятора

Температура компота( как я понял у тебя гидропонная система)

И т. Д. Не знаю что там у тебя ещё...)

 

Кстати, а чем тебе не нравится веб интерфейс у коллеги bugslyder? По моему все наглядно у него) и кодом мне кажется он поделится) запилишь под себя и время сэкономишь на коде) хотя свой проще писать, чем чужой разбирать... По себе знаю)

 

Войдите или зарегистрируйтесь для просмотра содержимого. Купить семена конопли.

К сожалению у него ардуинка выдаёт эту страницу. У меня же сервер занимается сайтами. Веб морда прикольная но обычная(

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

Если на ардуинку вгрузить всё что только можно то результат будет плачевный, а именно: не стабильная работа (зависания сбои) при грамотно составленном коде задержка между выполнением задачи и её реализации будет существенная, так же ардуинка не поддерживает динамически обновляемые страницы и большинство кодов даже если допилить всё равно не сможет обработать корректно и это я уже проверил на собственной шкуре.

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

А теперь по факту что там есть но не облагорожено:

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

Главная страница:

Показатель влажности

Показатель температуры воздуха и почвы\раствора

Что включено и время до выключения каждого отдельного модуля.

видео камера 1

видео камера 2

Ссылка на комментарий
Поделиться на других сайтах

....

видео камера 1

видео камера 2

 

 

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

Ссылка на комментарий
Поделиться на других сайтах

К сожалению у него ардуинка выдаёт эту страницу. У меня же сервер занимается сайтами. Веб морда прикольная но обычная(

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

Если на ардуинку вгрузить всё что только можно то результат будет плачевный, а именно: не стабильная работа (зависания сбои) при грамотно составленном коде задержка между выполнением задачи и её реализации будет существенная, так же ардуинка не поддерживает динамически обновляемые страницы и большинство кодов даже если допилить всё равно не сможет обработать корректно и это я уже проверил на собственной шкуре.

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

А теперь по факту что там есть но не облагорожено:

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

Главная страница:

Показатель влажности

Показатель температуры воздуха и почвы\раствора

Что включено и время до выключения каждого отдельного модуля.

видео камера 1

видео камера 2

 

 

Если у тебя подключена БД и вся инфа в ней хранится, то хавай из нее данные и генерируй HTML страницу, и выводи ее на экран

Я вижу это как таблицу...

CMS я думаю не нужно для такого рода информации

Если нужно управлять с морды, то сгенерированную HTML страницу модифицируешь, считываешь всю инфу и заливаешь обратно в базу)

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

P.S. Я бы это сделал с помощью ruby)

<body>
<p><b>Отображение информации</b></p>
<table width="100%" border="1" color="black">
<tr>
<td width="40%">
Показатель влажности
</td>
<td width="40%">
37% 
</td>
<td width="20%">
</td>
</tr>
<tr>
<td width="40%">
Показатель температуры воздуха
</td>
<td width="40%">
26 C
</td>
<td width="20%">
</td>
</tr>
<tr>
<td width="40%">
Показатель температуры раствора
</td>
<td width="40%">
22 C
</td>
<td width="20%">
</td>
</tr>
</table>
<p><b>Управление</b></p>
<table width="100%" border="1" color="black">
<tr>
<td width="50%">
Субстрат
</td>
<td width="50%">
<select>
 <option>Земля</option>
 <option>Гидра</option>
 <option>Кокос</option>
</select>
</td>
</tr>
<tr>
<td width="50%">
Вентиляция
</td>
<td width="50%">
<select>
 <option>140 кубов в час</option>
 <option>250 кубов в час</option>
 <option>Выключить</option>
</select>
</td>
</tr>
</table>
<p>
<button>
Записать в БД и выполнить
</button>
</p>
</body>

Для тех кто не шарит: Создать на рабочем столе файл 123.html , открыть с помощью блокнота, вставить в него код, который приведен выше, сохранить, открыть в любом браузере, или двойной щелчок мыши)))

 

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

По этому я не понимаю зачем тебе страница управления?

Максимум выбрать субстрат и опрыснуть одним из 4 видов расствора...

все остальное должно быть автоматизировано:

вентиляция - зависит от температуры в боксе 

температура воздуха - зависит от вентиляции))) 

циркуляция - все время включена (да, можешь управлять, я видел у тебя там 2 или 3 режима)

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

уровень раствора - низкий, долить до нужного

PH раствора Добавить phUp или phDown 

температура раствора - низкая - подогреть, высокая - отключить подогрев, сама остынет)

влажность почвы - Полить, если сухо

температура почвы - хз как подогревать))) остужать думаю не придется)) 

увлажнение - Выше писал про влажность воздуха, не пойму что за увлажнение? Дождик по листу? по расписанию

опрыскивание - по расписанию... 

каким из растворов опрыскивать(всего 4 вида растворов для опрыскивания). -  тут управление, или по очереди)

 

Ах, да... Речь шла о дизайне... Облагородить картинками...

Какой дизайн морды тебе нужен? чтобы нарисовали в 3D твою оранжерею со всем оборудованием? А ты крутил все это мышкой и наводя например на канальник всплывало окно со скоростями, выбрав значение отсылался сигнал на Ардуино?))

Это ппц гемор) и дорогостоящий) На Flashе придется писать...

Только для души если заморачиваться)

 

 

Мое виденье такое:

Рядом с твоим боксом стоит сервак с БД на MS SQL или MySQL

Ты с клиентского компа подключаешься к БД, хаваешь от туда необходимую информацию

Клиентский ПК формирует HTML код, и отображает на локальной тачке

Со страницы управления ты выбираешь что тебе нужно, Опрыскивать например, и отправляешь обратно на сервак все это дело, он отдает команду Ардуино

 

как то так) Готов помочь чем смогу) написать скрипты и генерировать страницу) хотя я думаю ты сам в этом не хило разбираешься

А с дизайном - или просто текстовый вывод, красиво оформленный или уже Flash, в котором я не шарю)

Изменено пользователем Ferma
Ссылка на комментарий
Поделиться на других сайтах

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

Зае**ться пыль глотать поверь) Чтоб до сервака добраться надо 2 Cisco агрегата обойти, а это геморрой (не сказал бы что не возможный но всё же геморрой + дальше шифрация и опрос свой\чужой).

Ссылка на комментарий
Поделиться на других сайтах

Если у тебя подключена БД и вся инфа в ней хранится, то хавай из нее данные и генерируй HTML страницу, и выводи ее на экран

Я вижу это как таблицу...

CMS я думаю не нужно для такого рода информации

Если нужно управлять с морды, то сгенерированную HTML страницу модифицируешь, считываешь всю инфу и заливаешь обратно в базу)

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

P.S. Я бы это сделал с помощью ruby)

<body>
<p><b>Отображение информации</b></p>
<table width="100%" border="1" color="black">
<tr>
<td width="40%">
Показатель влажности
</td>
<td width="40%">
37% 
</td>
<td width="20%">
</td>
</tr>
<tr>
<td width="40%">
Показатель температуры воздуха
</td>
<td width="40%">
26 C
</td>
<td width="20%">
</td>
</tr>
<tr>
<td width="40%">
Показатель температуры раствора
</td>
<td width="40%">
22 C
</td>
<td width="20%">
</td>
</tr>
</table>
<p><b>Управление</b></p>
<table width="100%" border="1" color="black">
<tr>
<td width="50%">
Субстрат
</td>
<td width="50%">
<select>
 <option>Земля</option>
 <option>Гидра</option>
 <option>Кокос</option>
</select>
</td>
</tr>
<tr>
<td width="50%">
Вентиляция
</td>
<td width="50%">
<select>
 <option>140 кубов в час</option>
 <option>250 кубов в час</option>
 <option>Выключить</option>
</select>
</td>
</tr>
</table>
<p>
<button>
Записать в БД и выполнить
</button>
</p>
</body>

Для тех кто не шарит: Создать на рабочем столе файл 123.html , открыть с помощью блокнота, вставить в него код, который приведен выше, сохранить, открыть в любом браузере, или двойной щелчок мыши)))

 

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

По этому я не понимаю зачем тебе страница управления?

Максимум выбрать субстрат и опрыснуть одним из 4 видов расствора...

все остальное должно быть автоматизировано:

вентиляция - зависит от температуры в боксе 

температура воздуха - зависит от вентиляции))) 

циркуляция - все время включена (да, можешь управлять, я видел у тебя там 2 или 3 режима)

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

уровень раствора - низкий, долить до нужного

PH раствора Добавить phUp или phDown 

температура раствора - низкая - подогреть, высокая - отключить подогрев, сама остынет)

влажность почвы - Полить, если сухо

температура почвы - хз как подогревать))) остужать думаю не придется)) 

увлажнение - Выше писал про влажность воздуха, не пойму что за увлажнение? Дождик по листу? по расписанию

опрыскивание - по расписанию... 

каким из растворов опрыскивать(всего 4 вида растворов для опрыскивания). -  тут управление, или по очереди)

 

Ах, да... Речь шла о дизайне... Облагородить картинками...

Какой дизайн морды тебе нужен? чтобы нарисовали в 3D твою оранжерею со всем оборудованием? А ты крутил все это мышкой и наводя например на канальник всплывало окно со скоростями, выбрав значение отсылался сигнал на Ардуино?))

Это ппц гемор) и дорогостоящий) На Flashе придется писать...

Только для души если заморачиваться)

 

 

Мое виденье такое:

Рядом с твоим боксом стоит сервак с БД на MS SQL или MySQL

Ты с клиентского компа подключаешься к БД, хаваешь от туда необходимую информацию

Клиентский ПК формирует HTML код, и отображает на локальной тачке

Со страницы управления ты выбираешь что тебе нужно, Опрыскивать например, и отправляешь обратно на сервак все это дело, он отдает команду Ардуино

 

как то так) Готов помочь чем смогу) написать скрипты и генерировать страницу) хотя я думаю ты сам в этом не хило разбираешься

А с дизайном - или просто текстовый вывод, красиво оформленный или уже Flash, в котором я не шарю)

Без флэш (слишком грузит железо в моём случае это нетбук 2003г так что он не потянет - ну не подключать же туда U1 ксенон с полным фаршем)

Тупо картинки.

Настройки что бы править режим работы, а не прошивать бесконечно новой прошивкой. (обновлённый скетч почти готов пока произвожу отладку на виртуальном устройстве)

Табличка не интересна уже давно... Лучше на DIV-ах написать с CSS и явой для самообновления элементов. Но это програмный код его я писать буду сам и никого туда до готовности не пущу кроме SFH (эт мой знакомый дэбагер сайтов).

Мне только оформление нужно. Для его создания нужно вдохновение, а в моём случае это максимум 40 минут спокойствия и потом обязательно отвлекут.

Увладнение воздуха отключается автоматом и включается автоматом кода это необходимо (в скетче который выложен этого нет)

Обогрев присутствует как для раствора так и для земли (мало ли кто нить на севере обитает и ему это понадобиться)

Охлаждение присутствует как воздуха так и субстратов (перегрев страшен и вентиляция не всегда помогает так как в помещении где стоит бокс может быть жарко)

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

Свет горит по расписанию и включается весь в 1 момент но так же можно управлять по отдельности всеми модулями (лед, люмены, днат)

Циркуляция работает в 2 направлениях в зависимости от ситуации (тепло или холодно)

Вентиляция работает по необходимости (в зависимости от внешних факторов) и по расписанию 

Компрессор включается в тот же момент что и свет но можно выставить и другое время.

Опрыскивание происходит по расписанию (оно планируется 1 раз и просто выполняет программу до бесконечности)

Ссылка на комментарий
Поделиться на других сайтах

Табличка не интересна уже давно... Лучше на DIV-ах написать с CSS и явой для самообновления элементов.

 

Можно и на дивах

Самообновление элементов это таймер в обратную сторону?

типо: свет выключится через

5:13:46

5:13:45

5:13:44

5:13:43

Ссылка на комментарий
Поделиться на других сайтах

Можно и на дивах

Самообновление элементов это таймер в обратную сторону?

типо: свет выключится через

5:13:46

5:13:45

5:13:44

5:13:43

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

 

Это умный дом только для растений)

Изменено пользователем RPSVoloch
Ссылка на комментарий
Поделиться на других сайтах

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

Ссылка на комментарий
Поделиться на других сайтах

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

Дроидов собирал но примитивных (там денег нужно море). 

А так если помечтать то неплохо так получается... Приходишь домой а тебя уже ждут с косяком на серебрённом подносе)

Ссылка на комментарий
Поделиться на других сайтах

К сожалению у него ардуинка выдаёт эту страницу. У меня же сервер занимается сайтами. Веб морда прикольная но обычная(

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

Если на ардуинку вгрузить всё что только можно то результат будет плачевный, а именно: не стабильная работа (зависания сбои) при грамотно составленном коде задержка между выполнением задачи и её реализации будет существенная, так же ардуинка не поддерживает динамически обновляемые страницы и большинство кодов даже если допилить всё равно не сможет обработать корректно и это я уже проверил на собственной шкуре.

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

А в чем проблема-то собственно ? Ты пробовал реализовывать веб-сервер на ардуино или только теоретически ? Я ни о чем не сожалею. У меня все работает. Есть проблемы, но они не от того, что на ардуино работает веб сервер. Ардуино и без него глючит отлично. Если есть ethernet shield для ардуино, есть примеры веб-сервера на официальном сайте, значит предполагается, что он может работать как веб-сервер. У меня нет лишнего нетбука, чтобы засовывать его в и без того небольшой ящик с повышенной влажностью и температурой.

 

Мой веб-сервер при обращении загружает с SD страничку на несколько десятков Кб, а остальные обновления и подгрузка контента происходят через AJAX. Загрузка мизерная.

 

То, что "ардуинка не поддерживает динамически обновляемые страницы" - это не правда. Еще как может, через AJAX. Я мог бы ссылку дать на пример, как это сделать, но я заметил, что ты в упор не видишь другие решения, кроме своих, так что незачем.

 

Кстати, а чем тебе не нравится веб интерфейс у коллеги bugslyder? По моему все наглядно у него) и кодом мне кажется он поделится)

Я не вижу, что коллеге нужны чьи-то советы )

Ссылка на комментарий
Поделиться на других сайтах

А в чем проблема-то собственно ? Ты пробовал реализовывать веб-сервер на ардуино или только теоретически ? Я ни о чем не сожалею. У меня все работает. Есть проблемы, но они не от того, что на ардуино работает веб сервер. Ардуино и без него глючит отлично. Если есть ethernet shield для ардуино, есть примеры веб-сервера на официальном сайте, значит предполагается, что он может работать как веб-сервер. У меня нет лишнего нетбука, чтобы засовывать его в и без того небольшой ящик с повышенной влажностью и температурой.

 

Мой веб-сервер при обращении загружает с SD страничку на несколько десятков Кб, а остальные обновления и подгрузка контента происходят через AJAX. Загрузка мизерная.

 

То, что "ардуинка не поддерживает динамически обновляемые страницы" - это не правда. Еще как может, через AJAX. Я мог бы ссылку дать на пример, как это сделать, но я заметил, что ты в упор не видишь другие решения, кроме своих, так что незачем.

 

Я не вижу, что коллеге нужны чьи-то советы )

Мне нужна красота.

Оно пойдёт не на продажу, а в шару и многим своим детищем я насолю что не может не радовать)

Полноценный веб сервер на ардуино ты не построишь (технических знаний не хватит да и думаю времени тож) То что может ардуинка это приметив к сожалению так что только отдельный комп. Ни 1-у ява скриптину ардуинка не потянет адекватно и будут глюки (это проверено лично).

Если делать то делать на совесть чтоб перед людьми не было стыдно (политика СССР), глюков быть не должно! Провисаний, зависаний и прочей мерзости так же быть не должно.

Работать должно как Яблоко - включил и работает без лишних проблем и геморов. (так Apple заявляет но на деле глюков хватает)

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

Кста а зачем те в ардуинке флешка? У неё вроде и так места хватает как бы... Или ты с неё в случае глюка прошиваешься по быренькому?

Не кто не говорит что нужно вот именно траву растить и шкерить бокс свой) Проект расчитан не только на тех кому нужно зашкериться но и просто на рядового человека.

Ссылка на комментарий
Поделиться на других сайтах

Мне нужна красота.

Оно пойдёт не на продажу, а в шару и многим своим детищем я насолю что не может не радовать)

Полноценный веб сервер на ардуино ты не построишь (технических знаний не хватит да и думаю времени тож) То что может ардуинка это приметив к сожалению так что только отдельный комп. Ни 1-у ява скриптину ардуинка не потянет адекватно и будут глюки (это проверено лично).

Если делать то делать на совесть чтоб перед людьми не было стыдно (политика СССР), глюков быть не должно! Провисаний, зависаний и прочей мерзости так же быть не должно.

Работать должно как Яблоко - включил и работает без лишних проблем и геморов. (так Apple заявляет но на деле глюков хватает)

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

Кста а зачем те в ардуинке флешка? У неё вроде и так места хватает как бы... Или ты с неё в случае глюка прошиваешься по быренькому?

Не кто не говорит что нужно вот именно траву растить и шкерить бокс свой) Проект расчитан не только на тех кому нужно зашкериться но и просто на рядового человека.

Почему не построю ? Квалификации хватает - построю. Веб-сервер это всего лишь программа, которая обрабатывает http запросы от клиента и возвращает ответ. Необязательно это всегда ответ в виде html страницы, необязательно веб-сервер сам генерирует страницу обрабатывая серверные php или asp или какие-либо другие скрипты. Может просто загрузить ее с диска и отправить.

Клиентские джава-скрипты выполняет клиент (браузер), веб-сервер в основном занимается обработкой AJAX-запросов, и отправляет ответ в виде XML (обычно очень небольшие), данные из которых клиент отображает в нужных местах на странице.

 

SD модуль идет встроенный на Ethernet Shield, там расположена стартовая страничка, клиентские скрипты, иконки и прочий контент для веб-сервера. У ардуины встроенного EEPROM всего лишь 4 Кб и там файлы неудобно хранить.

 

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

Ссылка на комментарий
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в теме...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...