Pomiary temperatury mają zastosowanie nie tylko w meteorologii, ale także w diagnostyce maszyn i urządzeń – do tego celu również można wykorzystać płytkę Arduino!

Pomiary temperatury za pomocą termistora i Arduino

W tym artykule przedstawiono budowę przykładowej aplikacji do pomiaru temperatury opartej na płytce Arduino UNO R3 i termistorze.

Czym jest i jak działa termistor?

Termistory są w istocie rezystorami, które zmieniają swoją rezystancję odpowiednio do temperatury w najbliższym fizycznym otoczeniu elementu. Typowo, termistory rozróżniamy na podstawie sposobu reakcji na zmianę temperatury, tj. termistory NTC (o ujemnym współczynniku temperaturowym) i termistory PTC (o dodatnim współczynniku temperaturowym). W przypadku termistorów NTC, wraz ze wzrostem temperatury rezystancja na zaciskach tego elementu maleje, a w termistorach PTC wraz ze wzrostem temperatury rezystancja wzrasta. Typowo w większości aplikacji przeważają jednak termistory NTC. Strukturę wewnętrzną takiego elementu stanowią substancje półprzewodnikowe, np. tlenki metali, które są wrażliwe na zmiany temperatury w odpowiednich zakresach i dzięki temu odpowiednio zmieniają swoją rezystancję. Materiał przewodzący zawiera nośniki ładunku, które umożliwiają przepływ przez niego prądu. Wskutek odpowiednio wysokich temperatur, materiał półprzewodnikowy uwalnia więcej nośników ładunku. W termistorach NTC wykonanych z tlenku żelaza nośnikami ładunku są elektrony. W termistorach NTC z tlenkiem niklu nośnikami ładunku są dziury elektronowe.

Jak podłączyć termistor do Arduino?

Teraz zbudujemy testowy układ oparty na płytce Arduino UNO R3 z termistorem NTC. Będzie to baza pod projekty urządzeń do pomiaru temperatury. Ponieważ konstrukcja termistora jest tak zaprojektowana, że jego rezystancja zmienia się pod wpływem zmian temperatury, należy w pierwszej kolejności zmierzyć jego rezystancję, która odpowiada konkretnej wartości temperatury. Z uwagi na to, że Arduino nie może wykonywać bezpośredniego pomiaru rezystancji, ale może mierzyć napięcie (za pomocą wbudowanego 10-bitowego przetwornika ADC), wystarczy zbudować prosty rezystancyjny dzielnik napięcia. Rezystancję dzielnika obliczamy ze wzoru (1.1):

VOUT = VIN*(R2,/(R1 + R2)) (1.1)

Gdzie:

VOUT – zmierzone napięcie pomiędzy termistorem a rezystorem [V]

VIN – wejściowe napięcie zasilania [V]

R1 – rezystancja rezystora [Ω]

R2 – rezystancja termistora [Ω]

Aby obliczyć rezystancję termistora dla zmierzonego przez Arduino napięcia wejściowego, wzór (1.1) wystarczy przekształcić do wzoru (1.2):

R2 = R1*((VIN/VOUT) – 1) (1.2)

W ten sposób, uzyskujemy wartość rezystancji termistora dla określonego napięcia, dzięki czemu możemy określić wartość temperatury.

Czujnik temperatury na Arduino – podłączenie układu

Teraz wystarczy podłączyć rezystor i termistor do Arduino. Aby łatwiej wykonać obliczenia, dobieramy rezystor o rezystancji zbliżonej do rezystancji termistora. W naszym przypadku, wybierzemy rezystor o rezystancji 100kΩ, więc również wybierzemy termistor o rezystancji 100kΩ. Aby sprawdzić, czy rezystancja termistora w temperaturze pokojowej jest w przybliżeniu równa rezystancji w temperaturze pokojowej, jaką deklaruje producent, sprawdź element za pomocą multimetru ustawionego w tryb omomierza na za zakresie pomiarowym nie mniejszym niż wartość rezystancji badanego termistora bez obciążenia. Jeśli rezystancja termistora w temperaturze pokojowej wynosi 34kΩ, wówczas jest to termistor 10kΩ, a jeśli termistor ma 10-krotnie wyższą rezystancję w temperaturze pokojowej, tj. 340kΩ, to jest to termistor 100kΩ. Wspólne Wyprowadzenie termistora i rezystora podłączamy do pinu “A1” w sekcji “ANALOG”. Natomiast drugie wyprowadzenie termistora podłączamy do pinu zasilania “5V”, a drugie wyprowadzenie rezystora – do masy, do pinu “GND”.

Czujnik temperatury na Arduino – odczyt temperatury z monitora porta szeregowego – kod programu

Poniższy kod programu w środowisku Arduino IDE, umożliwia odczyt temperatury z czujnika termistorowego w stopniach Fahrenheita i w stopniach Celsjusza:

//program odczytujacy temperature z termistora
int Termistor = 1; //przypisanie pinu odczytywania napiecia z termistora
int Vo; //odczyt napiecia dla termistora
float R1 = 10000; //Rezystor staly 10kiloomow
float logR2, R2, T, Tc, Tf; //deklaracja danych wejsciowych i wyjsciowych
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;
void setup() {
Serial.begin(9600); //Uruchomienie transmisji szeregowej, predkosc 9600 baudow
}

void loop() {
  Vo = analogRead(Termistor); //odczyt napiecia z termistora
  R2 = R1 * (1023.0 / (float)Vo - 1.0); //obliczenie rezystancji termistora
  logR2 = log(R2);
  T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
  Tc = T - 273.15;
  Tf = (Tc * 9.0)/ 5.0 + 32.0; 
  Serial.print("Temperatura: "); //wyswietlanie wyniku temperatury
  Serial.print(Tf); //Temperatura w stopniach Farenheita
  Serial.print(" F; "); //Znak stopni Farenheita
  Serial.print(Tc); //Temperatura w stopniach Celsjusza
  Serial.println(" C"); //Znak Stopni Celsjusza 
  delay(300); //Kolejny cykl pomiarowy za 300ms
}

Aby zwiększyć walory praktyczne projektu, zalecamy umieszczenie układu w obudowie oraz wyprowadzenie czujnika termistorowego na zewnątrz na przewodach, których rezystancję należy dodać do rezystancji termistora pomiarowego.

Jak oceniasz ten wpis blogowy?

Kliknij gwiazdkę, aby go ocenić!

Średnia ocena: 5 / 5. Liczba głosów: 6

Jak dotąd brak głosów! Bądź pierwszą osobą, która oceni ten wpis.

Zobacz również