Загрузчик для печки.
- Войдите на сайт для отправки комментариев
Ср, 28/12/2016 - 16:40
Задача управлять устройством загрузки топлива в печь. Выглядит это так: по достижении заданной температуры включается загрузочное устройство, работает заданное время (1-5 сек), затем отключается и ждет падения температуры до заданного уровня. Затем цикл повторяется.
Уперся в следующее: Нужно выполнить условие 1 раз и затем ждать команды для следующего выполнения. Никак не могу сообразить как это сделать. Просьба помочь, кто чем может.
if t01_zadan=заданная_температура_низшая
{flag = true;} else {flag=false;}
if t01_zadan=заданная_температура_высшая && flag=true
{Reley_1 = HIGH;
deley(t02_zadan);
}
Чисто логика, ситаксис не прверял, но само задание глупое, изначально то печь холодная ))) тоже надо включить, это когда вышла на режим тогда может да, но что-то я сомневаюсь
Попробую выложить получившийся скетч. Собрал на сколько понял.
При компиляции ругается в строке 26. "lvalue required as left operand of assignment"
Чисто логика, ситаксис не прверял
Вот теперь и объясняйте ему, почему там возникает ошибка при компиляции...
Логика тоже не правильная. Сравнивать надо не на равенство температур. Может так получиться, что между двумя замерами значение температуры успеет просокочить порог. Поэтому сравнивать надо так: текущая температура меньше или равна минимальной; текущая температура больше или равна максимальной.
Во-вторых условие if t01_zadan=заданная_температура_высшая && flag=true никогда не выполнится (неправильный синтаксис опустим), потому что flag не может быть true, если t01_zadan=заданная_температура_высшая.
Ок. Попробовал разобрать ваш вариант. Не вижу смысла просить не кидаться помидорами, поэтому весь открыт как есть. По правде говоря не очень понял как бороться с флагами, но скетч кой-какой сваял.
температура равна нулю и, подачи топлива нет, сначала печь надо выгнать в окно 500-700 градусов подавая топливо, так?
Конечно. Для стартового варианта я предполагал это сделать вручную. Но ни в коем случае от помощи в этом направлении не отказываюсь. Разумеется автоматизация очень порадует. Особенно сам метод ее воплощения.
То-есть нам надо симитировать обычный прибор с двумя уставками )))
А какое время требуется для выхода на 500 градусов?
Насчет прибора не очень понял. А по температуре думаю за минут 5 выйдет на 500 гр.
Насчет прибора не очень понял. А по температуре думаю за минут 5 выйдет на 500 гр.
И удерживать в диапазоне от 500 до 700 подкидывая топливо?
Прошу толкнуть в нужную сторону.
Судя по тому, как лихо Вы позволяете себе вот такие конструкции
правильная сторона для Вас находится вот здесь. Правильнее сейчас для Вас ничего нет.
Вы правы. Я с трудом ориентируюсь в программировании несмотря на то, что литература указанная вами есть у меня давно. Надеялся помогут практическим советом. Видимо еще не скоро заработает моя автоматика. )
Насчет прибора не очень понял. А по температуре думаю за минут 5 выйдет на 500 гр.
И удерживать в диапазоне от 500 до 700 подкидывая топливо?
Все верно. Только еще можно пороги температуры менять. А 500 гр. набирает за 5 мин. аж бегом. Проверил.
Друже 1 знак равно - присваивание, для условия пишут два "=="
тогда в setup переносим включение печки, при включении когда температура менее 700 градусов подаём топливо, как только температура стала 700 и более отключаем реле и далее выходим в цикл loop
в цикле реле включено на время подачи топлива когда температура менее 500 градусов и не более 700 градусов,как бы всё (да, временем подачи подобрать выключение подачи топлива по верхней температуре)
Да, но разгонять будет не до максимальной вами определённой температуры, а до температуры, что успеет набрать за время подачи топлива, но не более чем максимальной, при максимальной подача выключится
Переменная relay определена исходя из применения стандартного блока реле с оптической развязкой, если нужно инвертировать, просто поменять на HIGH
Написал в лоб, не проверял, но уверен должно работать, так как никакой витиеватости кода нет )))
Ситуация напоминает кругосветное путешествия Ивана Сусанина, который шел домой. Автор топика запутался и всех остальных запутал. А так алгоритм простого гистерезиса и ничего сложного.
Все переменные должны быть проинициализированы, еще раз ВСЕ!!!
Я не зря написал - analogReference(DEFAULT); //установить режим аналогового входа, по умолчанию он должен быть в этом режиме - НО НЕ ОБЯЗАН, то-есть может и не быть
кстати автор подачу топлива имеет желание организовать по времени ))) зачем - вопрос сложный, а в принципе схема реализуется на приборе из серии Ш45ХХ с двумя уставками (раздельными группами контактов)
DEFAULT: стандартное опорное напряжение 5 В (на платформах с напряжением питания 5 В) или 3.3 В (на платформах с напряжением питания 3.3 В)
http://arduino.ru/Reference/AnalogReference
Если у вас параноя, то можно и так.
Это не параноя, это грабли, на которые можно наткнуться и не понять отчего, попробуйте залейте скетч использующий внешнюю опору, а потом ваш, мерять будет?
Это не параноя, это грабли, на которые можно наткнуться и не понять отчего, попробуйте залейте скетч использующий внешнюю опору, а потом ваш, мерять будет?
Uabem, проверил, работает четко как вы написали. Но мне надо чтобы загрузка происходила в течение 1-5 сек, затем отключалась и возобновлялась при достижении нижнего порога температуры. В вашем случае получается, что загрузка происходит при температуре ниже нижнего порога, вовремя отключается, но через интервал опроса снова включается несмотря на то, что верхний порог не достигнут.. Дело в том, что устройство подачи за 1 сек успевает выдать нужное количество топлива. Следующая подача, если топливо не успеет прогореть будет перегружать топку. Сделал несколько попыток, поэкспериментировав с временем задержки, получилось что-то похожее, но не то.
Это не параноя, это грабли, на которые можно наткнуться и не понять отчего, попробуйте залейте скетч использующий внешнюю опору, а потом ваш, мерять будет?
Если работает - не зачем!
Я не проверял, непонятно зачем ввели эту команду... как-нибудь покопаю...
Uabem, проверил, работает четко как вы написали. Но мне надо чтобы загрузка происходила в течение 1-5 сек, затем отключалась и возобновлялась при достижении нижнего порога температуры. В вашем случае получается, что загрузка происходит при температуре ниже нижнего порога, вовремя отключается, но через интервал опроса снова включается несмотря на то, что верхний порог не достигнут.. Дело в том, что устройство подачи за 1 сек успевает выдать нужное количество топлива. Следующая подача, если топливо не успеет прогореть будет перегружать топку. Сделал несколько попыток, поэкспериментировав с временем задержки, получилось что-то похожее, но не то.
а если не достигнет? ну это ваш скетч, 1-5 сек - тогда сразу в цикл и не надо гнать до максимальной, и датчики температуры как-то несколько встороне созерцают происходящее:
Uabem, проверил, работает четко как вы написали. Но мне надо чтобы загрузка происходила в течение 1-5 сек, затем отключалась и возобновлялась при достижении нижнего порога температуры. В вашем случае получается, что загрузка происходит при температуре ниже нижнего порога, вовремя отключается, но через интервал опроса снова включается несмотря на то, что верхний порог не достигнут.. Дело в том, что устройство подачи за 1 сек успевает выдать нужное количество топлива. Следующая подача, если топливо не успеет прогореть будет перегружать топку. Сделал несколько попыток, поэкспериментировав с временем задержки, получилось что-то похожее, но не то.
Вы запутались и народ запутали. Вам надо регулировать не вкл- выкл, а объем подачи. То есть использовать ШИМ алгоритм. Да ставить датчик огня. Само топливо тепло не дает, а только если горит. А вот если огня нет, то топливо зальет топку и все будет не очень.
Вы правы. Я не достаточно корректно обрисовал задачу. Вот откорректированный вариант.
Задача управлять устройством загрузки твердого топлива (гранулы) в печь. Выглядит это так:
1. Печь холодная. Растопка осуществляется вручную.
2. Дальше топливо должно разгореться (температура поднимается) время достижения температуры 500гр порядка 5 мин. Полагаю, этот порог температуры и следует считать минимальным.
3. По достижении заданной температуры включается загрузочное устройство, работает заданное время (1-5 сек), затем отключается. (первый цикл)
4. Дальше дожидаемся разгорания топлива. Полагаю это 700 гр. - второй уровень температуры, который необходимо контролировать. (одновременно считаем этот уровень номинальным для режима работы печи)
5. И только после этого можно разрешать новый цикл подачи топлива, который состоится когда температура снова достигнет 500 гр. Топливо подаем циклами по 1-5 сек.
Вот вроде бы все точно. Возможно пропустил очевидные для себя подробности. Не стесняйтесь, помидоры принимаются в разумном количестве.))
Вы не можете повлиять на пункт 4, смысла контролировать 700 градусов, когда повлиять на это не можете, топливо в печи жеж )))
разве что поставить лампочку, что температура уже 700
достижение температуры 700 гр. дает разрешение на следующий цикл загрузки. то есть сообщает программе что топливо разгорелось а не потухло. а индикацию достижение режимной температуры действительно стоит поставить. для солидности. ;)
Вот тут то флаг и потребуется, я поразмышляю, как без датчика огня обойтись
достижение температуры 700 гр. дает разрешение на следующий цикл загрузки. то есть сообщает программе что топливо разгорелось а не потухло. а индикацию достижение режимной температуры действительно стоит поставить. для солидности. ;)
А если потухло? Включаем поддув?
если не достигло 700 гр и потухло ничего не делаем (нет подтверждения разгорания).
1. Печь холодная. Растопка осуществляется вручную.
Здесь надо предусмотреть кнопку , что растопка закончилась. Ведь растопка идет в ручную
2. Дальше топливо должно разгореться (температура поднимается) время достижения температуры 500гр порядка 5 мин. Полагаю, этот порог температуры и следует считать минимальным.
3. По достижении заданной температуры включается загрузочное устройство, работает заданное время (1-5 сек), затем отключается. (первый цикл)
Нужна индикация , что прошло 5 минут и температура 500 градусов достигла , пошла загрузка
4. Дальше дожидаемся разгорания топлива. Полагаю это 700 гр. - второй уровень температуры, который необходимо контролировать. (одновременно считаем этот уровень номинальным для режима работы печи)
Как контролировать температуру в 700 гр? Если меньше 650 усиливать загрузку, а если больше 750 увеличить.
5. И только после этого можно разрешать новый цикл подачи топлива, который состоится когда температура снова достигнет 500 гр. Топливо подаем циклами по 1-5 сек.
Как оно может достигнуть? если мы держим 700 гр?
ПС: Может вам нужен ручной регулятор подачи топлива. Разожли печь вышли на нужную температуру и выставили нужную подачу топлива и все.
Как то вот так: "в пианиста не стрелять, играет как может"
Будет работать без кнопок, даже если в ручном режиме докачегарите выйдет в автомат )))
и подчистил от мусора
qwone не знаю даже как отвечать на такую стопку вопросов. Некоторые улыбнули, а некоторые озадачили чем, что потребуют слишком подробного ответа и вполне возможно встречного вопроса и т.д. Зафлудим короче тему. Поэтому, если есть желание можем перенести общение скажем вот сюда home2461711@yandex.ru А конструктивные решения, если появятся, можно будет опубликовать в теме.
ua6em, супер! Вы самый продуктивный помощьник в этом вопросе. Спасибо огромное.
На столе вроде все отрабатывает как надо. В работе буду пробовать чуть позже
Попробовал вывести текущую температуру на монитор. Выводит пока температура не достигнет верхнего предела. Потом вывод данных останавливается пока не достигнет нижнего предела. Хотелось бы иметь возможность наблюдать температуру постоянно.
Прикрутить дисплей и выводить. если надо и, это правильное решение, в подчищенной версии выводить в строках 21 и 28...как то так...да пытался выравнять блок данных по сегменту в 32 байта...но компилятор конечно сильно неоптимален...2394 байта память программы и 190 байт динамической памяти это совсем не айс...мой оптимизированный драйвер для работы с дискетами был всего 1800 байт, при этом он работал напрямую с контроллером прямого доступа памяти, разбирал MBR и BR - ассемблер наше всё )))
КОД
Да! На столе работает все Ок. В работе отчитаюсь. Еще раз спасибо!
P.S. В следующий раз видимо будет прикручивание дисплея. Если сам не справлюсь.))
С Наступающим!
Переработал код с #36
Код сложнее, но сюда можно прикрутить многое.
Переработал код с #36
Код сложнее, но сюда можно прикрутить многое.
Всё должно быть сделано просто, насколько возможно, но не проще А Эйнштейн
Все сложное – не нужно, все нужное – просто. М. Калашников
PS не думаю, что сложно будет прикрутить дисплей, остались непонятки, что за топливо )))
С Новым Годом!!!
C Новым Годом!
Топливо пеллеты, опилки, лузга подслонечника, скорлупа ореха. Пока что так. Еще попробуем отработанное масло, но это попозже.
По прикручиванию дисплея скорее всего придется обращаться снова. По крайней мере попытки сделать это пока успехом не увенчались. Имею для этого светодиодные матрицы по 4 сегмента и расширитель выходов НС595. Сначала просто индикация температуры горения, потом индикация нижнего и верхнего порогов и режим установки параметров с клавиатуры (есть клава 4х4 мембранная от китайцев). Как-то так.
Ну с дисплееем просто
ПС:http://www.youtube.com/watch?v=g3kFEgPxT2E
Осталось добыть Multi_function_Shield ))
Осталось добыть Multi_function_Shield ))
А схему Multi_function_Shield из инета скачать видно не реально. и реализовать на ваших компонентах и только регистры и матрицы.
Реально конечно. Пока еще не разбирался. Было несколько попыток создать индикатор на семисегментах и регистре. Там вроде попроще чем в вашем скетче. От этого и пляшу. Вполне возможно следующая попытка будет создать свой мультишилд.
http://yadi.sk/i/Rnj8T3hsunvky Подключить как здесь индикатор и 2 региста вам сложно. Почему я ссылку на ютуб дал. там ссылка на схему.
Да не сложно конечно. Я же говорю не разбирался. Все посмотрим, все попробуем. За ссылку спасибо большое.
Для двухстрочного LCD 1602 I2C дисплея, тот что в китае за 125 рублей
Будет попроще ))) Кстати самое сложное в Вашем устройстве - механика и пож. безопасность, скетч дело пустяковое
Тоже спасибо большое! Примерялся к двухстрочному, но у него маленькие знаки и при ярком освещении их плохо видно. То и другое важно. Механику и пож безопасность это первое что решили. Для меня как раз это дело пустяковое.)))
Тоже спасибо большое! Примерялся к двухстрочному, но у него маленькие знаки и при ярком освещении их плохо видно. То и другое важно. Механику и пож безопасность это первое что решили. Для меня как раз это дело пустяковое.)))
Да нормально видно, я на синем смотрю, даже скажу чрезмерно ярко, если смотрели скетч, то в верхней строке выводится температура, в нижней - состояние, чего ждём ))) разжигания или прогорания, а большего и не нужно на первых порах, по идее надо бы ввести автоматический режим, который сам подберёт определённый режим загрузка - розжиг - горение в зависимости от топлива с возможностью записи в память программ контроллера, останется только выбрать нужную программу по виду топлива в рабочем режиме
Мы делали контроллеры но несколько для других вещей, там было 32 программы и всё это реализовывалось на PIC16F84 а он значительно скромнее по ресурсам )))
Идея интересная, переносите мех часть и код в проекты, я думаю найдётся немало желающих помочь развитию...
PS код как рыба - рабочий, но дюже криво написан, особенно вывод на дисплей ))) что называется в лоб
Согласен, буду вариант двухстрочного иметь ввиду, но в нашем варианте важно чтобы видно было издалека. Я например, с 5 метров его показания не увижу, а подходить неудобно, ну и так далее. Он конечно более информативный чем семисегмент, потому и держу его на прицеле. Но пока однозначно семисегмент. Даже пытаюсь найти исполнение покрупнее. Что касается автоматического режима. Еще не понимаю как его реализовать, но чувствую, что надо. Разберемся с первичной автоматикой и индикацией и будем штурмовать следующий этап.