Подключение термопары к плате ардуино

Расчет температуры с помощью терморезистора

Схема используемого нами делителя напряжения представлена на следующем рисунке.

Напряжение на терморезисторе в этой схеме можно определить из известного напряжения:

Vout=(Vin*Rt)/(R+Rt).

Из этой формулы можно выразить значение сопротивления терморезистора Rt (R – известное сопротивление 10 кОм):

Rt=R(Vin/Vout)-1.

Значение Vout мы затем будем определять в коде программы с помощью считывания значения на выходе АЦП на контакте A0 платы Arduino.

Математически, сопротивление терморезистора можно вычислить с помощью известного уравнения Стейнхарта-Харта (Stein-Hart equation).

T = 1/(A + B*ln(Rt) + C*ln(Rt)3).

В этой формуле A, B и C — константы, Rt – сопротивление терморезистора, ln — натуральный логарифм.

Мы для проекта использовали терморезистор со следующими константами: A = 1.009249522×10−3, B = 2.378405444×10−4, C = 2.019202697×10−7. Эти константы можно определить с помощью данного калькулятора, введя в нем значения сопротивления терморезистора при трех значениях температуры или вы их можете непосредственно узнать из даташита на ваш терморезистор.

Таким образом, для определения значения температуры нам будет нужно только значение сопротивления терморезистора – после его определения мы просто подставляем его значение в уравнение Стейнхарта-Харта и с его помощью рассчитываем значением температуры в кельвинах.

Термисторы против термопар

Основная статья:.Thermocouple vs Thermistor

Термистор, как правило, более точны, чем термопары, термопары, но может обрабатывать более высоких температурах и являются линейными. Термопара дает очень небольшое напряжение (тип K производит 8.138mV @ 200C), который может быть откалиброван и обработанный с помощью ИК (AD595A усилителей, MAX6675 SPI, или MAX31855 SPI) в форме, считываемой с помощью электроники. Термопары могут быть более чувствительны к шуму за счет низкого напряжения.Термопары технически переход между двумя проводами таким образом, область измерения и форм-фактор меньше.

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

Эти технические характеристики относятся к аналоговым датчикам температуры TMP36 (-40 до 150 градусов по цельсию).

Технические характеристики очень схожи также с датчиками модели LM35/TMP35 (выходой сигнал в цельсиях) и LM34/TMP34 (в фаренгейтах). Основное преимущество модели ’36 перед ’35 или ’34 – этот датчик температуры имеет широкий диапазон чувствительности и не генерирует отрицательные значения напряжения при минусовой температуре. Во всем остальном функционал одинаковый.

  • Размер: корпус TO-92 (около 0.2″ x 0.2″ x 0.2″) с тремя коннекторами
  • Цена: $2.00 в магазине Adafruit (Китай, конечно же предлагает дешевле)
  • Диапазон измеряемых температур: от — 40°C до 150°C / -40°F до 302°F
  • Диапазон сигнала на выходе: от 0.1В (-40°C) до 2.0В (150°C), но точность падает после 125°C
  • Питание: от 2.7 В до 5.5 В, сила тока — 0.05 мА
  • Даташит

Проверка датчика температуры

Проверить эти датчики несложно. Для этого вам понадобятся батарейки или источник питания.

Подключите источник питания 2.7 – 5.5 В (отлично подходят также 2-4 батарейки АА) таким образом, что земля подключена к 3 пину (справа), а напряжение питания – к 1 пину (слева).

После этого выставьте на своем мультиметре режим DC (постоянный ток). Подключите его его к земле и свободному среднему (2) коннектору. Если у вас датчик температуры TMP36 и вокруг комнатная температура (около 25 °C), напряжение дожно быть около 0.75 В

Обратите внимание, что если вы используете LM35, напряжение составит 0.25 В

Датчик показывает температуру 26.3 °C, что равно 79.3 F

Напряжение на выходе можно легко изменить, зажав пластиковый корпус датчика пальцами. В результате вы увидите как напряжение/температура растут.

С пальцами на датчике температура поднялась до 29.7°C / 85.5°F:

Или вы можете коснуться датчика кусочком льда (желательно так, чтобы влага с него не попала на ваше электрическую цепь). В результате температура уменьшится.

С кусочком льда на сенсоре температура опустилась до 18.6°C / 65.5°F.

АЦП MAX6675, MAX31855

Представленная далее схема, как и сам АЦП изначально не рассчитаны на использование с термопарами, требующими заземления, что нужно учитывать при разработке финальной конструкции устройства. Платы MAX6675 и MAX31855 электрически взаимозаменяемы. Единственное различие в подключаемой библиотеке. Для первого АЦП получить ее можно по адресу http://github.com/adafruit/MAX6675-library, для второго https://github.com/adafruit/Adafruit-MAX31855-library.

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

У обоих АЦП на плате 5 выходных контактов. Два используются для питания, на них подается +5В и GND соответственно. Остальные размечены следующим образом:

Контакт Описание Используется
CLK Используется при побитовой передаче — указывая, что можно забрать следующий бит IN/OUT
DO Побитовый вывод результата OUT
CS Устанавливается в HIGH контроллером Arduino для проведения замера IN

В качестве линий питания и земли можно также использовать цифровые пины Arduino, но нежелательно. Будут заняты еще два контакта. В случае, если все же требуется использовать такую конструкцию, в инициализацию void setup () нужно добавить следующие строки:

Соответственно в шапке скетча задать

Некоторые замечания по специализированным АЦП

В случае с аналого-цифровым преобразователем непонятно откуда он берет температуру «холодного» конца термопары. Скорее всего считает ее равной измеренной встроенным термодатчиком. Соответственно  точность показаний зависит от непосредственного расположения усиливающей платы рядом с измеряющей линией.

Кроме вышеназванной проблемы стоит не забывать о «шумности» входов преобразователя, на которую жалуются пользователи АЦП MAX. Для уменьшения мешающего фактора рекомендуется разместить между контактами термопары фильтрующий конденсатор от 0.001 до 0.01 мкФ.

Критичны и выходные параметры самих спаянных рабочих проводников. Термопара должна давать именно то количество вольт на градус разницы, на которые рассчитаны усилители.

Работа схемы

Схема устройства представлена на следующем рисунке.

Схема содержит такие элементы как плата Arduino, ЖК дисплей, реле (Relay) и терморезистор (термистор). При повышении температуры реле будет включаться, а при понижении температуры ниже заданного порога – выключаться. Реле управляет цепью электрической лампочки – оно выполняет роль домашнего устройства, управляемого в зависимости от температуры. Весь процесс измерения температуры и включения/выключения лампочки выполняется платой Arduino. Также плата Arduino выводит информацию о температуре и статусе системы на экран ЖК дисплея.

РДТ

Резистивный датчик температуры (РДТ) отличается от термистора, в том, что термочувствительный материал, используемый в термистора, как правило, керамики или полимера, в то время как РДТ использовать чистые металлы.
Оба измерения температуры по влиянию на сопротивление датчика.
РДТ полезны на больших температурных диапазонов, в то время как термисторы, как правило, достичь более высокой точности в ограниченном диапазоне температур.
(Wikipedia: resistance thermometer).

Есть ли у РДТ имеют никаких преимуществ или недостатков 3D печати по сравнению с термисторов или термопар? ‘

Объяснение программы для Arduino

Полный текст программы приведен в конце статьи, здесь же рассмотрим его наиболее важные фрагменты.

Для выполнения математических операций мы в программе должны подключить библиотеку “#include <math.h>”, а для работы с ЖК дисплеем – библиотеку “#include <LiquidCrystal.h>». Также мы должны инициализировать контакт, к которому подключено реле — “#define RELAY 8”. Также плате Arduino необходимо сообщить контакты, к которым подключен ЖК дисплей.

Arduino

#include <math.h>
#include «LiquidCrystal.h»
#define RELAY 8
LiquidCrystal lcd(6,7,5,4,3,2); // сообщаем плате Arduino контакты, к которым подключен ЖК дисплей, в формате LCD(Rs, EN, D4, D5, D6, D7)

1
2
3
4

#include <math.h>
#include «LiquidCrystal.h»
#define RELAY 8  

LiquidCrystallcd(6,7,5,4,3,2);// сообщаем плате Arduino контакты, к которым подключен ЖК дисплей, в формате LCD(Rs, EN, D4, D5, D6, D7)

Также в функции Void setup() мы должны инициализировать ЖК дисплей и задать режим работы на вывод данных для контакта, к которому подключено реле.

Arduino

Void setup(){
lcd.begin(16,2);
lcd.clear();
pinMode(RELAY, OUTPUT);
}

1
2
3
4
5

Voidsetup(){

lcd.begin(16,2);

lcd.clear();

pinMode(RELAY,OUTPUT);

}

Для расчета температуры с помощью уравнения Стейнхарта-Харта мы должны в программе выполнить ряд математических расчетов, описанных ранее в статье.

Arduino

