1

Тема: max6675 + 2x18b20 >> 3xTM1637

Термометр

3 индикатора TM1637
1 датчик ХА max6675
2 датчика DS18b20

Вывод температуры термопары от 0 до 1000 гр Цельсия
Вывод температуры датчиков DS18B20 от -55 до 125 гр. Цельсия

Данный контент доступен только зарегистрированным пользователям.
Данный контент доступен только зарегистрированным пользователям.
Данный контент доступен только зарегистрированным пользователям.
Данный контент доступен только зарегистрированным пользователям.



#include <max6675.h>
#include <TM1637Display.h>
#include <OneWire.h>
#include <DallasTemperature.h>
 
MAX6675 temp1(2, 3, 4);// CLK,CS,SO
TM1637Display display_1(5, 6);// CLK,DIO
TM1637Display display_2(7, 8);// CLK,DIO
TM1637Display display_3(9,10);// CLK,DIO
OneWire oneWire(A0);// вход для датчиков 18b20
DallasTemperature t(&oneWire);
double t_c,t_sum,t_iz; 
int t1,t2;
uint8_t data[]{0,0,0,0};
 
void setup(){ Serial.begin(9600);
  display_1.setBrightness(3);// яркость TM1637 0-7
  display_2.setBrightness(3);// яркость TM1637 0-7
  display_3.setBrightness(3);// яркость TM1637 0-7
   t.begin(); 
   t.setResolution(10);//10 бит 
}
 
void loop(){
  ///////// max6675 //////////////////////////
  t_sum=0;
  for(int i=0;i<5;i++){t_c=temp1.readCelsius();t_sum=t_sum+t_c;delay(200);}
  t_iz=t_sum/5;
  ///////////// 18b20 
    t.requestTemperatures();
   t1 = t.getTempCByIndex(0);
   t2 = t.getTempCByIndex(1);
  /////// индикация //////////////////////////
  display_1.showNumberDecEx(t_iz,0x00,false);
  
  if(t1 < 0){t1=abs(t1);data[0] = 0x40;}else{data[0] = 0x00;}
  data[1] =  display_2.encodeDigit(t1/100);
  data[2] =  display_2.encodeDigit((t1/10)%10);
  data[3] =  display_2.encodeDigit((t1%10)%10);
  display_2.setSegments(data);
  
  if(t2 < 0){t2 = abs(t2);data[0] = 0x40;}else{data[0] = 0x00;}
  data[1] =  display_3.encodeDigit(t2/100);
  data[2] =  display_3.encodeDigit((t2/10)%10);
  data[3] =  display_3.encodeDigit((t2%10)%10);
  display_3.setSegments(data);
}

2

Re: max6675 + 2x18b20 >> 3xTM1637

Скеч работает. Осталось проверить на точном прибореhttp://forum.rcl-radio.ru/uploads/images/2019/11/7c810cb431a2ff8975f431c9a45b6e2f.jpg
http://forum.rcl-radio.ru/uploads/images/2019/11/6e466294613dd12b11d7fc348d51fc4b.jpg

3

Re: max6675 + 2x18b20 >> 3xTM1637

Ради интереса замерил температуру в морозильной камере  показания индикаторов -16,
сравнивал с бытовым уличным термометром, был приятно удивлен, показания  -16!

4

Re: max6675 + 2x18b20 >> 3xTM1637

2x18b20 достаточно точный датчик, так же если время измерения для Вас не особо важно, то измените строку
t.setResolution(10);//10 бит
на
t.setResolution(12);//12 бит (время измерения 1 сек)

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

5

Re: max6675 + 2x18b20 >> 3xTM1637

тестировал от 20 до 80 гр., разница во всем диапазоне 1гр.
сравнивал с таким термометром. Термометр показывает на 1 гр. большеhttp://forum.rcl-radio.ru/uploads/images/2019/11/dde782cf8a0d58801a571b01fa915853.jpg

6

Re: max6675 + 2x18b20 >> 3xTM1637

термопара http://forum.rcl-radio.ru/uploads/images/2019/11/2f73ae25001ac84e23ed97d47bb435ec.jpg http://forum.rcl-radio.ru/uploads/images/2019/11/09f342fe1042231021f9cafc851c6908.jpg http://forum.rcl-radio.ru/uploads/images/2019/11/3bb33459c1df83707eaa8f77fc0e94f0.jpg http://forum.rcl-radio.ru/uploads/images/2019/11/df9d8dcb54129a01c16267aedcca3ede.jpg http://forum.rcl-radio.ru/uploads/images/2019/11/3efae00c5cba85e751e6865c4c5e08bc.jpg

7

Re: max6675 + 2x18b20 >> 3xTM1637

Я скажу, идеальные показания!!!
Протестил по всем диапазонам.  Привел некоторые. Проект удачный!!!
Спасибо Автору за помощь!!!