76

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

На плате энкодера должны стоять 3 подтягивающих резистора по 10к. Проверьте.

77

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

Стоят, энкодер проверенный. Кручу 1000 пишет, нажимаю 5_rc

78

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

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

79

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

Опубликуйте Ваш скетч.

80

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

#include <max6675.h> 
#include <TM1637Display.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=1008&download=1
#include <Encoder.h>
#include <EEPROM.h>//#include <EEPROMex.h>
int thermoDO = 12; // SO
int thermoCS = 11; // CS
int thermoCLK = 10;// SCK
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
TM1637Display display(4, 5);// CLK,DIO
Encoder myEnc(2, 3);// CLK, DT
 
double t_c,t_sum,t_iz; 
unsigned long time,time0;
int oldPosition  = -999,newPosition,rom,k;
byte reg,r0,r1;
const byte gis=1;// гистерезис
uint8_t data1[]{0x6d,0x08,0x50,0x3d};
 
void setup(){
pinMode(9,INPUT); // SW энкодера
pinMode(13,OUTPUT);// выход для управления нагрузкой
display.setBrightness(3);// яркость TM1637 0-7
delay(500);
r0=EEPROM.read(0);r1=EEPROM.read(1);rom=r0*100+r1;//чтение EEPROM
}
 
void loop(){
  newPosition = myEnc.read()/4+rom;// чтение состояния энкодера
  if (newPosition != oldPosition) {
    oldPosition = newPosition;
    time=millis();
    reg=1;time0=3000;
    r0=newPosition/100;r1=newPosition-r0*100;
  }
else if(millis()-time>time0){
reg=0;time0=0;
for(int i=0;i<5;i++){
t_c=thermocouple.readCelsius();// чтение температуры с max6675
t_sum=t_sum+t_c;
delay(200);
}
 time=millis();t_iz=t_sum/5;t_sum=0;
 }
 
  if(digitalRead(9)==LOW){// запись в EEPROM
    EEPROM.update(0,r0);EEPROM.update(1,r1);
    display.setSegments(data1); 
    delay(1000);
  }
 
if(newPosition<0){newPosition=0;}
if(newPosition>1000){newPosition=1000;}
 
if(newPosition >= t_iz + gis){digitalWrite(13,HIGH);}
if(newPosition <= t_iz - gis){digitalWrite(13,LOW);}
 
if(reg==1){k=newPosition;}
  else{k = t_iz;}
  Serial.println(reg);
display.showNumberDecEx(k,0x00,false);// вывод информации на индикатор
 
}

81

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

Откройте монитор порта, поверните ручку энкодера вперед и назад, посмотрите какие цифры выдает монитор порта

#include <max6675.h> 
#include <TM1637Display.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=1008&download=1
#include <Encoder.h>
#include <EEPROM.h>//#include <EEPROMex.h>
int thermoDO = 12; // SO
int thermoCS = 11; // CS
int thermoCLK = 10;// SCK
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
TM1637Display display(4, 5);// CLK,DIO
Encoder myEnc(2, 3);// CLK, DT
 
double t_c,t_sum,t_iz; 
unsigned long time,time0;
int oldPosition  = -999,newPosition,rom,k;
byte reg,r0,r1;
const byte gis=1;// гистерезис
uint8_t data1[]{0x6d,0x08,0x50,0x3d};
 
void setup(){
Serial.begin(9600);  
pinMode(9,INPUT); // SW энкодера
pinMode(13,OUTPUT);// выход для управления нагрузкой
display.setBrightness(3);// яркость TM1637 0-7
delay(500);
 if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении
r0=EEPROM.read(0);r1=EEPROM.read(1);rom=r0*100+r1;//чтение EEPROM
}
 