float a = 1.009249522e-03, b = 2.378405444e-04, c = 2.019202697e-07;
float T, logRt, Tf, Tc;
float Thermistor(int Vo) {
logRt = log(10000.0*((1024.0/Vo-1)));
T = (1.0 / (a + b*logRt + c* logRt * logRt * logRt)); // рассчитываем температуру в кельвинах с помощью уравнения Stein-Hart
Tc = T — 273.15; // преобразуем кельвины в градусы Цельсия
Tf = (Tc * 1.8) + 32.0; // преобразуем кельвины в градусы по шкале Фаренгейта
return T;
}

1
2
3
4
5
6
7
8
9

floata=1.009249522e-03,b=2.378405444e-04,c=2.019202697e-07;

floatT,logRt,Tf,Tc;

floatThermistor(intVo){

logRt=log(10000.0*((1024.0Vo-1)));

T=(1.0(a+b*logRt+c*logRt*logRt*logRt));// рассчитываем температуру в кельвинах с помощью уравнения Stein-Hart

Tc=T-273.15;// преобразуем кельвины в градусы Цельсия

Tf=(Tc*1.8)+32.0;// преобразуем кельвины в градусы по шкале Фаренгейта

returnT;

}

В следующем участке кода мы считываем падение напряжения на терморезисторе и печатаем его на экране ЖК дисплея.

Arduino

lcd.print((Thermistor(analogRead(0))));

1 lcd.print((Thermistor(analogRead())));

Также мы запрограммируем функцию, которая вычисляет температуру исходя из падения напряжения на терморезисторе.

Arduino

float Thermistor(int Vo)

1 floatThermistor(intVo)

Также мы должны запрограммировать условия для включения и выключения лампы в соответствии со значениями температуры. Если температура увеличивается более 28 градусов мы будем включать лампу подавая на контакт 8 (к нему подключено реле) напряжение высокого уровня, а когда температура падает ниже 28 градусов, мы будем выключать лампу.

Arduino

if (Tc > 28) digitalWrite(RELAY, HIGH),lcd.setCursor(0,1),lcd.print(«Light status:ON «),delay(500);
else if (Tc < 28) digitalWrite(RELAY, LOW),lcd.setCursor(0,1),lcd.print(«Light status:OFF»),delay(500);

1
2

if(Tc>28)digitalWrite(RELAY,HIGH),lcd.setCursor(,1),lcd.print(«Light status:ON «),delay(500);

elseif(Tc<28)digitalWrite(RELAY,LOW),lcd.setCursor(,1),lcd.print(«Light status:OFF»),delay(500);

Что такое термистор? Подключение термистора к Ардуино.

Здравствуйте, уважаемые читатели! Сегодня поговорим об одном из самых простых датчиков температуры — термисторе.

Термистор — это переменный резистор, чье сопротивление меняется в зависимости от окружающей температуры. В каком-то виде, термистор очень схож с фоторезистором, чье сопротивление меняется в зависимости от степени освещенности. Более того, далее будет видно, что и схема подключения термистора к Ардуино и другими микроконтроллерам, аналогична схеме подключения фоторезистора. Нюансы есть в программной обработке получаемого значения, о чем мы поговорим далее.

Термистор не может похвастаться большой точностью измерения температуры. Но его неоспоримым плюсом является низкая стоимость и малый размер . Он подойдет там, где точность ±2 ºC для нас не критична. Например, для срабатывания активной системы охлаждения при проектировании готовых приборов (об этом будет далее, когда мы перейдем к созданию корпусов для различных устройств), систем проветривания для выращивания растений и т.д.

Характеристики модуля KY-001.

Модуль датчика температуры KY-001 состоит из цифрового датчика температуры DS18B20, светодиода и резистора. Модуль совместим с популярными электронными платформами, такими как Arduino, Raspberry Pi и Esp8266.

  • Собран на цифровом сенсоре DS18B20, напряжение питания от 3.0 V до 5.5 V.
  • Измеряемая температура -55 ° C до +125 ° C, по Фаренгейту — 67 ° F до 257 ° F.
  • В диапазоне от -10 °C до +85 ° C точность измерения ± 0.5 ° C.
  • Время измерения не более 750 миллисекунд.

Каждый DS18B20 имеет уникальный номер, что позволяет подключить к одной шине большое количество датчиков.

Схема подключения модуля KY-001 (DS18B20) к Arduino.

Схема подключения модуля KY-001 (DS18B20) к Arduino NANO.

Схема подключения модуля KY-001 (DS18B20) к Arduino.

Подключите линию питания (посередине) c к +5 Arduino, землю (-) и GND соответственно. Подключите сигнал (S) к контакту 2 на Arduino.

