FLProg
Вход на сайт
Логин:
Пароль:
Мы в VK
Поиск
Статистика


Яндекс.Метрика
Пятница, 09.12.2016, 10:41
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 6123456»
Модератор форума: support, Сергей 
Форум » Основной » Обсуждение программы FLProg (Не багтрекер, и не хотелки. Делимся опытом!!) » Первая разработка в программе (для теплицы, гроубокса) (Изучение работы программы на практике. Постепенное решение.)
Первая разработка в программе (для теплицы, гроубокса)
AlexRyzh
Дата: Пятница, 15.01.2016, 11:34 | Сообщение # 1
Лейтенант
Группа: Проверенные
Сообщений: 107
Награды: 1
Репутация: 0
Статус: Offline
Итак, благодаря изучению простейших уроков по программе, получил кое-какие понятия, и решил от теории перейти к практике. Поставил определенную цель - автоматизировать микроклимат и процесс выращивания растений в теплице или гроубоксе.
Начинаю с простого, с того что понимаю и как я это понимаю. По ходу постановки новых задач буду искать решения и реализовывать в программе.
Этот пост пригодится для меня, как напоминание что и как делал постепенно, так и для начинающих (типа меня) разобраться в структурировании программы.
Все будет делаться для Мега 2560
Задача №1, которую я поставил, получить данные с датчика DHT22 и вывести на сериал монитор. (Считаю использование монитора необходимым, чтобы можно было контролировать выполненные действия и понимать насколько правильно все сделано.)

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

Первая плата для назначения переменных с модулей, которые будут применяться в проекте.
Вторая плата для вывода полученных значений с модулей на сериал монитор. Преобразовал переменые в строки, чтоб получить понятное отображение на мониторе. Периодичность вывода на монитор установил 5 сек.
Датчик DHT22 подключен к пину 2
По мере наращивания схемы буду выкладывать новые файлы программы.
В результате компиляции скетча на сериалмониторе вижу следующее:
Прикрепления: greenbox.flp(112Kb) · 2669486.jpg(61Kb)


Сообщение отредактировал AlexRyzh - Пятница, 15.01.2016, 12:04
 
AlexRyzh Дата: Пятница, 15.01.2016, 15:15 | Сообщение # 2
Лейтенант
Группа: Проверенные
Сообщений: 107
Награды: 1
Репутация: 0
Статус: Offline
Добавил часы реального времени. Вывод дата и время на монитор. Часы пригодятся в дальнейшем для выполнения некоторых операций в зависимости от времени.
Модуль подключен к пинам 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);
       
       ////// конец обработка и вывод данных терморезистора////


Может как-то можно с помощью пользовательских блоков организовать эти вычисления?
Подскажите как это сделать?
Прикрепления: 6586032.jpg(57Kb) · 2319295.flp(154Kb)


Сообщение отредактировал AlexRyzh - Пятница, 15.01.2016, 12:03
 
AlexRyzh Дата: Пятница, 15.01.2016, 15:18 | Сообщение # 3
Лейтенант
Группа: Проверенные
Сообщений: 107
Награды: 1
Репутация: 0
Статус: Offline
Вот полный рабочий код скетча, где применяется этот терморезистор совместно с другими модулями. и отправкой в базу данных на сервер.
Прикрепления: sketch_WEB8.ino(7Kb)
 
Олег Дата: Пятница, 15.01.2016, 16:05 | Сообщение # 4
Гуру
Группа: Проверенные
Сообщений: 730
Награды: 20
Репутация: 15
Статус: Offline
Вам обязательно NTC надо? DS18B20 в FLProg поддерживается, да и цена ниже.
Если все-же охота NTC, то здесь на рисунках С1 и С2 нарисована схема подключения, а дальше все просто.


Сообщение отредактировал Олег - Пятница, 15.01.2016, 16:23
 
AlexRyzh Дата: Пятница, 15.01.2016, 16:36 | Сообщение # 5
Лейтенант
Группа: Проверенные
Сообщений: 107
Награды: 1
Репутация: 0
Статус: Offline
Спасибо, но мне не нужна схема подключения, с этим проблем нет, к Ардуине намного проще все подключается используя 1 резистор 10К.
Дело в том, что я покупал эти датчики (2 шт.), еще не зная толком о Ардуино. И теперь хочу прикрутить их к Ардуино с помощью программы FLProg. (если это возможно)
Как я писал выше, есть скетч с учетом этого датчика, и все работает норм, но хочу организовать "прикрутить" его с помощью программы FLProg
 
Олег Дата: Пятница, 15.01.2016, 18:36 | Сообщение # 6
Гуру
Группа: Проверенные
Сообщений: 730
Награды: 20
Репутация: 15
Статус: Offline
К сожалению, после того как прочитал статью где описаны характеристики датчика, пришел  к выводу что пока нормально не реализуется, так-как нужно вычислять логарифм, а его в блоках нет.
 Но тут прошел слух, что возможно в следующем релизе программы разработчик внесет возможность вставки сторонних скетчей, так что возможно не все так плохо.


Сообщение отредактировал Олег - Пятница, 15.01.2016, 19:23
 
AlexRyzh Дата: Воскресенье, 17.01.2016, 10:07 | Сообщение # 7
Лейтенант
Группа: Проверенные
Сообщений: 107
Награды: 1
Репутация: 0
Статус: Offline
Хорошо, для нормальной реализации будем ждать апгрейда программы, а пока можно немного схитрить. 
Например, если в формулу подставить sin вместо Ln, в уже в полученном скотче, вместо sin подставить Ln и тогда вычисления будут проходить нормально.
Так вот как реализовать в программе вычисление температуры по формулам из этой статьи http://arduino-diy.com/arduino-thermistor
Только в формуле преобразования заменить ln на sin, чтобы потом в готовом скотче вручную заменить sin на ln.
 
AlexRyzh Дата: Воскресенье, 17.01.2016, 19:18 | Сообщение # 8
Лейтенант
Группа: Проверенные
Сообщений: 107
Награды: 1
Репутация: 0
Статус: Offline
Итак, путем проб и ошибок удалось получить температуру с термистора с помощью программы
Только в строке:
_strFunsq1 = sq((ubi_73680708)/(10000.00));
заменить на
_strFunsq1 = log((ubi_73680708)/(10000.00));
Т.к. программа логарифм не вычисляет.
Дополненная программа и библиотека пользователя прилагается
Реализовал с помощью 2-х пользовательских блоков (можно было и в одном, но так было проще редактировать и искать ошибки)
В первом блоке получаем реальное сопротивление термистора, во втором преобразование в температуру.
Прикрепления: greenbox1.flp(300Kb) · __.ubl(84Kb)


Сообщение отредактировал AlexRyzh - Воскресенье, 17.01.2016, 19:22
 
krom23 Дата: Понедельник, 18.01.2016, 20:46 | Сообщение # 9
Майор
Группа: Проверенные
Сообщений: 178
Награды: 1
Репутация: 0
Статус: Offline
AlexRyzh, прочёл статью про датчики. В ней автор немного заблуждается относительно точности измерения термисторов ставя их впереди термопар и забывает указать погрешность относительно напряжения питания. По хорошему, если надо получить достаточно точное значение необходимо измерить напряжение питания на контролере, а оно может иметь погрешность 10% и соответственно подставлять это значение в формулу вместо 5В, и всё равно точность не будет лучше +-2 градуса (как у спиртовых термометров). Я прекрасно понимаю, что нам и не нужна в данном случае точность в три знака после запятой и всё это размазываю только из теоретических побуждений. Если будете использовать датчик во влажной среде, усадите термоусадку между гильзой и проводом, это значительно продлит срок службы. Последнее время наши жулики закупают в Китае откровенный брак, меняем их на холодильном оборудовании тоннами, поэтому опасайтесь датчиков в пластиковой заливке(это для тех, кто будет покупать термодатчики у нас).
 
AlexRyzh Дата: Среда, 20.01.2016, 16:19 | Сообщение # 10
Лейтенант
Группа: Проверенные
Сообщений: 107
Награды: 1
Репутация: 0
Статус: Offline
В питании термистора по схеме используется 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
 
Олег Дата: Среда, 20.01.2016, 16:49 | Сообщение # 11
Гуру
Группа: Проверенные
Сообщений: 730
Награды: 20
Репутация: 15
Статус: Offline
Чтобы не было сбоев из-за отключения электричества, то наверно лучше сделать на часах реального времени, поставить их на выдачу часов, и компараторами сравнивать. Если промежуток  с 00 до 12 (или какой вам нужен), то подключать один таймер, если с 13 до 00, то другой.
 
AlexRyzh Дата: Четверг, 21.01.2016, 02:01 | Сообщение # 12
Лейтенант
Группа: Проверенные
Сообщений: 107
Награды: 1
Репутация: 0
Статус: Offline
Да конечно же с использованием часов реального времени.
Но не пойму как построить реле времени с нужными параметрами включения. Один таймер получается сделать, работает (плата5)
А как еще добавить время срабатывания не пойму.
Например, мне нужно:  (Плата 5)
1) включение в 7 час 10 мин. отключение через 15 мин
2) включение в 9 час 10 мин отключение через 17 мин.
Может подскажите как это реализовать, а дальше я думаю сам смогу наворотить нужные временные зоны включения и выключения.
Прикрепления: greenbox3.flp(419Kb)
 
rw6cm Дата: Четверг, 21.01.2016, 08:50 | Сообщение # 13
Генерал-майор
Группа: Проверенные
Сообщений: 480
Награды: 43
Репутация: 32
Статус: Offline
Цитата AlexRyzh ()
как построить реле времени с нужными параметрами включения.
Прикрепления: TimePump.flp(258Kb)


PC, E8400, 3.5Gb, Win7-32, ver.FLP(portable)
 
krom23 Дата: Четверг, 21.01.2016, 19:49 | Сообщение # 14
Майор
Группа: Проверенные
Сообщений: 178
Награды: 1
Репутация: 0
Статус: Offline
Цитата AlexRyzh ()
Нужно каждый день, каждые пол часа включать полив на 15 мин днем, ночью каждые 3 часа на 15 мин.
А зачем так часто и тем более ночью? Даже влаголюбивым огурцам, я молчу про помидоры, такой частый полив вреден, или у вас какая то хитрая технология?
 
AlexRyzh Дата: Четверг, 21.01.2016, 23:56 | Сообщение # 15
Лейтенант
Группа: Проверенные
Сообщений: 107
Награды: 1
Репутация: 0
Статус: Offline
Цитата krom23 ()
или у вас какая то хитрая технология?
Именно хитрая технология (хотя речь не о технологии а программировании) smile
Технология Гидропоника, с Аэрацией на подтоплении, Субстрат Керамзит, так что той влаги, что держит керамзит растениям не хватит на долго.

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

Добавлено (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)
---------------------------------------------
Попробовал тоже сделать без пользовательского блока, все собрал на плате. В этом случае нет ошибки и работает правильно.
Получается что-то не то с пользовательскими блоками.

 
Форум » Основной » Обсуждение программы FLProg (Не багтрекер, и не хотелки. Делимся опытом!!) » Первая разработка в программе (для теплицы, гроубокса) (Изучение работы программы на практике. Постепенное решение.)
Страница 1 из 6123456»
Поиск:

FLProg © 2016
Яндекс.Метрика