[Tutorial] NTC 10k

User avatar
Bania
Posts: 107
Joined: Wed Jul 24, 2024 5:03 pm
Location: Bielsko-Biała
Has thanked: 5 times
Been thanked: 5 times

Post

Cześć. Przedstawię wam krótki poradnik jak podłączyć czujnik temperatury analogowy. Najbardziej popularny jest chyba NTC 10k.

Wady i zalety:
+ czujnik analogowy jest bardziej odporny na zakłócenia, można go podłączyć zwykłym przewodem, w porównaniu do czujników cyfrowych
+ czujnik analogowy łatwo można sprawdzić czy jest sprawny, nie trzeba konwertera, wystarczy zwykły miernik elektryczny
- żeby podłączyć czujnik temperatury analogowy, urządzenie odczytujące musi być wyposażone w przetwornik ADC
- można podłączyć tylko jeden czujnik w jeden port ADC

3.3V === NTC === ADC (MCU) === 10k (rezystor) === GND

Image

Szybka metoda odczytu temperatury:

Code: Select all

float NTC_Convert(uint16_t value)
{
	const float maxADC = 4095.0; // maksymalna wartosc przetwornika ADC
	const float resistor = 10000; // rezystor dzielnika napiecia
	const float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;

	float resistanceLog, resistance, temperature;

	resistance = resistor * (maxADC / (float)value - 1.0);
	
	resistanceLog = log(resistance);
	temperature = (1.0 / (c1 + c2 * resistanceLog + c3 * resistanceLog * resistanceLog * resistanceLog));
	temperature -= 273.15;

	return temperature;
}
Dokładniejsza metoda odczytu temperatury, jednak bardziej czasochłonna dla procesora:

Code: Select all

float NTC_Convert(uint16_t value)
{
	const float maxADC = 4095.0; // maksymalna wartosc przetwornika ADC
	const float resistor = 10000; // rezystor dzielnika napiecia
	const float nominalResistance = 10000; // nominalna wartosc rezystancji
	const float nominalTemperature = 25; // nominalna wartosc temperatury
	const float coefficient = 3950; // nominalna wartosc beta (dla danego czujnika)
	//const float coefficient = 3435; // nominalna wartosc beta (dla danego czujnika)

  	float resistance, temperature;

  	resistance = resistor * (maxADC / (float)value - 1.0);

  	temperature = resistance / nominalResistance;
  	temperature = log(temperature);
  	temperature /= coefficient;
  	temperature += 1.0 / (nominalTemperature + 273.15);
  	temperature = 1.0 / temperature;
  	temperature -= 273.15;

  	return temperature;
}
Last edited by Bania on Sun Feb 16, 2025 2:21 am, edited 5 times in total.
https://github.com/anarhbania/Supla
User avatar
Robert Błaszczak
Posts: 5222
Joined: Sat Dec 22, 2018 8:55 pm
Location: Zielona Góra
Has thanked: 37 times
Been thanked: 27 times

Post

Należy pamiętać, że ESP32 rozdzielczość 12-bit (0 - 4095).
Pozdrawiam
Robert Błaszczak


Moja prywatna strona: www.blaszczak.pl
User avatar
Duch__
Posts: 2199
Joined: Wed Aug 24, 2016 7:26 pm
Location: Opole
Been thanked: 6 times

Post

Pod jedno adc można podłączyć wiele czujników. Potrzebny jest multiplekser.

Return to “Pomoc”