Подключение (слева направо)

  • GND
  • +5V
  • S — Signal, в примере подключаем ко 2 выводу arduino

Скетч вывода температуры с модуля KY-001 (DS18B20) в монитор порта.

Код ниже будет выводить показания температуры с модуля KY-001 (DS18B20) в монитор последовательного порта каждую секунду.

#include <OneWire.h>
OneWire ds(2);
void setup() {
    Serial.begin(9600);
}
void loop() {
    byte i;
    byte data;
    byte addr;
    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 = ds.read();
    }
    int16_t raw = (data << 8) | data;
    // датчик может быть настроен на разную точность, выясняем её 
    byte cfg = (data & 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("t=");
    Serial.println(celsius);
}

Вот такой результат мы увидим в мониторе порта.

Данный пример достаточно сложный для понимания. Для упрощения работы с датчиком лучше использовать библиотеку DallasTemperature.h. Данная библиотека ставится поверх OneWire.h, т.е. для ее работы должна быть установлена библиотека OneWire.

С библиотекой DallasTemperature устанавливаются примеры. Вы можете воспользоваться любым из них.

Мы рассмотрим более простотой пример, который я взял из библиотеки, и немного его упростил.

#include <OneWire.h>
#include <DallasTemperature.h>
// контакт 2 на Arduino:
#define ONE_WIRE_BUS 2
// создаем экземпляр класса OneWire, чтобы с его помощью
// общаться с однопроводным устройством
OneWire oneWire(ONE_WIRE_BUS);
// передаем объект oneWire объекту sensors:
DallasTemperature sensors(&oneWire);
void setup(void)
{
  Serial.begin(9600);
  // запускаем библиотеку:
  sensors.begin();
}
void loop(void){
  // вызываем функцию sensors.requestTemperatures(),
  // которая приказывает всем устройствам, подключенным к шине
  sensors.requestTemperatures();
  Serial.print("Celsius temperature: ");
  //  в Цельсиях:
  Serial.print(sensors.getTempCByIndex(0));
  Serial.print(" - Fahrenheit temperature: ");
  //  в Фаренгейтах:
  Serial.println(sensors.getTempFByIndex(0));
  delay(1000);
}

В данном примере температура выводится 1 раз в секунду, и при этом выводится температура в Цельсиях и Фаренгейтах в монитор последовательного порта.

Как видите, данный пример намного меньше и более понятен для новичка.

KY-001датчик температуры DS18B20 к ArduinoKY-001

Купить модуль KY-001 можно тут:

Описание всех датчиков из набора «37 in 1 Sensors Kit for Arduino» вы можете посмотреть на странице описания данного набора модулей для Arduino.

Понравился Урок KY-001 модуль температуры на базе DS18B20. Подключение Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу , в группу на .

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Скачивая материал, я соглашаюсь с
Правилами скачивания и использования материалов.

Модуль KY-001 датчика температуры DS18B20.pdf 82 Kb 39 Скачать
Скетч вывода температуры с модуля KY-001 .ino 1 Kb 39 Скачать
Код с использованием бмблиотеки DallasTemperature.h.ino 1 Kb 40 Скачать
Библиотека DallasTemperature .zip 31 Kb 47 Скачать

Подключение датчика температуры

Несмотря на то, что функция измерения температуры входит во многие датчики, лучше использовать отдельный специализированный датчик. Например, DS18B20. Это интегральный датчик, имеющий цифровой последовательный интерфейс.

Его сильные стороны:

  • предварительная заводская калибровка;
  • погрешность менее 0,5°С;
  • программно задаваемая разрешающая способность в 0,0625°С при 12-и битном разрешении;
  • чрезвычайно большой диапазон измеряемых температур: от -55°С до +125°С;
  • в датчике имеется встроенный АЦП;
  • в одну линию связи могут быть включены несколько датчиков.

Корпус ТО-92 — самый распространённый для этих датчиков. Приняты две основные схемы подключения температурного датчика DS18B20 к микропроцессору или контроллеру:

  1. Схема питания извне. Или при помощи внешнего источника.
  2. Схема так называемого «паразитного питания». Датчик подключается только двумя проводами. Это имеет значение при размещении датчика на больших расстояниях.

При работе с температурой выше 100°С, схему с паразитным питанием использовать нельзя ввиду большой погрешности измерений.

Для работы с датчиком необходимо его проинициализировать. Далее следуют запись байта и чтение байта.

Эти три операции демонстрируют работу с датчиком и библиотека OneWire прекрасно их поддерживает. Устанавливаем библиотеку OneWire Library. После этого грузим скетч — и программная среда готова.

