| Ваш IP: 34.200.222.93 | Online(36) - гости: 25, боты: 10 | Загрузка сервера: 1.87 ::::::::::::

Терморегулятор 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 = 6; // SO
int thermoCS = 5; // CS
int thermoCLK = 4;// 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);// вывод информации на индикатор
 
}

Комментарии

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

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

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

  • Стабилизатор напряжения сетевого адаптера

    Большинство импортных адаптеров после выпрямителя не имеют стабилизатора выпрямленного напряжения. Что приводит к большим пульсациям выпрямленного напряжения, что затрудняет использование таких адаптеров питающих например радиоприемник из-за наличия пульсаций слышимых в динамике радиоприемника. Но можно применить простую схему показанную на рисунке, которая позволяет переделать адаптер, что бы получит на его выходе …Подробнее...
  • СИММЕТРИЧНЫЙ ЛAMПOBЫЙ УМЗЧ

    СИММЕТРИЧНЫЙ ЛAMПOBЫЙ УМЗЧ

    Параметры усилителя Чувствительность …………………………………………..0, 2-0, 7 В Диапазон частот ………………………………………….20.20000 Гц Выходная мощность ………………………………………………28 Bт Экономичный режим………………………………………………16 Вт УМЗЧ состоит из трех каскадов (рис.1). Первые два — усилитель напряжения, который выполнен на лампах VL1, VL2 по балансной (дифференциальной) схеме и обеспечивает достаточное усиление при малой чувствительности к пульсациям анодного напряжения. …Подробнее...
  • RIAA предусилитель на TDA2320A

    RIAA предусилитель на TDA2320A

    ИМС TDA2320A содержит в своем корпусе два низкочастотных ОУ, с очень низким током потребления, порядка 0,8 мА и работающих в широком диапазоне питающих напряжений от 3 до 36 В. ИМС TDA2320A предназначена для широкого применения в аудиотехнике (усилители воспроизведения, предварительные усилители, эквалайзеры, активные фильтры и т.д.). ИМС TDA2320A может работать …Подробнее...
  • Простой измеритель емкости(от 100пФ до 1мкФ)

    На рисунке представлена схема простого стрелочного измерителя емкости, который позволяет относительно точно измерить емкость конденсаторов от 100пФ до 1 мкФ. В измерителе емкости 4-е предела: 100…1000пФ, 1000пФ…0,01мкФ(10000пФ), 0,01…0,1мкФ, 0,1…1,0мкФ. Главное достоинство измерителя — простота конструкции, низкая себестоимость, относительно низкая погрешность измерения. На DD1.1 — DD1.3 собран опорный генератор на 100кГц. …Подробнее...
  • Адаптер для питания ноутбука в автомобиле

    Преобразователь может питаться от 10В до 15В, на выходе 19В при максимальном токе 2,5А. Так же есть схема защиты входного напряжения от падения его ниже 10В. Контроллер импульсов переменной скважности выполнен на UC3843(А1). Выходные импульсы поступают на затвор мощного ключевого полевого транзистора VT1. Преобразование происходит на частоте 50кГц. Накачка напряжения …Подробнее...