Подключение термопары к Ардуино: особенности, схема, скетч

Термопара — это один из видов датчиков для измерения температуры.

В отличие от полупроводниковых датчиков температуры вроде TMP36, внутри термопары нет электроники. Они представляют из себя просто два переплетенных провода.

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

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

Например, датчик температуры TMP36 может работать в диапазоне от -50 до 150°C. Обычные термопары работают в диапазоне от -200°C до 1350°C (тип K)! А некоторые типы термопар работают с температурами вплоть до 2300°C!

Термопары часто используются в системах отопления, вентиляции и кондиционирования: обогревателях, бойлерах, печах, и т.д. и т.п. В этой статье мы остановимся на термопарах типа K (один из самых распространенных типов термопар, который очень легко подключается).

Основная сложность при использовании термопар — это очень маленькие значения напряжения, которые снимаются с сенсора — около 50 мкВ на 1 °C (мкВ это 1/1000000 вольт).

В принципе, с использованием стабильного источника питания, можно считать значения с термопары, но! У вас возникнут некоторые трудности из-за нелинейной зависимости сигнала (не всегда 50 мкВ соответствуют 1°C) и необходимости вводить коррекцию для низких температур.

Поэтому настоятельно рекомендуется скинуть всю это «грязную работу» на отдельный чип. В этой статье мы рассмотрим работу с термопарой с использованием чипа MAX6675.

При работе с этим чипом вам не понадобится проводить дополнительное аналогово-цифровое преобразование сигнала с термопары. На выходе с чипа мы будем получать качественный цифровой сигнал показаний температуры.

Подключение термопары к Ардуино: особенности, схема, скетч

Основные технические характеристики

Это технические характеристики термопары типа K из магазина Adafruit:

  • Размер: длина — 1 метр (если необходимо, можно обрезать);
  • Стоимость в магазине Adafruit: около $10 (Китайские аналоги — Aliexpress или eBay -предлагают цену раза в два меньше — до 5 долларов);
  • Диапазон измеряемых температур: от-100°C до 500°C / от -150 до 900°;
  • Диапазон напряжения на выходе: от -6 до +20 мВ;
  • Точность измерений: +-2°C;
  • Нужен преобразователь вроде MAX31855;
  • Даташит термопары типа K;
  • Даташит MAX6675;
  • Даташит MAX31855.

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

Как мы уже писали выше, измерять напряжение непосредственно с термопары — непростая задача. Так что настоятельно рекомендуется использовать дополнительный чип. Один самых лучших вариантов — интерфейсная плата на базе чипа MAX6675 (или его новая версия — MAX31855).

Для начала надо определиться с кабелями термопары. Как вы помните, термопара изготавливаются с помощью сварки двух проводов. Чип считывает разницу в напряжениях между ними. Один — отрицательный (в типе K он изготавливается из алюмеля), а второй — положительный (то же, хромель). К счастью, провода имеют определенный цвет. В большинстве случаев алюмель красный, а хромель — желтый.

Подключите провода термопары к вашей интерфейсной плате:

Платы MAX6675 и MAX31855 не совместимы с термопарами, которым необходимо заземление.

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

Подключение термопары к Ардуино: особенности, схема, скетч

Использование термопары

Если вы используете интерфейсный чип AD595, можно просто подключить выходное напряжение к аналоговому входу на вашем Arduino (или другом микроконтроллере) и произвести дополнительную математическую операцию, чтобы преобразовать ваши 10 мВ/°C в числовое значение на выходе.

Подключение термопары к Ардуино: особенности, схема, скетч

Если вы планируете использовать MAX6675/MAX31855 или их аналоги, подключение будет чуть сложнее. Первое: Vin и GND надо подключить к источнику питания 3-5 В. Оставшиеся три пина (data пины) подключаются к цифровым контактам Arduino:

  • CLK (clock — часы) — входа на MAX6675/MAX31855 (и выход на Arduino), который сигнализирует, когда надо передавать новый бит данных;
  • DO (data out — вывод данных) выход с MAX6675/MAX31855 (входа на Arduino), через который передается каждый бит данных;
  • CS (chip select — выбор чипа) вход на MAX6675/MAX31855 (выход с Arduino), который сообщает, когда настало время считать показания термопары и вывести больше данных.

В начале скетчей для Arduino надо инициализировать эти пины. В нашем конкретном примере DO подключается к цифровому пину digital 3 на Arduino, CS — к цифровому пину digital 4, а CLK подключается к пину 5.

Подключение термопары к Ардуино: особенности, схема, скетч

Если вы используете MAX31855 v1.0 в зашумленных условиях, рекомендуется добавить конденсатор на 0.01 мкФ между контактами термопары (смотрите на рисунке выше).

MAX31855 не поддерживает заземленные термопары. Если сенсор заземляется, чип вернет вам ошибку.

Библиотека Arduino

Если у вас старая версия платы — MAX6675, скачать библиотеку для работы с Arduino можно здесь. После скачивания, распакуйте архив, переименуйте его в MAX6675 и установите в папку с вашими библиотеками для Arduino. Если вы впервые устанавливаете дополнительную библиотеку, рекомендуем ознакомиться с комплексным гайдом по установке дополнительных библиотек для Arduino.

Если более новая версия — MAX31855, скачать библиотеку можно здесь. После скачивания разархивируйте и переименуйте папку в Adafruit_MAX31855 и скопируйте в папку с вашими библиотеками.

Перезагрузите Arduino IDE, откройте скетч, который находится в File->Examples->MAX6675/Adafruit_MAX31855->serialthermocouple и загрузите его на ваш Arduino. После загрузки скетча на плату, откройте окно серийного монитора, в котором должен отображаться вектор-столбец текущей температуры в градусах по Цельсию и в градусах по Фаренгейту.

Подключение термопары к Ардуино: особенности, схема, скетч

Как видите, пользоваться этой библиотекой очень просто. Для отображения температуры в градусах по Цельсию и по Фаренгейту используются функции readCelsius() и readFahrenheit() соответственно.

Добавляем внешний дисплей

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

Подключение термопары к Ардуино: особенности, схема, скетч

В нашем случае SCL подключается к цифровому контакту digital 3, CS к цифровому пину digital 4, а DO — к цифровому пину digital 5. После того, как вы простестируете работоспособность, можете смело заменить пины (только не забудьте изменить соответствующие значения в скетче!).

Для подобной схемы в библиотеке предусмотрен пример. Его можно загрузить на Arduino из меню File->Examples->MAX31855>lcdthermocouple. Термопара с дополнительной интерфейсной платой подключается так же как это было описано выше. В результате вы получите значения температуры в градусах по Цельсию и в градусах по Фаренгейту на экране как это показано выше.

Часто задаваемые вопросы

Кажется, температура, которую показывает моя термопара меняется в противоположном направлении! Я повышаю температуру, а по показаниям она уменьшается.

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

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

Платы MAX31855 очень чувствительные. Для того, чтобы исправить эту проблему, можно установить конденсатор на 0.001 или 0.01 мкФ между контактами термопары (например, установить конденсатор в терминале для подключения контактов термопары или припаять его снизу как это показано на фото ниже).

Подключение термопары к Ардуино: особенности, схема, скетч

Мне кажется, что показания с термопары не точные. У меня несколько термопар и показания с них не одинаковые.

Термопары типа K не являются прецизионными (точными) сенсорами! Отклонения в показаниях наверняка будут. Эти отклонения можно компенсировать на уровне программы для Arduino или другого микроконтроллера. Как правило, термометры, в которых используется термопара, калибруются именно на уровне программного обеспечения.

Читайте также:  Как обмануть ДМРВ: способы, стоит ли это делать

Для точного измерения температуры можно использовать 1% термистор.

Как подключать несколько термопар одновременно?

Вы можете подключить столько плат MAX31855, сколько у вас пинов на Arduino. При этом объедините пины CLK и DO со всех плат и подключите к одному пину на Arduino, а контакты CS подключайте к отдельным пинам на Arduino.