Возможно подключение нескольких датчиков DS18B20 — в этом случае их требуется подключать параллельно. Библиотека OneWire позволит считывать показания сразу со всех одновременно. При одновременном большом количеством подключений датчиков необходимо добавлять дополнительно резисторы на 100 или 120 Ом между ножкой data датчика DS18B20 и шиной data на Ардуино.

Возможные следующие шаги

Всё в данной статье показывает довольно простой способ измерения температуры с помощью дешевого термистора. Есть еще пара способов улучшить схему:

  • добавить небольшой конденсатор параллельно выходу делителя. Это стабилизирует напряжение и может даже устранить необходимость усреднения большого количества выборок (как было сделано в коде) – или, по крайней мере, мы сможете усреднять меньшее количество выборок;
  • использовать прецизионные резисторы (допуск меньше 1%), чтобы получить более предсказуемые измерения. Если вам критична точность измерений, имейте в виду, что самонагревание термистора может повлиять на измерения; в данной статье самонагрев не компенсируется.

Конечно, термисторы – это только один из датчиков, используемых для измерения температуры. Другой популярный выбор – это микросхемы датчиков (пример работы с одной из них описан здесь). В этом случае вам не придется иметь дело с линеаризацией и сложными уравнениями. Два других варианта – это термопара и инфракрасный тип датчика; последний может измерять температуру без физического контакта, но он уже не так дешев.

Измерение температуры с помощью термистора NTCИзмерение температуры с помощью термистора NTC

Надеюсь, статья оказалась полезной. Оставляйте комментарии!

Реле (Relay)

Реле представляет собой электромагнитный переключатель, который управляется слабым током, а может включать и выключать значительно большие токи. Реле хорошо подходят для управления устройвами, питающимися от сети переменного тока, с помощью маломощных устройств постоянного тока.

Мы в нашем проекте будем использовать реле типа SPDT (Single Pole Double Throw — однополюсное на два направления), которое имеет 5 контактов как показано на следующем рисунке.

Когда к катушке реле не приложено никакого напряжения общий провод реле COM соединен с контактом NC (normally closed contact – нормально замкнутым контактом). Когда же к катушке реле будет приложено управляющее напряжение, то оно переключит рычаг (якорь) реле и тогда контакт COM будет уже соединен с контактом NO (normally open contact – нормально разомкнутым контактом), что позволит сравнительно большому току протекать через эти контакты. Реле изготавливаются на различные номиналы напряжения, мы в нашем проекте использовали реле на 5 В, которое позволяет коммутировать переменный ток 7A-250VAC.

Внешний вид реле показан на следующем рисунке. Реле сравнительно просто можно купить в любом магазине электронных деталей.

Внутренняя схема соединений реле показана на рисунке ниже и она содержит в своем составе транзистор, диод и резистор.

Измерение сопротивления с помощью Arduino

Теперь, когда мы выбрали метод построения кривой, мы должны выяснить, как реально измерить сопротивление с помощью Arduino, прежде чем мы сможем передать информацию о сопротивлении в β-уравнение. Мы можем сделать это используя делитель напряжения:

Делитель напряжения для измерения сопротивления термистора

Это будет наша схема взаимодействия с термистором. Когда термистор определит изменение температуры, это отразится на выходном напряжении.

Теперь, как обычно, мы используем формулу для делителя напряжения.

\

Но нам неинтересно выходное напряжение Vвыход, нас интересует сопротивление термистора Rтермистор. Поэтому мы выразим его:

\

Это намного лучше, но нам необходимо измерить наше выходное напряжение, а также напряжение питания. Так как мы используем встроенный АЦП Arduino, то можем представить напряжение, как числовое значение на определенной шкале. Итак, конечный вид нашего уравнения показан ниже:

\

Это работает потому, что не имеет значения, как мы представляем напряжение (в вольтах или в цифровых единицах), эти единицы сокращаются в числителе и знаменателе дроби, оставляя безразмерное значение. Затем мы умножаем его на сопротивление, чтобы получить результат в омах.

Dmax у нас будет равно 1023, так как это самое большое число, которое может выдать наш 10-разрядный АЦП. Dизмеренное – это измеренное значение аналого-цифровым преобразователем, которое может быть в диапазоне от нуля до 1023.

Всё! Теперь можно приступить к сборке!

Простой термометр на Arduino

В этом примере программы для Arduino показано как можно быстро создать термометр с использованием датчика температуры. Текущее значение температуры будет отображаться в серийном мониторе в градусах по Цельсию и по Фаренгейту.

//TMP36 переменные