void loop(){
  newPosition = myEnc.read()/4+rom;// чтение состояния энкодера
  if (newPosition != oldPosition) {
    oldPosition = newPosition;
    time=millis();
    reg=1;time0=3000;
    r0=newPosition/100;r1=newPosition-r0*100;
     Serial.println(newPosition);
  }
else if(millis()-time>time0){
reg=0;time0=0;
for(int i=0;i<5;i++){
t_c=thermocouple.readCelsius();// чтение температуры с max6675
t_sum=t_sum+t_c;
delay(200);
}
 time=millis();t_iz=t_sum/5;t_sum=0;
 }
 
  if(digitalRead(9)==LOW){// запись в EEPROM
    EEPROM.update(0,r0);EEPROM.update(1,r1);
    display.setSegments(data1); 
    delay(1000);
  }
 
if(newPosition<0){newPosition=0;}
if(newPosition>1000){newPosition=1000;}
 
if(newPosition >= t_iz + gis){digitalWrite(13,HIGH);}
if(newPosition <= t_iz - gis){digitalWrite(13,LOW);}
 
if(reg==1){k=newPosition;}
  else{k = t_iz;}
 
display.showNumberDecEx(k,0x00,false);// вывод информации на индикатор
 
}

82

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

Влево выдает минус 1,2,3.4 и т.д в право идет отсчет обратно

83

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

На экране все равно 1000

84

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

Сначало ничего не показывало потом перевыбрал порт по новой и пошли показания и цифры побежали на дисплее вместо 1000

85

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

Успел попробовать скетч с кнопками последний , очень понравился. И градусы показывает и гистерезис регулируется. А нельзя ли в него управление на энкодере сделать? Собираюсь в фен эту схему поставить вместо старого управление а кнопки некуда ставить

86

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

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

87 (2021-09-23 23:25:43 отредактировано alexaxv)

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

Сделал плату в lay, для удобной распайки, на днях буду собирать.
Ардуинка и все остальные комплектующие будут располагаться с обратной стороны, на лицевой стороне платы, будут запаяны только кнопки.
http://forum.rcl-radio.ru/uploads/images/2021/09/963edf531c0dbf6b4f3fef3ebcd5d3e4.jpg
http://forum.rcl-radio.ru/uploads/images/2021/09/c46071d84cf442f022cc9073efd3e257.jpg

Данный контент доступен только зарегистрированным пользователям.

88

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

Re: Терморегулятор MAX6675 (Arduino)
подскажите пожалуйста, можно прописать скетч когда температура дошла но нужной чтобы включился обратный отсчет и терморегулятор поддерживал данную температуру в пределах заданного времени.
в создании скетчей полный ноль.
СПАСИБО

89 (2022-05-20 17:36:03 отредактировано bbv1970)

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

liman324 пишет:

TM1637 + MAX6675 кнопочное управление

#include <Wire.h> 
#include <EEPROM.h>
#include <STM32_TM1637.h> // http://rcl-radio.ru/wp-content/uploads/2021/01/STM32_TM1637.zip
#include <max6675.h> // http://rcl-radio.ru/wp-content/uploads/2018/07/max6675.zip
STM32_TM1637 tm(2,3);// CLK, DIO 

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();Serial.begin(9600);
   tm.brig(7); // ЯРКОСТЬ 0...7
   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);}

///////// регулирование
  if(menu==1){
  if(digitalRead(8)==LOW){reg++;time=millis();w=1;if(reg>999){reg=999;}delay(1);}
  if(digitalRead(9)==LOW){reg--;time=millis();w=1;if(reg<0){reg=0;}delay(1);}
  tm.print_float(reg,0, 0b01010000,0,0,0); 
     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);}
   tm.print_float(gis,0, 0b00111101,0,0,0); 
     Serial.println(gis);
     }
////////////////////////////////////////////////////////        
  if(menu==0){  
  tm.print_float(t_iz,1, 0,0,0,0); 
  }
////////////////////////////////////////////////////////      
   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

Библиотека на STM32_ТМ1637 занимает больше места, в отличие от стандартной библиотеки ТМ1637, поэтому скетч в атмегу88 не влезает всего на 300 байт...можно как то поджать еще чуточку скетч с этой библиотекой???

90

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

Уберите все что связано serial port

91 (2022-05-20 18:02:52 отредактировано bbv1970)

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

liman324 пишет:

Уберите все что связано serial port

Скетч использует 7044 байт (91%) памяти устройства. Всего доступно 7680 байт.

Офигеть, все так просто...спасибище!!!

92 (2022-05-20 18:24:31 отредактировано bbv1970)

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

http://forum.rcl-radio.ru/uploads/images/2022/05/e28835b1d704396982f78cfb13d5ab86.png

