Измерване на температурна разлика с TMP36 и Arduino

Здравейте приятели,
за един интересен (но за сега секретен!!!! 🙂 ) проект ми трябва устройство, което да измерва температурна разлика в и извън определен уред.
И сега ще Ви задам един много интересен въпрос… Добре де, аз хубаво ще я измеря тази разлика, но какво всъщност е топлината?

За да разберем какво е топлината, ние трябва да си изясним, че всъщност често се използват два много различни термина в почти еднакъв смисъл:

Топлина – е мярка за въздействие между две термодинамични системи с различни температури. За да бъдем още по-конкретни и лесни за разбиране, ще представим пример – вашият дом. У вас парното зимата въздейства, отдавайки топлина към студения въздух в стаята. По този начин от своя страна въздуха, отдава температура към вашето тяло и предметите в стаята.

Топлинна енергия – тя е част от общата вътрешната енергия на едно тяло. Тъй като никое тяло на практика не е никога не е в абсолютен покой, топлинната енергия е свързана с движението на атомите, молекулите или други частици, от които се състои тялото. Когато Ви е студено на ръцете, вие ги потривате енергично и в следствие на това чрез триенето, на ръцете си, вие увеличавате движението на вътрешните частици изграждащи ръцете ви.

Вземайки на предвид тези две разлики, разбираме, че търсим първото определение.

За създаването на уреда, съм избрал много прост аналогов елемент, който няма за цел да определи точната температура, а разликата между температурите на две системи. Ще видите в процеса на работа, как двата датчика всъщност показват температура с разлика от около 2-3 градуса и как ще се наложи да ги калибрираме „юнашката“ 🙂

Използван датчик:
TMP36 – температурен датчик. Един много прост, ефективен и евтин елемент, който дава линейна промяна в изходящия си волтаж спрямо промяната на температурата върху него.

TMP36

Характеристики на температурен датчик TMP36:
Работно напрежение – 2.7V до 5.5V
Изходящо напрежение – 0.3V за -20ºC / 1.2V за 70ºC
Цена – 2 лв. (23.02.2014г.)

На практика, това е един променлив резистор, който променя съпротивлението си под въздействието на температурата.
Следователно, за различни температури, ще имаме различно изходящо напрежение на второто краче на датчика, за да превърнем това в температура, ще трябва да ползваме следната формула:

(voltage1 – 0.5) * 100

Където voltage1 е изходящото напрежение във волтове.

Добре, теоретически сме подготвени задоволително, нека преминем към схемата с Arduino микроконтролер:

Arduino TMP36

Нищо сложно, както виждате. Само трябва да спомена нещо което ще видите после в кода, а именно това, че тъй като това е аналогов елемент, за да няма смущения в измерванията, трябва да вземате стойностите по отделно, т.е. да правите изчакване между вземането на стойностите с delay(2000).

Ето и кода:

</p>
<p>// Указване на контролера от кои крачета да взема стойностите на датчиците:<br />
int sensorPin1 = 1;<br />
int sensorPin2 = 4;    </p>
<p>void setup()<br />
{<br />
  Serial.begin(9600);  //Указваме скоростта на кънекцията към компютъра, за да можете да гледате стойностите през Serial Monitor<br />
}</p>
<p>void loop()<br />
{<br />
 //Вземаме стойностите, като между двете вземания изчакваме 2 секунди<br />
 int reading1 = analogRead(sensorPin0);<br />
 delay(2000);<br />
 int reading2 = analogRead(sensorPin2);  </p>
<p> // Конвертираме двете стойности във волтове, ако използвате 5V изход, пишете 5.0, ако ползвате 3.3V изход, пишете 3.3<br />
 float voltage1 = reading1 * 5.0;<br />
 voltage1 /= 1024.0; </p>
<p> float voltage2 = reading2 * 5.0;<br />
 voltage2 /= 1024.0;  </p>
<p> // Калкулираме температурата спрямо изходящите напрежения<br />
 float temperatureC1 = round((voltage1 - 0.5) * 100) ;<br />
 float temperatureC2 = round((voltage2 - 0.5) * 100) ;  </p>
<p>// Принтираме в конзолата по подходящ начин<br />
Serial.print(temperatureC1 + 2); Serial.println(";"); // Тук е "юнашкото" калибриране на двата датчика, направено е на око в еднаква среда.<br />
Serial.print(temperatureC2); Serial.println(";");<br />
 Serial.println("-----------------");<br />
 delay(1000);                                     //Изчакваме 1 секунда и завъртаме отново цикъла<br />
}</p>
<p>

Това е кода приятели, моля споделяйте и давайте мнения.

Leave a Reply

Be the First to Comment!

Notify of
avatar
wpDiscuz