Динамика изменения температуры за определённое время.

zinf
Offline
Зарегистрирован: 24.01.2021
Всем доброе время суток. В прекрасном мире 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 печка"
}

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

Что Вы подразумеваете под динамикой? Производую?

Производная по времени считается так: (T(t1) - T(t0))/(t1 - t0), где T(ti) - температура в момент времени ti.

zinf
Offline
Зарегистрирован: 24.01.2021

Ну собственно в этом и вопрос. Как мне сделать что бы я указав в переменной по времени (за период 600 сек), увидеть изменения по температуре (нарисованное) Как на плюсах это написать вот в чем вопрос...

sadman41
Offline
Зарегистрирован: 19.10.2016

Из предыдущего значения вычесть вновь полученное. Или для этого тоже пример требуется?

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

zinf пишет:

Ну собственно в этом и вопрос. Как мне сделать что бы я указав в переменной по времени (за период 600 сек), увидеть изменения по температуре (нарисованное) Как на плюсах это написать вот в чем вопрос...

вот в верхней части интерфейса график температуры - это и есть "изменение температуры во времени"

zinf
Offline
Зарегистрирован: 24.01.2021

Да, там можно наскоряк в уме просчитать. Но как кодом записать что бы эти же данные выводились в отдельную переменную (именно по выбору периода, вплоть до секунды) честно признаюсь - не знаю!

Формулы и прочее найти не проблема. Именно как закодить это (for peremennaya=(T(t1) - T(t0))/(t1 - t0)...millis()) не могу найти примеры

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

zinf пишет:

Я так понимаю вы каждые 1234 миллисекунды отправляете на сервер Blynk данные с датчика температуры? А почему 1234, а не 1000?

На сервере Blynk эти данные сохраняются? Я его никогда не пользовал. Может возможностями Blynk и реализовывать то что вам нужно?

sadman41
Offline
Зарегистрирован: 19.10.2016

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

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

Ну здесь больше вопрос, где будет храниться T(t0) и с какой периодичность будет производиться вычетание.

Если T(t0) храниться на сервере Blynk, получать его оттуда, делать вычисления на ардуине и отправлять результат на сервер Blynk. Так?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

AndreyD пишет:

 будет производиться вычетание.

выч -И- тание, но выч -Е- сть

Вот такие чудеса! Это как "...сол, мол и бол - пишуца с мяким знакам, а тарелька и вилька - бэз! Панять это невозможьна, а запомнить - ннада!"

;)))))))

Не обращай внимание! Я Букварь купил - не оторваться! Сюжет может и размыт, но какова интрига!

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

Да, да. И редактор форума мне подчеркнул как ошибку, пропустил.

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

zinf пишет:

Формулы и прочее найти не проблема. Именно как закодить это (for peremennaya=(T(t1) - T(t0))/(t1 - t0)...millis()) не могу найти примеры

Вам не примеры надо искать, а учебник по Си\Си++ почитать. Для начала хоть Кернигана и Ритчи "Язык программирования Си".

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

wdrakula пишет:

AndreyD пишет:

 будет производиться вычетание.

выч -И- тание, но выч -Е- сть

Вот такие чудеса! Это как "...сол, мол и бол - пишуца с мяким знакам, а тарелька и вилька - бэз! Панять это невозможьна, а запомнить - ннада!"

;)))))))

Не обращай внимание! Я Букварь купил - не оторваться! Сюжет может и размыт, но какова интрига!

Кровопиец или коровопиец ? Ты стал (м)учителем  русского языка ? Заканчивай уже, я понимаю что в руССком аж два С, но сколько С в С++ никто не знает .

zinf
Offline
Зарегистрирован: 24.01.2021

sadman41, там же будет пример кода? Все ответы на мои вопросы даст школьный учебник? Скиньте ссылку пожалуйста!

 

Я может не туда написал? В основном рекомендуют начинать читать математику,

andriano: Вам не примеры надо искать, а учебник по Си\Си++ почитать. Для начала хоть Кернигана и Ритчи "Язык программирования Си".

Я ж вроде нормально спросил пример кода, книжки не сложно советовать читать. А мне это нужно "сейчас", начать практиковаться в коде, набивать шишки, но понимать примерную структуру, правила синтаксиса и прочее.

Ну как пример: - 1. "Как заменить розетку?", 2. "Ну тут надо начинать с основ физики, потом выучить ПТЭ (Правила техники безопасности при эксплуатации электроустановок), получить группу и т.д."

Или на этом форуме сидят гуру которым мой вопрос показался слишком "детским". Походу все сюда пришли мастерами. Ладно, чё уж там... пойду учить русский, правила этикета, философию (на всякий случай) ну и конечно школьную математику. Рано мне до раздела программирование... ))

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

zinf пишет:

Я ж вроде нормально спросил пример кода

Розетку, из твоего примера, тебе электрик бесплатно должен поставить? ;)) Степлер купи - поможет, когда ебало лицо треснет. ;))

Это хоббийный форум. Мы можем рассказать КАК нужно сделать. Но делать ЗА ТЕБЯ никто не станет. С чего бы?

КАК? - Пожалуйста: храни историю температуры на есп-шке, из блинка принимай значение регулятора периода. В блинк отдавай значение изменений. Это один из вариантов. Можно посмотреть контролы блинка, может быть можно на его стороне все посчитать, поскольку все данные есть уже у него. Я сам блинком не пользуюсь, поэтому тут не посоветую.

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

zinf

я не совсем понял задачу, нужен виджет для постфактум-анализа глазами или алгоритм обратной связи для управления котлом? ИМХО, первое вполне решается штатными виджетами графиков Blynk, которые имеют около десятка разных таймфреймов. 

Если вопрос в управлении, например по температуре обратки, то тут тоже все несложно. Ставите цель по температуре. При -2 (условно) от цели - приоткрыли задвижку, при +2 - прижали. Динамику еще можно анализировать с использованием скользящих средних SMA  или EMA. По направлению скользящей и положения относительно нее текущего мгновенного значения можно прогнозировать несколько будущих временных периода. 

 

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

Неудачный пример.

Ваш вопрос похож на следующий: "какие буквы мне надо знать, чтобы написать поэму?". Правильный ответ - все. Так и с языком программирования - его надо знать целиком. Невозможно "практиковаться", не разбираясь в основах. А если нужно "сейчас", а учить язык не хочется - то это в платный раздел. 

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

zinf пишет:

Я ж вроде нормально спросил пример кода, книжки не сложно советовать читать. А мне это нужно "сейчас", начать практиковаться в коде, набивать шишки, но понимать примерную структуру, правила синтаксиса и прочее.

пример кода к чему, блин?!

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

Вот в вашем случае - записать формулу

(Temp(2) - Temp(1) ) / (time(2) - temp(1))

- несложно. Но поможет это Вам? - где у вас в программе Temp(2) и Temp(1) ? - вы же температуры не храните. Где у вас отметки времени - их тоже нет. Не говоря уж о том, что тренд по двум соседним точкам. скорее всего. не имеет смысла вовсе.

Прежде чем писать саму формулу - у вас тут нужно провести кучу подготовительной работы, обьем которой больше всего того кода. что у вас сейчас написан. Вы считаете это называется "показать вам простенький пример"?

Чтобы решить вашу задачу - вам для начала надо сформулировать , что именно должно подсчитываться. а потом, заглядывая-таки в учебник - попытаться реализовать это в коде. САМОМУ!!! И вот с этими-то попытками - велкам в форум.

А ваша нынешняя просьба "дайте примерчик" - она несуразная и ничего хорошего не принесет

sadman41
Offline
Зарегистрирован: 19.10.2016

zinf пишет:

sadman41, там же будет пример кода? Все ответы на мои вопросы даст школьный учебник? Скиньте ссылку пожалуйста!


В вашем школьном учебнике не было примеров C = A - B или вы сознательно дурака включаете?

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

wdrakula пишет:

Можно посмотреть контролы блинка, может быть можно на его стороне все посчитать, поскольку все данные есть уже у него. Я сам блинком не пользуюсь, поэтому тут не посоветую.

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

zinf
Offline
Зарегистрирован: 24.01.2021

Rumata пишет:

я не совсем понял задачу, нужен виджет для постфактум-анализа глазами

Именно !!! Именно анализ в реальном времени на виджете (как в приведенном мной фото выше)

Rumata пишет:

ИМХО, первое вполне решается штатными виджетами графиков Blynk, которые имеют около десятка разных таймфреймов. 

 

Rumata пишет:

Если вопрос в управлении, например по температуре обратки, то тут тоже все несложно. Ставите цель по температуре. При -2 (условно) от цели - приоткрыли задвижку, при +2 - прижали. Динамику еще можно анализировать с использованием скользящих средних SMA  или EMA. По направлению скользящей и положения относительно нее текущего мгновенного значения можно прогнозировать несколько будущих временных периода. 

Это всё работает идеально, регулировка по 0,1 градуса.

 

Nord_Air
Offline
Зарегистрирован: 15.06.2020

zinf пишет:

 
Требуется измерять изменение температуры (количество градусов {рост/падение} за минуту {2, 3, 4, 5... минут по выбору}).

Как мне видиться...  прикрутить часы.

 

int t = "считывается  значение с датчика температуры"

int time[a] = "записывается текущее значение,  a= минуты"

Потом сравниваем допустим  if  time[1]  > time [2] на сколько-то там. Значит открываем, на 30, 40, 50...

Нужно понять суть и сделать самому. Если напишешь сам, будет понимание. Если напишет дядя, ты ему оборвешь уши вопросами :))))

 Нужно сперва получить значения (привязать их, ко времени) , потом их сравнивать их с чем то и что-то делать...

 

 Не получается, не понимаешь, начни писать сам, выкладывай, люди поправят.  Возможно не без сарказма :)))

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

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

zinf
Offline
Зарегистрирован: 24.01.2021

ua6em пишет:

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

 

Эти данные получены из блинка?

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

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