Здравейте приятели,
от няколко дни отново се запалих по старото хоби и поднових един от своите „секретни проекти“ СОКОЛ – 1, за който ще прочетете повече след време! :-)
В този материал ще Ви запозная, как можем да извършим измерване на температурата посредством термистор, посредством ефекта характерен за този особен тип керамични съпротивления – ясна промяна на съпротивлението при промяна на температурата.

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

 

Както посочих по-горе тук използваме качеството на термистора да променя съпротивлението си при различни температури, ето защо в този делител на напрежение, ние използваме термистора, за да създадем променливо от температурата напрежение, което да уловим чрез аналоговия вход 1 на Aрдуино и съответно използвайки уравнението на Стайнхарт-Харт да определим точната температура на околната на термистора среда.
Формулата за намиране на температурата изпозлвайки уравнението на Стайнхарт-Харт е следната:

 

Температура = 1 / {A + B[ln(R)] + C[ln(R)]^3}

Където:

R е съпротивлението на термистора (в моят случай то е 10k)

A = 0.001129148
B = 0.000234125
C = 8.76741E-08

А, B, C – това са константи измерени от Стайнхарт-Харт

 

Използвайки схемата по-горе използвах Ардуино микроконтролер, чрез който да извършвам математическите операции и да подавам в конзолата резултата. Както ще видите използвам и цифров температурен сензор TMP102 закупен от моят приятел Robotev, за да видя до колко е точна моята интерпретация на Стайнхарт-Харт уравнението. Срещнах разлика от -1.5 градуса по целзии спрямо аналоговия уред, за това прибавих тази разлика при принтирането на резултата. Ето го и кода, като съм изключил кода за цифровият сензор:

 
#include

double Thermister(int RawADC) {
double Temp;
Temp = log(((10240000/RawADC) - 10000));
Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
Temp = Temp - 273.15 + 1.5; // Convert Kelvin to Celcius
return Temp;
}

void setup() {
Serial.begin(115200);
}

void loop() {
Serial.println(int(Thermister(analogRead(0))));
delay(1000);
}

А ето и снимката на опитната постановка: