| Ваш IP: 3.233.229.90 | Online(21) - гости: 18, боты: 3 | Загрузка сервера: 0.44 ::::::::::::

Терморегулятор DS18B20 + TM1637 + энкодер ky-040 (Arduino)

На рисунке показана схема простого и очень удобного в использовании терморегулятора, в качестве датчика используется DS18B20, а управление регулятором осуществляется при помощи энкодера ky-040.

Интегральный датчик температуры DS18B20 имеет диапазон измерения температуры от -55 до + 125 °C, показания температуры выводятся на четырех разрядный семисегментный индикатор на базе драйвера TM1637 (модуль TM1637), вращая ручку энкодера можно изменять температуру регулирования, так же используется гистерезис в 0,5 °C, которой можно изменить в скетче.

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

Если Вы используете в качестве датчика температуры модуль DS18B20, то резистор R2 из схемы необходимо исключить. Цифровой выход 13 используется для управления нагрузкой.

#include <OneWire.h>
#include <TM1637Display.h>
#include <EEPROM.h>//#include <EEPROMex.h>
#include <DallasTemperature.h>
#include <Encoder.h>
#include <MsTimer2.h>
 
TM1637Display display(2, 3);// CLK,DIO
Encoder myEnc(5, 4);// CLK, DT
OneWire oneWire(A1);// вход датчика 18b20
DallasTemperature t(&oneWire);
 
int oldPosition  = -999,newPosition,rom,k;
unsigned long time;
byte minus_reg,reg;
float gis = 0.5;// гистерезис
uint8_t data[]{0,0,0,0};
uint8_t data1[]{0x6d,0x08,0x50,0x3d};
 
void setup(){
  t.begin(); 
  t.setResolution(11);//11 бит 
  pinMode(10,INPUT);  // кнопка энкодера
  pinMode(13,OUTPUT); // выход для управления нагрузкой
  rom = EEPROM.read(0); 
  minus_reg = EEPROM.read(1);
  if(minus_reg==1){rom=rom-2*rom;}
  display.setBrightness(0);// яркость TM1637 0-7
  MsTimer2::set(3, to_Timer);MsTimer2::start();
}
 
void loop(){
 
  if (newPosition != oldPosition) {
    oldPosition = newPosition;
    time=millis();
    reg=1;
  }
  else if(millis()-time>2000){
    t.requestTemperatures();
    time=millis();
    reg=0;
  }
 
  if(digitalRead(10)==LOW){
    EEPROM.update(0,abs(newPosition));
    EEPROM.update(1,minus_reg);
    display.setSegments(data1); 
    delay(1000);
  }
 
  if(newPosition<0){minus_reg=1;}
  else{minus_reg=0;}
  if(newPosition<-55){newPosition=-55;}
  if(newPosition>125){newPosition=125;}
 
  if(reg==1){k=newPosition;}
  else{k = t.getTempCByIndex(0);}
  if(reg==1){data[0]=0x50;}
  else{data[0] = 0x78;}// r / t
  if(k > 99){data[1] = display.encodeDigit((k/100)%10);}
  else{data[1] = 0x00;}
  if(k < 0){k=abs(k);data[1] = 0x40;}
  data[2] =  display.encodeDigit((k/10)%10);
  data[3] =  display.encodeDigit((k%10)%10);
  display.setSegments(data);
 
   if(newPosition >= t.getTempCByIndex(0) + gis){digitalWrite(13,HIGH);}
   if(newPosition <= t.getTempCByIndex(0) - gis){digitalWrite(13,LOW);}
}
 
void to_Timer(){newPosition = myEnc.read()/4+rom;}

DallasTemperature.h

OneWire.h

Encoder.h

TM1637Display.h

MsTimer2.zip

Комментарии

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

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

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

  • Измеритель емкости на PIC16F628A

    Измеритель емкости на PIC16F628A

    Прибор предназначен для измерения емкости конденсаторов от 100 пФ до 100000 мкФ, способ измерения основан на измерении времени зарядки конденсаторов через заданное сопротивление. Конденсатор заряжается до напряжения 3,15 В, которое подается на вход компаратора RA0. При достижении этого напряжения отсчет времени заряда конденсатора прекращается, далее микроконтроллер пересчитывает полученное время, вычисляет …Подробнее...
  • Подбор диаметра провода при необходимости замены одного провода двумя или тремя (размеры даны в мм)

    Подбор диаметра провода при необходимости замены одного провода двумя или тремя (размеры даны в мм)

    Подбор диаметра провода при необходимости замены одного провода двумя или тремя (размеры даны в мм)Подробнее...
  • TDA7376B- двух канальный УМЗЧ

    TDA7376B- двух канальный УМЗЧ

    ИМС TDA7376B представляет собой сдвоенный мостовой УНЧ и предназначена для использования в автомобильной аудио-аппаратуре. Усилитель на базе TDA7376B имеет защиту от КЗ выхода на землю и шины питания, имеется защита от перегрева и перегрузки выхода. Питание усилителя однополярное от 8 до 18 В, максимальный ток потребления 3,5 А. Основные технические характеристики: Выходная мощность 2 х …Подробнее...
  • Стерео усилитель для наушников на PТ2309

    Стерео усилитель для наушников на PТ2309

    Микросхема РТ2309 может работать в широком диапазоне напряжений, имеет низкое энергопотребление в режиме stand-by, а главное имеет малые гармонические искажения менее чем 0,03% на 32 Ом нагрузке. Так же микросхема отличается малым уровнем собственных шумов. Микросхема оснащена защитой от перегрева.Подробнее...
  • РЕГУЛИРУЕМЫЙ ДВУПОЛЯРНЫЙ СТАБИЛИЗАТОР НАПРЯЖЕНИЯ

    Если у вас есть двуполярный блок питания, дополните его предлагаемым стабилизатором напряжения. И тогда вы станете обладателем источника, выходное напряжение которого можно регулировать в широких пределах, и не переживать за появление коротких замыканий в нагрузке — автоматика защиты сработает мгновенно. Стабилизатор (см. рисунок) предназначен для использования в лабораторном блоке питания …Подробнее...