Продолжаем изучать модули из набора «37 in 1 Sensors Kit for Arduino» и сегодня рассмотрим модуль KY-013 – аналоговый датчик температуры. Разберем, как его подключить к Arduino, выведем показание температуры в монитор порта. А также рассмотрим, с какими проблемами можно столкнуться при работе с данным модулем.
У модуля KY-013 есть несколько вариантов неправильной маркировки выводов подключения.
Первый вариант это перепутанные местами сигнальный вывод (S) и GND. Если при подключении у вас не выводит показания температуры, то у вашего модуля аналогичная проблема. Меняем местами подключения данных контактов.
Второй вариант связан с выводом температуры в неправленом направлении. То есть если вы нагреваете датчик, а температура понижается. Вот что вы увидите в мониторе порта.
В таком случае меняем местами подключения питания 5v и GND. И показания будут выводиться правильно.
Модуль аналогового датчика температуры KY-013 для Arduino измеряет температуру окружающей среды за счет изменения сопротивления термистора. Данный модуль можно подключать к различным микроконтроллерам (Arduino, ESP32, ESP8266, stm32 и пр.) для измерения температуры окружающей среды.
Модуль аналогового датчика температуры KY-013 состоит из термистора NTC и резистора 10 кОм. Сопротивление термистора зависит от температуры окружающей среды, мы воспользуемся уравнением Стейнхарта – Харта, чтобы получить точную температуру термистора.
Подключаем линию питания платы (посередине) и землю (-) к 5 В и GND соответственно. Затем сигнал (S) к контакту A0 на Arduino.
Внимание! Не забывайте про вероятность, что на некоторых платах нанесена неправильная разметка контактов, о чем я рассказывал в начале урока.
В следующем скетче Arduino будет вычисляться температура термистора с использованием уравнения Стейнхарта-Харта. Код вернет температуру в градусах Цельсия.
int ThermistorPin = A0; int Vo; float R1 = 10000; // значение R1 на модуле float logR2, R2, T; float c1 = 0.001129148, c2 = 0.000234125, c3 = 0.0000000876741; //коэффициенты Штейнхарта-Харта для термистора void setup() { Serial.begin(9600); } void loop() { Vo = analogRead(ThermistorPin); R2 = R1 * (1023.0 / (float)Vo - 1.0); //вычислите сопротивление на термисторе logR2 = log(R2); T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2)); // температура в Кельвине T = T - 273.15; //преобразование Кельвина в Цельсия Serial.print("Temperature: "); Serial.print(T); Serial.println(" C"); delay(500); }
Коэффициенты применимы только к платам с термисторами 10 кОм, некоторые редкие платы имеют термисторы на 100 кОм и требуют других коэффициентов.
Для того чтобы определить точность измерения модуля KY-013 - аналогового датчика температуры, подключим модуль KY-001, который оснащён цифровым датчиком DS18B20. Урок по подключению модуля KY-001 смотрите тут: KY-001 модуль температуры на базе DS18B20. Подключение к Arduino.
#include <OneWire.h> OneWire ds(2); int ThermistorPin = A0; int Vo; float R1 = 10000; // значение R1 на модуле float logR2, R2, T; float c1 = 0.001129148, c2 = 0.000234125, c3 = 0.0000000876741; //коэффициенты Штейнхарта-Харта для термистора void setup() { Serial.begin(9600); } void loop() { Vo = analogRead(ThermistorPin); R2 = R1 * (1023.0 / (float)Vo - 1.0); //вычислите сопротивление на термисторе logR2 = log(R2); T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2)); // температура в Кельвине T = T - 273.15; //преобразование Кельвина в Цельсия byte i; byte data[12]; byte addr[8]; float celsius; // поиск датчика if ( !ds.search(addr)) { ds.reset_search(); delay(250); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // измерение температуры delay(1000); ds.reset(); ds.select(addr); ds.write(0xBE); // начало чтения измеренной температуры //показания температуры из внутренней памяти датчика for ( i = 0; i < 9; i++) { data[i] = ds.read(); } int16_t raw = (data[1] << 8) | data[0]; // датчик может быть настроен на разную точность, выясняем её byte cfg = (data[4] & 0x60); if (cfg == 0x00) raw = raw & ~7; // точность 9-разрядов, 93,75 мс else if (cfg == 0x20) raw = raw & ~3; // точность 10-разрядов, 187,5 мс else if (cfg == 0x40) raw = raw & ~1; // точность 11-разрядов, 375 мс // преобразование показаний в градусы Цельсия celsius = (float)raw / 16.0; Serial.print("KY-013 = "); Serial.print(T); Serial.println(" C"); Serial.print("KY-001 = "); Serial.print(celsius); Serial.println(" C"); Serial.println("------"); delay(500); }
В данном скетче считываем показания температуры с двух модулей KY-001, KY-013 и выводим полученные значения в монитор порта.
Как видим из показаний, температура с модуля KY-013 больше почти на 1 градус цельсия, чем с модуля KY-001. Хотя производитель гарантирует точность измерения ± 0,5 ° С.
Вывод по модулю KY-013.
Вывод про модуль KY-013 - аналоговый датчик температуры можно сделать следующий. Использовать его можно в проектах не требовательных к точности измерений температуры, с возможными отклонениями в показаниях ± 1 ° С. Это связано с значительной погрешностью измерения данного модуля.
Понравился Урок KY-013 – модуль аналогового датчика температуры? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Спасибо за внимание!
Технологии начинаются с простого!
Фотографии к статье
Файлы для скачивания
![]() |
Пример кода Arduino для получения значений температуры с датчика KY-013.ino | 1 Kb | 975 | Скачать |
![]() |
Код Arduino получения показаний с модулей KY-001, KY-013.ino | 2 Kb | 925 | Скачать |
все работает спс ;)
37 модулей для Arduino
8 мая , 2021
Комментариев:1
Файлов для скачивания:2
Фото:6
Понравилась статья? Нажми
Виджеты для Easy HMI
Читайте также
Мы в соц сетях
Комментарии