# Проект 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](../media/img-20260401184903.png) #### Пример кода ```cpp /* 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); } ``` #### Объяснение кода **Вычисление делителя напряжения**: ```cpp R2 = R1 * (1023.0 / (float)Vo - 1.0); ``` Эта формула вычисляет текущее сопротивление термистора NTC на основе аналогового значения (0-1023). **Уравнение Штейнхарта-Харта**: ```cpp logR2 = log(R2); T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2)); T = T - 273.15; ``` Эти строки применяют уравнение Штейнхарта-Харта для преобразования вычисленного сопротивления в температуру в Кельвинах, а затем вычитают 273.15 для перевода в градусы Цельсия. #### Результат проекта После загрузки кода на плату разработки откройте последовательный монитор Arduino IDE и установите скорость передачи данных 9600 бод. Вы увидите, как текущая температура окружающей среды выводится каждую секунду в градусах Цельсия. Попробуйте сжать термистор пальцами, чтобы увидеть повышение температуры! ![P12](../media/P12.gif)