Температурный измеритель-регулятор одноканальный (Arduino)

Температурный измеритель — регулятор может работать со следующими типами термопар:

  • R — ТПП (Платина — 13 % родий/платина)
  • S — ТПП (Платина — 10 % родий/платина)
  • В — ТПР (Платина — 30 % родий/платина — 6 % родий)
  • J  — ТЖК [Железо/медь — никель (железо/константан)]
  • T — ТМК [Медь/медь — никель (медь/константан)]
  • Е — ТХКн [Никель — хром/медь — никель (хромель/константан)]
  • К — ТХА [Никель — хром/никель — алюминий (хромель/алюмель)]
  • L — ТХК (Хромель/копель)
  • N — THH[Никель — хром — кремний.никель — кремний (нихросил/нилис)]
  • A(A-1,A-2,A-3) — TBP (Вольфрам — рений/вольфрам — рений)

Так же измеритель-регулятор работает со следующими термометрами сопротивления:

  • 100П (обозначается как 100P) α = 0,00391 °C ‾¹
  • 50П (обозначается как 50P) α = 0,00391 °C ‾¹
  • Pt100 α = 0,00385 °C ‾¹
  • 100M  α = 0,00428 °C ‾¹
  • 50M  α = 0,00428 °C ‾¹
  • 100M  α = 0,00426 °C ‾¹
  • 50M  α = 0,00426 °C ‾¹

Измеритель — регулятор собран на Arduino Nano, для более точного измерения термо-ЭДС термопар используется АЦП-модуль ADS1115 16 bit который позволяет измерять двух полярное напряжение в диапазоне от -256 мВ до +256 мВ,  что вполне приемлемо при измерении ТЭДС термопар (1 бит = 8 мкВ).

При измерении температуры при помощи термопары необходимо учитывать температуру окружающей среды, в качестве датчика температуры окружающей среды используется диод 1N4148.

Измеритель — регулятор выводит основные показания температуры на LCD индикатор 1602 (HD44780), помимо этого выводится напряжение ЭДС термопары (сопротивление для термометров сопротивления), тип термопары (термосопротивления) и температура окружающей среды. При нажатии на кнопку «К» происходит переход в меню настройки, в первом пункте можно установить температуру регулирования (уставка), во втором пункте задать значение гистерезиса, в третьем  выбрать тип термопары (термосопротивления). При выходе из меню настроек появляются основные показания, при одновременном нажатии кнопок «+» и  «-«, вместо показания напряжения ЭДС (сопротивления) выводится значение температуры регулирования. Аналоговый выход 13 (выход TTL) используется для управления нагревательным элементом, к нему можно подключить модуль реле или другое исполнительное уст-во.

При проведении замеров измеритель регулятор обеспечивает измерение напряжения до 100 мВ с точностью +/- 0,01 мВ и температуры +/-0,5..1.5°C во всех типах используемых термопар. Предел регулировки гистерезиса от 0 до 10°С с дискретностью 0,1 °С, пределы регулирования температуры зависят от типа применяемой термопары и программно ограничены, дискретность регулировки 1 °С.

Выбранный тип термопары (термосопротивления), величины температуры регулирования и гистерезиса хранятся в энергонезависимой памяти и обновляются в момент выхода из меню настройки.

Датчик температуры окружающей среды нуждается в калибровке, после прогрева уст-ва измерьте температуру окружающей среды термометром с погрешностью не более 0,1  °С, показания термометра укажите в переменной t0, откройте монитор порта считайте значение, это будет значение переменной t0_analog при температуре t0. Загрузите повторно скетч. Повторите калибровку если это необходимо.

Для более точного измерения температуры при использовании термометров сопротивления необходимо точно измерить сопротивление 4.7 кОм и напряжения 3.3 В на плате Arduino и указать эти значения в скетче.

Так же необходимо изменить частоту дискретизации ADS1115, для этого откройте для редактирования файл библиотеки Adafruit_ADS1015.cpp найти все строчки ADS1015_REG_CONFIG_DR_1600SPS и замените их на ADS1015_REG_CONFIG_DR_128SPS , после чего загрузите скетч в Arduino.

Модуль ADS1115 не нуждается в калибровке, при сравнении измерителя-регулятора с вольтметром В7-78/1 (±(0,0035 %изм. + 0,0005%диапазона)), показания отличались не более чем на 0,015 мкВ.

#include <EEPROM.h>
//#include <EEPROMex.h>
#include <Wire.h>
#include <Adafruit_ADS1015.h>//https://github.com/adafruit/Adafruit_ADS1X15/archive/master.zip
#include <LiquidCrystal.h>
Adafruit_ADS1115 ads;//(0x48);
/* в файле библиотеки Adafruit_ADS1015.cpp найти все строчки: ADS1015_REG_CONFIG_DR_1600SPS и заменить на: ADS1015_REG_CONFIG_DR_128SPS */
 
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);// RS,E,D4,D5,D6,D7
 
long u_digital,u_an,u_sum,w;
const float multiplier = 0.0078125;
float u3300=3349.2;//измерьте точно напряжение 3.3 В и укажите его в мВ
float r_ogr=4690.0;// измерьте точно сопротивление 4.7К и укажите его в Ом
float gis;
float u,u_iz,t,tx_sum,t_sum,t_iz,t_iz_analog,t_analog,rx;
int tx,tip,kn1,kn2,t_reg,sh,sh1,r0;
byte erom1,erom2,erom3,erom4;
 
void setup(void)
{Serial.begin(9600);
lcd.begin(16, 2);// LCD 16X2
ads.setGain(GAIN_SIXTEEN); // +/- 0.256V 1 bit = 0.0078125mV
ads.begin();
analogReference(INTERNAL);// опорное 1,1 В
pinMode(A0,INPUT_PULLUP);
pinMode(5,INPUT);pinMode(4,INPUT);pinMode(3,INPUT); // кнопки
pinMode(13,OUTPUT);
kn2 = EEPROM.read(0);if(kn2>11){EEPROM.update(0,0);}//тип термопары
erom1=EEPROM.read(1);if(erom1>1){EEPROM.update(1,0);}// знак уставки
erom2=EEPROM.read(2);if(erom2>99){EEPROM.update(2,0);}// сотни уставки
erom3=EEPROM.read(3);if(erom3>20){EEPROM.update(3,0);}// десятки и единицы уставки
t_reg=erom2*100+erom3;if(erom1==1){t_reg=t_reg-(2*t_reg);}
erom4=EEPROM.read(4);if(erom4>100){EEPROM.update(4,0);}// гистерезис
float gis1=erom4;gis=gis1/10;
}
 
const float t0 = 26.0; // калибровка
const float t0_analog = 545; // По показаниям эталонного градусника задайте свое значение температуры t0, далее посмотрите значение t0_analog в мониторе порта и укажите его
//K
const float a[]{0,2.5173462*10,-1.1662878,-1.08336338,-8.9773540/10,-3.7342377/10,-8.6632643/100,-1.0450598/100,-5.1920577/10000};
const float a1[]{0,2.508355*10,7.860106/100,-2.503131/10,8.315270/100,-1.228034/100,9.804036/10000,-4.413030/100000,1.057734/1000000,-1.052755*pow(10,-8)};
const float a2[]{-1.318058*100,4.830222*10,-1.646031,5.464731/100,-9.6550715/10000,8.802193/1000000,-3.110810/100000000};
//L
const float b[]{1.1573067/10000,1.5884573*10,4.0458554/100,0.3170064,0.1666128,5.146958/100,9.5288883/1000,1.0301283/1000,6.0654431/100000,1.5131878/1000000};
const float b1[]{7.2069422/1000,1.5775525*10,-0.2261183,9.4286756/1000,-3.5394655/10000,1.0050886/100000,-1.9323678/10000000,2.3816891/1000000000,-1.7130654*pow(10,-11),5.4857331*pow(10,-14)};
//S
const float c[]={0,1.84949460*100,-8.00504062*10,1.02237430*100,-1.52248592*100,1.88821343*100,-1.59085941*100,8.23027880*10,-2.34181944*10,2.79786260};
const float c1[]={1.291507177*10,1.466298863*100,-1.534713402*10,3.145945973,-4.163257839/10,3.187963771/100,-1.291637500/1000,2.183475087/100000,-1.447379511/10000000,8.211272125/1000000000};
const float c2[]={-8.087801117*10,1.621573104*100,-8.536869453,4.719686976/10,-1.441693666/100,2.081618890/10000};
const float c3[]={5.333875126*10000,-1.235892298*10000,1.092657613*1000,-4.265693686*10,6.247205420/10};
//R
const float d[]{0,1.8891380*100,-9.3835290*10,1.3068619*100,-2.2703580*100,3.5145659*100,-3.8953900*100,2.8239471*100,-1.2607281*100,3.1353611*10,-3.3187769};
const float d1[]{1.334584505*10,1.472644573*100,-1.844024844*10,4.031129726,-6.249428360/10,6.468412046/100,-4.458750426*pow(10,-3),1.994710149*pow(10,-4),-5.313401790*pow(10,-6),6.481976217*pow(10,-8)};
const float d2[]{-8.199599416*10,1.553962042*100,-8.342197663,4.279433549/10,-1.191577910/100,1.492290091/10000};
const float d3[]{3.406177836*10000,-7.023729171*1000,5.582903813*100,-1.952394635*10,2.560740231/10};
//B
const float e[]{9.8423321*10,6.9971500*100,-8.4765304*100,1.0052644*1000,-8.3345952*100,4.5508542*100,-1.5523037*100,2.9886750*10,-2.4742860};
const float e1[]{2.1315071*100,2.8510504*100,-5.2742887*10,9.9160804,-1.2965303,1.1195870/10,-6.0625199/1000,1.8661696/10000,-2.4878585*pow(10,-6)};
//J
const float f[]{0,1.9528268*10,-1.2286185,-1.0752178,-5.9086933/10,-1.7256713/10,-2.8131513/100,-2.3963370/1000,-8.3823321/100000};
const float f1[]{0,1.978425*10,-2.001204/10,1.036969/100,-2.549687/10000,3.585153*pow(10,-6),-5.344285*pow(10,-8),5.099890*pow(10,-10)};
const float f2[]{-3.11358187*1000,3.00543684*100,-9.94773230,1.70276630/10,-1.43033468/1000,4.73886084*pow(10,-6)};
//T
const float h[]{0,2.5949192*10,-2.1316967/10,7.9018692/10,4.2527777/10,1.3304473/10,2.0241446/100,1.2668171/1000};
const float h1[]{0,2.592800*10,-7.602961/10,4.637791/100,-2.165394/1000,6.048144/100000,-7.293422*pow(10,-7)};
//E
const float l[]{0,1.6977288*10,-4.3514970/10,-1.5859697/10,-9.2502871/100,-2.6084314/100,-4.1360199/1000,-3.4034030/10000,-1.1564890/100000};
const float l1[]{0,1.7057035*10,-2.3301759/10,6.5435585/1000,-7.3562749/100000,-1.7896001*pow(10,-6),8.4036165*pow(10,-8),-1.3735879*pow(10,-9),1.0629823*pow(10,-11),-3.2447087*pow(10,-14)};
//N
const float m[]{0,3.8436847*10,1.1010485,5.2229312,7.2060525,5.8488586,2.7754916,7.7075166/10,1.1582665/10,7.3138868/1000};
const float m1[]{0,3.86896*10,-1.08267,4.70205/100,-2.12169*pow(10,-6),-1.17272/10000,5.39280*pow(10,-6),-7.98156*pow(10,-8)};
const float m2[]{1.972485*10,3.300943*10,-3.915159/10,9.855391/1000,-1.274371/10000,7.767022*pow(10,-7)};
//A-1
const float n[]{0.9643027,7.9495086*10,-4.9990310,0.6341776,-4.7440967/100,2.1811337/1000,-5.8324228*pow(10,-5),8.2433725*pow(10,-7),-4.5928480*pow(10,-9)};
//A-2
const float o[]{1.1196428,8.0569397*10,-6.2279122,0.9337015,-8.2608051/100,4.4110979/1000,-1.3610551*pow(10,-4),2.2183851*pow(10,-6),-1.4527698*pow(10,-8)};
//A-3
const float p[]{0.8769216,8.1483231*10,-5.9344173,0.8699340,-7.6797687/100,4.1814387/1000,-1.3439670/10000,2.342409*pow(10,-6),-1.6988727*pow(10,-8)};
 
 
void loop(void){
if(digitalRead(5)==HIGH){kn1++;delay(300);}if(kn1==4){kn1=0;}// кнопка
if(kn1==1){// регулирование
if(digitalRead(4) == HIGH){sh++;if(sh<=10){t_reg++;}if(sh>10&&sh<=100){t_reg=t_reg+10;}}else{sh=0;}
if(digitalRead(3) == HIGH){sh1++;if(sh1<=10){t_reg--;}if(sh1>10&&sh1<=100){t_reg=t_reg-10;}}else{sh1=0;}
 
if(kn2==0 && t_reg<-240){t_reg=-240;}if(kn2==0 && t_reg>1372){t_reg=1372;}
if(kn2==1 && t_reg<-200){t_reg=-200;}if(kn2==1 && t_reg>800){t_reg=800;}
if(kn2==2 && t_reg<-50){t_reg=-50;}if(kn2==2 && t_reg>1768){t_reg=1768;}
if(kn2==3 && t_reg<-50){t_reg=-50;}if(kn2==3 && t_reg>1768){t_reg=1768;}
if(kn2==4 && t_reg<250){t_reg=250;}if(kn2==4 && t_reg>1820){t_reg=1820;}
if(kn2==5 && t_reg<-210){t_reg=-210;}if(kn2==5 && t_reg>1200){t_reg=1200;}
if(kn2==6 && t_reg<-200){t_reg=-200;}if(kn2==6 && t_reg>400){t_reg=400;}
if(kn2==7 && t_reg<-200){t_reg=-200;}if(kn2==7 && t_reg>1000){t_reg=1000;}
if(kn2==8 && t_reg<-200){t_reg=-200;}if(kn2==8 && t_reg>1300){t_reg=1300;}
if(kn2==9 && t_reg<0){t_reg=0;}if(kn2==9 && t_reg>2500){t_reg=2500;}
if(kn2==10 && t_reg<0){t_reg=0;}if(kn2==10 && t_reg>1800){t_reg=1800;}
if(kn2==11 && t_reg<0){t_reg=0;}if(kn2==11 && t_reg>1800){t_reg=1800;}
if(kn2>=12 && t_reg<-200){t_reg=-200;}if(kn2==12 && t_reg>800){t_reg=800;}
if(kn2>=13 && t_reg<-200){t_reg=-200;}if(kn2==13 && t_reg>800){t_reg=800;}
if(kn2>=14 && t_reg<-200){t_reg=-200;}if(kn2==14 && t_reg>800){t_reg=800;}
if(kn2==15 && t_reg<-180){t_reg=-180;}if(kn2==15 && t_reg>200){t_reg=200;}
if(kn2==16 && t_reg<-180){t_reg=-180;}if(kn2==16 && t_reg>200){t_reg=200;}
if(kn2==17 && t_reg<-50){t_reg=-50;}if(kn2==17 && t_reg>200){t_reg=200;}
if(kn2==18 && t_reg<-50){t_reg=-50;}if(kn2==18 && t_reg>200){t_reg=200;}
if(t_reg<0){erom1=1;}else{erom1=0;}
erom2=abs(t_reg)/100;
erom3=abs(t_reg)-(abs(t_reg)/100)*100;
lcd.setCursor(0,0);lcd.print("reg = ");lcd.print(t_reg);lcd.print((char)223);lcd.print("C");
delay(300);lcd.clear();
}
 
if(kn1==2){// гистерезис
if(digitalRead(4) == HIGH){gis=gis+0.1;}
if(digitalRead(3) == HIGH){gis=gis-0.1;}
if(gis>=10 || gis<0){gis=0;}
lcd.setCursor(0,0);lcd.print("gis = ");lcd.print(gis,1);lcd.print((char)223);lcd.print("C");
erom4=gis*10;
delay(300);lcd.clear();
}
 
if(kn1==3){ // выбор типа термопары
if(digitalRead(4) == HIGH){kn2++;}
if(digitalRead(3) == HIGH){kn2--;}
if(kn2>=19){kn2=0;}if(kn2<0){kn2=18;}lcd.setCursor(0,0);
switch(kn2){case 0:lcd.print("K -240...1372");break;
            case 1:lcd.print("L -200...800");break;
            case 2:lcd.print("S -50...1768");break;
            case 3:lcd.print("R -50...1768");break;
            case 4:lcd.print("B 250...1820");break;
            case 5:lcd.print("J -210...1200");break;
            case 6:lcd.print("T -200...400");break;
            case 7:lcd.print("E -200...1000");break;
            case 8:lcd.print("N -200...1300");break;
            case 9:lcd.print("A1 0...2500");break;
            case 10:lcd.print("A2 0...1800");break;
            case 11:lcd.print("A3 0...1800");break;
            case 12:lcd.print("100P  0.00391");lcd.setCursor(0,1);lcd.print(" -200...800");break;
            case 13:lcd.print("50P   0.00391");lcd.setCursor(0,1);lcd.print(" -200...800");break;
            case 14:lcd.print("Pt100  0.00385");lcd.setCursor(0,1);lcd.print(" -200...800");break;
            case 15:lcd.print("100M  0.00428");lcd.setCursor(0,1);lcd.print(" -180...200");break;
            case 16:lcd.print("50M   0.00428");lcd.setCursor(0,1);lcd.print(" -180...200");break;
            case 17:lcd.print("100M   0.00426");lcd.setCursor(0,1);lcd.print(" -50...200");break;
            case 18:lcd.print("50M   0.00426");lcd.setCursor(0,1);lcd.print(" -50...200");break;}
 
lcd.print((char)223);lcd.print("C");delay(300);lcd.clear();w=0;
}
 
if(kn1==0){
  w++;if(w==1){EEPROM.update(0,kn2);EEPROM.update(1,erom1);EEPROM.update(2,erom2);EEPROM.update(3,erom3);EEPROM.update(4,erom4);}
lcd.clear();
u_sum=0;tx_sum = 0;
u_iz=u_an * multiplier;
 
// вывод информации на основной экран
lcd.setCursor(0,0);lcd.print("T = ");
if(t==-1000){lcd.print("LOW");}else if(t==10000){lcd.print("HIGH");}
else{lcd.print(t,0);lcd.print((char)223);lcd.print("C");}lcd.setCursor(11,0);
switch(tip){case 0:lcd.print("   K");break;
            case 1:lcd.print("   L");break;
            case 2:lcd.print("   S");break;
            case 3:lcd.print("   R");break;
            case 4:lcd.print("   B");break;
            case 5:lcd.print("   J");break;
            case 6:lcd.print("   T");break;
            case 7:lcd.print("   E");break;
            case 8:lcd.print("   N");break;
            case 9:lcd.print("   A1");break;
            case 10:lcd.print("   A2");break;
            case 11:lcd.print("   A3");break;
            case 12:lcd.print(" 100P");break;   
            case 13:lcd.print(" 50P");break; 
            case 14:lcd.print("Pt100");break;
            case 15:lcd.print("100M");break;
            case 16:lcd.print("50M");break;
            case 17:lcd.print("100M");break;
            case 18:lcd.print("50M");break;}
 
if(digitalRead(4) == HIGH && digitalRead(3) == HIGH){lcd.setCursor(0,1);lcd.print(t_reg);lcd.print((char)223);lcd.print("C");}
else{lcd.setCursor(0,1);if(kn2>=12){lcd.print(rx,2); lcd.print(" Om");}else{lcd.print(u_iz,2); lcd.print(" mV");}}
lcd.setCursor(10,1);lcd.print(t_iz,1);lcd.print((char)223);lcd.print("C");
 
// расчет по формулам температуры
switch(kn2){case 0:txa();break;
            case 1:txk();break;
            case 2:tpp_s();break;
            case 3:tpp_r();break;
            case 4:tpr();break;
            case 5:tjk();break;
            case 6:tmk();break;
            case 7:txk_n();break;
            case 8:thh();break;
            case 9:tvr_a1();break;
            case 10:tvr_a2();break;
            case 11:tvr_a3();break;
            case 12:p100();break;
            case 13:p100();break;
            case 14:pt100();break;
            case 15:cu();break;
            case 16:cu();break;
            case 17:cu1();break;
            case 18:cu1();break;}
 
for(int i=0;i<100;i++){// измерение
u_digital = ads.readADC_Differential_0_1();
tx = analogRead(A0);// 545 при 26 гр
Serial.println(tx);
tx_sum = tx_sum + tx;
u_sum = u_sum + u_digital;
delay(1);
if(digitalRead(5)==HIGH){kn1++;delay(300);}if(kn1==3){kn1=0;i=100;}// кнопка
}
// расчет измерения
u_an=u_sum/100;
t_analog = tx_sum / 100;// среднее значение
t_iz_analog = (t_analog-t0_analog) / 2;// отклонение гр.Цельсия от t0
t_iz = t0 - t_iz_analog;// вычисление температуры
}
 
if(t_reg >= t + gis){digitalWrite(13,HIGH);}
if(t_reg <= t - gis){digitalWrite(13,LOW);}
 
}
void cu1(){if(kn2==17){tip=15;r0=100;}if(kn2==18){tip=18;r0=50;}
rx=(u3300/((u3300-u_iz)/r_ogr))-r_ogr;
t=(rx/r0-1)/0.00426;
if(t<-50){t=-1000;} if(t>200){t=10000;}
}
void cu(){if(kn2==15){tip=15;r0=100;}if(kn2==16){tip=16;r0=50;}
rx=(u3300/((u3300-u_iz)/r_ogr))-r_ogr;
if(rx>=r0){t=(rx/r0-1)/0.00428;}
if(rx<r0){t=233.87*(pow(rx/r0-1,1))+7.9370*(pow(rx/r0-1,2))-2.0062*(pow(rx/r0-1,3))-0.3953*(pow(rx/r0-1,4));}
if(t<-180){t=-1000;} if(t>200){t=10000;}
}
void pt100(){tip=14;r0=100;
rx=(u3300/((u3300-u_iz)/r_ogr))-r_ogr;
if(rx>=r0){t=(sqrt(0.0000152748089+0.00000231*(1-rx/r0))-0.0039083 )/-0.000001151;}
if(rx<r0){t=255.819*(pow(rx/r0-1,1)) + 9.1455*(pow(rx/r0-1,2)) - 2.92363 *(pow(rx/r0-1,3)) + 1.7909*(pow(rx/r0-1,4));}
if(t<-200){t=-1000;} if(t>800){t=10000;}
}
void p100(){if(kn2==12){r0=100;tip=12;}if(kn2==13){r0=50;tip=13;}
rx=(u3300/((u3300-u_iz)/r_ogr))-r_ogr;
if(rx>=r0){t=(sqrt(0.000015752961+0.0000023364*(1-rx/r0))-0.003969 )/-0.0000011682;}
if(rx<r0){t=251.903*(pow(rx/r0-1,1)) + 8.80035*(pow(rx/r0-1,2)) - 2.91506 *(pow(rx/r0-1,3)) + 1.67611*(pow(rx/r0-1,4));}
if(t<-200){t=-1000;} if(t>800){t=10000;}
}
void txa(){tip=0;u=u_iz+t_iz*0.0403;// окружающая температура 0.0403 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TXA(K)
if(u<0){t=(a[0]*pow(u,0))+(a[1]*pow(u,1))+(a[2]*pow(u,2))+(a[3]*pow(u,3))+(a[4]*pow(u,4))+(a[5]*pow(u,5))+(a[6]*pow(u,6))+(a[7]*pow(u,7))+(a[8]*pow(u,8));}
if(u>=0&&u<=20.64){t=(a1[0]*pow(u,0))+(a1[1]*pow(u,1))+(a1[2]*pow(u,2))+(a1[3]*pow(u,3))+(a1[4]*pow(u,4))+(a1[5]*pow(u,5))+(a1[6]*pow(u,6))+(a1[7]*pow(u,7))+(a1[8]*pow(u,8))+(a1[9]*pow(u,9));}
if(u>20.64){t=(a2[0]*pow(u,0))+(a2[1]*pow(u,1))+(a2[2]*pow(u,2))+(a2[3]*pow(u,3))+(a2[4]*pow(u,4))+(a2[5]*pow(u,5))+(a2[6]*pow(u,6));}
if(u_iz<-6.35){t=-1000;} if(u_iz>54.9){t=10000;}
}
void txk(){tip=1;u=u_iz+t_iz*0.06555;// окружающая температура 0.06555 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TXK(L)
if(u<0){t=(b[0]*pow(u,0))+(b[1]*pow(u,1))+(b[2]*pow(u,2))+(b[3]*pow(u,3))+(b[4]*pow(u,4))+(b[5]*pow(u,5))+(b[6]*pow(u,6))+(b[7]*pow(u,7))+(b[8]*pow(u,8))+(b[9]*pow(u,9));}
if(u>=0){t=(b1[0]*pow(u,0))+(b1[1]*pow(u,1))+(b1[2]*pow(u,2))+(b1[3]*pow(u,3))+(b1[4]*pow(u,4))+(b1[5]*pow(u,5))+(b1[6]*pow(u,6))+(b1[7]*pow(u,7))+(b1[8]*pow(u,8))+(b1[9]*pow(u,9));}
if(u_iz<-9.49){t=-1000;} if(u_iz>66.47){t=10000;}
}
void tpp_s(){tip=2;u=u_iz+t_iz*0.005875;// окружающая температура 0.005875 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TPPs(S)
if(u<1.874){t=(c[0]*pow(u,0))+(c[1]*pow(u,1))+(c[2]*pow(u,2))+(c[3]*pow(u,3))+(c[4]*pow(u,4))+(c[5]*pow(u,5))+(c[6]*pow(u,6))+(c[7]*pow(u,7))+(c[8]*pow(u,8))+(c[9]*pow(u,9));}
if(u>=1.874&&u<10.332){t=(c1[0]*pow(u,0))+(c1[1]*pow(u,1))+(c1[2]*pow(u,2))+(c1[3]*pow(u,3))+(c1[4]*pow(u,4))+(c1[5]*pow(u,5))+(c1[6]*pow(u,6))+(c1[7]*pow(u,7))+(c1[8]*pow(u,8))+(c1[9]*pow(u,9));}
if(u>=10.332&&u<17.536){t=(c2[0]*pow(u,0))+(c2[1]*pow(u,1))+(c2[2]*pow(u,2))+(c2[3]*pow(u,3))+(c2[4]*pow(u,4))+(c2[5]*pow(u,5));}
if(u>=17.536&&u<=18.694){t=(c3[0]*pow(u,0))+(c3[1]*pow(u,1))+(c3[2]*pow(u,2))+(c3[3]*pow(u,3))+(c3[4]*pow(u,4));}
if(u_iz<-0.236){t=-1000;}  if(u_iz>18.70){t=10000;}
}
void tpp_r(){tip=3;u=u_iz+t_iz*0.0058;// окружающая температура 0.0058 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TPPr(R)
if(u<1.923){t=(d[0]*pow(u,0))+(d[1]*pow(u,1))+(d[2]*pow(u,2))+(d[3]*pow(u,3))+(d[4]*pow(u,4))+(d[5]*pow(u,5))+(d[6]*pow(u,6))+(d[7]*pow(u,7))+(d[8]*pow(u,8))+(d[9]*pow(u,9))+(d[10]*pow(u,10));}
if(u>=1.923&&u<11.361){t=(d1[0]*pow(u,0))+(d1[1]*pow(u,1))+(d1[2]*pow(u,2))+(d1[3]*pow(u,3))+(d1[4]*pow(u,4))+(d1[5]*pow(u,5))+(d1[6]*pow(u,6))+(d1[7]*pow(u,7))+(d1[8]*pow(u,8))+(d1[9]*pow(u,9));}
if(u>=11.361&&u<19.739){t=(d2[0]*pow(u,0))+(d2[1]*pow(u,1))+(d2[2]*pow(u,2))+(d2[3]*pow(u,3))+(d2[4]*pow(u,4))+(d2[5]*pow(u,5));}
if(u>=19.739&&u<=21.103){t=(d3[0]*pow(u,0))+(d3[1]*pow(u,1))+(d3[2]*pow(u,2))+(d3[3]*pow(u,3))+(d3[4]*pow(u,4));}
if(u_iz<-0.226){t=-1000;}  if(u_iz>21.103){t=10000;}
}
void tpr(){tip=4;u=u_iz;// окружающую температуру для TPR(B) учитывать не нужно
if(u<2.431){t=(e[0]*pow(u,0))+(e[1]*pow(u,1))+(e[2]*pow(u,2))+(e[3]*pow(u,3))+(e[4]*pow(u,4))+(e[5]*pow(u,5))+(e[6]*pow(u,6))+(e[7]*pow(u,7))+(e[8]*pow(u,8));}
if(u>=2.431&&u<13.820){t=(e1[0]*pow(u,0))+(e1[1]*pow(u,1))+(e1[2]*pow(u,2))+(e1[3]*pow(u,3))+(e1[4]*pow(u,4))+(e1[5]*pow(u,5))+(e1[6]*pow(u,6))+(e1[7]*pow(u,7))+(e1[8]*pow(u,8));}
if(u_iz<0.291){t=-1000;}  if(u_iz>13.820){t=10000;}
}
void tjk(){tip=5;u=u_iz+t_iz*0.051475;// окружающая температура 0.051475 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TJK(J)
if(u<0){t=(f[0]*pow(u,0))+(f[1]*pow(u,1))+(f[2]*pow(u,2))+(f[3]*pow(u,3))+(f[4]*pow(u,4))+(f[5]*pow(u,5))+(f[6]*pow(u,6))+(f[7]*pow(u,7))+(f[8]*pow(u,8));}
if(u>=0&&u<42.919){t=(f1[0]*pow(u,0))+(f1[1]*pow(u,1))+(f1[2]*pow(u,2))+(f1[3]*pow(u,3))+(f1[4]*pow(u,4))+(f1[5]*pow(u,5))+(f1[6]*pow(u,6))+(f1[7]*pow(u,7));}
if(u>=42.919&&u<69.553){t=(f2[0]*pow(u,0))+(f2[1]*pow(u,1))+(f2[2]*pow(u,2))+(f2[3]*pow(u,3))+(f2[4]*pow(u,4))+(f2[5]*pow(u,5));}
if(u_iz<-8.095){t=-1000;}  if(u_iz>69.533){t=10000;}
}
void tmk(){tip=6;u=u_iz+t_iz*0.0403;// окружающая температура 0.0403 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TMK(T)
if(u<0){t=(h[0]*pow(u,0))+(h[1]*pow(u,1))+(h[2]*pow(u,2))+(h[3]*pow(u,3))+(h[4]*pow(u,4))+(h[5]*pow(u,5))+(h[6]*pow(u,6))+(h[7]*pow(u,7));}
if(u>=0&&u<20.872){t=(h1[0]*pow(u,0))+(h1[1]*pow(u,1))+(h1[2]*pow(u,2))+(h1[3]*pow(u,3))+(h1[4]*pow(u,4))+(h1[5]*pow(u,5))+(h1[6]*pow(u,6));}
if(u_iz<-5.603){t=-1000;}  if(u_iz>20.872){t=10000;}
}
void txk_n(){tip=7;u=u_iz+t_iz*0.0605;// окружающая температура 0.0605 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TXK_N(E)
if(u<0){t=(l[0]*pow(u,0))+(l[1]*pow(u,1))+(l[2]*pow(u,2))+(l[3]*pow(u,3))+(l[4]*pow(u,4))+(l[5]*pow(u,5))+(l[6]*pow(u,6))+(l[7]*pow(u,7))+(l[8]*pow(u,8));}
if(u>=0&&u<76.373){t=(l1[0]*pow(u,0))+(l1[1]*pow(u,1))+(l1[2]*pow(u,2))+(l1[3]*pow(u,3))+(l1[4]*pow(u,4))+(l1[5]*pow(u,5))+(l1[6]*pow(u,6))+(l1[7]*pow(u,7))+(l1[8]*pow(u,8))+(l1[9]*pow(u,9));}
if(u_iz<-8.825){t=-1000;}  if(u_iz>76.373){t=10000;}
}
void thh(){tip=8;u=u_iz+t_iz*0.026625;// окружающая температура 0.026625 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для THH(N)
if(u<0){t=(m[0]*pow(u,0))+(m[1]*pow(u,1))+(m[2]*pow(u,2))+(m[3]*pow(u,3))+(m[4]*pow(u,4))+(m[5]*pow(u,5))+(m[6]*pow(u,6))+(m[7]*pow(u,7))+(m[8]*pow(u,8))+(m[9]*pow(u,9));}
if(u>=0&&u<20.613){t=(m1[0]*pow(u,0))+(m1[1]*pow(u,1))+(m1[2]*pow(u,2))+(m1[3]*pow(u,3))+(m1[4]*pow(u,4))+(m1[5]*pow(u,5))+(m1[6]*pow(u,6))+(m1[7]*pow(u,7));}
if(u>=20.613&&u<47.513){t=(m2[0]*pow(u,0))+(m2[1]*pow(u,1))+(m2[2]*pow(u,2))+(m2[3]*pow(u,3))+(m2[4]*pow(u,4))+(m2[5]*pow(u,5));}
if(u_iz<-3.990){t=-1000;}  if(u_iz>47.513){t=10000;}
}
void tvr_a1(){tip=9;u=u_iz+t_iz*0.0126;// окружающая температура 0.0126 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TVR_A1(A-1)
t=(n[0]*pow(u,0))+(n[1]*pow(u,1))+(n[2]*pow(u,2))+(n[3]*pow(u,3))+(n[4]*pow(u,4))+(n[5]*pow(u,5))+(n[6]*pow(u,6))+(n[7]*pow(u,7))+(n[8]*pow(u,8));
if(u_iz<0){t=-1000;}  if(u_iz>33.640){t=10000;}
}
void tvr_a2(){tip=10;u=u_iz+t_iz*0.012425;// окружающая температура 0.012425 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TVR_A2(A-2)
t=(o[0]*pow(u,0))+(o[1]*pow(u,1))+(o[2]*pow(u,2))+(o[3]*pow(u,3))+(o[4]*pow(u,4))+(o[5]*pow(u,5))+(o[6]*pow(u,6))+(o[7]*pow(u,7))+(o[8]*pow(u,8));
if(u_iz<0){t=-1000;}  if(u_iz>27.232){t=10000;}
}
void tvr_a3(){tip=11;u=u_iz+t_iz*0.01235;// окружающая температура 0.01235 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TVR_A3(A-3)
t=(p[0]*pow(u,0))+(p[1]*pow(u,1))+(p[2]*pow(u,2))+(p[3]*pow(u,3))+(p[4]*pow(u,4))+(p[5]*pow(u,5))+(p[6]*pow(u,6))+(p[7]*pow(u,7))+(p[8]*pow(u,8));
if(u_iz<0){t=-1000;}  if(u_iz>26.773){t=10000;}
}

 

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

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