Проект 12: Датчик температуры

Описание

Термистор (NTC) — широко используемый датчик температуры, сопротивление которого уменьшается с повышением температуры. Используя схему делителя напряжения с известным резистором, мы можем измерить изменение напряжения и вычислить температуру с помощью уравнения Штейнхарта-Харта.

Цель этого проекта — создать систему мониторинга температуры с использованием платы разработки UNO R3 (ch340) и термистора NTC-MF52AT 10K.

Аппаратное обеспечение

  1. Плата разработки UNO R3 (ch340) x1

  2. Термистор NTC-MF52AT 10K x1

  3. Резистор 10K x1

  4. Макетная плата x1

  5. Соединительные провода

Принцип работы

Термистор с отрицательным температурным коэффициентом (NTC) — это резистор, сопротивление которого уменьшается с повышением температуры. Для измерения этого изменения с помощью Arduino мы используем схему делителя напряжения. Мы подключаем термистор NTC последовательно с фиксированным резистором 10K.

Аналоговый пин Arduino считывает напряжение на соединении между термистором и резистором 10K. По мере изменения температуры сопротивление термистора меняется, что, в свою очередь, изменяет напряжение, считываемое аналоговым пином.

Для преобразования этого значения напряжения в температуру в градусах Цельсия мы используем уравнение Штейнхарта-Харта, которое моделирует сопротивление полупроводника при различных температурах.

Схема подключения

  1. Подключите один вывод термистора к 5V.

  2. Подключите другой вывод термистора к аналоговому пину A0.

  3. Подключите резистор 10K от аналогового пина A0 к GND.
    Img

Пример кода

/*

Electronics Learning Starter Kit for Arduino

Project 12

Temperature Sensor

Edit By Keyes

*/

int ThermistorPin = A0;
int Vo;
float R1 = 10000; // Fixed resistor value 10K
float logR2, R2, T;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07; // Steinhart-Hart coefficients

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

void loop() {
  Vo = analogRead(ThermistorPin);
  
  // Calculate resistance of the thermistor
  R2 = R1 * (1023.0 / (float)Vo - 1.0);
  
  // Calculate temperature using Steinhart-Hart equation
  logR2 = log(R2);
  T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
  T = T - 273.15; // Convert Kelvin to Celsius
  
  Serial.print("Temperature: "); 
  Serial.print(T);
  Serial.println(" C"); 
  
  delay(1000);
}

Объяснение кода

Вычисление делителя напряжения:

R2 = R1 * (1023.0 / (float)Vo - 1.0);

Эта формула вычисляет текущее сопротивление термистора NTC на основе аналогового значения (0-1023).

Уравнение Штейнхарта-Харта:

logR2 = log(R2);
T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
T = T - 273.15;

Эти строки применяют уравнение Штейнхарта-Харта для преобразования вычисленного сопротивления в температуру в Кельвинах, а затем вычитают 273.15 для перевода в градусы Цельсия.

Результат проекта

После загрузки кода на плату разработки откройте последовательный монитор Arduino IDE и установите скорость передачи данных 9600 бод. Вы увидите, как текущая температура окружающей среды выводится каждую секунду в градусах Цельсия. Попробуйте сжать термистор пальцами, чтобы увидеть повышение температуры!

P12