26

Re: Терморегулятор MAX6675 (Arduino)

I2C шину подключал неправильно,
Питание исправил.
Сейчас схема с LCD 16X2 работает отлично.
Смущает точность показаний, почти на 4.5 градуса завышает, возможно-ли программно
корректировать показания (позже буду прогонять на образцовом колибраторе).

С TM1637 разберусь, выложу.

Изменил здесь:
  if(reg >= t_iz + gis){digitalWrite(13,LOW);digitalWrite(12,LOW);}
  if(reg <= t_iz - gis){digitalWrite(13,HIGH);digitalWrite(12,HIGH);}

http://forum.rcl-radio.ru/uploads/images/2021/01/5b813f5906683683a14c17a4d3860965.jpg

http://forum.rcl-radio.ru/uploads/images/2021/01/ac5ddf9525e76f9ed5b71b5472f998dc.jpg

27

Re: Терморегулятор MAX6675 (Arduino)

После этой строчки:

if(i>5){i=0;t_iz=t_sum/5;t_sum=0;}

Вы получаете значение температуры:

t_iz

Можете изменять и корректировать эту переменную, например:

t_iz = t_iz - 4.5;

28

Re: Терморегулятор MAX6675 (Arduino)

сделайте пожалуйста на кнопках схему на LCD, просто пришлось снять
энкодер с рабочего устройства, а заказ буду делать не скоро

29

Re: Терморегулятор MAX6675 (Arduino)

Завтра постараюсь переделать

30

Re: Терморегулятор MAX6675 (Arduino)

liman324 пишет:

После этой строчки:

if(i>5){i=0;t_iz=t_sum/5;t_sum=0;}

Вы получаете значение температуры:

t_iz

Можете изменять и корректировать эту переменную, например:

t_iz = t_iz - 4.5;


...t_iz=t_sum/5... заменяем на t_iz = t_iz - 4.5

31

Re: Терморегулятор MAX6675 (Arduino)

Нет, просто снизу добавить.

32

Re: Терморегулятор MAX6675 (Arduino)

//// измерение температуры
  i++;
  t_c=thermocouple.readCelsius();t_sum=t_sum+t_c;
  if(i>5){i=0;t_iz=t_sum/5;t_sum=0;}
  t_iz = t_iz - 4.5;
/////////////////////////////////////////////

так?

33

Re: Терморегулятор MAX6675 (Arduino)

i++;
  t_c=thermocouple.readCelsius();t_sum=t_sum+t_c;
  if(i>5){i=0;t_iz=t_sum/5;t_sum=0; t_iz = t_iz - 4.5;}

34 (2021-01-07 01:27:59 отредактировано sanj76a)

Re: Терморегулятор MAX6675 (Arduino)

не получается , было 23.4 нужно 22 скорректировал..(1.4)

if(i>5){i=0;t_iz=t_sum/5;t_sum=0;t_iz = t_iz-1.4;}

стало 32.2, не понятно.

35

Re: Терморегулятор MAX6675 (Arduino)

t_iz = t_iz - 7.2;

36

Re: Терморегулятор MAX6675 (Arduino)

sanj76a пишет:

не получается , было 23.4 нужно 22 скорректировал..(1.4)

if(i>5){i=0;t_iz=t_sum/5;t_sum=0;t_iz = t_iz-1.4;}

стало 32.2, не понятно.

??

37

Re: Терморегулятор MAX6675 (Arduino)

t_iz = t_iz-11.6;

38

Re: Терморегулятор MAX6675 (Arduino)

liman324 пишет:

t_iz = t_iz-11.6;

откуда 11.6?
Было 32

if(i>5){i=0;t_iz=t_sum/5;t_sum=0;t_iz = t_iz-11.6;}

стало 23.2, нужно 22

39

Re: Терморегулятор MAX6675 (Arduino)

t_iz = t_iz-12.8;

40

Re: Терморегулятор MAX6675 (Arduino)

liman324 пишет:

t_iz = t_iz-12.8;

не могу пнять, есть 23.2 ну жно 22
почему 12.8, как поправка считается?

41

Re: Терморегулятор MAX6675 (Arduino)

уберите поправку, какая разница будет? Это и будет поправка.

42 (2021-01-10 15:12:59 отредактировано sanj76a)

Re: Терморегулятор MAX6675 (Arduino)

sanj76a пишет:

сделайте пожалуйста на кнопках схему на LCD, просто пришлось снять
энкодер с рабочего устройства, а заказ буду делать не скоро

 

на TM1637 тоже кнопки

43

Re: Терморегулятор MAX6675 (Arduino)

пересобрал схему на TM1637, все работает, дополнительно навесил конденсаторы по питанию
(может в этом причина).
Изменил здесь:
if(newPosition >= t_iz + gis){digitalWrite(13,LOW);}
if(newPosition <= t_iz - gis){digitalWrite(13,HIGH);}

