<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[forum.rcl-radio.ru &mdash; ТЕРМОРЕГУЛЯТОР ТЕРМОПАРНЫЙ ТИПА ХА ХК ППs НА ADS1115]]></title>
	<link rel="self" href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=631&amp;type=atom" />
	<updated>2024-04-22T09:09:40Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.rcl-radio.ru/viewtopic.php?id=631</id>
		<entry>
			<title type="html"><![CDATA[ТЕРМОРЕГУЛЯТОР ТЕРМОПАРНЫЙ ТИПА ХА ХК ППs НА ADS1115]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=10159#p10159" />
			<content type="html"><![CDATA[<p>Основная статья - <a href="http://rcl-radio.ru/?p=131906">http://rcl-radio.ru/?p=131906</a></p><p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2024/04/c5cc652a4dd36e39a9e52a9a082a6cd3.png" alt="http://forum.rcl-radio.ru/uploads/images/2024/04/c5cc652a4dd36e39a9e52a9a082a6cd3.png" /></span> </p><p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2024/04/828e6aa1e264555f91e2e4f74246c558.png" alt="http://forum.rcl-radio.ru/uploads/images/2024/04/828e6aa1e264555f91e2e4f74246c558.png" /></span> </p><p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2024/04/9bc2ae1fa819e36ce992861df83f1dd5.png" alt="http://forum.rcl-radio.ru/uploads/images/2024/04/9bc2ae1fa819e36ce992861df83f1dd5.png" /></span> </p><br /><br /><div class="codebox"><pre><code>#define GIS 1.0

#include &lt;Wire.h&gt; 
#include &lt;Adafruit_ADS1015.h&gt;  // https://github.com/adafruit/Adafruit_ADS1X15/archive/master.zip
#include &lt;LiquidCrystal_I2C.h&gt;
#include &lt;LM75.h&gt;  //  https://github.com/thefekete/LM75.git
#include &lt;EEPROM.h&gt;
LiquidCrystal_I2C lcd(0x27,16,2); 
Adafruit_ADS1115 ads; 
LM75 sensor(LM75_ADDRESS | 0b111);  // if A0-&gt;Vcc, A1-&gt;Vcc and A2-&gt;Vcc

 int16_t results;
 float multiplier = 0.0078125F; 
 float t,u,t_iz,t_reg;
 unsigned long times,times0;
 bool w,w1;
 int tip,up,dw;

//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};


void setup() {
  Wire.begin();delay(200);
  lcd.init();lcd.backlight();
  ads.setGain(GAIN_SIXTEEN); 
  ads.begin();
  analogReference(INTERNAL);// опорное 1,1 В
  pinMode(2,INPUT_PULLUP);
  pinMode(3,INPUT_PULLUP);
  pinMode(4,INPUT_PULLUP);
  pinMode(8,OUTPUT);
  if(EEPROM.read(100)!=0){for(int i=0;i&lt;101;i++){EEPROM.update(i,0);}}
  tip = EEPROM.read(0);
  t_reg = EEPROM.read(1)*256 + EEPROM.read(2);
}

void loop() {
  if(digitalRead(2)==LOW){tip++;if(tip&gt;2){tip=0;}w=1;delay(300);}
  if(digitalRead(3)==LOW){if(up&gt;10){t_reg+=10;}else{t_reg++;}up++;w=1;w1=1;times0=millis();delay(200);lcd.clear();}
  if(digitalRead(4)==LOW){if(dw&gt;10){t_reg-=10;}else{t_reg--;}dw++;w=1;w1=1;times0=millis();delay(200);lcd.clear();}
  if(digitalRead(3)==HIGH){up=0;}
  if(digitalRead(4)==HIGH){dw=0;}
  if(tip==0 &amp;&amp; t_reg&lt;-240){t_reg=-240;}if(tip==0 &amp;&amp; t_reg&gt;1372){t_reg=1372;}
  if(tip==1 &amp;&amp; t_reg&lt;-200){t_reg=-200;}if(tip==1 &amp;&amp; t_reg&gt;800){t_reg=800;}
  if(tip==2 &amp;&amp; t_reg&lt;-50){t_reg=-50;}  if(tip==2 &amp;&amp; t_reg&gt;1768){t_reg=1768;}
  if(millis()-times&gt;1000){times=millis();w=1;}
  if(w==1){w=0;
  results = ads.readADC_Differential_0_1(); 
  t_iz = sensor.temp();
  switch(tip){
    case 0: txa();break;
    case 1: txk();break;
    case 2: tpp_s();break;
    }
  lcd.setCursor(0,0);
  if(t==10000){lcd.print(&quot;  HIGH  &quot;);}
  else if(t==-1000){lcd.print(&quot;  LOW   &quot;);}
  else{lcd.print(&quot;T=&quot;);lcd.print(t,0);lcd.print((char)223);lcd.print(&quot;C &quot;);}
  lcd.setCursor(9,0);lcd.print(results * multiplier,2);lcd.print(&quot;mV &quot;);
  lcd.setCursor(0,1);
  lcd.print(&quot;Tr=&quot;);lcd.print(t_reg,0);
  lcd.setCursor(8,1);
  switch(tip){
    case 0: lcd.print(&quot;K&quot;);break;
    case 1: lcd.print(&quot;L&quot;);break;
    case 2: lcd.print(&quot;S&quot;);break;
    }
  lcd.setCursor(10,1);lcd.print(t_iz,1);lcd.print((char)223);lcd.print(&quot;C &quot;);
  }
 if(millis()-times0&gt;10000 &amp;&amp; w1==1){w1=0;
  EEPROM.update(0,tip);EEPROM.update(1,highByte(int(t_reg)));EEPROM.update(2,lowByte(int(t_reg)));
  }
  if(t_reg &gt;= t + GIS){digitalWrite(8,HIGH);}
  if(t_reg &lt;= t - GIS){digitalWrite(8,LOW);}
}

void txa(){u=results * multiplier+t_iz*0.0403;// окружающая температура 0.0403 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TXA(K)
if(u&lt;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&gt;=0&amp;&amp;u&lt;=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&gt;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(results * multiplier&lt;-6.35){t=-1000;} if(results * multiplier&gt;54.9){t=10000;}
}

void txk(){u=results * multiplier+t_iz*0.06555;// окружающая температура 0.06555 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TXK(L)
if(u&lt;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&gt;=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(results * multiplier&lt;-9.49){t=-1000;} if(results * multiplier&gt;66.47){t=10000;}
}
void tpp_s(){u=results * multiplier+t_iz*0.005875;// окружающая температура 0.005875 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TPPs(S)
if(u&lt;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&gt;=1.874&amp;&amp;u&lt;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&gt;=10.332&amp;&amp;u&lt;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&gt;=17.536&amp;&amp;u&lt;=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(results * multiplier&lt;-0.236){t=-1000;}  if(results * multiplier&gt;18.70){t=10000;}
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2024-04-22T09:09:40Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=10159#p10159</id>
		</entry>
</feed>
