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

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

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

Сообщение AlexRyzh »

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

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

Первая плата для назначения переменных с модулей, которые будут применяться в проекте.
Вторая плата для вывода полученных значений с модулей на сериал монитор. Преобразовал переменые в строки, чтоб получить понятное отображение на мониторе. Периодичность вывода на монитор установил 5 сек.
Датчик DHT22 подключен к пину 2
По мере наращивания схемы буду выкладывать новые файлы программы.
В результате компиляции скетча на сериалмониторе вижу следующее:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось AlexRyzh 15 янв 2016, 12:04, всего редактировалось 1 раз.
Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22 дек 2015, 11:06
Откуда: Мелитополь
Контактная информация:

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

Сообщение AlexRyzh »

Добавил часы реального времени. Вывод дата и время на монитор. Часы пригодятся в дальнейшем для выполнения некоторых операций в зависимости от времени.
Модуль подключен к пинам 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);
       
       ////// конец обработка и вывод данных терморезистора////
Может как-то можно с помощью пользовательских блоков организовать эти вычисления?
Подскажите как это сделать?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось AlexRyzh 15 янв 2016, 12:03, всего редактировалось 1 раз.
Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22 дек 2015, 11:06
Откуда: Мелитополь
Контактная информация:

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

Сообщение AlexRyzh »

Вот полный рабочий код скетча, где применяется этот терморезистор совместно с другими модулями. и отправкой в базу данных на сервер.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13 окт 2015, 16:47
Контактная информация:

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

Сообщение Олег »

Вам обязательно NTC надо? DS18B20 в FLProg поддерживается, да и цена ниже.
Если все-же охота NTC, то здесь на рисунках С1 и С2 нарисована схема подключения, а дальше все просто.
Последний раз редактировалось Олег 15 янв 2016, 16:23, всего редактировалось 1 раз.
Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22 дек 2015, 11:06
Откуда: Мелитополь
Контактная информация:

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

Сообщение AlexRyzh »

Спасибо, но мне не нужна схема подключения, с этим проблем нет, к Ардуине намного проще все подключается используя 1 резистор 10К.
Дело в том, что я покупал эти датчики (2 шт.), еще не зная толком о Ардуино. И теперь хочу прикрутить их к Ардуино с помощью программы FLProg. (если это возможно)
Как я писал выше, есть скетч с учетом этого датчика, и все работает норм, но хочу организовать "прикрутить" его с помощью программы FLProg
Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13 окт 2015, 16:47
Контактная информация:

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

Сообщение Олег »

К сожалению, после того как прочитал статью где описаны характеристики датчика, пришел  к выводу что пока нормально не реализуется, так-как нужно вычислять логарифм, а его в блоках нет.
 Но тут прошел слух, что возможно в следующем релизе программы разработчик внесет возможность вставки сторонних скетчей, так что возможно не все так плохо.
Последний раз редактировалось Олег 15 янв 2016, 19:23, всего редактировалось 1 раз.
Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22 дек 2015, 11:06
Откуда: Мелитополь
Контактная информация:

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

Сообщение AlexRyzh »

Хорошо, для нормальной реализации будем ждать апгрейда программы, а пока можно немного схитрить. 
Например, если в формулу подставить sin вместо Ln, в уже в полученном скотче, вместо sin подставить Ln и тогда вычисления будут проходить нормально.
Так вот как реализовать в программе вычисление температуры по формулам из этой статьи http://arduino-diy.com/arduino-thermistor
Только в формуле преобразования заменить ln на sin, чтобы потом в готовом скотче вручную заменить sin на ln.
Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22 дек 2015, 11:06
Откуда: Мелитополь
Контактная информация:

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

Сообщение AlexRyzh »

Итак, путем проб и ошибок удалось получить температуру с термистора с помощью программы
Только в строке:
_strFunsq1 = sq((ubi_73680708)/(10000.00));
заменить на
_strFunsq1 = log((ubi_73680708)/(10000.00));
Т.к. программа логарифм не вычисляет.
Дополненная программа и библиотека пользователя прилагается
Реализовал с помощью 2-х пользовательских блоков (можно было и в одном, но так было проще редактировать и искать ошибки)
В первом блоке получаем реальное сопротивление термистора, во втором преобразование в температуру.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось AlexRyzh 17 янв 2016, 19:22, всего редактировалось 1 раз.
krom23
Лейтенант
Сообщения: 444
Зарегистрирован: 06 сен 2015, 15:18
Откуда: Калуга
Имя: Андрей

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

Сообщение krom23 »

AlexRyzh, прочёл статью про датчики. В ней автор немного заблуждается относительно точности измерения термисторов ставя их впереди термопар и забывает указать погрешность относительно напряжения питания. По хорошему, если надо получить достаточно точное значение необходимо измерить напряжение питания на контролере, а оно может иметь погрешность 10% и соответственно подставлять это значение в формулу вместо 5В, и всё равно точность не будет лучше +-2 градуса (как у спиртовых термометров). Я прекрасно понимаю, что нам и не нужна в данном случае точность в три знака после запятой и всё это размазываю только из теоретических побуждений. Если будете использовать датчик во влажной среде, усадите термоусадку между гильзой и проводом, это значительно продлит срок службы. Последнее время наши жулики закупают в Китае откровенный брак, меняем их на холодильном оборудовании тоннами, поэтому опасайтесь датчиков в пластиковой заливке(это для тех, кто будет покупать термодатчики у нас).
Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22 дек 2015, 11:06
Откуда: Мелитополь
Контактная информация:

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

Сообщение AlexRyzh »

В питании термистора по схеме используется 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 янв 2016, 19:23, всего редактировалось 1 раз.
Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13 окт 2015, 16:47
Контактная информация:

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

Сообщение Олег »

Чтобы не было сбоев из-за отключения электричества, то наверно лучше сделать на часах реального времени, поставить их на выдачу часов, и компараторами сравнивать. Если промежуток  с 00 до 12 (или какой вам нужен), то подключать один таймер, если с 13 до 00, то другой.
Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22 дек 2015, 11:06
Откуда: Мелитополь
Контактная информация:

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

Сообщение AlexRyzh »

Да конечно же с использованием часов реального времени.
Но не пойму как построить реле времени с нужными параметрами включения. Один таймер получается сделать, работает (плата5)
А как еще добавить время срабатывания не пойму.
Например, мне нужно:  (Плата 5)
1) включение в 7 час 10 мин. отключение через 15 мин
2) включение в 9 час 10 мин отключение через 17 мин.
Может подскажите как это реализовать, а дальше я думаю сам смогу наворотить нужные временные зоны включения и выключения.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
rw6cm
Полковник
Сообщения: 2299
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир

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

Сообщение rw6cm »

AlexRyzh писал(а):как построить реле времени с нужными параметрами включения.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Win10-64, FLProg (portable)
krom23
Лейтенант
Сообщения: 444
Зарегистрирован: 06 сен 2015, 15:18
Откуда: Калуга
Имя: Андрей

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

Сообщение krom23 »

AlexRyzh писал(а):Нужно каждый день, каждые пол часа включать полив на 15 мин днем, ночью каждые 3 часа на 15 мин.
А зачем так часто и тем более ночью? Даже влаголюбивым огурцам, я молчу про помидоры, такой частый полив вреден, или у вас какая то хитрая технология?
Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22 дек 2015, 11:06
Откуда: Мелитополь
Контактная информация:

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

Сообщение AlexRyzh »

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 сен 2015, 16:18
Откуда: Мариуполь

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

Сообщение Skull »

krom23 писал(а):или у вас какая то хитрая технология?
Это Вы еще про аэропонику не слышали, где надо увлажнение каждые 5 мин ))
Аватара пользователя
rw6cm
Полковник
Сообщения: 2299
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир

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

Сообщение rw6cm »

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

п/с В примере 3, в элементе массива, надо выключить индекс, он здесь не нужен.
Это очередной глюк, он не сохраняет настройки после выхода.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось rw6cm 22 янв 2016, 04:07, всего редактировалось 1 раз.
Win10-64, FLProg (portable)
Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22 дек 2015, 11:06
Откуда: Мелитополь
Контактная информация:

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

Сообщение AlexRyzh »

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 янв 2016, 12:00, всего редактировалось 1 раз.
Аватара пользователя
rw6cm
Полковник
Сообщения: 2299
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир

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

Сообщение rw6cm »

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

п/с В примерах выше постом забыл убрать лишние переменные от эмулятора. Если что удалите их.
Win10-64, FLProg (portable)
Аватара пользователя
AlexRyzh
Сержант
Сообщения: 107
Зарегистрирован: 22 дек 2015, 11:06
Откуда: Мелитополь
Контактная информация:

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

Сообщение AlexRyzh »

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»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость