| Ваш IP: 3.239.7.207 | Online(29) - гости: 11, боты: 18 | Загрузка сервера: 2.87 ::::::::::::

Терморегулятор 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

Комментарии

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

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

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

  • Бестрансформаторный источник питания 12 В / 15 мА

    Бестрансформаторный источник питания 12 В / 15 мА

    Некоторые схемы которые имеют небольшой ток потребления, поэтому для их работы можно использовать простые бестрансформаторные источники питания. В подобных источниках питания целесообразно использовать диодный мост, для увеличения величины выходного тока и меньшей пульсации выходного напряжения, что позволяет использовать конденсаторный фильтр меньшей емкости. Поэтому в предложенной схеме VD3 VD4 используются как …Подробнее...
  • Секундомер на ATtiny2313 (Arduino IDE)

    Секундомер на ATtiny2313 (Arduino IDE)

    На базе ATtiny2313 можно собрать простой секундомер. Информация выводится на дисплей LCD1602. Для управления секундомером используются три кнопки — СТАРТ, СТОП, СБРОС. Минимальный шаг секундомера 0,1 секунда, максимальное время измерения 24 часа. Кнопки СТОП и СТАРТ работают через прерывания IN0 и INT1 (пример — https://rcl-radio.ru/?p=94273), время тактируется при помощи таймера …Подробнее...
  • Часы-будильник на PIC16F877A

    Часы-будильник на PIC16F877A

    На рисунке показана схема часов с будильником. Часы отображают часы, минуты и секунды, будильник только часы и минуты. Дополнительной опцией часов является термометр, датчик температуры LM35 подключен к выводу 9 (AN6) микроконтроллера. После подачи питания на микроконтроллер необходимо установить правильное время, сделать это можно при помощи кнопки «Установка времени», при …Подробнее...
  • Автоматическая регулировка усиления

    Автоматическая регулировка усиления

    Автоматическая регулировка усиления  (АРУ) регулирует выходной сигнал в определенных пределах, при разном уровне входного сигнала.В результате устраняются различия громкости, которые могут раздражать, при смене каналов радиоприемника, телевизора… Полевой транзистор VT1 используется как переменное сопротивление. Это значение может  от бесконечности до 150Ω, тем самым регулируя усиление ОУ на TL072.Подробнее...
  • Регулируемый блок питания с цифровым управлением

    Схема регулируемого блока питания м цифровым управлением состоит из регулятора положительного напряжен7ия на KM317, КПОМ декадного счетчика CD4017, таймера NE555 и регулятора отрицательного напряжения на LM7912. Напряжение сети понижается трансформатором до напряжения +/-12В при токе 1А во вторичной обмотке, далее оно выпрямляется. С1-С5 емкостной фильтр постоянного напряжения. Светодиод LED1 сигнализирует …Подробнее...