Жду кнопки и светодиод на обеих схемах.

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

44 (2021-01-10 15:58:07 отредактировано sanj76a)

Re: Терморегулятор MAX6675 (Arduino)

Одно не понятно, на схеме с LCD температура завышена, на ТМ1637 показывает
также как мой комнатный термометр, разберусь когда прогоню каналы и все выложу.

45

Re: Терморегулятор MAX6675 (Arduino)

Обновите скетч - http://forum.rcl-radio.ru/viewtopic.php?pid=2754#p2754

Погрешность при измерении температуры окр. среды должна уйти (поправочный коэффициент не нужен).

По кнопкам в обеих схемах, постараюсь сделать на следующей недели.

46

Re: Терморегулятор MAX6675 (Arduino)

Не тестировал, но должно работать

Кнопки
D7 - menu
D8 - up
D9 - down

#include <Wire.h> 
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h> //Библиотека -  http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <max6675.h> // https://rcl-radio.ru/wp-content/uploads/2018/07/max6675.zip
LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей 

int thermoDO = 6; // SO
int thermoCS = 5; // CS
int thermoCLK = 4;// SCK
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

unsigned long time;
double t_c,t_sum,t_iz; 
int menu,w,reg,gis,reg_h,reg_l,i;

void setup() {
   Wire.begin();lcd.init();lcd.backlight();Serial.begin(9600);
   pinMode(13,OUTPUT); // реле
   pinMode(12,OUTPUT); // индикатор нагрева
   pinMode(7,INPUT_PULLUP); // menu (нажатие кнопки - замыкание на gnd)
   pinMode(8,INPUT_PULLUP); // up (нажатие кнопки - замыкание на gnd)
   pinMode(9,INPUT_PULLUP); // down (нажатие кнопки - замыкание на gnd)
   reg_h = EEPROM.read(0);reg_l = EEPROM.read(1);gis = EEPROM.read(2);
   reg = reg_h*100+reg_l;

}

void loop() {
//// измерение температуры 
  i++;
  t_c=thermocouple.readCelsius();t_sum=t_sum+t_c;
  if(i>4){i=0;t_iz=t_sum/5;t_sum=0;}
/////////////////////////////////////////////
  if(digitalRead(7)==LOW){menu++;if(menu>2){menu=0;}delay(200);lcd.clear();}

  
  
///////// регулирование
  if(menu==1){
  if(digitalRead(8)==LOW){reg++;time=millis();w=1;if(reg>1000){reg=1000;}delay(100);}
  if(digitalRead(9)==LOW){reg--;time=millis();w=1;if(reg<0){reg=0;}delay(100);}
     lcd.setCursor(0,0);lcd.print("Temp = ");lcd.print(t_iz,1);lcd.print(" C   ");
     lcd.setCursor(0,1);lcd.print("Reg > ");lcd.print(reg);lcd.print(" ");
     lcd.setCursor(10,1);lcd.print("G = ");lcd.print(gis);lcd.print(" ");
     Serial.println(reg);
     }
///////// гистерезис
   if(menu==2){
   if(digitalRead(8)==LOW){gis++;time=millis();w=1;if(gis>10){gis=10;}delay(100);}
   if(digitalRead(9)==LOW){gis--;time=millis();w=1;if(gis<0){gis=0;}delay(100);}
     lcd.setCursor(0,0);lcd.print("Temp = ");lcd.print(t_iz,1);lcd.print(" C ");
     lcd.setCursor(0,1);lcd.print("Reg = ");lcd.print(reg);lcd.print(" ");
     lcd.setCursor(10,1);lcd.print("G > ");lcd.print(gis);lcd.print(" ");
     Serial.println(gis);
     }
////////////////////////////////////////////////////////        
  if(menu==0){  
  lcd.setCursor(0,0);lcd.print("Temp = ");lcd.print(t_iz,1);lcd.print(" C ");
  lcd.setCursor(0,1);lcd.print("Reg = ");lcd.print(reg);lcd.print(" ");
  lcd.setCursor(10,1);lcd.print("G = ");lcd.print(gis);lcd.print(" ");
  }
////////////////////////////////////////////////////////      
   if(millis()-time>5000 && w==1){
     reg_h = reg/100;reg_l = reg-reg_h*100;
     EEPROM.update(0,reg_h);EEPROM.update(1,reg_l);EEPROM.update(2,gis);
     menu=0;w=0;}

  if(reg >= t_iz + gis){digitalWrite(13,HIGH);digitalWrite(12,LOW);}
  if(reg <= t_iz - gis){digitalWrite(13,LOW);digitalWrite(12,HIGH);}
  
  delay(50);
  Serial.println(menu);
}// loop

47

Re: Терморегулятор MAX6675 (Arduino)

Входы просто висят в воздухе, нажатие - замыкание на gnd

48 (2021-01-10 20:09:34 отредактировано sanj76a)

Re: Терморегулятор MAX6675 (Arduino)

Появилась неисправность,(раньше я не грел, играл установкой температуры) я понял почему не мог откорректировать температуру.
При включении показывает комнатную температуру, начинаю греть паяльником,
никаких изменений, выключаю-включаю  питание, на индикаторе 80 гр.
и никаких изменений, сделал вкл-выкл, термопара остыла, показание 26 гр.

49

Re: Терморегулятор MAX6675 (Arduino)

Попробуйте этот вариант

#include <Wire.h> 
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h> //Библиотека -  http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <max6675.h> // https://rcl-radio.ru/wp-content/uploads/2018/07/max6675.zip
LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей 

int thermoDO = 6; // SO
int thermoCS = 5; // CS
int thermoCLK = 4;// SCK
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

unsigned long time;
double t_c,t_sum,t_iz; 
int menu,w,reg,gis,reg_h,reg_l,i;

void setup() {
   Wire.begin();lcd.init();lcd.backlight();Serial.begin(9600);
   pinMode(13,OUTPUT); // реле
   pinMode(12,OUTPUT); // индикатор нагрева
   pinMode(7,INPUT_PULLUP); // menu (нажатие кнопки - замыкание на gnd)
   pinMode(8,INPUT_PULLUP); // up (нажатие кнопки - замыкание на gnd)
   pinMode(9,INPUT_PULLUP); // down (нажатие кнопки - замыкание на gnd)
   reg_h = EEPROM.read(0);reg_l = EEPROM.read(1);gis = EEPROM.read(2);
   reg = reg_h*100+reg_l;

}

void loop() {
//// измерение температуры 
  i++;
  t_c=thermocouple.readCelsius();t_sum=t_sum+t_c;
  if(i>4){i=0;t_iz=t_sum/5;t_sum=0;}
/////////////////////////////////////////////
  if(digitalRead(7)==LOW){menu++;if(menu>2){menu=0;}delay(1);lcd.clear();}

  
  
///////// регулирование
  if(menu==1){
  if(digitalRead(8)==LOW){reg++;time=millis();w=1;if(reg>1000){reg=1000;}delay(1);}
  if(digitalRead(9)==LOW){reg--;time=millis();w=1;if(reg<0){reg=0;}delay(1);}
     lcd.setCursor(0,0);lcd.print("Temp = ");lcd.print(t_iz,1);lcd.print(" C   ");
     lcd.setCursor(0,1);lcd.print("Reg > ");lcd.print(reg);lcd.print(" ");
     lcd.setCursor(10,1);lcd.print("G = ");lcd.print(gis);lcd.print(" ");
     Serial.println(reg);
     }
///////// гистерезис
   if(menu==2){
   if(digitalRead(8)==LOW){gis++;time=millis();w=1;if(gis>10){gis=10;}delay(1);}
   if(digitalRead(9)==LOW){gis--;time=millis();w=1;if(gis<0){gis=0;}delay(1);}
     lcd.setCursor(0,0);lcd.print("Temp = ");lcd.print(t_iz,1);lcd.print(" C ");
     lcd.setCursor(0,1);lcd.print("Reg = ");lcd.print(reg);lcd.print(" ");
     lcd.setCursor(10,1);lcd.print("G > ");lcd.print(gis);lcd.print(" ");
     Serial.println(gis);
     }
////////////////////////////////////////////////////////        
  if(menu==0){  
  lcd.setCursor(0,0);lcd.print("Temp = ");lcd.print(t_iz,1);lcd.print(" C ");
  lcd.setCursor(0,1);lcd.print("Reg = ");lcd.print(reg);lcd.print(" ");
  lcd.setCursor(10,1);lcd.print("G = ");lcd.print(gis);lcd.print(" ");
  }
////////////////////////////////////////////////////////      
   if(millis()-time>5000 && w==1){
     reg_h = reg/100;reg_l = reg-reg_h*100;
     EEPROM.update(0,reg_h);EEPROM.update(1,reg_l);EEPROM.update(2,gis);
     menu=0;w=0;}

  if(reg >= t_iz + gis){digitalWrite(13,HIGH);digitalWrite(12,LOW);}
  if(reg <= t_iz - gis){digitalWrite(13,LOW);digitalWrite(12,HIGH);}
  
  delay(200);
  Serial.println(menu);
}// loop

50

Re: Терморегулятор MAX6675 (Arduino)

Я вспомнил, что датчику надо время для считывания не менее 200 мс, было 50

  delay(200);

внизу скетча