ARDUINO подскажите как реализовать код

егорка

✩✩✩✩✩✩✩
19 Ноя 2019
12
0
Здравствуйте всем . Циркуляция у теплых полов без насоса неважная а с насосом начинает горячую воду в обратку сливать .
Есть два датчика температуры входная и выходная ( с полов ) температура должна различаться примерно с 3 до 6 градусов . Считываю и вывожу на дисплей без проблем . А вот включение насоса не пойму как сделать . библиотека 1820 выдает данные уже в цельсиях они дробные .

#include <LCD5110_Graph.h>
#include "microDS18B20.h"
MicroDS18B20 sensor1(12); // датчик на пине 2
MicroDS18B20 sensor2(11); // датчик на пине 3
LCD5110 lcd(3,4,5,6,7);
extern unsigned char MediumNumbers[];
extern uint8_t temperatureIcon[];
float tempC = 0;
float tempC2 = 0;
char temperatureF[6];
void setup() {
Serial.begin(9600);
lcd.InitLCD();
lcd.setFont(MediumNumbers);
pinMode(13, OUTPUT);
}
void loop() {
// Serial.print("t: ");
sensor1.requestTemp();
sensor2.requestTemp();
lcd.clrScr();
lcd.drawBitmap(0, 0, temperatureIcon, 84, 48);

delay(1000); // между request и get нужна секунда (асинхронный режим)
//Serial.print(sensor1.getTemp());
// Serial.print(" ");
//Serial.println(sensor2.getTemp());
tempC = sensor1.getTemp();
convertToString(tempC);
lcd.print(temperatureF,25,0);
lcd.update();
tempC = sensor2.getTemp();
convertToString(tempC2);
lcd.print(temperatureF,25,24);
lcd.update();
//if (tempC-tempC2)5;
//digitalWrite(13, HIGH); понимаю , что тут хрень полная ... но как ????
}

void convertToString(float number)
{
dtostrf(number, 4, 2, temperatureF);
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
не совсем хрень на 13 пин надо подкючат реле, и этим пиином надо его то вкючать , то выключать, что имеем
if( (tempC-tempC2) > 6) допустим включаем мотор
if( (tempC-tempC2) < 3) допустим ВЫключаем мотор

ну это как я вижу. может включать / выключать нало наоборт. я схемы не видел
 

егорка

✩✩✩✩✩✩✩
19 Ноя 2019
12
0
digitalWrite(13, HIGH) вот это и будет этим заниматься ... только вот само сравнение температур ...

if( (tempC-tempC2) > 6) {
digitalWrite(13, HIGH) } // включем мотор , так как температура сильно упала .


И так же
if( (tempC-tempC2) < 6
{
digitalWrite(13, LOW) // выключаем мотор , так как горячий теплоноситель шпарит в обратку .

ТАК ?
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
так можно, но если температура будет в районе 6 градусов вы задрочите мотор до смерти )
дайте разбежку между включением и выключением, к примеру:
если температура упала ниже 15 градусов, то в выключить обогреватель.
если температура поднялась выше 20 градусов то выключить обогреватель
при этом если температура будет между 15 и 20 градусами состояние обогревателя меняться не будет. что и надо для мотора
поэтому я в 1-ом посте и сравнивал с разными краями допустимых расхождений
 

егорка

✩✩✩✩✩✩✩
19 Ноя 2019
12
0
гистерезис тут не совсем нужен мотор трёхфазный
и температура зависит от температуры отопления ...поэтому привязки к определённой температуры нет
Я так же могу вместо 6 поставить имя константы ?
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Буквенную константу - да пожалуйста, и даже переменную )
если сравнивать с одним каким то число, то тогда лучше так

if( (tempC-tempC2) > 6) {
digitalWrite(13, HIGH) } // включем мотор , так как температура сильно упала .
else
{
digitalWrite(13, LOW) // выключаем мотор , так как горячий теплоноситель шпарит в обратку .
 

егорка

✩✩✩✩✩✩✩
19 Ноя 2019
12
0
а , что происходит при проверке ошибка
exit status 1
'convertToString' was not declared in this scope
на строке convertToString(tempC);
и на convertToString(tempC2);
Как ни странно ничего глобально в коде не менял ....

Разобрался ... только в кольце скобочку зафигачил ...))
 

егорка

✩✩✩✩✩✩✩
19 Ноя 2019
12
0
Почему не работает кнопка ???

#include <LCD5110_Graph.h>
#include "microDS18B20.h"
#include "GyverButton.h"
#define BTN_PIN 2 // кнопка подключена сюда (BTN_PIN --- КНОПКА --- GND)
GButton butt1(BTN_PIN);
MicroDS18B20 sensor1(12); // датчик на пине 2
MicroDS18B20 sensor2(11); // датчик на пине 3
LCD5110 lcd(3, 4, 5, 6, 7);
extern unsigned char MediumNumbers[];
extern unsigned char SmallFont [];
extern uint8_t temperatureIcon[];
float tempC = 0;
float tempC2 = 0;
char temperatureF[6];
byte myVal = 5;
void setup() {
Serial.begin(9600);
lcd.InitLCD();
lcd.setFont(MediumNumbers);
pinMode(13, OUTPUT);
}
void loop() {
// Serial.print("t: ");
sensor1.requestTemp();
sensor2.requestTemp();

lcd.clrScr();
lcd.drawBitmap(0, 0, temperatureIcon, 84, 48);


delay(1000); // между request и get нужна секунда (асинхронный режим)
//Serial.print(sensor1.getTemp());
// Serial.print(" ");
//Serial.println(sensor2.getTemp());
tempC = sensor1.getTemp();
convertToString(tempC);
lcd.print(temperatureF, 25, 0);
lcd.update();
tempC2 = sensor2.getTemp();
convertToString(tempC2);
lcd.print(temperatureF, 25, 24);
lcd.update();
if ( (tempC - tempC2) > myVal) {
digitalWrite(13, HIGH); // включем мотор , так как температура сильно упала .
lcd. drawLine(25, 43, 84, 43);
lcd. drawLine(25, 44, 84, 44);
lcd. drawLine(73, 40, 84, 43);
lcd. drawLine(73, 47, 84, 44);
lcd.update();
}
else
digitalWrite(13, LOW); // выключаем мотор , так как горячий теплоноситель шпарит в обратку .
butt1.tick(); // обязательная функция отработки. Должна постоянно опрашиваться
if (butt1.hasClicks()){
++myVal ; // проверка на один клик
//italWrite(13, HIGH); это ставил для посмотреть срабатывает ли нажатие кнопки
}
if (myVal == 8){
myVal = 3 ; // закольцевал если разница температур равна 8 то скидываем на 3
//igitalWrite(13, LOW);
}


lcd.setFont(SmallFont);
lcd.printNumI(myVal, 0, 32);
lcd.update();
lcd.setFont(MediumNumbers);
}
void convertToString(float number)
{
dtostrf(number, 4, 2, temperatureF);

}
 

егорка

✩✩✩✩✩✩✩
19 Ноя 2019
12
0
Разобрался , библиотека GyverButton не любит задержку delay(1000) .
Как организовать считывание температуры раз в секунду без delay ?
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
может очень много задержек в коде ?
31-ая строка - delay (1000)
может еще и в
sensor1.requestTemp();
sensor2.requestTemp();
тоже есть задержки

во... уже сам нашел ) не торопись задавать вопросы, пока сам на них не ответил ))
 

егорка

✩✩✩✩✩✩✩
19 Ноя 2019
12
0
Вот готовый код контроллера насоса теплых полов ,гистерезис не введен по причине особенностей насоса ( трехфазник с питанием 12 вольт)
Замеряет температуру входящую на полы и температуру из полов в обратку ,как только выходная температура теплоносителя падает на 3- 7 градусов ( регулируется ) включается насос прогоняя теплоноситель по системе . Это уменьшает вероятность так сказать шунтирования последующих цепей контура отопления .
 

Вложения

Изменено: