Тема: Терморегулятор на сдвиговых регистрах 74НС595

На сайте http://rcl-radio.ru/?p=53543    прочитал ,там 74НС595,   но  у меня  есть индикатор TM1637, вохиожна ли переделка. Есть  на сайте схема  на TM1637, но с энкодером, а мне нужна на кнопках. Пробывал фркенштеить программу, но ума и опыта  не хватает. Если уважаемый  автор   liman28 сможет  поправить  прогу , то буду признателен.

2

Re: Терморегулятор на сдвиговых регистрах 74НС595

Опубликуйте скетч который хотите модифицировать

Re: Терморегулятор на сдвиговых регистрах 74НС595

Не получается копированное отправить сообщением , пишет что какие то тэги исправить надо((

Re: Терморегулятор на сдвиговых регистрах 74НС595

http://rcl-radio.ru/?p=53543#:~:text=%2 … B%7D%0A%7D

5

Re: Терморегулятор на сдвиговых регистрах 74НС595

Завтра постараюсь переделать код

Re: Терморегулятор на сдвиговых регистрах 74НС595

#include <MsTimer2.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
OneWire oneWire(A0);// вход датчика 18b20
DallasTemperature temp(&oneWire);
byte razr[5] = {0x08, 0x04, 0x02, 0x01, 0x00};// 0123         
byte digit[12] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0xFF, 0xBF}; // 0123456789 минус
byte point = 0x80; //точка
float gis=0.5; // гистерезис 0,5 градуса
float k,k2,reg;
int k1,t;
byte a[4],w;
unsigned long time;
 
void setup(){Serial.begin(9600);
  MsTimer2::set(15, to_Timer);// задаем период 10...20 мс
  MsTimer2::start();// старт индикации
  pinMode(3, OUTPUT);  // RCLK
  pinMode(4, OUTPUT);  // SCLK
  pinMode(2, OUTPUT);  // DIO
  pinMode(5, INPUT); // кнопка +
  pinMode(6, INPUT); // кнопка -
  pinMode(13, OUTPUT); // выход реле
  temp.begin(); 
  temp.setResolution(12);//12 бит 
  reg = EEPROM.get(0, reg);
}
 
void to_Timer(){
  if(k<0){k2 = abs(k);a[0]=11;}else{k2=k;a[0]=10;}
  Serial.println(k2);
  if(k2<10){k1=round(k2*100);t=1;}
  else if(k2<100){k1=round(k2*10);t=2;}
  else {k1=k2;t=4;}
  a[1]=k1/100%10;
  a[2]=k1/10%10;
  a[3]=k1%10%10;
  for(int i=0;i<5;i++){
  digitalWrite(3, LOW);
  if(i==t){shiftOut(2, 4, MSBFIRST, digit[a[i]] ^ point);}
  else{shiftOut(2, 4, MSBFIRST, digit[a[i]]);}
  shiftOut(2, 4, MSBFIRST, razr[i]);
  digitalWrite(3, HIGH);
  } 
}
 
void loop(){
if(digitalRead(5)==HIGH){reg+=0.5;if(reg>=125){reg=125;}delay(300);time=millis();w=1;}
if(digitalRead(6)==HIGH){reg-=0.5;if(reg<=-55){reg=-55;}delay(300);time=millis();w=1;}
if(millis()-time<3000){k=reg;}
else{
temp.requestTemperatures();
k = temp.getTempCByIndex(0);
if(reg >= k + gis){digitalWrite(13,HIGH);}
if(reg <= k - gis){digitalWrite(13,LOW);}
}
if(w==1){EEPROM.put(0, reg);w=0;}
}

7

Re: Терморегулятор на сдвиговых регистрах 74НС595

Регулировка температуры от 0 до 99,9 гр Цельсия шаг регулировки 0,1 гр
Максимальная температура 99,9 гр Отображается как t99.9
Минимальная -55 гр Отображается как t-55
Кнопки без резисторов, напрямую подключены к контроллеру, второй вывод кнопки на GND

http://forum.rcl-radio.ru/uploads/images/2026/01/be850d7f5f7bbe2914565121bf8fd1b2.png

http://forum.rcl-radio.ru/uploads/images/2026/01/2e3c6e79a4a5408fb2a55c4bdc2a932e.png


#include <ESP32_TM1637_4LED.h> // http://rcl-radio.ru/wp-content/uploads/2022/01/ESP32_TM1637_4LED.zip
#include <OneWire.h>        // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
#include <EEPROM.h>
  ESP32_TM1637_4LED  tm(2,3);// CLK, DIO
  OneWire  ds(4); // Вход датчика 18b20

  int temper;
  int reg;
  bool w;
  unsigned long times;
  int gis=5; // гистерезис 0,5 градуса

void setup() {
  delay(100);
  tm.brig(7);
  pinMode(5,INPUT_PULLUP);// кнопка +
  pinMode(6,INPUT_PULLUP);// кнопка -
  pinMode(13, OUTPUT); // выход реле
  if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}
  reg=EEPROM.read(0)*256+EEPROM.read(1);
}