После этого создайте новые функции для термопар в скетче Arduino IDE подобным образом:

  • Adafruit_MAX31855 thermocouple1(thermoCLK, thermoCS1, thermoDO);
  • Adafruit_MAX31855 thermocouple2(thermoCLK, thermoCS2, thermoDO);
  • Adafruit_MAX31855 thermocouple3(thermoCLK, thermoCS3, thermoDO);

Можно использовать одинаковые CS и CLK пины, но разные контакты DO

  1. Adafruit_MAX31855 thermocouple1(thermoCLK, thermoCS, thermoDO1);
  2. Adafruit_MAX31855 thermocouple2(thermoCLK, thermoCS, thermoDO2);
  3. Adafruit_MAX31855 thermocouple3(thermoCLK, thermoCS, thermoDO3);

При очень высоких или очень низких температурах, измерения некорректные

Чип Maxim 31855 отлично справляется с линейными диапазонами термопар типа K, но в нем не предусмотрена коррекция нелинейности в показаниях, которая возникает в экстремумах (максимальных и минимальных значениях) измеряемого диапазона. Поэтому для этих участков необходимо предусмотреть отдельный алгоритм сглаживания. Скетчи, которые предлагаются для решения данный проблемы можно найти на форуме Adafruit можно найти здесь.

Примеры проектов с использованием термопары

Вам нужны идеи? Зацените эти проекты!

Термопара, подключенная к ATmega168 меняет цвет RGB светодиода при изменении температуры:

Автомат для обжарки кофейных зерен (сайт на английском языке):

Подключение термопары к Ардуино: особенности, схема, скетч

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

Подключение термопары К-типа к Arduino используя модуль на MAX6675

разделы: Arduino , MAX6675 , дата: 3 сентября 2015г

Подключение термопары к Ардуино: особенности, схема, скетч

Подключение термопары К-типа(далее просто термопары) к Arduino довольно тривиально, но чтобы не было путаницы, решил написать краткий мануалЪ.

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

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

Эту ЭДС возможно измерить, но она настолько маленькая, что так просто ее на вход микроконтроллера не подашь. На помощь приходит ИС от фирмы Maxim — MAX6675. Она измеряет ЭДС термопары и через SPI интерфейс выдает в виде готового числа.

Документацию на микросхему можно найти например здесь: https://www.sparkfun.com/datasheets/IC/MAX6675.pdf

Документация содержит всего 8 страниц, предлагаю пробежаться глазами по основным моментам:

Подключение термопары к Ардуино: особенности, схема, скетч

Напряжение питания может быть 3 или 5 вольта, я подключал через 3.3В, ничего, работало. Из интересного, заявлена защита от электростатики (ESD Protection) на два киловольта, т.е. щуп вполне можно трогать руками не опасаясь убить микросхему.

Подключение термопары к Ардуино: особенности, схема, скетч

Устройство микросхемы. Видно, что входная ЭДС поступает на предварительный операционный усилитель, затем на основной, после чего сигнал идет на АЦП. Как бы все логично.

Подключение термопары к Ардуино: особенности, схема, скетч

Формат, передачи данных. Видно что данные передаются пакетом по 16 бит. SPI интерфейс работает в одну сторону, т.о. получается, что задействовано три цифровые линии: SCK для тактирования, SC для управления, SO на передачу.

Для Arduino есть готовая библиотека для работы c MAX6675: https://github.com/adafruit/MAX6675-library

Установив ее и загрузив из примеров serialthermocouple, в начале скетча увидим предлагаемое подключение к цифровым пин'ам Arduino.

#include «max6675.h»

int thermoDO = 4;
int thermoCS = 5;
int thermoCLK = 6;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
int vccPin = 3;
int gndPin = 2;

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

SCK 6 пин
CS 5 пин
SO 4 пин

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

Подключение термопары к Ардуино: особенности, схема, скетч

Здесь я закомментировал работу пинов питания. Еще должен заметить, что температуру показывает завышенную. Тут или ошибка в софте или пресловутая китайская промышленность внесла свои поправки 😉

