| Ваш IP: 54.163.20.123 | Online(41) - гости: 11, боты: 30 | Загрузка сервера: 0.5 ::::::::::::

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

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

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

Комментарии

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

Войти с помощью: 

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

  • Простой испытатель кварцев

    Простой испытатель кварцев

    Схема испытателя кварцев состоит из генератора на VT1, детектора на диодах VD1 VD2 и усилителя постоянного тока на VT2. К устройству кварцевый резонатор подсоединяется при помощи зажимов. Если кварцевый резонатор исправен, то на R2 появляется ВЧ напряжение, которое затем поступает на диоды для детектирования. Выделенная постоянная составляющая открывает транзистор VT2, …Подробнее...
  • Простой АМ приемник на 2-х транзисторах

    Простой АМ приемник на 2-х транзисторах

    На рисунке показана схема простого АМ приемника состоящего всего из двух транзисторов. Транзистор VT1 работает как ВЧ-усилитель с обратной связью и как демодулятор одновременно. Чувствительность приемника зависит от величины обратной связи и может быть отрегулирована при помощи потенциометра VР1. VT2 используется как усилитель НЧ. Катушки антенный намотаны на ферритовом стержне …Подробнее...
  • Мостовой усилитель на базе TDA7374B

    Мостовой усилитель на базе TDA7374B

    Усилитель на базе TDA7374B относится к классу АВ и используется в автомобильных аудиосистемах. Микросхема имеет защиту от перенапряжения, переполюсовки, тепловую, защиту от статического электричества, защиту от КЗ выходов на шину питания и корпус. Так же имеется встроенная система STAND-BY и MUTE. Усилитель на базе TDA7374B имеет следующие характеристики: Номинальное напряжение …Подробнее...
  • Индикатор уровня

    Индикатор уровня

    Очень простая схема индикации уровня на 10-и светодиодах представлена на рис.. микросхема которая используется в данной схеме обладает коэф. усиления — 1. С помощью переключателя S1, мы можем выбрать индикации. Уровень водного сигнала от 60 мВ до 1,25 В. Элементная база R1-2=10Kohm D11-12=1N 4148 S1= mini switch R3-4=1Kohm C1=10uF 25V …Подробнее...
  • Усилитель мощности для СВ-радиостанции (27МГц)

    Данный усилитель мощности предназначен для эксплуатации носимой радиостанции в стационарном режиме. При этом сигнал с ее выхода поступает на вход усилителя через коаксиальный кабель. Мощность носимой радиостанции при входном сопротивлении 50 Ом усилителя мощности составляет 1-2Вт. Данный усилитель мощности развивает мощность до 30-40Вт. выход рассчитан на 75-омную антенну. Схема усилителя …Подробнее...