Первая разработка в программе (для теплицы, гроубокса)

Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22.12.2015{, 11:06}
Репутация: 1
Откуда: Мелитополь
Контактная информация:

Первая разработка в программе (для теплицы, гроубокса)

#1

Сообщение AlexRyzh » 15.01.2016{, 11:34}

Итак, благодаря изучению простейших уроков по программе, получил кое-какие понятия, и решил от теории перейти к практике. Поставил определенную цель - автоматизировать микроклимат и процесс выращивания растений в теплице или гроубоксе.
Начинаю с простого, с того что понимаю и как я это понимаю. По ходу постановки новых задач буду искать решения и реализовывать в программе.
Этот пост пригодится для меня, как напоминание что и как делал постепенно, так и для начинающих (типа меня) разобраться в структурировании программы.
Все будет делаться для Мега 2560
Задача №1, которую я поставил, получить данные с датчика DHT22 и вывести на сериал монитор. (Считаю использование монитора необходимым, чтобы можно было контролировать выполненные действия и понимать насколько правильно все сделано.)

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

Первая плата для назначения переменных с модулей, которые будут применяться в проекте.
Вторая плата для вывода полученных значений с модулей на сериал монитор. Преобразовал переменые в строки, чтоб получить понятное отображение на мониторе. Периодичность вывода на монитор установил 5 сек.
Датчик DHT22 подключен к пину 2
По мере наращивания схемы буду выкладывать новые файлы программы.
В результате компиляции скетча на сериалмониторе вижу следующее:
Вложения
2669486.jpg
greenbox.flp
(112.2 КБ) 74 скачивания
Последний раз редактировалось AlexRyzh 15.01.2016{, 12:04}, всего редактировалось 1 раз.

Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22.12.2015{, 11:06}
Репутация: 1
Откуда: Мелитополь
Контактная информация:

Первая разработка в программе (для теплицы, гроубокса)

#2

Сообщение AlexRyzh » 15.01.2016{, 15:15}

Добавил часы реального времени. Вывод дата и время на монитор. Часы пригодятся в дальнейшем для выполнения некоторых операций в зависимости от времени.
Модуль подключен к пинам 7,6,5

Добавлено (15.01.2016, 15:15)
---------------------------------------------
Но вот стал вопрос как "прикрутить" датчик температуры на терморезисторе Вот такой http://ru.aliexpress.com/item....20.html
По поводу преобразования сопротивления в температуру есть хорошая статья http://arduino-diy.com/arduino-thermistor
Есть у меня скетч с этим преобразованием, работает отлично

Код: Выделить всё

////// обработка данных терморезистора////
        uint8_t i;
        float average;
 // сводим показания в вектор с небольшой задержкой между снятием показаний
              for (i=0; i< NUMSAMPLES; i++) {
              samples [i]= analogRead(THERMISTORPIN);
              delay(10);
            }
// рассчитываем среднее значение
          average = 0;
          for (i=0; i< NUMSAMPLES; i++) {
            average += samples[i];
          }
          average /= NUMSAMPLES;
          Serial.print("Average analog reading ");
          Serial.println(average);

// конвертируем значение в сопротивление
                average = 1023 / average - 1;
                average = SERIESRESISTOR / average;
                Serial.print("Thermistor resistance ");
                Serial.println(average);
                float tr;
                tr = average / THERMISTORNOMINAL; // (R/Ro)
                tr = log(tr); // ln(R/Ro)
                tr /= BCOEFFICIENT; // 1/B * ln(R/Ro)
                tr += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
                tr = 1.0 / tr; // инвертируем
                tr -= 273.15; // конвертируем в градусы по Цельсию
                Serial.print("Temperature ");
                Serial.print(tr);
                Serial.println(" *C");
                delay(100);
       
       ////// конец обработка и вывод данных терморезистора////
Может как-то можно с помощью пользовательских блоков организовать эти вычисления?
Подскажите как это сделать?
Вложения
2319295.flp
(153.56 КБ) 69 скачиваний
6586032.jpg
Последний раз редактировалось AlexRyzh 15.01.2016{, 12:03}, всего редактировалось 1 раз.

Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22.12.2015{, 11:06}
Репутация: 1
Откуда: Мелитополь
Контактная информация:

Первая разработка в программе (для теплицы, гроубокса)

#3

Сообщение AlexRyzh » 15.01.2016{, 15:18}

Вот полный рабочий код скетча, где применяется этот терморезистор совместно с другими модулями. и отправкой в базу данных на сервер.
Вложения
sketch_WEB8.ino
(6.63 КБ) 67 скачиваний

Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 63
Контактная информация:

Первая разработка в программе (для теплицы, гроубокса)

#4

Сообщение Олег » 15.01.2016{, 16:05}

Вам обязательно NTC надо? DS18B20 в FLProg поддерживается, да и цена ниже.
Если все-же охота NTC, то здесь на рисунках С1 и С2 нарисована схема подключения, а дальше все просто.
Последний раз редактировалось Олег 15.01.2016{, 16:23}, всего редактировалось 1 раз.

Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22.12.2015{, 11:06}
Репутация: 1
Откуда: Мелитополь
Контактная информация:

Первая разработка в программе (для теплицы, гроубокса)

#5

Сообщение AlexRyzh » 15.01.2016{, 16:36}

Спасибо, но мне не нужна схема подключения, с этим проблем нет, к Ардуине намного проще все подключается используя 1 резистор 10К.
Дело в том, что я покупал эти датчики (2 шт.), еще не зная толком о Ардуино. И теперь хочу прикрутить их к Ардуино с помощью программы FLProg. (если это возможно)
Как я писал выше, есть скетч с учетом этого датчика, и все работает норм, но хочу организовать "прикрутить" его с помощью программы FLProg

Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 63
Контактная информация:

Первая разработка в программе (для теплицы, гроубокса)

#6

Сообщение Олег » 15.01.2016{, 18:36}

К сожалению, после того как прочитал статью где описаны характеристики датчика, пришел  к выводу что пока нормально не реализуется, так-как нужно вычислять логарифм, а его в блоках нет.
 Но тут прошел слух, что возможно в следующем релизе программы разработчик внесет возможность вставки сторонних скетчей, так что возможно не все так плохо.
Последний раз редактировалось Олег 15.01.2016{, 19:23}, всего редактировалось 1 раз.

Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22.12.2015{, 11:06}
Репутация: 1
Откуда: Мелитополь
Контактная информация:

Первая разработка в программе (для теплицы, гроубокса)

#7

Сообщение AlexRyzh » 17.01.2016{, 10:07}

Хорошо, для нормальной реализации будем ждать апгрейда программы, а пока можно немного схитрить. 
Например, если в формулу подставить sin вместо Ln, в уже в полученном скотче, вместо sin подставить Ln и тогда вычисления будут проходить нормально.
Так вот как реализовать в программе вычисление температуры по формулам из этой статьи http://arduino-diy.com/arduino-thermistor
Только в формуле преобразования заменить ln на sin, чтобы потом в готовом скотче вручную заменить sin на ln.

Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22.12.2015{, 11:06}
Репутация: 1
Откуда: Мелитополь
Контактная информация:

Первая разработка в программе (для теплицы, гроубокса)

#8

Сообщение AlexRyzh » 17.01.2016{, 19:18}

Итак, путем проб и ошибок удалось получить температуру с термистора с помощью программы
Только в строке:
_strFunsq1 = sq((ubi_73680708)/(10000.00));
заменить на
_strFunsq1 = log((ubi_73680708)/(10000.00));
Т.к. программа логарифм не вычисляет.
Дополненная программа и библиотека пользователя прилагается
Реализовал с помощью 2-х пользовательских блоков (можно было и в одном, но так было проще редактировать и искать ошибки)
В первом блоке получаем реальное сопротивление термистора, во втором преобразование в температуру.
Вложения
greenbox1.flp
(300.22 КБ) 78 скачиваний
Последний раз редактировалось AlexRyzh 17.01.2016{, 19:22}, всего редактировалось 1 раз.

krom23
Лейтенант
Сообщения: 444
Зарегистрирован: 06.09.2015{, 15:18}
Репутация: 12
Откуда: Калуга
Имя: Андрей

Первая разработка в программе (для теплицы, гроубокса)

#9

Сообщение krom23 » 18.01.2016{, 20:46}