Никто не пробывал вместо реле в этом регуляторе такую вот схемку опробывать?

93 (2022-07-28 20:38:36 отредактировано bbv1970)

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

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

94

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

Вам нужен ПИД регулятор. Так же можете увеличить гистерезис.

95 (2022-07-28 20:45:52 отредактировано bbv1970)

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

liman324 пишет:

Вам нужен ПИД регулятор. Так же можете увеличить гистерезис.

А разве то, что здесь делалось без ПИД регулятора?  Гистерезис пробовал увеличивать, получается верхний предел температуры становится еще больше на значение гистерезиса, соответственно разгоняется система еще дольше, а значит и верхний предел температуры увеличивается за счет инерционности еще сильнее..) Пробовал без гистерезиса, чуть лучше, но все равно ускакивает далеко за регулируемую температуру...правда делал в регуляторе вместо реле симисторный регулятор, выше схемку рисовал..в 92 посту...может из за этого так летит?
Объект - термостолик. Мощность 300Вт, напряжение 220в
http://forum.rcl-radio.ru/uploads/images/2022/07/a0961c52af14cb56348977515bb4d92f.jpg

96

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

if(reg >= t_iz + gis){digitalWrite(13,HIGH);digitalWrite(12,LOW);} // разогрев
if(reg <= t_iz - gis){digitalWrite(13,LOW);digitalWrite(12,HIGH);} // остывание

попробуйте так:

if(reg >= t_iz + 12){digitalWrite(13,HIGH);digitalWrite(12,LOW);} // разогрев
if(reg <= t_iz){digitalWrite(13,LOW);digitalWrite(12,HIGH);} // остывание

12 - это насколько у Вас происходит перегрев

97 (2022-07-28 20:48:31 отредактировано bbv1970)

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

liman324 пишет:

if(reg >= t_iz + gis){digitalWrite(13,HIGH);digitalWrite(12,LOW);} // разогрев
if(reg <= t_iz - gis){digitalWrite(13,LOW);digitalWrite(12,HIGH);} // остывание

попробуйте так:

if(reg >= t_iz + 12){digitalWrite(13,HIGH);digitalWrite(12,LOW);} // разогрев
if(reg <= t_iz){digitalWrite(13,LOW);digitalWrite(12,HIGH);} // остывание

12 - это насколько у Вас происходит перегрев

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

98 (2022-07-29 15:52:21 отредактировано bbv1970)

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

liman324 пишет:

if(reg >= t_iz + gis){digitalWrite(13,HIGH);digitalWrite(12,LOW);} // разогрев
if(reg <= t_iz - gis){digitalWrite(13,LOW);digitalWrite(12,HIGH);} // остывание

попробуйте так:

if(reg >= t_iz + 12){digitalWrite(13,HIGH);digitalWrite(12,LOW);} // разогрев
if(reg <= t_iz){digitalWrite(13,LOW);digitalWrite(12,HIGH);} // остывание

12 - это насколько у Вас происходит перегрев

Не, все равно перелетает будь здоров!!! А вот так (ниже код) более менее сработало.... первый раз перелетело на 10 при гистерезисе 10, далее через несколько циклов где то 5 градусов...чуть чуть перелетело за границу...регулируемой температуры ...короче надо видимо опытным путем и гистерезис подбирать и верхнюю границу....
  if(reg <= t_iz + gis/1.25){digitalWrite(12,LOW);digitalWrite(11,LOW);digitalWrite(10,HIGH);} // индикатор нагрева красный - 11, индикатор остыва зеленый - 10
  if(reg >= t_iz + gis){digitalWrite(12,HIGH);digitalWrite(11,HIGH);digitalWrite(10,LOW);} // индикатор нагрева красный - 11, индикатор остыва зеленый - 10

99

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

В "стоковом" скетче для ТМ1637 и энкодера закралась ошибка. При выставлении температуры 1000С даже без нажатии кнопки сохранения не происходит обратное изменение установки, помогло только перепрошивка со стиранием памяти.
Есть еще вопрос об изменении кода с сокращением текста для индикатора 802 (восьмиразрядного двустрочного) ,возможно-ли?

100

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

Посмотрите пример - http://rcl-radio.ru/?p=129068
Изменить скетч под этот экран не сложно.