| Ваш IP: 54.225.59.14 | Online(26) - гости: 16, боты: 9 | Загрузка сервера: 2.27 ::::::::::::

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

На ИМС MAX6675 довольно простой, но вполне точный терморегулятор. Микросхема MAX6675 предназначена для работы с термопарами типа К(ХА) в диапазоне температур от 0 до 1000ºС, регулировка температуры осуществляется в этом же диапазоне, дополнительно добавлена возможность регулировки гистерезиса. Значения регулировки температуры и гистерезиса хранятся в энергонезависимой памяти.При нажатии кнопки «К»  происходит переход в режим регулировки, далее в режим регулировки гистерезиса, при третьем нажатии кнопки происходит переход на основной экран, на котором отображена измеренная температура, температура регулировки и гистерезиса.

#include <max6675.h> // http://rcl-radio.ru/wp-content/uploads/2018/07/max6675.zip
#include <LiquidCrystal.h>
#include <Wire.h>
#include <EEPROMex.h> //#include <EEPROMex.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);// RS,E,D4,D5,D6,D7
int thermoDO = 4; // SO
int thermoCS = 5; // CS
int thermoCLK = 6;// SCK
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
 
double t_c,t_sum,t_iz; 
byte erom2,erom3,erom4;
int kn1,kn2,t_reg,sh,sh1,gis;
long w;
 
void setup(){Serial.begin(9600);lcd.begin(16, 2);delay(500);
  pinMode(A0,INPUT);pinMode(3,INPUT);pinMode(2,INPUT); // кнопки
  pinMode(13,OUTPUT);
  erom2=EEPROM.read(2);if(erom2>99){EEPROM.update(2,0);}
  erom3=EEPROM.read(3);if(erom3>10){EEPROM.update(3,0);}
  erom4=EEPROM.read(4);if(erom4>10){EEPROM.update(4,0);}
  t_reg=erom2*100+erom3;gis=erom4;
}
 
void loop(){
  if(analogRead(A0)>600){kn1++;delay(300);}if(kn1==3){kn1=0;}// кнопка
  if(kn1==1){// регулирование
  if(digitalRead(3) == HIGH){sh++;if(sh<=10){t_reg++;}if(sh>10&&sh<=100){t_reg=t_reg+10;}}else{sh=0;}
  if(digitalRead(2) == HIGH){sh1++;if(sh1<=10){t_reg--;}if(sh1>10&&sh1<=100){t_reg=t_reg-10;}}else{sh1=0;}
  lcd.setCursor(0,0);lcd.print("reg = ");lcd.print(t_reg);lcd.print((char)223);lcd.print("C");delay(200);
  if(t_reg<=0){t_reg=0;}if(t_reg>=1000){t_reg=1000;}
  erom2=t_reg/100;
  erom3=t_reg-((t_reg)/100)*100;w=0;
}
 
if(kn1==2){// гистерезис
  if(digitalRead(3) == HIGH){gis=gis+1;}
  if(digitalRead(2) == HIGH){gis=gis-1;}
  if(gis>=10 || gis<0){gis=0;}
  lcd.setCursor(0,0);lcd.print("gis = ");lcd.print(gis);lcd.print((char)223);lcd.print("C");delay(300);
  erom4=gis;w=0;
}
 
if(kn1==0){w++;if(w==1){EEPROM.update(2,erom2);EEPROM.update(3,erom3);EEPROM.update(4,erom4);}  
  lcd.setCursor(0,0);lcd.print("T = ");lcd.print(t_iz,1);lcd.print((char)223);lcd.print("C ");
  lcd.setCursor(0,1);lcd.print("reg=");lcd.print(t_reg);lcd.print(" gis=");lcd.print(gis);
  Serial.print("C = "); 
  Serial.println(thermocouple.readCelsius());
 
  for(int i=0;i<5;i++){
    t_c=thermocouple.readCelsius();
    t_sum=t_sum+t_c;
    delay(200);
  }
  t_iz=t_sum/5;t_sum=0;
}
 
  if(t_reg >= t_iz + gis){digitalWrite(13,HIGH);}
  if(t_reg <= t_iz - gis){digitalWrite(13,LOW);}
 
  lcd.clear();
}

 

Второй вариант температурного регулятора аналогичен первому, только вместо LCD индикатора применен четырех разрядный семисегментный индикатор на базе драйвера TM1637 (модуль TM1637), а вместо кнопок управления используется энкодер ky-040.

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

#include <max6675.h> 
#include <TM1637Display.h>
#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);// вывод информации на индикатор
 
}

Добавить комментарий

Случайные статьи

  • Преобразователь напряжения 3В в 9В

    Схема преобразователя представлена на рис.. Основа уст-ва однотактный автогенератор с трансформаторной связью и обратным включением диода. Генератор преобразователя выполнен на VT2. Германиевый транзистор имеет малое сопротивление насыщения, и это обеспечивает легкий запуск и нормальную работу преобразователя при низком напряжении питания. На VT1 собран стабилизатор базового тока транзистора VT2, предназначенный для …Подробнее...
  • Испытатель диодов

    При помощи этого уст-ва можно быстро определить исправность диодов и их полярность. На элементах DD1.1-DD1.3 собран генератор прямоугольных импульсов, на элементе DD1.4 узел индикации состоящий из двух светодиодов. Если в диоде окажется обрыв, то ни один из светодиодов светится не будет, а если диод пробит то будут гореть оба светодиода, …Подробнее...
  • Схема усилителя мощности 1,2Вт на TDA7052

    Схема усилителя мощности 1,2Вт на TDA7052

    На рисунке показана схема простого усилителя мощности на TDA7052, схема имеет минимум внешних элементов. Данный усилитель может использоваться в автомобильной и бытовой, переносной звуковоспроизводящей аппаратуре. tda7052Подробнее...
  • Автоматический выключатель освещения

    Автоматический выключатель освещения

    Автоматический выключатель освещения служит для отключения света в дневное время суток. В качестве ключевого элемента используется 12В реле, мощность подключаемой нагрузки зависит от типа реле. Нагрузкой могут служить лампы накаливания или энергосберегающие лампы. Регулировка чувствительности производится путем изменения сопротивления VR1 Источник — http://coolcircuit.com/Подробнее...
  • DC-AC преобразователь = 12 V\ 200V 50 Hz

    Уст-во основано на специализированной микросхеме КР1211ЕУ1 и 2-х мощных ключевых полевых транзисторах IRL2505. КР1211ЕУ1 — генератор импульсов для импульсных источников питания. У нее есть 2 выхода — прямой и инверсный (4 и 6). На этих выводах формируется противофазные импульсы, которые поступают на выходные мощные ключи. Частота импульсов зависит от параметров …Подробнее...