AlexRyzh, прочёл статью про датчики. В ней автор немного заблуждается относительно точности измерения термисторов ставя их впереди термопар и забывает указать погрешность относительно напряжения питания. По хорошему, если надо получить достаточно точное значение необходимо измерить напряжение питания на контролере, а оно может иметь погрешность 10% и соответственно подставлять это значение в формулу вместо 5В, и всё равно точность не будет лучше +-2 градуса (как у спиртовых термометров). Я прекрасно понимаю, что нам и не нужна в данном случае точность в три знака после запятой и всё это размазываю только из теоретических побуждений. Если будете использовать датчик во влажной среде, усадите термоусадку между гильзой и проводом, это значительно продлит срок службы. Последнее время наши жулики закупают в Китае откровенный брак, меняем их на холодильном оборудовании тоннами, поэтому опасайтесь датчиков в пластиковой заливке(это для тех, кто будет покупать термодатчики у нас).

Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22.12.2015{, 11:06}
Репутация: 1
Откуда: Мелитополь
Контактная информация:

Первая разработка в программе (для теплицы, гроубокса)

#10

Сообщение AlexRyzh » 20.01.2016{, 16:19}

В питании термистора по схеме используется 3.3В и AREF, поэтому напряжение можно считать стабильным и не зашумленным как на 5В. 10% погрешность это много, будет значительно меньше, хотя для контроля температуры питательного раствора и 10% не критично.
Я положил рядом эти 2 датчика (термистор и DHT22) и показания DHT22 - 24,2, а термистора 24.45. Рядом лежит еще спиртовой градусник для инкубатора, показывает примерно 24.3 грд. Так что термистор достаточно точно определяет температуру.

Добавлено (20.01.2016, 16:19)
---------------------------------------------
Подскажите, как построить реле времени? Например для полива. Нужно каждый день, каждые пол часа включать полив на 15 мин днем, ночью каждые 3 часа на 15 мин.
Последний раз редактировалось AlexRyzh 19.01.2016{, 19:23}, всего редактировалось 1 раз.

Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 63
Контактная информация:

Первая разработка в программе (для теплицы, гроубокса)

#11

Сообщение Олег » 20.01.2016{, 16:49}

Чтобы не было сбоев из-за отключения электричества, то наверно лучше сделать на часах реального времени, поставить их на выдачу часов, и компараторами сравнивать. Если промежуток  с 00 до 12 (или какой вам нужен), то подключать один таймер, если с 13 до 00, то другой.

Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22.12.2015{, 11:06}
Репутация: 1
Откуда: Мелитополь
Контактная информация:

Первая разработка в программе (для теплицы, гроубокса)

#12

Сообщение AlexRyzh » 21.01.2016{, 02:01}

Да конечно же с использованием часов реального времени.
Но не пойму как построить реле времени с нужными параметрами включения. Один таймер получается сделать, работает (плата5)
А как еще добавить время срабатывания не пойму.
Например, мне нужно:  (Плата 5)
1) включение в 7 час 10 мин. отключение через 15 мин
2) включение в 9 час 10 мин отключение через 17 мин.
Может подскажите как это реализовать, а дальше я думаю сам смогу наворотить нужные временные зоны включения и выключения.
Вложения
greenbox3.flp
(419.08 КБ) 59 скачиваний

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Первая разработка в программе (для теплицы, гроубокса)

#13

Сообщение rw6cm » 21.01.2016{, 08:50}

AlexRyzh писал(а):как построить реле времени с нужными параметрами включения.
Вложения
TimePump.flp
(258 КБ) 88 скачиваний
Win10-64, FLProg (portable)

krom23
Лейтенант
Сообщения: 444
Зарегистрирован: 06.09.2015{, 15:18}
Репутация: 12
Откуда: Калуга
Имя: Андрей

Первая разработка в программе (для теплицы, гроубокса)

#14

Сообщение krom23 » 21.01.2016{, 19:49}

AlexRyzh писал(а):Нужно каждый день, каждые пол часа включать полив на 15 мин днем, ночью каждые 3 часа на 15 мин.
А зачем так часто и тем более ночью? Даже влаголюбивым огурцам, я молчу про помидоры, такой частый полив вреден, или у вас какая то хитрая технология?

Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22.12.2015{, 11:06}
Репутация: 1
Откуда: Мелитополь
Контактная информация:

Первая разработка в программе (для теплицы, гроубокса)

#15

Сообщение AlexRyzh » 21.01.2016{, 23:56}

krom23 писал(а):или у вас какая то хитрая технология?
Именно хитрая технология (хотя речь не о технологии а программировании) Изображение
Технология Гидропоника, с Аэрацией на подтоплении, Субстрат Керамзит, так что той влаги, что держит керамзит растениям не хватит на долго.

Добавлено (21.01.2016, 22:20)
---------------------------------------------
Спасибо за таймер. Интересное решение. Взял для своих нужд.
Вот еще решил сделать (реализовать) программируемое реле времени на 20 программ (суточное).
Сделал, проверял на 3-4 программах, все работало норм. Потом решил сделать 20 программ, Обработку данных вынес в пользовательский блок.
Прикрутил нужные переменные, плата корректна, но при попытке компиляции выдает ошибку компиляции. (такого еще не было, чтоб плата была корректна и выдавало ошибку Изображение )
В чем проблема, кто подскажет?
Программу и пользовательский блок прилагаю

Добавлено (21.01.2016, 22:24)
---------------------------------------------
Файлы не прикрепились

Добавлено (21.01.2016, 22:29)
---------------------------------------------
Файлы не прикрепляются. Вот На ЯндексДиске
https://yadi.sk/d/tOEOmlzInWtjT Реле времени
https://yadi.sk/d/QnBHxOMlnWtyi Пользовательский блок

Добавлено (21.01.2016, 22:30)
---------------------------------------------
А это сообщение об ошибке 

Arduino: 1.6.3 (Windows 8.1), Плата"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

pr3.ino:32:12: error: expected primary-expression at end of input

Ошибка компиляции.



Добавлено (21.01.2016, 23:56)
---------------------------------------------
Попробовал тоже сделать без пользовательского блока, все собрал на плате. В этом случае нет ошибки и работает правильно.
Получается что-то не то с пользовательскими блоками.

Аватара пользователя
Skull
Лейтенант
Сообщения: 424
Зарегистрирован: 08.09.2015{, 16:18}
Репутация: 4
Откуда: Мариуполь

Первая разработка в программе (для теплицы, гроубокса)

#16

Сообщение Skull » 22.01.2016{, 00:15}

krom23 писал(а):или у вас какая то хитрая технология?
Это Вы еще про аэропонику не слышали, где надо увлажнение каждые 5 мин ))

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Первая разработка в программе (для теплицы, гроубокса)

#17

Сообщение rw6cm » 22.01.2016{, 03:45}

AlexRyzh писал(а):Прикрутил нужные переменные, плата корректна, но при попытке компиляции выдает ошибку компиляции.
Честно сказать: никчёмный громадный код! :)
Если идти вашим алгоритмом, то хотя бы так: пример 2.
Но все равно, если предположить,
что таймеру за сутки нужно будет сделать больше сотни телодвижений...
Устанете листать проект :)))
Мне видится здесь другой подход: пример 3

п/с В примере 3, в элементе массива, надо выключить индекс, он здесь не нужен.
Это очередной глюк, он не сохраняет настройки после выхода.
Вложения
TimePump3.flp
(119.84 КБ) 64 скачивания
TimePump2.flp
(219.72 КБ) 67 скачиваний
Последний раз редактировалось rw6cm 22.01.2016{, 04:07}, всего редактировалось 1 раз.
Win10-64, FLProg (portable)

Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22.12.2015{, 11:06}
Репутация: 1
Откуда: Мелитополь
Контактная информация:

Первая разработка в программе (для теплицы, гроубокса)

#18

Сообщение AlexRyzh » 22.01.2016{, 10:14}

rw6cm писал(а):Устанете листать проект :)))
Согласен, проект получается не маленький, но мне кажется это единственный выход решения новой поставленной задачи (ниже объясню).
Согласно озвученной задаче по поливу (с заданным режимом), ваши подсказки очень хорошие и полностью решают эту задачу.

Но в примере 3 Вы используете RTrig (инвертор), думаю этого нельзя делать, т.к. может произойти неприятная ситуация (если учитывать человеческий фактор допуска ошибки)
Например, человек программирует реле и при вводе времени включения ввел время когда реле еще не выключилось по предыдущей программе (у самого были подобные ошибки), в этом случае инвертор отключит нагрузку, а при попытке отключить (по предыдущей программе) - включит нагрузку и дальше все пойдет наперекосяк (мне так кажется). Лучше использовать RS или SR тригер.

Почему я делаю такой проект?! Я решил пойти дальше в постановке задачи,  поэтому сейчас все объясню подробнее.
Есть у меня пара таймеров, цифровой и механический, но этого не хватает в полной мере для моих нужд (не будем углубляться в нужды). Кроме того механический таймер иногда барахлит, не срабатывает реле на выключение. Вот я и подумал, неплохо было бы собрать программируемое многоканальное реле времени с ардуины (возможно нано, насколько ее памяти хватит), чтоб кнопками можно было выставлять реальное время и время включения и выключения по каждой программе. Пример похожего реле вот
http://elemag.com.ua/index.php?productID=942
или вот http://stroisovety.org/rozetka-s-tajmerom/
Чтобы этим реле мог воспользоваться любой человек без помощи компьютера, а кнопками его программировать.
Для этого понадобится:
Ардуино Нано
Часы реального времени
Реле 2-3 шт (в зависимости от количества каналов)
Несколько кнопок
ЖК дисплей
БП 7-9 В
Корпус

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

PS: Выше напутал про тригер RTrig спутал с тригером TT. Так что 2-й абзац аннулируется.
Последний раз редактировалось AlexRyzh 22.01.2016{, 12:00}, всего редактировалось 1 раз.

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Первая разработка в программе (для теплицы, гроубокса)

#19

Сообщение rw6cm » 22.01.2016{, 13:51}

AlexRyzh писал(а):Вот я и подумал, неплохо было бы собрать программируемое многоканальное реле времени с ардуины (возможно нано, насколько ее памяти хватит), чтоб кнопками можно было выставлять реальное время и время включения и выключения по каждой программе.
Не вижу смысла возиться с тем, чего и так завались.
На том же Али можно подобрать подходящее, и будет это в разы дешевле и эстетичней.
AlexRyzh писал(а):но я не понимаю как массивом работать
Учится ни когда не поздно Изображение Но с этим к Автору... У меня на это терпения не хватает,
чтобы грамотно и доходчиво строчить на клаве )))

п/с В примерах выше постом забыл убрать лишние переменные от эмулятора. Если что удалите их.
Win10-64, FLProg (portable)

Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22.12.2015{, 11:06}
Репутация: 1
Откуда: Мелитополь
Контактная информация:

Первая разработка в программе (для теплицы, гроубокса)

#20

Сообщение AlexRyzh » 22.01.2016{, 16:55}

rw6cm писал(а):Не вижу смысла возиться с тем, чего и так завались.На том же Али можно подобрать подходящее, и будет это в разы дешевле и эстетичней.
У нас такие реле можно купить не дороже чем на Али. Но, есть несколько больших НО!!!
1. Например мне нужно управлять 4-мя устройствами - а это 4 реле нужно покупать!
2. На одно устройство (свет), мне нужно всего 1 программа суточная в 6 час утра включить и в 21-00 выключить. В зависимости от стадии роста растения время включения и выключения     нужно менять, т.е. уменьшать световой день (на это можно использовать 1 канал "своего" реле времени).
3. Включать вентилятор 5-6 раз в день - это 5-6 программ на втором канале.
4. Включать полив, например каждые 2 часа по 15-20 мин (зависит от капельниц и нужно смотреть по дренажу на сколько минут включать)
5. Каждый час на 15 мин включать аэрацию раствора (компрессор)
Итого получается нужно 4 реле времени, которые я могу программировать только так как позволяет производитель и не иначе. А если мне нужна будет точность с учетом секунд? В этих реле нет секунд, а на "своем" можно учесть и секунды.
"Свое" реле я всегда могу перепрошить под свои нужды, а купленные - никак!
Вот такая разница мне видится между покупкой и изготовлением своего реле.
Ардуино нано - 1.75 долл.
Жк дисплей - 1.32 долл.
Реле 4 шт - 2.5 долл.
Часы реал врем. 0.62 долл.
Вместо кнопок пульт дистанционного управления (на все случаи жизни) вот такой за 0.9 долл.
http://ru.aliexpress.com/item....62faadd
Корпус можно из из чего-то сделать (применить) что дома валяется. Или купить подходящий.
Итого получается порядка 8 долларов с корпусом за многоканальное реле времени, программируемое с пульта инфракрасного!
Это против 9 долларов за каждое реле на 17 программ. Зачем мне 17 программ, если мне нужна одна? И еще что мне делать с 17 программами, если мне нужно 20? И как быть если мне нужно через определенное время включить ультрафиолет на 20 сек?
Да реле с Али хороши, но не всегда выгодно и практично! Изображение Все зависит от потребностей. Кому-то и одного много, а кому-то и 4 мало Изображение

Ответить

Вернуться в «Проекты различных устройств на Arduino»