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)
подскажите пожалуйста, можно прописать скетч когда температура дошла но нужной чтобы включился обратный отсчет и терморегулятор поддерживал данную температуру в пределах заданного времени.
в создании скетчей полный ноль.
СПАСИБО