помогите придумать уравнение

Smarodina
Offline
Зарегистрирован: 03.02.2018

всем привет, ломаю голову как придумать уравнение для ардуины... есть переменные, производительность подающего механизма, калорийность топлива, время паузы, верхнее ограничение мощности, нижнее ограничение мощности. на выходе нужно получить цикл работы. то есть программа должна посчитать сколько нужно сделать время подачи для получения определенной мощности.

SAB
Offline
Зарегистрирован: 27.12.2016

Иногда проще не искать уравнение, а забить всё в таблици. А промежуточные значения апроксимировать.

Smarodina
Offline
Зарегистрирован: 03.02.2018

exel?

SAB
Offline
Зарегистрирован: 27.12.2016

Массив данных int[1,2,3......]  или string[....]

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А что, сначала в Excel, потом когда цифры перед глазами и алгоритм будет как на ладони. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

BOOM пишет:

А что, сначала в Excel, потом когда цифры перед глазами и алгоритм будет как на ладони. 

если в эксель забить он и формулу нарисует )))

b707
Offline
Зарегистрирован: 26.05.2017

ua6em пишет:

если в эксель забить он и формулу нарисует )))

это не настоящая формула

bizzon
Offline
Зарегистрирован: 29.03.2016

Ищи. Где-то здесь была программка для твердотопливного котла. Не помню сколько годов назад. Точно была. И вопрос как у тебя.

Smarodina
Offline
Зарегистрирован: 03.02.2018


void setup() {
  // put your setup code here, to run once:
int proizvoditelnost; //задать производительность шнека
int kkal; //задать калорийность топлива
int p_pause;//задать время паузы
int kwt;//задать требуемую мощность
int w_pause=((((kwt/0,001163)/kkal)*1000)/(proizvoditelnost/216000))/((216000-(((kwt/0,001163)/kkal)*1000)/(proizvoditelnost/216000))/p_pause); //расчет времени работы
}

void loop() {
  // put your main code here, to run repeatedly:

}
получилось как то так, еще не пробовал внедрить в работающий контролер
b707
Offline
Зарегистрирован: 26.05.2017

на ноль делить нельзя

Smarodina
Offline
Зарегистрирован: 03.02.2018

никто на ноль и не делил

b707
Offline
Зарегистрирован: 26.05.2017

ардуина какая?

Smarodina
Offline
Зарегистрирован: 03.02.2018

nano

b707
Offline
Зарегистрирован: 26.05.2017

Smarodina пишет:

nano

в Нано во второй и четвертой скобке твоей формулы всегда будет ноль, а ты на эти скобки делишь.

Smarodina
Offline
Зарегистрирован: 03.02.2018

а как быть?

 

b707
Offline
Зарегистрирован: 26.05.2017

Smarodina пишет:

а как быть?

я точно не знаю, это ж твоя формула.

Только помни, что контроллер по умолчанию считает в целых числах, когда оба операнда целые.  Поэтому

выражение N / M всегда ноль, если N < M

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

Кроме того, надо следить за переполнением - то есть чтоб результат помещался в границы выбранного для него типа.

Например, вот этот код в ардуино даст неверный(с точки зрения арифметики)  результат:

int x = 3000;
int y = x *33;

потому что 33 * 3000 = 99000. что больше максимального значения для int = 32767

и таких нюансов много

Pyotr
Offline
Зарегистрирован: 12.03.2014

Смародина, объяви все переменные типа float. Когда добъешся нужного результата по вычислениям, тогда пробуй оптимизировать, если это будет нужно.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

У меня еще есть подозрение, что Smarodina считает 0,001163 дробным числом.

Pyotr
Offline
Зарегистрирован: 12.03.2014

А вообще я начинаю решать задачи сзаду)) короче с ответа.
Что нужно получить на выходе? "посчитать сколько  нужно сделать время подачи" - это правильно.

Коэф = требуемая / максимальная мощность.
Максимальная относительная мощность= макс. подача / (макс.подача + пауза) 

Ну и так далее...

Smarodina
Offline
Зарегистрирован: 03.02.2018

пробовал, считает, но ответ не верный выдает...

Pyotr
Offline
Зарегистрирован: 12.03.2014

Smarodina пишет:

пробовал, считает, но ответ не верный выдает...

Если ответ неверный, то и расчет неверный. А если ответ верный, то это еще не значит что решение верно. И такое бывает.

Вот формула
время_подачи = Р*пауза / (Рмакс-Р);   где
Рмакс - максимальная мощность котла при непрерывной подаче топлива при условии полного сгорания в Вт
Рмакс= пр_п_м * к_т  * КПД;  в Вт
пр_п_м - производительность подающего механизма в г/с
к_т - калорийность топлива в Дж/г
КПД- КПД котла = 0.7-0.8 

Р - расчетная необходимая мощность, которая должна быть всегда меньше Рмакс  в Вт

пауза - время в сек

 

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Можно упростить задачу, и считать всё для определённого  постоянного промежутка времени,

наиболее удобного для конкретного котла.

Например, для каждого часа:

//для каждого часа
T_shnek = (1/(proizvoditelnost/(((kwt*860)/kkal)*1.3))) * 60; //время работы шнека в минутах.
 // 1.3* - коэффициент на потери
T_pause = 60 - T_shnek; // время паузы

P.S. Добавлю, что kwt это мощность, с которой должен работать котёл в данный промежуток времени.

Рассчитывается отдельной формулой, исходя из задач, показаний датчиков, и.т.д.

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Pyotr пишет:

Если ответ неверный, то и расчет неверный. А если ответ верный, то это еще не значит что решение верно. И такое бывает.

Вот формула
время_подачи = Р*пауза / (Рмакс-Р);   где
Рмакс - максимальная мощность котла при непрерывной подаче топлива при условии полного сгорания в Вт
Рмакс= пр_п_м * к_т  * КПД;  в Вт
пр_п_м - производительность подающего механизма в г/с
к_т - калорийность топлива в Дж/г
КПД- КПД котла = 0.7-0.8 

Р - расчетная необходимая мощность, которая должна быть всегда меньше Рмакс  в Вт

пауза - время в сек

У Вас практически идеальная формула но, как я понял, нужен гетерезис и для него надо использовать минимальную мощность. Но вот херня - я не вижу в задаче обратной связи.

Pyotr
Offline
Зарегистрирован: 12.03.2014

mykaida пишет:

У Вас практически идеальная формула но, как я понял, нужен гетерезис и для него надо использовать минимальную мощность. Но вот херня - я не вижу в задаче обратной связи.

А зачем гистерезис?

Как я понимаю,а ТС пусть проясняет.
Минимальная мощность нужна чтоб топливо не потухло между подачами.
Обратная связь обязательна, если делается на ардуино, а не просто таймер подачи. Датчик Т на котел (можно два-выход и обратка). Плюс датчик Т на радиатор, если есть подмес. Плюс датчик Т на улицу.