void loop() {
  if(digitalRead(5)==LOW){reg+=1;if(reg>=999){reg=999;}delay(100);times=millis();w=1;}
  if(digitalRead(6)==LOW){reg-=1;if(reg<=0){reg=0;}delay(100);times=millis();w=1;}
  
  temper = dsRead(0)*10;
 
  if(millis()-times<=2000){
     tm.print(reg,1,  0b0,-1,-1,-1);
    }
   else{  
    if(temper<0){ tm.print(abs(temper/10),0,  0b01111000,0b01000000,-1,-1);}
     else if(temper>999){tm.print(0,0,  0b01000000,0b01000000,0b01000000,0b01000000);}
     else{tm.print(temper,1,  0b01111000,-1,-1,-1);}
  }
  delay(100);

  if(reg >= temper + gis){digitalWrite(13,HIGH);}
  if(reg <= temper - gis){digitalWrite(13,LOW);}

  if(w==1){EEPROM.update(0, highByte(reg));EEPROM.update(1, lowByte(reg));w=0;}
}

float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  data[0] = ds.read();// Чтение памяти byte low
  data[1] = ds.read();// Чтение памяти byte high
  float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}

Re: Терморегулятор на сдвиговых регистрах 74НС595

Огромное спасибо, как  Вы вовремя, и слово держите!  Сегодня же  начну пробывать!

Re: Терморегулятор на сдвиговых регистрах 74НС595

Работает прога, но есть ньюанс... Температуру на индикаторе  в десять раз больше существующей кажет, и как следствие  не включается выход  рэле.

10

Re: Терморегулятор на сдвиговых регистрах 74НС595

У меня все работает, как надо

11

Re: Терморегулятор на сдвиговых регистрах 74НС595

http://forum.rcl-radio.ru/uploads/images/2026/01/f9c01d0feb6f0f51261356bd6c581eb7.png

Re: Терморегулятор на сдвиговых регистрах 74НС595

Попробую ардуинку заменить, может в ней проблема. А так перезаливал прогу  и менял датчики  раз 10, Буду искать...спасибо

13

Re: Терморегулятор на сдвиговых регистрах 74НС595

Я показания температуры умножаю на 10
temper = dsRead(0)*10;
вместо 25,3 получается 253, но потом я ставлю запятую в нужное место 25,3

регулировка так же умножена на 10

if(digitalRead(5)==LOW){reg+=1;if(reg>=999){reg=999;}delay(100);times=millis();w=1;}
  if(digitalRead(6)==LOW){reg-=1;if(reg<=0){reg=0;}delay(100);times=millis();w=1;}

тоесть от 0 до 999 , что равно от 0,0 до 99,9

Вывод управления реле так же зависит от этого кода

if(reg >= temper + gis){digitalWrite(13,HIGH);}
  if(reg <= temper - gis){digitalWrite(13,LOW);}

reg в формате от 0 до 999 и temper от -550 до 999

Re: Терморегулятор на сдвиговых регистрах 74НС595

Менял макетки,  ардуинки , индикаторы, понял и осознал свою ошибку... у меня  индикатор чуть другой, без разделительных точек.   HW- 069.  Y Но и сработки на рэле не было, менял порты в проге не помогает.

15

Re: Терморегулятор на сдвиговых регистрах 74НС595

У меня использован выход D13  который имеет светодиод на плате, все работает, гаснет и загорается.

16

Re: Терморегулятор на сдвиговых регистрах 74НС595

Реле подключаете через транзисторный ключ?

Re: Терморегулятор на сдвиговых регистрах 74НС595

Стоит оптопара, она срабатывала на другом Вашем проекте, где через энкодер  и дисплей LCD1602

Re: Терморегулятор на сдвиговых регистрах 74НС595

Сработка есть рэле!!! Все отлично! Спасибо огромное

Re: Терморегулятор на сдвиговых регистрах 74НС595

Уважаемый Лиман 324, попробывал загрузить прогу на плату:"LOLIN(WEMOS) D1 R2 & mini

error: 'class EEPROMClass' has no member named 'update'



      |                                                        ^~~~~~

exit status 1

'class EEPROMClass' has no member named 'update'

Что я делаю не так?

20

Re: Терморегулятор на сдвиговых регистрах 74НС595

LOLIN (WEMOS) D1 R2 & mini — это компактная плата для разработки на базе микроконтроллера ESP8266 - скетч не совместим с Вашей платой, только для Atmega 8 16 32 128 328

Re: Терморегулятор на сдвиговых регистрах 74НС595

Да, я именно изза компактности пытался ее пришурупитть, Дело в том что переделываю китайский термопот  под нужды  моей науки, из термопота сделал очиститель воска , в нем как в водянной бане во второй внутренней емкости  расплавленный воск  , и  на обычных механических термовыключателях 86 градусах продержал  трое суток,результат поразил,  наверху /голова/  примеси легкой плотности  середина чистейший воск , ну а внизу /хвост/ ,  грязь, зитиновый покров личинок..Понимаю, что я  не уран 235 от 238 отделил, но гордость была! Буду думать что б мозги / плату ардуино нано не вверху  разместить, а вниз к дну где управление  ТЭНами.. Извините за беспокойство.

Re: Терморегулятор на сдвиговых регистрах 74НС595

http://forum.rcl-radio.ru/uploads/images/2026/01/1ad2724682a77abedd62c2394388fd93.jpg

Re: Терморегулятор на сдвиговых регистрах 74НС595

Что б не быть голословным!! Это уже остывший воск, правда поставлен вверх ногами, дабы видно была грязь...в  качестве  емкости , той которая в водянной бане плавает, это двухлитровый пустой пакет  из под сока.,,, Для чего мне воск? Дык я из чистого своего воска отливаю вощину для пчел и они на ней достраивают ячейки.