Аналоговый датчик температуры KY-013

Узнайте всё об аналоговом датчике температуры KY-013: спецификации, распиновка, схемы подключения, документация и примеры кода для Arduino, ESP32, ESP-IDF, PlatformIO и MicroPython

Температура Аналоговый

Обзор

KY-013 — это аналоговый модуль датчика температуры на основе NTC терморезистора. Он обеспечивает измерение температуры в диапазоне -55°C до +125°C с точностью ±0.5°C. Модуль работает при напряжениях 3.3В–5В и идеально подходит для систем климат-контроля, мониторинга окружающей среды и других температурных применений.

KY-013 — аналоговый модуль датчика температуры с NTC терморезистором. Он измеряет температуру от -55°C до +125°C с точностью ±0.5°C и работает от 3.3В до 5В. Подходит для метеостанций, систем отопления и других проектов.

KY-013 Analog Temperature Sensor Module
Быстрая навигация
Основные разделы статьи
Примеры кода
Популярные платформы

О модуле KY-013 Analog Temperature Sensor

KY-013 — это аналоговый модуль датчика температуры, который использует NTC терморезистор (Negative Temperature Coefficient). При повышении температуры сопротивление NTC терморезистора уменьшается, что позволяет определить температуру путём измерения напряжения при использовании в конфигурации делителя напряжения. Модуль работает при напряжениях между 3.3В и 5В, что делает его совместимым с различными микроконтроллерами, включая Arduino и ESP32.

🔗 Подробнее о аналоговых датчиках температуры. 🔗 Ознакомьтесь с NTC терморезисторами для понимания принципа работы.

Где купить

Приобретите KY-013

Технические характеристики

Характеристики KY-013

Полные технические характеристики модуля KY-013 Analog Temperature Sensor.

Интерфейс
Аналоговый
Точность
±0.5°C
Диапазон
-55°C до +125°C
Питание
3.3В - 5В
Сопротивление
10 кОм при 25°C
B-Value
3950K
Скачать полный даташит
Конфигурация пинов

Распиновка KY-013

KY-013 — это 3-пиновый аналоговый модуль датчика температуры с NTC терморезистором.

Визуальная диаграмма распиновки
Основное
Распиновка KY-013
Всего выводов
3
Типы
Питание + Аналог
Быстрые советы
  • Интерфейс — аналоговый выход (делитель напряжения).
  • НТС — сопротивление падает с ростом температуры.
  • Передача сигнала — требует пересчёта через уравнение Steinhart-Hart.
Описание выводов
Название Тип Описание Примечания
1 - Питание Земля (GND) Общая земля
2 средний Питание Питание (3.3В–5В) Любое в диапазоне
3 S Аналоговый выход Аналоговый сигнал Напряжение меняется с температурой
Руководство по подключению

Подключение KY-013 к Arduino

Для интерфейса KY-013 с Arduino используйте аналоговый вход (ADC). Модуль работает от , что совместимо с Arduino, но также может работать и от 3.3В. Выход датчика — аналоговое напряжение, которое нужно преобразовать в температуру с помощью уравнения Steinhart-Hart.

Схема подключения
Рекомендуемая (аналоговый вход)
Подключение KY-013 к Arduino
Подключений
3
Статус
Все обязательны
Протокол
Аналоговый (ADC)
Подключения пинов
Вывод KY-013 Подключение Вывод Arduino Описание
- (Pin 1)обязательно GND Общая земля
средний (Pin 2)обязательно 5V (или 3.3V) Питание (3.3В или 5В)
S (Pin 3)обязательно A0 (или любой аналоговый) Аналоговый выход (требует пересчёта)
📍 Аналоговый выход (0–5В или 0–3.3В) 🔧 Требует уравнения Steinhart-Hart ⚡ Питание: 3.3В или 5В 🎯 NTC: сопротивление падает при нагреве 📏 10 кОм при 25°C 📈 B-Constant: 3950K
Помощь и поддержка

Устранение неполадок KY-013

Распространённые проблемы и решения, которые помогут запустить датчик.

Некорректные показания температуры
Значения слишком высокие, низкие или плавающие

Проблема: датчик показывает нестабильные или заведомо неверные значения температуры.

Возможные причины: нестабильное питание, неправильные соединения, шумы в аналоговой цепи.

Решение: проверьте стабильность питания, убедитесь в надёжности контактов, реализуйте фильтрацию сигнала в коде (среднее значение). Убедитесь, что используете правильные параметры в уравнении Steinhart-Hart (R0=10 кОм, B=3950K).

Датчик не отдаёт данных
Постоянное значение или отсутствие изменений

Проблема: аналоговый вход показывает одно и то же значение независимо от температуры.

