| Ваш IP: 54.159.44.54 | Online(29) - гости: 27, боты: 2 | Загрузка сервера: 1.79 ::::::::::::

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

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

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

  • Двухтональная сирена

    На рис. 1 изображена принципиальная схема двутональной сирены. Она обеспечивает поочередное звучание двух звуковых тонов. Схема содержит три автогенератора: задающий (ЗГ) на элементах DD1.1, DD1.2 на частоту примерно 1 Гц и два звуковых — на элементах DD2.1, DD2.2 и на элементах DD2.3, DD2.4. Чтобы звуковые генераторы работали поочередно, управляющие импульсы …Подробнее...
  • УМЗЧ класса D мощностью 18Вт на базе TDA7482

    УМЗЧ класса D мощностью 18Вт на базе TDA7482

    Усилитель на базе TDA7482 имеет встроенную защиту от перегрева, перенапряжения и КЗ. Усилитель на TDA7482 имеет следующие характеристики: Напряжение питания от +/-10В до +/-25В (номинальное +/-21В) Ток покоя 40…60мА Выходная мощность 18Вт(Rн=4 Ом) при КНИ 1% и в номинальном напряжении питания  КНИ=0,1% при выходной мощности 1Вт на нагрузке 8 Ом …Подробнее...
  • Индикатор выходной мощности усилителя

    Индикатор выходной мощности усилителя

    На рисунке показана схема простого индикатора выходной мощности усилителя ЗЧ. Индикатор содержит 10 светодиодов, которые показывают выходную мощность усилителя от 0,2Вт до 100Вт. Основу схемы составляет микросхема LM3915, которая представляет собой светодиодный индикатор уровня аудио-сигнала. Сопротивление R1 зависит от сопротивления динамической головки используемой в АС (см. табл.). Напряжение питания от 12 до 20В. …Подробнее...
  • 2N3055 — Усилитель мощности

    2N3055 — Усилитель мощности

    На рисунке представлена схема простого усилителя. Номинальное напряжение питания усилителя 50В, но этот усилитель может так же работать при напряжении питания от 30 до 60В. Максимальное входное напряжение примерно от 0.8 — 1В. Вместо указанных транзисторов можно применить другие,  N-P-N- проводимости. Выходная мощность усилителя 60Вт при напряжении питания +50В. Некоторые …Подробнее...
  • Стереофонический регулятор громкости, баланса и тембра на LM1036

    Стереофонический регулятор громкости, баланса и тембра на LM1036

    Стереофонический регулятор громкости, баланса и тембра на LM1036 имеет следующие характеристики: Напряжение питания 9…16В(12В номинальное) Регулировка громкости в диапазоне 75дБ Регулировка тембра +/-15дБ Коэффициент нелинейных искажений 0,06% при Uвх=0,3В Отношение сигнал/шум -80дБ Мощность рассеивания  1Вт Ток потребления 35…45мА Uвых максимальное — 0,8 (Uпит=12В) Разделение каналов 75…60дБПодробнее...