Динамика изменения температуры за определённое время.
- Войдите на сайт для отправки комментариев
Вс, 24/01/2021 - 09:03
Всем доброе время суток. В прекрасном мире MK совсем недавно, прошу не пинать если не совсем доходчиво изъясняюсь, собственно проблема и не проблема вовсе, всё работает, но...
Никак не могу найти пример по сабжу, подскажите пожалуйста хоть в какую сторону копать (думаю где-то рядом с пульсометром).
Требуется измерять изменение температуры (количество градусов {рост/падение} за минуту {2, 3, 4, 5... минут по выбору}). Рабочая часть есть, через Blynk смотрю температуру, но требуется видеть динамику (тенденцию), для информирования, что "чё-то не так" и не помешало бы подсыпать... (уголь в печке прогорел, тяги нет, и прочие возможные моменты)
Поясню для чего: система стоит дома на печке (твердотопливный котёл), засыпал, горит... температуры дошла до 61 (59, 53 {по выбору на виджете}- поддувало (не зольник) открылось (сервопривод на заслонке), тяга стала меньше, интенсивность горения упала и температура держится в заданных пределах. При понижении закрывается и так по кругу. В общем хотелось бы поставить виджет который отображал бы значения изменения температуры за отрезок времени, для того чтоб более тщательно контролировать систему отопления. Уверен тема наверняка не новая, может кто встречал... Может где в библиотеках блинка лежит ответ???
Скетч, фотки, прикладываю,
/* ESP8266 & Blynk */
#define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include <Servo.h> /* Blynk credentials */ char auth[] = "***; char ssid[] = "***"; char pass[] = "***"; /* WiFi credentials */ /* TIMER */ SimpleTimer timer; /* DS18B20 Temperature Sensor */ #include <OneWire.h> #include<DallasTemperature.h> #define ONE_WIRE_BUS 2 // DS18B20 подключаем на D4 на плате OneWire oneWire(ONE_WIRE_BUS); DallasTemperature DS18B20(&oneWire); float temp_oven; /* Servo */ Servo servo; BLYNK_WRITE(V3) { servo.write(param.asInt()); } void setup() { servo.write(0); Serial.begin(115200); Blynk.begin(auth, ssid, pass); DS18B20.begin(); servo.attach(D2); // сервопривод на D4 timer.setInterval(1234L, getSendData); } void loop() { timer.run(); // Initiates SimpleTimer Blynk.run(); } /*************************************************** * Send Sensor data to Blynk **************************************************/ void getSendData() { DS18B20.requestTemperatures(); temp_oven = DS18B20.getTempCByIndex(0); // Sensor 0 показания для датчика 1 в цельсиях Blynk.virtualWrite(1, temp_oven); //вывод данных на виртуальный пин "V10 печка" }
Что Вы подразумеваете под динамикой? Производую?
Производная по времени считается так: (T(t1) - T(t0))/(t1 - t0), где T(ti) - температура в момент времени ti.
Ну собственно в этом и вопрос. Как мне сделать что бы я указав в переменной по времени (за период 600 сек), увидеть изменения по температуре (нарисованное) Как на плюсах это написать вот в чем вопрос...
Из предыдущего значения вычесть вновь полученное. Или для этого тоже пример требуется?
Ну собственно в этом и вопрос. Как мне сделать что бы я указав в переменной по времени (за период 600 сек), увидеть изменения по температуре (нарисованное) Как на плюсах это написать вот в чем вопрос...
вот в верхней части интерфейса график температуры - это и есть "изменение температуры во времени"
Да, там можно наскоряк в уме просчитать. Но как кодом записать что бы эти же данные выводились в отдельную переменную (именно по выбору периода, вплоть до секунды) честно признаюсь - не знаю!
Формулы и прочее найти не проблема. Именно как закодить это (for peremennaya=(T(t1) - T(t0))/(t1 - t0)...millis()) не могу найти примеры
Я так понимаю вы каждые 1234 миллисекунды отправляете на сервер Blynk данные с датчика температуры? А почему 1234, а не 1000?
На сервере Blynk эти данные сохраняются? Я его никогда не пользовал. Может возможностями Blynk и реализовывать то что вам нужно?
Полагаю, что искать пример для нахождения разницы чисел следует в школьном учебнике, а не в разделе "программирование".
Ну здесь больше вопрос, где будет храниться T(t0) и с какой периодичность будет производиться вычетание.
Если T(t0) храниться на сервере Blynk, получать его оттуда, делать вычисления на ардуине и отправлять результат на сервер Blynk. Так?
будет производиться вычетание.
выч -И- тание, но выч -Е- сть
Вот такие чудеса! Это как "...сол, мол и бол - пишуца с мяким знакам, а тарелька и вилька - бэз! Панять это невозможьна, а запомнить - ннада!"
;)))))))
Не обращай внимание! Я Букварь купил - не оторваться! Сюжет может и размыт, но какова интрига!
Да, да. И редактор форума мне подчеркнул как ошибку, пропустил.
Формулы и прочее найти не проблема. Именно как закодить это (for peremennaya=(T(t1) - T(t0))/(t1 - t0)...millis()) не могу найти примеры
Вам не примеры надо искать, а учебник по Си\Си++ почитать. Для начала хоть Кернигана и Ритчи "Язык программирования Си".
будет производиться вычетание.
выч -И- тание, но выч -Е- сть
Вот такие чудеса! Это как "...сол, мол и бол - пишуца с мяким знакам, а тарелька и вилька - бэз! Панять это невозможьна, а запомнить - ннада!"
;)))))))
Не обращай внимание! Я Букварь купил - не оторваться! Сюжет может и размыт, но какова интрига!
Кровопиец или коровопиец ? Ты стал (м)учителем русского языка ? Заканчивай уже, я понимаю что в руССком аж два С, но сколько С в С++ никто не знает .
sadman41, там же будет пример кода? Все ответы на мои вопросы даст школьный учебник? Скиньте ссылку пожалуйста!
Я может не туда написал? В основном рекомендуют начинать читать математику,
andriano: Вам не примеры надо искать, а учебник по Си\Си++ почитать. Для начала хоть Кернигана и Ритчи "Язык программирования Си".
Я ж вроде нормально спросил пример кода, книжки не сложно советовать читать. А мне это нужно "сейчас", начать практиковаться в коде, набивать шишки, но понимать примерную структуру, правила синтаксиса и прочее.
Ну как пример: - 1. "Как заменить розетку?", 2. "Ну тут надо начинать с основ физики, потом выучить ПТЭ (Правила техники безопасности при эксплуатации электроустановок), получить группу и т.д."
Или на этом форуме сидят гуру которым мой вопрос показался слишком "детским". Походу все сюда пришли мастерами. Ладно, чё уж там... пойду учить русский, правила этикета, философию (на всякий случай) ну и конечно школьную математику. Рано мне до раздела программирование... ))
Я ж вроде нормально спросил пример кода
Розетку, из твоего примера, тебе электрик бесплатно должен поставить? ;)) Степлер купи - поможет, когда
ебалолицо треснет. ;))Это хоббийный форум. Мы можем рассказать КАК нужно сделать. Но делать ЗА ТЕБЯ никто не станет. С чего бы?
КАК? - Пожалуйста: храни историю температуры на есп-шке, из блинка принимай значение регулятора периода. В блинк отдавай значение изменений. Это один из вариантов. Можно посмотреть контролы блинка, может быть можно на его стороне все посчитать, поскольку все данные есть уже у него. Я сам блинком не пользуюсь, поэтому тут не посоветую.
zinf
я не совсем понял задачу, нужен виджет для постфактум-анализа глазами или алгоритм обратной связи для управления котлом? ИМХО, первое вполне решается штатными виджетами графиков Blynk, которые имеют около десятка разных таймфреймов.
Если вопрос в управлении, например по температуре обратки, то тут тоже все несложно. Ставите цель по температуре. При -2 (условно) от цели - приоткрыли задвижку, при +2 - прижали. Динамику еще можно анализировать с использованием скользящих средних SMA или EMA. По направлению скользящей и положения относительно нее текущего мгновенного значения можно прогнозировать несколько будущих временных периода.
Неудачный пример.
Ваш вопрос похож на следующий: "какие буквы мне надо знать, чтобы написать поэму?". Правильный ответ - все. Так и с языком программирования - его надо знать целиком. Невозможно "практиковаться", не разбираясь в основах. А если нужно "сейчас", а учить язык не хочется - то это в платный раздел.
Я ж вроде нормально спросил пример кода, книжки не сложно советовать читать. А мне это нужно "сейчас", начать практиковаться в коде, набивать шишки, но понимать примерную структуру, правила синтаксиса и прочее.
пример кода к чему, блин?!
Почему все новички уверены, что для любого их хитровывернутого запроса есть специальный оператор в языке Си?
Вот в вашем случае - записать формулу
(Temp(2) - Temp(1) ) / (time(2) - temp(1))
- несложно. Но поможет это Вам? - где у вас в программе Temp(2) и Temp(1) ? - вы же температуры не храните. Где у вас отметки времени - их тоже нет. Не говоря уж о том, что тренд по двум соседним точкам. скорее всего. не имеет смысла вовсе.
Прежде чем писать саму формулу - у вас тут нужно провести кучу подготовительной работы, обьем которой больше всего того кода. что у вас сейчас написан. Вы считаете это называется "показать вам простенький пример"?
Чтобы решить вашу задачу - вам для начала надо сформулировать , что именно должно подсчитываться. а потом, заглядывая-таки в учебник - попытаться реализовать это в коде. САМОМУ!!! И вот с этими-то попытками - велкам в форум.
А ваша нынешняя просьба "дайте примерчик" - она несуразная и ничего хорошего не принесет
sadman41, там же будет пример кода? Все ответы на мои вопросы даст школьный учебник? Скиньте ссылку пожалуйста!
В вашем школьном учебнике не было примеров C = A - B или вы сознательно дурака включаете?
Можно посмотреть контролы блинка, может быть можно на его стороне все посчитать, поскольку все данные есть уже у него. Я сам блинком не пользуюсь, поэтому тут не посоветую.
Подтверждаю. Блинк абсолютно точно хранит статистику значений переменных, для которых назначен виджет Граф. Причем, за ооочень длинный период и с дискретностью минимального установленного таймфрейма.
я не совсем понял задачу, нужен виджет для постфактум-анализа глазами
Именно !!! Именно анализ в реальном времени на виджете (как в приведенном мной фото выше)
ИМХО, первое вполне решается штатными виджетами графиков Blynk, которые имеют около десятка разных таймфреймов.
Если вопрос в управлении, например по температуре обратки, то тут тоже все несложно. Ставите цель по температуре. При -2 (условно) от цели - приоткрыли задвижку, при +2 - прижали. Динамику еще можно анализировать с использованием скользящих средних SMA или EMA. По направлению скользящей и положения относительно нее текущего мгновенного значения можно прогнозировать несколько будущих временных периода.
Это всё работает идеально, регулировка по 0,1 градуса.
Как мне видиться... прикрутить часы.
int t = "считывается значение с датчика температуры"
int time[a] = "записывается текущее значение, a= минуты"
Потом сравниваем допустим if time[1] > time [2] на сколько-то там. Значит открываем, на 30, 40, 50...
Нужно понять суть и сделать самому. Если напишешь сам, будет понимание. Если напишет дядя, ты ему оборвешь уши вопросами :))))
Нужно сперва получить значения (привязать их, ко времени) , потом их сравнивать их с чем то и что-то делать...
Не получается, не понимаешь, начни писать сам, выкладывай, люди поправят. Возможно не без сарказма :)))
Глазами я смотрю так, без блинка, пишу в табличку в базе SQL

Глазами я смотрю так, без блинка, пишу в табличку в базе SQL

Эти данные получены из блинка?
а зачем мне блинк, если можно писать в таблицу на любом доступном мне сайте