Термопара и Arduino

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

В отличие от полупроводниковых датчиков температуры вроде 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.

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

Если вы используете 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 экран.

Телмопара, LCD и Arduino

В нашем случае 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

Adafruit_MAX31855 thermocouple1(thermoCLK, thermoCS, thermoDO1);

Adafruit_MAX31855 thermocouple2(thermoCLK, thermoCS, thermoDO2);

Adafruit_MAX31855 thermocouple3(thermoCLK, thermoCS, thermoDO3);

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

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

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

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

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

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

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

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