поделиться:

Урок 27. Термопары в системе Ардуино. Проект Ардуино термометра-регистратора для высоких температур

Подключение термопары к Ардуино: особенности, схема, скетч

Серия статей об измерении температуры контроллерами Ардуино была бы неполной, без рассказа о термопарах. Тем более что измерять высокие температуры больше нечем.

Предыдущий урок     Список уроков     Следующий урок

Термопары (термоэлектрические преобразователи).

Все термодатчики из предыдущих уроков позволяли измерять температуру в диапазоне не шире – 55 … + 150 °C. Для измерения более высоких температур самыми распространенными датчиками являются термопары. Они:

  • имеют крайне широкий диапазон измерения температуры -250 … +2500 °C;
  • могут быть откалиброваны на высокую точность измерения, до погрешности не более 0,01 °C;
  • как правило, имеют низкую цену;
  • считаются надежными датчиками температуры.

Главный недостаток термопар – это необходимость в достаточно сложном прецизионном измерителе, который должен обеспечивать:

  • измерение низких значений термо-ЭДС с верхним значением диапазона десятки, а иногда и единицы мВ;
  • компенсацию термо-ЭДС холодного спая;
  • линеаризацию характеристики термопары.

Принцип действия термопар.

Принцип действия датчиков такого типа основан на термоэлектрическом эффекте (эффекте Зеебека). Поэтому другое название термопары – термоэлектрический преобразователь.

В цепи между соединенными разнородными металлами образовывается разность потенциалов. Ее величина зависит от температуры. Поэтому она называется термо-ЭДС. У разных материалов величина термо-ЭДС разная.

Подключение термопары к Ардуино: особенности, схема, скетч

Если в цепи стыки (спаи) разнородных проводников связаны в кольцо и имеют одинаковую температуру, то сумма термо-ЭДС равна нулю. Если же спаи проводов находятся при разных температурах, то общая разность потенциалов между ними зависит от разности температур. В результате мы приходим к конструкции термопары.

Подключение термопары к Ардуино: особенности, схема, скетч

Два разнородных металла 1 и 2 в одной точке образуют рабочий спай. Рабочий спай помещают в точку, температуру которой необходимо измерить.

Подключение термопары к Ардуино: особенности, схема, скетч

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

Основные типы термопар.

Наиболее широкое распространение получили термопары ХК (хромель – копель) и ХА (хромель – алюмель).

Название Обозначение НСХ Материалы Диапазон измерения, °C Чувствительность, мкВ/°C, (при температуре, °C) Термо-ЭДС, мВ, при 100 °C
ТХК (хромель-копелевые) L Хромель, копель — 200 … + 800 64 (0)
88 (600)
6,86
ТХА (хромель-алюмель) K Хромель, алюмель — 270 … +1372 35 (0)
42 (1300)
4,10
ТПР (платино-родиевые) B Платинородий, платина 100 … 1820 8 (1000)
12 (1800)
0, 03
ТВР (вольфрам-рениевые) A Вольфрам-рений, вольфрам-рений 0 … 2500 14 (1300)
7 (2500)
1,34

Как практически измерять температуру с помощью термопары. Методика измерения.

Как подключить термопару к Arduino

Часто возникает необходимость заменить приборы контроля и регулировки температур на термопластавтоматах. Здесь можно сделать многоканальный прибор на базе Arduino.

Для подключения термопары к Arduino нужен усилитель. В интернете нашел схему усилителя для термопар на микросхеме LM358, собрал и настроил для работы с термопарой ТХК от — 40 до 400 градусов. В схему добавил датчик температуры DS18B20 для компенсации температуры холодного спая. Этот датчик должен находится поблизости холодного спая.

Программировал Arduino при помощи программы FLProg. C выхода усилителя сигнал поступает на аналоговый вход Arduino. При 100 градусах напряжение на выходе усилителя получается 0,35 вольта (получил при помощи регулировок подстроичным резистром), если температура холодного спая 24 градуса.

Чтобы получить константу на каждый градус, я сделал так: 100-24=76 — это разница температуры между холодным спаем и температурой кипения воды. Напряжение 0,35 разделил на 76 и получил 0,0046. То есть на каждый градус на выходе усилителя напряжение увеличивается на 0,0046 вольта. Разрешение Arduino на входе — 1023.

То есть, если разделить входное напряжение 5 вольт на 1023, получим константу 0,00488. Программировал следующим образом: входное число умножаем на 0,00488, получаем напряжение на входе, которое делим на константу 0,0046 и получаем температуру между горячим концом термопары и холодным спаем.

Читайте также:  Датчик скорости ВАЗ 2114: где находится, признаки неисправности, как проверить, схема подключения, как снять датчик

Затем плюсуем температуру холодного спая и получаем истинную температуру. Опыты проводил кипяченой водой. Температура пара ровно 100 градусов.

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

При повторе схемы надо учитывать, что эталонное напряжение взято от питания Arduino. Если значение различается от пять вольт, то для получении константы надо делить истинное напряжение питания на 1023.

  • DS18B20 имеет свой уникальный адрес в скетче, которые нужно заменить на ваш.
  • Скачать скетч Arduino file
  • Скачать скетч (файл расширения flp устанавливается на Arduino при помощи Flprog)
  1. Схема усилителя термопары.
  2. Подключение термопары к Ардуино: особенности, схема, скетч
  3. Эффект Зеебека.
  4. Подключение термопары к Ардуино: особенности, схема, скетч
  5. Готовая плата усилителя термопары.
  6. Подключение термопары к Ардуино: особенности, схема, скетч

Оставьте комментарий:

Нормализатор сигнала термопары К-типа, max6675 (Trema-модуль)

Trema-модуль Адаптер термопары с термопарой K-типа — позволяет измерять температуру объектов и окружающей среды.

Адаптер позволяет измерять температуру в диапазоне от 0 до 800 °С (при температурах от 800 до 1023 °С точность показаний резко снижается), а корпус термопары рассчитан на температуру до 600 °C, значит и измерения необходимо производить в диапазоне от 0 до 600 °С.

Адаптер можно использовать для измерения температуры различных нагревательных элементов: паяльники, печи, камины, бойлеры и т.д. Можно использовать для реализации газ-контроля в газовых плитах, горелках, бойлерах и т.д.

Видео:

Характеристики:

  • Напряжение питания модуля (Vcc): 3,0 … 5,5 В постоянного тока.
  • Ток потребляемый модулем: до 1,5 мА.
  • Уровень логической «1» на шине модуля: > 0,7 Vcc.
  • Уровень логического «0» на шине модуля: < 0,3 Vcc.
  • Диапазон измеряемых температур чипом: 0 … 800 °C.
  • Диапазон рабочих температур термопары: 0 … 600 °С.
  • Резьба термопары 6M x 1.0 мм (для крепления нужен ключ на 10).
  • Длина кабеля термопары 0,5 м.

Подключение:

Выводы термопары подключаются к клеммнику на модуле:

  • синий контакт — термопары к выводу «T-»;
  • красный контакт — термопары к выводу «T+»;

Выводы модуля DO, CS и CSK подключаются к любым выводам Arduino, номера которых указываются в скетче при объявлении объекта библиотеки max6675.

    Модуль удобно подключать 3 способами, в зависимости от ситуации:

Способ — 1 :  Используя проводной шлейф и Piranha UNO

Используя провода «Папа — Мама», подключаем  напрямую к контроллеру Piranha UNO.

Подключение термопары к Ардуино: особенности, схема, скетч

Способ — 2 :  Используя Trema Set Shield

Модуль можно подключить к любому из цифровых или аналоговых входов Trema Set Shield.

Подключение термопары к Ардуино: особенности, схема, скетч

Способ — 3 :  Используя проводной шлейф и Shield

Используя 3-х и 2-х проводной шлейфы, к  Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.

Подключение термопары к Ардуино: особенности, схема, скетч

Питание:

Входное напряжение питания от 3,3 или 5 В подаётся на выводы Vcc и GND.

Подробнее о датчике температуры:

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

Возникающая в термопаре ЭДС очень мала и её нельзя измерить используя аналоговые входы Arduino, но с этой задачей справляется чип max6675. Сигнал с термопары сначала поступает на операционные усилители чипа, а уже потом на 12 битный АЦП, далее данные выводятся по шине SPI в виде двух байт, старшие 12 бит которых являются числом температуры.

Для преобразования 12 битного числа в °C его нужно разделить на 4, получается что температура выводится с разрешением 0,25 °C. Так как данные из чипа только читаются, без отправки данных чипу, то на его шине SPI отсутствует вывод MOSI. Немаловажным фактом является и то, что в чипе max6675 реализована функция компенсации холодного спая.

Дело в том, что ЭДС возникает не только на спае металлов термопары, но и на соединении этих металлов с проводом, что без функции компенсации холодного спая влияло-бы на показания температуры.

Для работы с чипом max6675 рекомендуем воспользоваться одноимённой библиотекой max6675, которая реализует получение данных чипа по программной шине SPI, значит, для подключения можно использовать любые выводы Arduino.

Пример:

Вывод температуры в монитор последовательного порта в градусах Цельсия и Фаренгейта

#include // Подключаем библиотеку max6675 для работы с датчиком температуры
const uint8_t thermoDO = 4; // Определяем константу с указанием № вывода Arduino к которому подключён вывод DO ( SO, MISO ) модуля на чипе MAX6675
const uint8_t thermoCS = 5; // Определяем константу с указанием № вывода Arduino к которому подключён вывод CS ( SS ) модуля на чипе MAX6675
const uint8_t thermoCLK = 6; // Определяем константу с указанием № вывода Arduino к которому подключён вывод CLK ( SCK ) модуля на чипе MAX6675
MAX6675 thermo(thermoCLK, thermoCS, thermoDO); // Объявляем объект thermo для работы с функциями и методами библиотеки max6675, указывая выводы ( CLK , CS , DO )
//
void setup(){ //
Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бит/сек
Serial.println(«Тест MAX6675»); //
delay(500); // Ждём завершения переходных процессов датчика температуры после подачи питания
} //
//
void loop(){ //
Serial.print ( «C = » ); //
Serial.print ( thermo.readCelsius() ); // Выводим температуру в °C
Serial.print ( «, F = » ); //
Serial.print ( thermo.readFahrenheit() ); // Выводим температуру в °F
Serial.println( «.» ); //
delay(1000); // Ждём 1 секунду
} //

В библиотеке max6675 реализовано всего 2 функции: readCelsius() и readFahrenheit(). Они не принимают никаких параметров, а только возвращают температуру в виде числа типа double. Обе функции приведены в строках скетча 15 и 17.

При создании объекта нужно указать номера выводов Arduino к которым подключён модуль (вывод SCK , вывод CS , вывод DO), как это сделано в 5 строке скетча.

Ссылки:

Подключение термопары (K-Type) к ESP8266/ESP32/Arduino

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

Модуль MAX6675 для подключения термопары K-Type к

микроконтроллеру по шине SPI

Недорогой модуль MAX6675 транслирует данные снятые с термопары по шине SPI. АЦП 12-ти битный. Позволяет измерять только положительные температуры от 0 до +700 оС. Детектирует обрыв термопары. Цена в районе 1,5 USD.

Модуль MAX31855 для подключения термопары K-Type к микроконтроллеру по шине SPI

Более современный и дорогой модуль MAX31855, заменивший MAX6675 также передает данные по шине SPI. Плата посерьезнее, чем MAX6675:

  • 14-ти битный АЦП,
  • Помимо определения обрыва дополнительно определяет закорачивание выхода термопары на Vcc или GND.
  • Диапазон измеряемых температур от -270 до +1768 оС (крайние диапазоны).
  • Цена около 1,9 USD с доставкой в Россию.

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

С этой платкой есть одна проблема. Винтовой разъем не позволяет закреплять клеммы термопары как это задумано разработчиками. Приходится зажимать винтами одну из половинок клеммы, но держится нормально.

На Aliexpress есть три варианта плат с MAX31855. Самая дорогая идет с обширной обвязкой. Стоит около 8 USD. Не разбирался, в чем отличие от недорогого варианта. Разве что есть отдельный вход 3V и Vin. Я использовал плату за 1,9 USD и запитывал от 3,3 V БП. В описании у китайцев сравнения дорогой платы с бюджетной не нашел.

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

Читайте также:  Датчик оборотов двигателя: назначение, виды, обслуживание и замена

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 оС, а ниже.

ESP32 DevKit и MAX6675K

В качестве ESP32 платы используется эта плата.

MAX6675K ESP32 DevKit
Vcc 3.3v (я использовал БП)
Gnd Gnd (от БП и Wemos D1 mini)
SO 12 (IO12)
SS/CS 13 (IO13)
CSK 15 (IO15)

Код без изменений работает и на ESP32.

#include «MAX6675_Thermocouple.h» //https://github.com/YuriiSalimov/MAX6675_Thermocouple

#define SCK_PIN 15
#define CS_PIN 13
#define SO_PIN 12

/**
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);
}

Результат:

21:16:42.882 -> Temperature: 26.25 C, 299.40 K, 79.25 F
21:16:46.554 -> Temperature: 26.75 C, 299.90 K, 80.15 F
21:16:50.256 -> Temperature: 26.50 C, 299.65 K, 79.70 F
21:16:53.926 -> Temperature: 26.25 C, 299.40 K, 79.25 F
21:17:30.707 -> Temperature: 26.50 C, 299.65 K, 79.70 F

Странно, но ESP32 считывает более корректную температуру, чем ESP8266. Температура в комнате как раз где-то в районе 26,5 оС.

ESP32 и MAX31855

Без проблем на ESP32 заработала библиотка от Adafruit c программной эмуляцией. GPIO использовал те-же, что и для примера с MAX6675.

#include <SPI.h>
#include «Adafruit_MAX31855.h» //https://github.com/adafruit/Adafruit-MAX31855-library/

// Default connection is using software SPI, but comment and uncomment one of
// the two examples below to switch between software SPI and hardware SPI:

// Example creating a thermocouple instance with software SPI on any three
// digital IO pins.
#define MAXDO 12
#define MAXCS 13
#define MAXCLK 15

// initialize the Thermocouple
Adafruit_MAX31855 thermocouple(MAXCLK, MAXCS, MAXDO);

// Example creating a thermocouple instance with hardware SPI
// on a given CS pin.
//#define MAXCS 10
//Adafruit_MAX31855 thermocouple(MAXCS);

void setup() {
Serial.begin(115200);

Serial.println(«MAX31855 test»); // wait for MAX chip to stabilize
delay(500);
}

void loop() {
// basic readout test, just print the current temp
Serial.print(«Temperature: «);

double c = thermocouple.readCelsius();

if (isnan(c)) {
Serial.println(«Something wrong with thermocouple!»);
} else {
Serial.print(String(c) + » C, «);
Serial.print(String(thermocouple.readFarenheit()) + » F, «);
Serial.println(String(thermocouple.readInternal()) + » C (internal)»);
}
delay(1000);
}

Результат:

15:39:44.805 -> Temperature: 24.25 C, 77.90 F, 25.94 C (internal)
15:39:45.977 -> Temperature: 24.25 C, 77.45 F, 25.88 C (internal)
15:39:47.190 -> Temperature: 25.50 C, 77.90 F, 25.94 C (internal)
15:39:48.396 -> Temperature: 25.25 C, 77.90 F, 25.94 C (internal)
15:39:49.618 -> Temperature: 25.00 C, 78.35 F, 25.94 C (internal)

Попробуем запустить библиотеку с аппаратным SPI:

  • SPI MOSI — GPIO23
  • SPI MISO — GPIO19
  • SPI SCK — GPIO18
  • SPI SS (CS) — GPIO5

Код существенно упростился, но все работает отлично.

#include <SPI.h>
#include «Adafruit_MAX31855.h» //https://github.com/adafruit/Adafruit-MAX31855-library/

#define MAXCS 5
Adafruit_MAX31855 thermocouple(MAXCS);

void setup() {
Serial.begin(115200);

Serial.println(«MAX31855 test»); // wait for MAX chip to stabilize
delay(500);
}

void loop() {
// basic readout test, just print the current temp
Serial.print(«Temperature: «);

double c = thermocouple.readCelsius();

if (isnan(c)) {
Serial.println(«Something wrong with thermocouple!»);
} else {
Serial.print(String(c) + » C, «);
Serial.print(String(thermocouple.readFarenheit()) + » F, «);
Serial.println(String(thermocouple.readInternal()) + » C (internal)»);
}
delay(1000);
}

Библиотека https://github.com/SV-Zanshin/MAX31855/ нормально работает с аппаратным SPI.

#include <MAX31855.h> // https://github.com/SV-Zanshin/MAX31855/
/*******************************************************************************************************************
** Declare all program constants **
*******************************************************************************************************************/
const uint32_t SERIAL_SPEED = 115200; ///< Set the baud rate for Serial I/O
const uint8_t SPI_CHIP_SELECT = 5; //< Chip-Select PIN for SPI
const uint8_t SPI_MISO = MISO; //< Master-In, Slave-Out PIN for SPI
const uint8_t SPI_SYSTEM_CLOCK = SCK; //< System Clock PIN for SPI

/*******************************************************************************************************************
** Declare global variables and instantiate classes **
*******************************************************************************************************************/
MAX31855_Class MAX31855; ///< Create an instance of MAX31855

/***************************************************************************************************************//*!
* @brief Arduino method called once at startup to initialize the system
* @details This is an Arduino IDE method which is called first upon boot or restart. It is only called one time
* and then control goes to the main «loop()» method, from which control never returns
* @return void
*******************************************************************************************************************/
void setup()
{
Serial.begin(SERIAL_SPEED);
#ifdef __AVR_ATmega32U4__ // If this is a 32U4 processor, then wait 3 seconds for the interface to initialize
delay(3000);
#endif
Serial.println(F(«Starting software SPI demo program for MAX31855»));
Serial.print(F(«Initializing MAX31855 sensor
«));
/********************************************************************************************
** Uncomment out either the hardware or software SPI call, depending upon which is in use **
********************************************************************************************/
while (!MAX31855.begin(SPI_CHIP_SELECT)) // Hardware SPI for MAX31855
//while (!MAX31855.begin(SPI_CHIP_SELECT,SPI_MISO,SPI_SYSTSEM_CLOCK)) // Software SPI for MAX31855
{
Serial.println(F(«Unable to start MAX31855. Waiting 3 seconds.»));
delay(3000);
} // of loop until device is located
Serial.println();
} // of method setup()

/***************************************************************************************************************//*!
* @brief Arduino method for the main program loop
* @details This is the main program for the Arduino IDE, it is an infinite loop and keeps on repeating.
* @return void
*******************************************************************************************************************/
void loop()
{
int32_t ambientTemperature = MAX31855.readAmbient(); // retrieve MAX31855 die ambient temperature
int32_t probeTemperature = MAX31855.readProbe(); // retrieve thermocouple probe temp
uint8_t faultCode = MAX31855.fault(); // retrieve any error codes
if ( faultCode ) // Display error code if present
{
Serial.print(«Fault code «);
Serial.print(faultCode);
Serial.println(» returned.»);
}
else
{
Serial.print(«Ambient Temperature is «);
Serial.print((float)ambientTemperature/1000,3);
Serial.println(«xC2xB0″»C»);
Serial.print(«Probe Temperature is «);
Serial.print((float)probeTemperature/1000,3);
Serial.println(«xC2xB0″»C
«);
} // of if-then-else an error occurred
delay(5000);
} // of method loop()

Полезные ссылки

Похожее

Оставьте комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Adblock
detector
Для любых предложений по сайту: [email protected]