Возможные причины: окисление контактов, повреждение NTC элемента, короткое замыкание, неправильный вывод на плате.

Решение: проверьте целостность соединений, протестируйте датчик мультиметром (сопротивление должно меняться при нагреве/охлаждении). Убедитесь, что подключены правильные пины (не перепутаны VCC и сигнал).

Ошибка переполнения ADC на ESP32
Значения за пределами 0–4095

Проблема: значения analogRead выходят за пределы диапазона.

Причина: неправильный режим ADC или подача напряжения выше, чем диапазон ADC.

Решение: на ESP32 используйте adc1_config_width(ADC_WIDTH_BIT_12) для 12-битного ADC (0–4095) и правильную аттенюацию (ADC_ATTEN_DB_11 для 0–3.3В). Убедитесь, что напряжение на сигнальном выводе не превышает 3.3В при питании 3.3В.

Советы по отладке

Serial монитор
Проверка сырых значений ADC
Выводите сырые значения ADC (0–1023 для Arduino, 0–4095 для ESP32) в Serial Monitor. Это поможет убедиться, что датчик реагирует на изменение температуры. При нагреве/охлаждении NTC значения должны плавно меняться в противоположную сторону (рост температуры → рост напряжения → рост ADC).
Проверка сопротивления мультиметром
Вручную убедиться в работе NTC
Отключите питание и измерьте сопротивление между средним и первым выводом (NTC). При нагревании (феном или лампой) сопротивление должно уменьшаться. При комнатной температуре около 25°C ожидайте значение близкое к 10 кОм. Если сопротивление не меняется — датчик повреждён.

Дополнительные ресурсы

Примеры кода

Примеры программирования KY-013

Готовые к использованию примеры кода для различных платформ и фреймворков

Пример для Arduino

Совместим с Arduino IDE и платами ESP32 (Arduino core)

C++
// Аналоговый датчик температуры KY-013 на Arduino
// Использует уравнение Steinhart-Hart для расчёта температуры

const int sensorPin = A0;  // Аналоговый вход подключен к A0

// Параметры NTC терморезистора
#define R0 10000.0         // Сопротивление при 25°C (10 кОм)
#define B_VALUE 3950.0     // B-constant (3950K)
#define T0 298.15          // 25°C в Кельвинах
#define V_SUPPLY 5.0       // Напряжение питания (5В для Arduino)
#define R_SERIES 10000.0   // Сопротивление резистора в делителе (10 кОм)

void setup() {
    Serial.begin(9600);
    Serial.println("KY-013 Temperature Sensor");
}

void loop() {
    // 1. Считываем аналоговое значение (0-1023 для 10-битного ADC)
    int rawValue = analogRead(sensorPin);

    // 2. Преобразуем в напряжение
    float voltage = rawValue * (V_SUPPLY / 1023.0);

    // 3. Рассчитываем сопротивление NTC
    // Формула делителя: V_out = V_SUPPLY * (R_NTC / (R_SERIES + R_NTC))
    // => R_NTC = R_SERIES * V_out / (V_SUPPLY - V_out)
    float resistance = R_SERIES * voltage / (V_SUPPLY - voltage);

    // 4. Уравнение Steinhart-Hart (упрощённое)
    // 1/T = 1/T0 + (1/B) * ln(R/R0)
    float lnR_R0 = log(resistance / R0);
    float temperatureK = 1.0 / (1.0 / T0 + (1.0 / B_VALUE) * lnR_R0);
    float temperatureC = temperatureK - 273.15;

    // 5. Выводим результат
    Serial.print("Raw: ");
    Serial.print(rawValue);
    Serial.print(" | Voltage: ");
    Serial.print(voltage, 3);
    Serial.print("V | Resistance: ");
    Serial.print(resistance, 1);
    Serial.print(" Ohm | Temperature: ");
    Serial.print(temperatureC, 2);
    Serial.println(" °C");

    delay(1000);  // Задержка 1 секунда
}

Этот Arduino-скетч считывает аналоговое значение с NTC терморезистора KY-013, преобразует его в напряжение, затем в сопротивление, и наконец вычисляет температуру с использованием уравнения Steinhart-Hart. Для корректного расчёта необходимо знать параметры NTC: R0 = 10 кОм при 25°C, B-constant = 3950K. Резистор в делителе также должен быть 10 кОм.

Важные замечания:

  • Для Arduino Nano/Uno используется 10-битный ADC (0–1023) и напряжение питания 5В.
  • На ESP32 в режиме Arduino используется 12-битный ADC (0–4095) и обычно 3.3В.
  • Результаты могут незначительно отличаться из-за расхождений реальных параметров NTC и tolerance резистора.

Уточнение параметров

Если датчик показывает систематическую погрешность, откалибруйте его, измерив температуру одновременно с эталонным термометром и подстроив R0 или B_VALUE в коде.

Пример для ESP-IDF

Официальный фреймворк Espressif для разработки IoT

C++
// Аналоговый датчик KY-013 на ESP-IDF
// Использует ADC1 и уравнение Steinhart-Hart

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/adc.h"
#include "math.h"

#define ADC_CHANNEL ADC1_CHANNEL_0     // GPIO36 (ADC1)
#define ADC_WIDTH ADC_WIDTH_BIT_12     // 12-битный ADC
#define ADC_ATTEN ADC_ATTEN_DB_11      // Полный диапазон 0–3.3В

// Параметры NTC
#define R0 10000.0
#define B_VALUE 3950.0
#define T0 298.15
#define R_SERIES 10000.0
#define V_SUPPLY 3.3

void app_main() {
    // Настройка ADC
    adc1_config_width(ADC_WIDTH);
    adc1_config_channel_atten(ADC_CHANNEL, ADC_ATTEN);

    while (1) {
        // Считываем значение (0–4095)
        int raw = adc1_get_raw(ADC_CHANNEL);

        // Преобразуем в напряжение (0–3.3В)
        float voltage = raw * (V_SUPPLY / 4095.0);

        // Рассчитываем сопротивление NTC
        float resistance = R_SERIES * voltage / (V_SUPPLY - voltage);

        // Уравнение Steinhart-Hart
        float lnR_R0 = log(resistance / R0);
        float temperatureK = 1.0 / (1.0 / T0 + (1.0 / B_VALUE) * lnR_R0);
        float temperatureC = temperatureK - 273.15;

        // Вывод
        printf("Raw: %d | Voltage: %.3fV | R_NTC: %.1f Ohm | Temp: %.2f °C\n",
               raw, voltage, resistance, temperatureC);

        vTaskDelay(pdMS_TO_TICKS(1000));  // Задержка 1 секунда
    }
}

Пример для ESP-IDF демонстрирует использование 12-битного ADC ESP32 (ADC1, канал 0, GPIO36) для чтения аналогового сигнала от NTC термистора. Код включает настройку ADC, чтение сырого значения, преобразование в напряжение, расчёт сопротивления NTC, применение уравнения Steinhart-Hart и вывод результата каждую секунду.

Ключевые моменты:

  • Используется ADC_ATTEN_DB_11 для полного диапазона 0–3.3В.

  • Параметры NTC: R0 = 10 кОм, B = 3950K.

  • Расчёт температуры в °C вычитает 273.15 из кельвинов.

  • Для точности можно добавить усреднение несколькихADC-сэмплов.

Пример для ESPHome

Конфигурация ESPHome для Home Assistant

YAML
# Конфигурация ESPHome для KY-013
# Требуется интеграция с Home Assistant

# Настройка ADC (ESP32)
adc:
  - pin: GPIO36
    id: ky013_adc
    attenuation: 11dB

# Создаем NTC сенсор на основе ADC
sensor:
  - platform: adc
    pin: GPIO36
    id: ntc_resistance
    name: "KY-013 Resistance"
    unit_of_measurement: "Ω"
    update_interval: 5s
    attenuation: 11dB

  # Рассчитываем температуру через lambda-выражение
  - platform: template
    name: "KY-013 Temperature"
    unit_of_measurement: "°C"
    lambda: |-
      // Получаем сопротивление из ADC
      float voltage = id(ntc_resistance).state * (3.3 / 4095.0);
      float r_ntc = 10000.0 * voltage / (3.3 - voltage);  // R_series = 10 кОм
      // Steinhart-Hart
      float ln_r = log(r_ntc / 10000.0);
      float temp_k = 1.0 / (1.0 / 298.15 + (1.0 / 3950.0) * ln_r);
      return temp_k - 273.15;
    update_interval: 5s

ESPHome использует ADC для измерения напряжения на NTC, а затем применяет lambda-выражение для расчёта температуры по уравнению Steinhart-Hart. Сначала измеряется напряжение (0–3.3В), затем вычисляется сопротивление NTC, учитывая резистор делителя 10 кОм, и наконец температура в °C.

Примечания:

  • Убедитесь, что использован правильный пин ADC (GPIO36) и аттенюация 11dB (0–3.3В).

  • Параметры NTC (R0 = 10 кОм, B = 3950K) соответствуют KY-013.

  • Можно добавить фильтрацию (moving average) для стабилиции показаний.

Пример для PlatformIO

Профессиональная среда разработки

C++

platformio.ini

[env:esp32]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200

src/main.cpp

// KY-013 Temperature Sensor with PlatformIO (ESP32)
// Uses ADC + Steinhart-Hart equation

const int sensorPin = 36;     // GPIO36 (ADC1)
const float V_SUPPLY = 3.3;   // ESP32 ADC reference
const float R_SERIES = 10000.0;
const float R0 = 10000.0;
const float B_VALUE = 3950.0;
const float T0 = 298.15;

void setup() {
    Serial.begin(115200);
    delay(1000);
    Serial.println("KY-013 Sensor (PlatformIO)");
}

void loop() {
    // Read raw ADC (12-bit on ESP32 Arduino)
    int rawValue = analogRead(sensorPin);

    // Voltage
    float voltage = rawValue * (V_SUPPLY / 4095.0);

    // NTC resistance
    float resistance = R_SERIES * voltage / (V_SUPPLY - voltage);

    // Steinhart-Hart
    float lnR = log(resistance / R0);
    float tempK = 1.0 / (1.0 / T0 + (1.0 / B_VALUE) * lnR);
    float tempC = tempK - 273.15;

    Serial.printf("Raw: %d | V: %.3fV | R: %.1fΩ | Temp: %.2f°C\n",
                  rawValue, voltage, resistance, tempC);

    delay(2000);
}

Проект PlatformIO для ESP32 использует фреймворк Arduino и читает аналоговый сигнал с GPIO36. На ESP32 ADC имеет 12-битное разрешение (0–4095) и диапазон 0–3.3В. Уравнение Steinhart-Hart применяется для перевода сопротивления NTC в температуру.

Ключевые параметры соответствуют KY-013:

  • Резистор делителя: 10 кОм
  • NTC R0: 10 кОм при 25°C
  • B-value: 3950K

Файл platformio.ini минимален: платформа ESP32, board esp32dev, фреймворк arduino и скорость монитора 115200 бод.

Пример для MicroPython

Python для микроконтроллеров

Python
# KY-013 Temperature Sensor (MicroPython)
# ADC + Steinhart-Hart equation

import machine
import time
import math

# Настройка ADC
sensor_pin = machine.Pin(36)                    # GPIO36
adc = machine.ADC(sensor_pin)
adc.atten(machine.ADC.ATTN_11DB)  # 0–3.3В диапазон

# Параметры NTC
R0 = 10000.0         # 10 кОм при 25°C
B_VALUE = 3950.0     # B-constant
T0 = 298.15          # 25°C in Kelvin
R_SERIES = 10000.0   # Резистор делителя 10 кОм
V_SUPPLY = 3.3       # Напряжение питания ESP32

def read_temperature():
    # Считываем сырое ADC-значение (0–4095)
    raw = adc.read()

    # Напряжение
    voltage = raw * (V_SUPPLY / 4095.0)

    # Сопротивление NTC
    resistance = R_SERIES * voltage / (V_SUPPLY - voltage)

    # Steinhart-Hart
    ln_r = math.log(resistance / R0)
    temp_k = 1.0 / (1.0 / T0 + (1.0 / B_VALUE) * ln_r)
    temp_c = temp_k - 273.15

    return temp_c

while True:
    try:
        temperature = read_temperature()
        print("Temperature: {:.2f} °C".format(temperature))
    except Exception as e:
        print("Sensor error:", e)
    time.sleep(1)

Этот скрипт MicroPython для ESP32 использует ADC на GPIO36 с аттенюацией 11dB для диапазона 0–3.3В. Функция read_temperature() вычисляет температуру через уравнение Steinhart-Hart, используя параметры NTC 10 кОм, B=3950K и резистор делителя 10 кОм. Основной цикл выводит значение каждую секунду, перехватывая исключения для отладки.

При необходимости можно добавить усреднение нескольких измерений (например, 5–10 сэмплов) для снижения шума аналогового входа.

Итоги KY-013

Модуль **KY-013 Analog Temperature Sensor** — это простой и доступный аналоговый датчик температуры на NTC терморезисторе. Он работает от 3.3В или 5В и подходит для базовых задач контроля температуры. Для получения значений требуется аналоговый вход микроконтроллера и программный расчёт через уравнение Steinhart-Hart.

Рекомендации

Для точных измерений используйте резистор делителя с допуском 1% или меньше. Добавьте фильтрацию (усреднение 5–10 сэмплов) кода для снижения шума аналогового входа. Размещайте датчик подальше от источников тепла для корректных показаний.

Безопасность прежде всего

Не подавайте на аналоговый вход напряжение выше, чем опорное (AREF на Arduino или 3.3В на ESP32). Избегайте короткого замыкания между выводами питания и сигналом. Модуль выдерживает до 125°C, но для долговечности ограничьте диапазон до -40…+85°C.

Готовы начать создавать?

Теперь, когда у вас есть вся необходимая информация, пора интегрировать KY-013 в ваш проект на Arduino или ESP32 и воплотить идеи в жизнь!