| Ваш IP: 34.229.97.16 | Online(20) - гости: 12, боты: 8 | Загрузка сервера: 1.77 ::::::::::::

Терморегулятор 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);// вывод информации на индикатор
 
}

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

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

  • Пред усилитель для динамического микрофона

    Пред усилитель для динамического микрофона

    Схема простого пред усилителя для микрофона показана на рисунке 1, на рисунке 2 показана схема пред усилителя с использованием длинного кабелю. Усилитель усиливает сигнал в 10 раз. Рабочий ток коллектора VT1 (рис.1) 0,7мА. Питание коллекторной цепи производится через R2 (рис.1) В качестве источника питания может быть батарея или маломощный источник …Подробнее...
  • УКВ приемник на TDA7000

    УКВ приемник на TDA7000

    На рисунке показан схема УКВ (88…108 МГц) приемника на ИМС TDA7000. УКВ приемник содержит небольшое кол-во внешних элементов, прост в настройке. Выходной сигнал звуковой частоты (моно) подается на вход усилителя ЗЧ или на высокоомные наушники. Перечень элементов: С1, С9, С12, С17 —  0.1мкФ С2, С4, С5, С6, С13 —  0.01мкФ …Подробнее...
  • Ламповый усилитель 200 Вт

    Ламповый усилитель 200 Вт

    В статье описан мощный ламповый УМЗЧ, построенный на пальчиковых лампах 6H2П, 6Н1П, 6П45С, схему которого автор скомбинировал из нескольких ламповых усилителей с выходной мощностью 25…50 Вт, работавших на цокольных лампах. Принципиальная электрическая схема усилителя показана на рис.1, схема соединений обмоток выходного трансформатора – на рис.2, принципиальная электрическая схема блока питания …Подробнее...
  • УНЧ на TDA1551

    УНЧ на TDA1551

    Напряжение питания 6…18В Выходная мощность при Uп=14,4В Rн=4Ом: КНИ=0,5% — 5Вт КНИ=10% — 6Вт Ток покоя 160мАПодробнее...
  • Двух полярный источник питания с дискретными значениями выходного напряжения 3, 5, 6, 9, 12, 15В

    Двух полярный источник питания с дискретными значениями выходного напряжения 3, 5, 6, 9, 12, 15В

    На рисунке показана схема простого двух полярного источника питания, выходное напряжение которого может фиксировано меняться от 3 до 15В с интервалом 3В. Максимальный ток нагрузки 1А. На LM317 выполнена схема для положительного напряжения, а на LM337 для отрицательного. Трансформатор должен быть рассчитан на нагрузку 2..2,5А, вторичная обмотка 15В*2. Так же стабилизаторы LM317 …Подробнее...