int sensorPin = 0; //аналоговый пин, к которому подключен датчик температуры TMP36 //разрешающая способность равна 10 мВ/градус по Цельсию

//с отступом 500 мВ для отрицательных температур

/*

* setup() – эта функция отрабатывает один раз при запуске Arduino

* Инициализация серийного протокола связи с компьютером

*/

void setup()

{

Serial.begin(9600); //Начало обмена данными с компьютером по серийному протоколу,

// чтобы отобразить результат измерений в серийном мониторе

}

void loop() // запускается вновь и вновь

{

//получаем значения напряжения с датчика температуры

int reading = analogRead(sensorPin);

// преобразовываем полученные данные в напряжение. Если используем Arduino 3.3 В, то меняем константу на 3.3

float voltage = reading * 5.0;

voltage /= 1024.0;

// отображаем напряжение

Serial.print(voltage); Serial.println(» volts»);

// теперь отображаем температуру

float temperatureC = (voltage — 0.5) * 100 ; //конвертируем 10 мВ на градус с учетом отступа 500 мВ

//в градусы ((напряжение – 500 мВ) умноженное на 100)

Serial.print(temperatureC); Serial.println(» degrees C»);

// преобразуем в градусы по Фаренгейту

float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;

Serial.print(temperatureF); Serial.println(» degrees F»);

delay(1000); //ожидаем 1 секунду

}

Характеристика NTC термистора

Термисторы характеризуются рядом параметров, такими, как максимальный допустимый ток, точность, сопротивление при определённой температуре (как правило, при 25°С). Одним из параметров, характеризующим степень изменения сопротивления в зависимости от температуры является коэффициент температурной чувствительности, обозначаемый B. Этот коэффициент рассчитывается на основе значений сопротивления при двух конкретных значениях температур. Во многих случаях этими температурами выбираются 25°С и 100°С. Обычно температуры, использованные при вычислении коэффициента указываются после буквы, например B25/100. Коэффициент B измеряется в Кельвинах и вычисляется по следующей формуле:


B = (ln(R1) – ln(R2)) / (1 / T1 — 1 / T2) ,

где R1 и R2 — значения сопротивлений при температурах соответственно T1 и T2, выраженных в Кельвинах.

Из этой формулы следуют и обратные:


R1 = R2 * e(B * (1 / T1 — 1 / T2)) .

и


T1 = 1 / ((ln(R1) – ln(R2)) / B + 1 / T2) .

Code for LCD Output of Temperature Readings

To output the temperature readings to a 16X2 LCD, follow our tutorial, How to Set Up an LCD Display on an Arduino, then upload this code to the board:

Here’s a video of the temperature sensor so you can watch me set it up and see how it works:

Make an Arduino Temperature Sensor (Thermistor Tutorial)Make an Arduino Temperature Sensor (Thermistor Tutorial)

Well, that’s about it. Just leave a comment below if you have any questions about this project. And if you like our articles here at Circuit Basics, subscribe and we’ll let you know when we publish new articles. Also, feel free to share this if you know anyone that would find it helpful!

JLCPCB — Only $2 for PCB Prototype (Any Color)
Great Quality Approved by 600,000+ Customers, 10,000+ PCB Orders Per Day. Sign Up & Get at Least Two $5 Coupons Now: https://jlcpcb.com/quote

Подключение термистора к Ардуино

Чтобы измерить сопротивление термистора, подключим его в качестве
нижнего плеча делителя напряжения. Среднюю же точку делителя подключим к
аналоговому входу Ардуино — A0.

Чтобы измерить сопротивление термистора, подключим его в качестве нижнего плеча делителя напряжения. Среднюю же точку делителя подключим к аналоговому входу Ардуино — A0. 

Принципиальная схема

Внешний вид макета

Какое сопротивление должен иметь резистор в верхнем плече делителя?
Как правило, используют резистор с сопротивлением, совпадающим по
порядку с номиналом термистора. В нашем уроке мы используем резистор на
R1 = 102 кОм, его легко получить последовательным соединением двух
резисторов на 51 кОм.

Определение типа термистора и его номинального сопротивления

Существует два типа термисторов:

1. С положительным температурным коэффициентом (PTC) , когда сопротивление возрастает с повышением температуры.

2. С отрицательным температурным коэффициентом (NTC) , когда сопротивление уменьшается при повышении температуры.

Определить тип термистора очень просто. Достаточно взять мультиметр , выбрать на нем режим измерения сопротивления и соединить зажимы мультиметра с ножками термистора.

Далее зажимаем пальцами сам термистор, и если сопротивление падает, то наш термистор с отрицательным температурным коэффициентом, а если растет, то с положительным температурным коэффициентом.

Таким же образом мы можем определить номинальное значение сопротивление термистора . Это будет значение сопротивления при температуре 25 ºC.

В нашем случае, один из наиболее распространенных типов термисторов, с отрицательным температурным коэффициентом (NTC), номиналом 10 кОм .

Wemos D1 min и MAX6675K

MAX6675K Wemos D1 Mini
Vcc 3.3v (я использовал БП)
Gnd Gnd (от БП и Wemos D1 mini)
SO D6 (GPIO12)
SS/CS D7 (GPIO13)
CSK D8 (GPIO15)

Земля (GND) MAX6675 и (GND) Wemos D1 Mini должны быть соединена, если MAX6675 запитывается от отдельного источника питания.

Интерфейс SPI использует 4 линии для обмена данными:

  • SCLK — Serial Clock: тактовый сигнал (от ведущего)Другие обозначения: SCK, CLK
  • MOSI — Master Output, Slave Input: данные от ведущего к ведомомуДругие обозначения: SDI, DI, SI
  • MISO — Master Input, Slave Output: данные от ведомого к ведущемуДругие обозначения: SDO, DO, SO
  • SS — Slave Select: выбор ведомого; устанавливается ведущимДругие обозначения: nCS, CS, CSB, CSN, nSS, STE

Для снятия данных с термопары платой MAX6675 используется библиотека https://github.com/YuriiSalimov/MAX6675_Thermocouple. Она основана на более старой библиотекеAdafruit Max6675 Library

#include "MAX6675_Thermocouple.h" //https://github.com/YuriiSalimov/MAX6675_Thermocouple

#define SCK_PIN 15 //D8
#define CS_PIN 13 //D7
#define SO_PIN 12 //D6

/**
   How many readings are taken to determine a mean temperature.
   The more values, the longer a calibration is performed,
   but the readings will be more accurate.
*/
#define READINGS_NUMBER 20

/**
   Delay time between a temperature readings
   from the temperature sensor (ms).
*/
#define DELAY_TIME 20


MAX6675_Thermocouple* thermocouple = NULL;
 
void setup()
{
 Serial.begin(9600);

 thermocouple = new MAX6675_Thermocouple(SCK_PIN, CS_PIN, SO_PIN, READINGS_NUMBER, DELAY_TIME);
}
 
void loop()
{
  const double celsius = thermocouple->readCelsius();
  const double kelvin = thermocouple->readKelvin();
  const double fahrenheit = thermocouple->readFahrenheit();
  Serial.print("Temperature: ");
  Serial.print(String(celsius) + " C, ");
  Serial.print(String(kelvin) + " K, ");
  Serial.println(String(fahrenheit) + " F");
  delay(500);
}

Результат работы программы:

19:14:01.820 -> Temperature: 28.50 C, 301.65 K, 83.30 F
19:14:05.538 -> Temperature: 28.75 C, 301.90 K, 83.75 F
19:14:09.278 -> Temperature: 28.50 C, 301.65 K, 83.30 F
19:14:13.025 -> Temperature: 28.50 C, 301.65 K, 83.30 F
19:14:16.730 -> Temperature: 28.75 C, 301.90 K, 83.75 F

Сенсоры надо калибровать, поскольку температура в комнате была не 28,5 оС, а ниже.

Скетч для Ардуино

Ниже вы можете скопировать и загрузить код в свою Ардуино Уно.

#include "DHT.h" 
#include "LiquidCrystal.h"
LiquidCrystal lcd(7, 8, 9, 10, 11 ,12);
#define DHTPIN 6 
#define DHTTYPE DHT22  
DHT sensor(DHTPIN, DHTTYPE); 
int relay_pin = 9;

void setup() { 
lcd.begin(16,2); 
sensor.begin(); 
pinMode(relay_pin, OUTPUT);
digitalWrite(relay_pin, HIGH);
}
void loop() { 
lcd.clear();
float t = sensor.readTemperature(); //считывание температуры с датчика
// Проверка, посылает ли датчик значения или нет
if (isnan(t)) {
lcd.print("Failed");
delay(1000);
return;
}
lcd.setCursor(0,0); 
lcd.print("Temp: ");
lcd.print(t);
lcd.print(" C");
if (t > 35){
  digitalWrite(relay_pin, LOW);
  lcd.setCursor(0,1); 
  lcd.print("Fan is ON "); 
  delay(10);
}
else{
  digitalWrite(relay_pin, HIGH);
  lcd.setCursor(0,1); 
  lcd.print("Fan is OFF "); 
}
delay(2000);
}

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

Прежде всего, мы включили библиотеки для датчика DHT22 и для ЖК-дисплея. Библиотеки помогут сделать код более простым.

Скачать все необходимые библиотеки для своих проектов вы можете на нашем сайте в разделе — Библиотеки.

#include "DHT.h"
#include "LiquidCrystal.h"

Затем мы инициализировали контакты к которым мы подключили ЖК-дисплей и датчик DHT22. После этого мы определили тип датчика DHT, который используется

Существует множество других типов датчиков DHT, таких как DHT11, поэтому здесь важно определить тип

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

#define DHTPIN 8

#define DHTTYPE DHT22
DHT sensor(DHTPIN, DHTTYPE);

В функции настройки мы дали команду DHT22 и LCD, чтобы начать общение с Arduino. Затем мы объявили контакт реле как выходной вывод, потому что мы дадим напряжение от Ардуино к реле для активации реле. Реле работает обратно (High означает Low для реле).

lcd.begin(16,2);
sensor.begin();

pinMode(relay_pin, OUTPUT);
digitalWrite(relay_pin, HIGH);

В функции цикла мы очищаем ЖК-экран, а затем считываем значение температуры от датчика.

lcd.clear();
float t = sensor.readTemperature();

if (isnan(t)) {
lcd.print("Failed");
delay(1000);
return;
}

Затем мы печатаем значение температуры на ЖК-дисплее, и если значение температуры будет больше 35, тогда реле будет активировано, и вентилятор начнет вращаться.

lcd.setCursor(0,0);
lcd.print("Temp: ");
lcd.print(t);
lcd.print(" C");

if (t > 35){
digitalWrite(relay_pin, LOW);
lcd.setCursor(0,1);
lcd.print("Fan is ON ");
delay(10);
}

На этом всё. Хороших вам проектов!

Подключение датчика DS18B20 к Arduino

Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
► Датчик температуры DS18b20+ x 2 шт.
► Резистор 4.7 кОм x 1 шт.
► Макетная плата MB-102 (Breadboard) x 1 шт.

Подключение:
Для подключения датчика DS18b20 к Arduino UNO, будем использовать макетную плату BreadBoard, принципиальную схему можно посмотреть на рисунке ниже. Установим датчик в макетную плату BreadBoard, как показано на рисунке, между ногой DQ и VDD необходимо установить резистор на 4,7 кОм, а ногу VDD подключить в выводам +5V (Arduino) и ногу GND к выводу GND (Arduino), ногу DQ необходимо подключить к выводу 2 (Arduino) (в этом примере использую pin 2), схема собрана.

Для этого эксперимента необходимо скачать и установить библиотеку «DallasTemperature v.3.4» и «OneWire v.2.2» (скачать их можно в конце статьи). Далее, запускаем среду программирования IDE Arduino, копируем пример кода в в окно программы и загружаем в контроллер.

/*
Тестирование производилось на Arduino IDE 1.6.11
Дата тестирования 12.11.2016г.
*/

#include <OneWire.h> // Подключаем библиотеку OneWire
#include <DallasTemperature.h> // Подключаем библиотеку DallasTempature

#define ONE_WIRE_BUS 2 // Указываем, к какому выводу подключена DQ

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup(void)
{
Serial.begin(9600); // Задаем скорость передачи данных
sensors.begin(); // Запуск библиотеки, по умолчанию 9 бит
}

void loop(void)
{
Serial.print(» Запрос температуры…»);
sensors.requestTemperatures(); // Запрос на считывание температуры
Serial.println(«Считано»);
Serial.print(» Температура датчика 1: «);
Serial.print(sensors.getTempCByIndex(0)); // Отображение температуры датчика 1
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

/*
Тестирование производилось на Arduino IDE 1.6.11
Дата тестирования 12.11.2016г.

*/

 
 
#include <OneWire.h>                        // Подключаем библиотеку OneWire
#include <DallasTemperature.h>              // Подключаем библиотеку DallasTempature
 
#define ONE_WIRE_BUS 2                      // Указываем, к какому выводу подключена DQ
 

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

voidsetup(void)

{

Serial.begin(9600);// Задаем скорость передачи данных

sensors.begin();// Запуск библиотеки, по умолчанию 9 бит

}

voidloop(void)

{

Serial.print(» Запрос температуры…»);

sensors.requestTemperatures();// Запрос на считывание температуры

Serial.println(«Считано»);

Serial.print(» Температура датчика 1: «);

Serial.print(sensors.getTempCByIndex());// Отображение температуры датчика 1

}

Далее, открываем мониторинг порта, котором увидим показания температура с датчика.

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий