Первая разработка в программе (для теплицы, гроубокса)
- AlexRyzh
- Сержант
- Сообщения: 107
- Зарегистрирован: 22 дек 2015, 11:06
- Откуда: Мелитополь
- Контактная информация:
Первая разработка в программе (для теплицы, гроубокса)
Итак, благодаря изучению простейших уроков по программе, получил кое-какие понятия, и решил от теории перейти к практике. Поставил определенную цель - автоматизировать микроклимат и процесс выращивания растений в теплице или гроубоксе.
Начинаю с простого, с того что понимаю и как я это понимаю. По ходу постановки новых задач буду искать решения и реализовывать в программе.
Этот пост пригодится для меня, как напоминание что и как делал постепенно, так и для начинающих (типа меня) разобраться в структурировании программы.
Все будет делаться для Мега 2560
Задача №1, которую я поставил, получить данные с датчика DHT22 и вывести на сериал монитор. (Считаю использование монитора необходимым, чтобы можно было контролировать выполненные действия и понимать насколько правильно все сделано.)
Если я что-то не так делаю, или можно сделать проще, прошу опытных подсказывать как лучше реализовать.
Первая плата для назначения переменных с модулей, которые будут применяться в проекте.
Вторая плата для вывода полученных значений с модулей на сериал монитор. Преобразовал переменые в строки, чтоб получить понятное отображение на мониторе. Периодичность вывода на монитор установил 5 сек.
Датчик DHT22 подключен к пину 2
По мере наращивания схемы буду выкладывать новые файлы программы.
В результате компиляции скетча на сериалмониторе вижу следующее:
Начинаю с простого, с того что понимаю и как я это понимаю. По ходу постановки новых задач буду искать решения и реализовывать в программе.
Этот пост пригодится для меня, как напоминание что и как делал постепенно, так и для начинающих (типа меня) разобраться в структурировании программы.
Все будет делаться для Мега 2560
Задача №1, которую я поставил, получить данные с датчика DHT22 и вывести на сериал монитор. (Считаю использование монитора необходимым, чтобы можно было контролировать выполненные действия и понимать насколько правильно все сделано.)
Если я что-то не так делаю, или можно сделать проще, прошу опытных подсказывать как лучше реализовать.
Первая плата для назначения переменных с модулей, которые будут применяться в проекте.
Вторая плата для вывода полученных значений с модулей на сериал монитор. Преобразовал переменые в строки, чтоб получить понятное отображение на мониторе. Периодичность вывода на монитор установил 5 сек.
Датчик DHT22 подключен к пину 2
По мере наращивания схемы буду выкладывать новые файлы программы.
В результате компиляции скетча на сериалмониторе вижу следующее:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось AlexRyzh 15 янв 2016, 12:04, всего редактировалось 1 раз.
- AlexRyzh
- Сержант
- Сообщения: 107
- Зарегистрирован: 22 дек 2015, 11:06
- Откуда: Мелитополь
- Контактная информация:
Первая разработка в программе (для теплицы, гроубокса)
Добавил часы реального времени. Вывод дата и время на монитор. Часы пригодятся в дальнейшем для выполнения некоторых операций в зависимости от времени.
Модуль подключен к пинам 7,6,5
Добавлено (15.01.2016, 15:15)
---------------------------------------------
Но вот стал вопрос как "прикрутить" датчик температуры на терморезисторе Вот такой http://ru.aliexpress.com/item....20.html
По поводу преобразования сопротивления в температуру есть хорошая статья http://arduino-diy.com/arduino-thermistor
Есть у меня скетч с этим преобразованием, работает отлично
Может как-то можно с помощью пользовательских блоков организовать эти вычисления?
Подскажите как это сделать?
Модуль подключен к пинам 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
- Откуда: Мелитополь
- Контактная информация:
Первая разработка в программе (для теплицы, гроубокса)
Вот полный рабочий код скетча, где применяется этот терморезистор совместно с другими модулями. и отправкой в базу данных на сервер.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Первая разработка в программе (для теплицы, гроубокса)
Вам обязательно NTC надо? DS18B20 в FLProg поддерживается, да и цена ниже.
Если все-же охота NTC, то здесь на рисунках С1 и С2 нарисована схема подключения, а дальше все просто.
Если все-же охота NTC, то здесь на рисунках С1 и С2 нарисована схема подключения, а дальше все просто.
Последний раз редактировалось Олег 15 янв 2016, 16:23, всего редактировалось 1 раз.
- AlexRyzh
- Сержант
- Сообщения: 107
- Зарегистрирован: 22 дек 2015, 11:06
- Откуда: Мелитополь
- Контактная информация:
Первая разработка в программе (для теплицы, гроубокса)
Спасибо, но мне не нужна схема подключения, с этим проблем нет, к Ардуине намного проще все подключается используя 1 резистор 10К.
Дело в том, что я покупал эти датчики (2 шт.), еще не зная толком о Ардуино. И теперь хочу прикрутить их к Ардуино с помощью программы FLProg. (если это возможно)
Как я писал выше, есть скетч с учетом этого датчика, и все работает норм, но хочу организовать "прикрутить" его с помощью программы FLProg
Дело в том, что я покупал эти датчики (2 шт.), еще не зная толком о Ардуино. И теперь хочу прикрутить их к Ардуино с помощью программы FLProg. (если это возможно)
Как я писал выше, есть скетч с учетом этого датчика, и все работает норм, но хочу организовать "прикрутить" его с помощью программы FLProg
Первая разработка в программе (для теплицы, гроубокса)
К сожалению, после того как прочитал статью где описаны характеристики датчика, пришел к выводу что пока нормально не реализуется, так-как нужно вычислять логарифм, а его в блоках нет.
Но тут прошел слух, что возможно в следующем релизе программы разработчик внесет возможность вставки сторонних скетчей, так что возможно не все так плохо.
Но тут прошел слух, что возможно в следующем релизе программы разработчик внесет возможность вставки сторонних скетчей, так что возможно не все так плохо.
Последний раз редактировалось Олег 15 янв 2016, 19:23, всего редактировалось 1 раз.
- AlexRyzh
- Сержант
- Сообщения: 107
- Зарегистрирован: 22 дек 2015, 11:06
- Откуда: Мелитополь
- Контактная информация:
Первая разработка в программе (для теплицы, гроубокса)
Хорошо, для нормальной реализации будем ждать апгрейда программы, а пока можно немного схитрить.
Например, если в формулу подставить sin вместо Ln, в уже в полученном скотче, вместо sin подставить Ln и тогда вычисления будут проходить нормально.
Так вот как реализовать в программе вычисление температуры по формулам из этой статьи http://arduino-diy.com/arduino-thermistor
Только в формуле преобразования заменить ln на sin, чтобы потом в готовом скотче вручную заменить sin на ln.
Например, если в формулу подставить sin вместо Ln, в уже в полученном скотче, вместо sin подставить Ln и тогда вычисления будут проходить нормально.
Так вот как реализовать в программе вычисление температуры по формулам из этой статьи http://arduino-diy.com/arduino-thermistor
Только в формуле преобразования заменить ln на sin, чтобы потом в готовом скотче вручную заменить sin на ln.
- AlexRyzh
- Сержант
- Сообщения: 107
- Зарегистрирован: 22 дек 2015, 11:06
- Откуда: Мелитополь
- Контактная информация:
Первая разработка в программе (для теплицы, гроубокса)
Итак, путем проб и ошибок удалось получить температуру с термистора с помощью программы
Только в строке:
_strFunsq1 = sq((ubi_73680708)/(10000.00));
заменить на
_strFunsq1 = log((ubi_73680708)/(10000.00));
Т.к. программа логарифм не вычисляет.
Дополненная программа и библиотека пользователя прилагается
Реализовал с помощью 2-х пользовательских блоков (можно было и в одном, но так было проще редактировать и искать ошибки)
В первом блоке получаем реальное сопротивление термистора, во втором преобразование в температуру.
Только в строке:
_strFunsq1 = sq((ubi_73680708)/(10000.00));
заменить на
_strFunsq1 = log((ubi_73680708)/(10000.00));
Т.к. программа логарифм не вычисляет.
Дополненная программа и библиотека пользователя прилагается
Реализовал с помощью 2-х пользовательских блоков (можно было и в одном, но так было проще редактировать и искать ошибки)
В первом блоке получаем реальное сопротивление термистора, во втором преобразование в температуру.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось AlexRyzh 17 янв 2016, 19:22, всего редактировалось 1 раз.
Первая разработка в программе (для теплицы, гроубокса)
AlexRyzh, прочёл статью про датчики. В ней автор немного заблуждается относительно точности измерения термисторов ставя их впереди термопар и забывает указать погрешность относительно напряжения питания. По хорошему, если надо получить достаточно точное значение необходимо измерить напряжение питания на контролере, а оно может иметь погрешность 10% и соответственно подставлять это значение в формулу вместо 5В, и всё равно точность не будет лучше +-2 градуса (как у спиртовых термометров). Я прекрасно понимаю, что нам и не нужна в данном случае точность в три знака после запятой и всё это размазываю только из теоретических побуждений. Если будете использовать датчик во влажной среде, усадите термоусадку между гильзой и проводом, это значительно продлит срок службы. Последнее время наши жулики закупают в Китае откровенный брак, меняем их на холодильном оборудовании тоннами, поэтому опасайтесь датчиков в пластиковой заливке(это для тех, кто будет покупать термодатчики у нас).
- AlexRyzh
- Сержант
- Сообщения: 107
- Зарегистрирован: 22 дек 2015, 11:06
- Откуда: Мелитополь
- Контактная информация:
Первая разработка в программе (для теплицы, гроубокса)
В питании термистора по схеме используется 3.3В и AREF, поэтому напряжение можно считать стабильным и не зашумленным как на 5В. 10% погрешность это много, будет значительно меньше, хотя для контроля температуры питательного раствора и 10% не критично.
Я положил рядом эти 2 датчика (термистор и DHT22) и показания DHT22 - 24,2, а термистора 24.45. Рядом лежит еще спиртовой градусник для инкубатора, показывает примерно 24.3 грд. Так что термистор достаточно точно определяет температуру.
Добавлено (20.01.2016, 16:19)
---------------------------------------------
Подскажите, как построить реле времени? Например для полива. Нужно каждый день, каждые пол часа включать полив на 15 мин днем, ночью каждые 3 часа на 15 мин.
Я положил рядом эти 2 датчика (термистор и DHT22) и показания DHT22 - 24,2, а термистора 24.45. Рядом лежит еще спиртовой градусник для инкубатора, показывает примерно 24.3 грд. Так что термистор достаточно точно определяет температуру.
Добавлено (20.01.2016, 16:19)
---------------------------------------------
Подскажите, как построить реле времени? Например для полива. Нужно каждый день, каждые пол часа включать полив на 15 мин днем, ночью каждые 3 часа на 15 мин.
Последний раз редактировалось AlexRyzh 19 янв 2016, 19:23, всего редактировалось 1 раз.
Первая разработка в программе (для теплицы, гроубокса)
Чтобы не было сбоев из-за отключения электричества, то наверно лучше сделать на часах реального времени, поставить их на выдачу часов, и компараторами сравнивать. Если промежуток с 00 до 12 (или какой вам нужен), то подключать один таймер, если с 13 до 00, то другой.
- AlexRyzh
- Сержант
- Сообщения: 107
- Зарегистрирован: 22 дек 2015, 11:06
- Откуда: Мелитополь
- Контактная информация:
Первая разработка в программе (для теплицы, гроубокса)
Да конечно же с использованием часов реального времени.
Но не пойму как построить реле времени с нужными параметрами включения. Один таймер получается сделать, работает (плата5)
А как еще добавить время срабатывания не пойму.
Например, мне нужно: (Плата 5)
1) включение в 7 час 10 мин. отключение через 15 мин
2) включение в 9 час 10 мин отключение через 17 мин.
Может подскажите как это реализовать, а дальше я думаю сам смогу наворотить нужные временные зоны включения и выключения.
Но не пойму как построить реле времени с нужными параметрами включения. Один таймер получается сделать, работает (плата5)
А как еще добавить время срабатывания не пойму.
Например, мне нужно: (Плата 5)
1) включение в 7 час 10 мин. отключение через 15 мин
2) включение в 9 час 10 мин отключение через 17 мин.
Может подскажите как это реализовать, а дальше я думаю сам смогу наворотить нужные временные зоны включения и выключения.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Первая разработка в программе (для теплицы, гроубокса)
AlexRyzh писал(а):как построить реле времени с нужными параметрами включения.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Win10-64, FLProg (portable)
Первая разработка в программе (для теплицы, гроубокса)
А зачем так часто и тем более ночью? Даже влаголюбивым огурцам, я молчу про помидоры, такой частый полив вреден, или у вас какая то хитрая технология?AlexRyzh писал(а):Нужно каждый день, каждые пол часа включать полив на 15 мин днем, ночью каждые 3 часа на 15 мин.
- AlexRyzh
- Сержант
- Сообщения: 107
- Зарегистрирован: 22 дек 2015, 11:06
- Откуда: Мелитополь
- Контактная информация:
Первая разработка в программе (для теплицы, гроубокса)
Именно хитрая технология (хотя речь не о технологии а программировании)krom23 писал(а):или у вас какая то хитрая технология?
![Изображение](http://s38.ucoz.net/sm/1/smile.gif)
Технология Гидропоника, с Аэрацией на подтоплении, Субстрат Керамзит, так что той влаги, что держит керамзит растениям не хватит на долго.
Добавлено (21.01.2016, 22:20)
---------------------------------------------
Спасибо за таймер. Интересное решение. Взял для своих нужд.
Вот еще решил сделать (реализовать) программируемое реле времени на 20 программ (суточное).
Сделал, проверял на 3-4 программах, все работало норм. Потом решил сделать 20 программ, Обработку данных вынес в пользовательский блок.
Прикрутил нужные переменные, плата корректна, но при попытке компиляции выдает ошибку компиляции. (такого еще не было, чтоб плата была корректна и выдавало ошибку
![Изображение](http://s38.ucoz.net/sm/1/wacko.gif)
В чем проблема, кто подскажет?
Программу и пользовательский блок прилагаю
Добавлено (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)
---------------------------------------------
Попробовал тоже сделать без пользовательского блока, все собрал на плате. В этом случае нет ошибки и работает правильно.
Получается что-то не то с пользовательскими блоками.
Первая разработка в программе (для теплицы, гроубокса)
Это Вы еще про аэропонику не слышали, где надо увлажнение каждые 5 мин ))krom23 писал(а):или у вас какая то хитрая технология?
Первая разработка в программе (для теплицы, гроубокса)
Честно сказать: никчёмный громадный код!AlexRyzh писал(а):Прикрутил нужные переменные, плата корректна, но при попытке компиляции выдает ошибку компиляции.
![Улыбка! :)](./images/smilies/ha_smile.gif)
Если идти вашим алгоритмом, то хотя бы так: пример 2.
Но все равно, если предположить,
что таймеру за сутки нужно будет сделать больше сотни телодвижений...
Устанете листать проект
![Улыбка! :)](./images/smilies/ha_smile.gif)
Мне видится здесь другой подход: пример 3
п/с В примере 3, в элементе массива, надо выключить индекс, он здесь не нужен.
Это очередной глюк, он не сохраняет настройки после выхода.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось rw6cm 22 янв 2016, 04:07, всего редактировалось 1 раз.
Win10-64, FLProg (portable)
- AlexRyzh
- Сержант
- Сообщения: 107
- Зарегистрирован: 22 дек 2015, 11:06
- Откуда: Мелитополь
- Контактная информация:
Первая разработка в программе (для теплицы, гроубокса)
Согласен, проект получается не маленький, но мне кажется это единственный выход решения новой поставленной задачи (ниже объясню).rw6cm писал(а):Устанете листать проект))
Согласно озвученной задаче по поливу (с заданным режимом), ваши подсказки очень хорошие и полностью решают эту задачу.
Но в примере 3 Вы используете RTrig (инвертор), думаю этого нельзя делать, т.к. может произойти неприятная ситуация (если учитывать человеческий фактор допуска ошибки)
Например, человек программирует реле и при вводе времени включения ввел время когда реле еще не выключилось по предыдущей программе (у самого были подобные ошибки), в этом случае инвертор отключит нагрузку, а при попытке отключить (по предыдущей программе) - включит нагрузку и дальше все пойдет наперекосяк (мне так кажется). Лучше использовать RS или SR тригер.
Почему я делаю такой проект?! Я решил пойти дальше в постановке задачи, поэтому сейчас все объясню подробнее.
Есть у меня пара таймеров, цифровой и механический, но этого не хватает в полной мере для моих нужд (не будем углубляться в нужды). Кроме того механический таймер иногда барахлит, не срабатывает реле на выключение. Вот я и подумал, неплохо было бы собрать программируемое многоканальное реле времени с ардуины (возможно нано, насколько ее памяти хватит), чтоб кнопками можно было выставлять реальное время и время включения и выключения по каждой программе. Пример похожего реле вот
http://elemag.com.ua/index.php?productID=942
или вот http://stroisovety.org/rozetka-s-tajmerom/
Чтобы этим реле мог воспользоваться любой человек без помощи компьютера, а кнопками его программировать.
Для этого понадобится:
Ардуино Нано
Часы реального времени
Реле 2-3 шт (в зависимости от количества каналов)
Несколько кнопок
ЖК дисплей
БП 7-9 В
Корпус
Так вот я пока на стадии разработки самого принципа работы реле, чтобы я (или любой другой) при программировании не вводили непонятные цифры, а конкретно часы и минуты включения и выключения (при необходимости день недели, секунды...), потом нужно привязать кнопки управления, и.тд.
Я программировать только учусь, поэтому на решение задачи у меня взгляд не столько программиста, сколько техника. Получил время - сравнил - совпадает - включил - или выключил....
![Улыбка! :)](./images/smilies/ha_smile.gif)
Может массивом как-то можно упростить задачу, но я не понимаю как массивом работать, как данные в массиве привязать к программированию кнопками.
PS: Выше напутал про тригер RTrig спутал с тригером TT. Так что 2-й абзац аннулируется.
Последний раз редактировалось AlexRyzh 22 янв 2016, 12:00, всего редактировалось 1 раз.
Первая разработка в программе (для теплицы, гроубокса)
Не вижу смысла возиться с тем, чего и так завались.AlexRyzh писал(а):Вот я и подумал, неплохо было бы собрать программируемое многоканальное реле времени с ардуины (возможно нано, насколько ее памяти хватит), чтоб кнопками можно было выставлять реальное время и время включения и выключения по каждой программе.
На том же Али можно подобрать подходящее, и будет это в разы дешевле и эстетичней.
Учится ни когда не поздноAlexRyzh писал(а):но я не понимаю как массивом работать
![Изображение](http://s38.ucoz.net/sm/1/smile.gif)
чтобы грамотно и доходчиво строчить на клаве )))
п/с В примерах выше постом забыл убрать лишние переменные от эмулятора. Если что удалите их.
Win10-64, FLProg (portable)
- AlexRyzh
- Сержант
- Сообщения: 107
- Зарегистрирован: 22 дек 2015, 11:06
- Откуда: Мелитополь
- Контактная информация:
Первая разработка в программе (для теплицы, гроубокса)
У нас такие реле можно купить не дороже чем на Али. Но, есть несколько больших НО!!!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 сек?
Да реле с Али хороши, но не всегда выгодно и практично!
![Изображение](http://s38.ucoz.net/sm/1/smile.gif)
![Изображение](http://s38.ucoz.net/sm/1/smile.gif)
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость