Max6675 подключение к ардуино

В этом видео мы научимся использовать модуль MAX6675K и комплектную термопару — идеальный выбор для измерения высокой температуры при помощи ардуино!

► Библиотека GyverMAX6675: https://github.com/GyverLibs/GyverMAX6675
► Модуль MAX6675K + термопара: https://ali.ski/APwVP https://ali.ski/IHx83t

★ Инструменты, приборы и материалы для пайки ★
— Удобные мультиметры: https://ali.ski/2uhsR https://ali.ski/I-hqX
— Тестеры компонентов: https://ali.ski/bM1qUI https://ali.ski/FElCB
— Карманные осциллографы: https://ali.ski/3hSqLm https://ali.ski/a-jWyC
— Паяльная станция HakkoT12: https://ali.ski/R3Fi3 https://ali.ski/Dr1ny
— Паяльный фен 8858: https://ali.ski/xUQAOH https://ali.ski/fRv2X4
— Коврик для пайки: https://ali.ski/3GkrYS https://ali.ski/odC32X
— Стриппер для проводов: https://ali.ski/HpEng6 https://ali.ski/yDtso
— Оловоотсос: https://ali.ski/07LdO https://ali.ski/aGVkC
— Куча дешевого припоя: https://ali.ski/rXZTr5 https://ali.ski/KNYjK
— Шпильки для выпайки: https://ali.ski/msKHd8
— Хороший флюс-гель: https://ali.ski/rfkph

00:00 — Вступление
00:32 — Что такое термопара?
00:57 — Типы термопар
01:13 — Особенности использования термопары
02:10 — Модуль MAX6675K
02:44 — Подключение модуля
02:58 — Библиотека GyverMAX6675
03:42 — Сравнение с DS18B20
04:41 — Эпилог

Wemos D1 min и MAX6675K

MAX6675KWemos D1 Mini
Vcc3.3v (я использовал БП)
GndGnd (от БП и Wemos D1 mini)
SOD6 (GPIO12)
SS/CSD7 (GPIO13)
CSKD8 (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

Уроки Arduino. Подключение термопары и модуля MAX6675K


#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

MAX6675KESP32 DevKit
Vcc3.3v (я использовал БП)
GndGnd (от БП и Wemos D1 mini)
SO12 (IO12)
SS/CS13 (IO13)
CSK15 (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 оС.

Подключение модуля MAX6675 к Arduino

Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Модуль преобразователя термопары на MAX6675 с термопарой типа К x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.

Подключение:
Первым делом, подключаем термопару типа К к модулю MAX6675, для этого U образные вывода подключаем к зеленой клемме модуля, соблюдая полярность (красный к +, черный к -). Затем подключаем питание, выводы VCC и GND (модуля MAX6675) подключаем к выводам +5В и GND (Arduino). Теперь можно подключить интерфейс ISP, для этого выводы SCK, CS, SO (модуля MAX6675), подключаем к выводам 2, 3, 4 (Arduino). Для удобства приведу схему подключения.

Установка библиотеки:
Для работы с модулем нам понадобится библиотека MAX6675. Установить ее можно в программе, для этого нажмите «Скетч» -> «Подключить библиотеку» и нажимает «Управлять библиотеками…»

Откроется новое окно «Менеджер библиотек», в окне поиска вводим «MAX6675» и устанавливаем библиотеку.

Программа:
Данный скетч просто считываем показания температуры и отображает в «Мониторинге порта«.

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

Определение нагрева с помощью термопары требует обязательного получения информации о температуре холодной части конструкции. Последние данные используются для расчета показаний. Соответственно к Ардуино подключается не только сама термопара, но и датчик определяющий текущее состояние нагрева одного из ее концов.

Так как вырабатываемый ток связкой проводников низок, в обязательном порядке требуется усилитель, для соединения их с микроконтроллером. Нужна и подстройка самодельных устройств под используемые материалы в спайке и их длину. Облегчается ситуация при использовании специализированных АЦП, наподобие MAX6675 или MAX31855. Устройства преобразуют характеристики тока, полученные от термопары, в числовые значения, которые уже и передаются в Ардуино посредством пинов данных. Если использовать только прямое повышение уровня тока иными схемами, — соединение усилителя производится к аналоговым входам микроконтроллера. К сожалению, градация последних составляет всего 1024 уровня, что непосредственно влияет на точность получаемых показаний.

АЦП MAX6675, MAX31855

АЦП Max 31855

Представленная далее схема, как и сам АЦП изначально не рассчитаны на использование с термопарами, требующими заземления, что нужно учитывать при разработке финальной конструкции устройства. Платы 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

схема подключения платы MAX 31855 и 6651

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

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

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

Термопара. Термометр сделаем сами

Доброго всем времени суток.
Собственно, выполняю обещание. Кратко — необходим термометр с термопарой и возможностью записи лога температуры. Было предложено готовое устройство, но можно собрать самому в два раза дешевле.
Кому интересно — добро пожаловать под кат.

Начнем по порядку.
Термопара… как термопара. Метр ровно, К типа, 0-800C

Можно врезать в корпус, имеется резьбовая часть, которая вращается свободно. Диаметр 5,8мм, шаг — 0,9~1.0мм, похоже М6 x 1,0 мм. Под ключ на 10

Это все хорошо, дальше что делать? Нужно преобразовать сигнал термопары (термоэдс) в цифровой или аналоговый сигнал, чтоб читать ардуиной. В этом нам поможет MAX6675. Это преобразователь сигнала термопары K-типа в цифру, имеет SPI интерфейс, что нас устраивает.
А вот и наш герой — MAX6675ISA ($4.20)

Стоил $4.10, но того лота больше нет (продавец тот же).

Подключать будем к ардуине, можно взять простенькую Arduino Pro Mini ($5.25, можно найти дешевле, здесь Вы видите именно эту)

Данные будем писать на карту памяти (и заодно слать в порт) с помощью SD Card Module $1.25.

Интерфейс, тоже, кстати, SPI. Только не все карточки его поддерживают. Не завелось — попробуйте сначала другую.
В теории все линии SPI устройств (MOSI или SI, MISO или SO, SCLK или SCK), кроме CS (CS или SS — выбор микросхемы), можно подключить к одним контактам ардуины, но тогда MAX6675 работает неадекватно. Поэтому я все разнес по разным пинам.
В основу скетча лег пример по работе с картами памяти с хабра.

Библиотека и скетч для MAX6675 тут. Схема подключения MAX6675:

Плата делалась ЛУТом на гетинаксе ($4.39 10 шт., тратим одну):


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

Предварительный просмотр (сильно не пинать)


В сборе:

В работе:

На термопаре относительно много металла, поэтому она «заторможена». Кроме того пришлось значительно погрузить ее в лед, иначе до 0 не остывала

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

С 23C до 0C термопара остыла за 50 секунд. Обратно нагрелась за 6 минут.
Собственно, вот эти строки:
1;22.75
48;0.00
410;22.25
Из них понятен формат записи — время в секундах от старта; температура.
Сам файл TEMP.CSV
Да, температура отображается с шагом 0,25. Меня это устраивает.

Если добавить модуль реального времени, устройство станет на порядок круче. Всего $1.79:

Модуль не сильно точный, но для наших целей хватит. Еще можно сделать автономное питание на каком-нибудь UP конвертере. Вот, $1.65:

Еще стоит убрать перезапись файла… Много чего можно сделать. Я просто оставлю все исходники здесь

/*
Схема подключения
* SD:
** MOSI — pin 11
** MISO — pin 12
** CLK — pin 13
** CS — pin 10

* MAX6675:
** MISO — pin 8;
** SCK — pin 7;
** CS — pin 9;

Основано на коде David A. Mellis, Tom Igoe, Gleb Devyatkin
habrahabr.ru/post/115176/
*/

int units = 1; // Units to readout temp (0 = F, 1 = C)
float error = 0.0; // Temperature compensation error
float temp_out = 0.0; // Temperature output varible

void setup()
Serial.begin(9600);
Serial.print(«Initializing SD card. »);

temp_out = temp0.read_temp(5); // Read the temp 5 times and return the average value to the var

time = time + 1; // Увеличиваем время на 1

myFile = SD.open(«temp.csv», FILE_WRITE);

// если файл нормально открылся, запишем в него:
if (myFile) // записываем время
myFile.print(time);
Serial.print(time);
// добавляем точку с запятой
myFile.print(«;»);
Serial.print(«;»);
// пишем температуру и перевод строки
myFile.println( temp_out );
Serial.println( temp_out );
// закрываем файл:
myFile.close();
>
else // а если он не открылся, то печатаем сообщение об ошибке:
Serial.println(«error opening temp.csv»);
>
delay(1000); // Ждем секунду
>

Скачать: скетч, библиотеку MAX6675
Планирую купить +60 Добавить в избранное Обзор понравился +53 +109

  • 28 октября 2013, 18:27
  • автор: wyvern
  • просмотры: 52064

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

  • Прямое цифровое преобразование термопары K-типа с компенсацией холодного спая.
  • Простой SPI-совместимый последовательный интерфейс.
  • Диапазон температур: от 0°C до +1024°C.
  • Разрешение: 12-бит или 0,25 °C.
  • Обнаружение не подключенной термопары.

на Али: тут. в магазине banggood: тут

Подключение модуля к Arduino:

Для работы с модулем в среде Arduino, написаны готовые библиотеки, например библиотека в репозитории adafruit: https://github.com/adafruit/MAX6675-library

Можно воспользоваться немного исправленным примером для библиотеки.

Пример для библиотеки.
#include «max6675.h» // https://github.com/adafruit/MAX6675-library /// подключение модуля #define thermoDO 5 // SO #define thermoCS 6 // CS #define thermoCLK 7 // SCK MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO); void setup() Serial.begin(9600); Serial.println(«MAX6675 test»); delay(500); > void loop() // отправляем в монитор порта данные о температуре Serial.print(«C color: #000000;»>); Serial.print(thermocouple.readCelsius()); Serial.print(» F color: #000000;»>); Serial.println(thermocouple.readFahrenheit()); delay(1000); >

Термостат с регулировкой температуры до 1000 С° с помощью модуля MAX6675, реле и arduino.

Задумал я сделать себе станок по изготовлению прутка пластика диаметром 1,75 мм для печати на 3D принтере. И прокручивая в голове как это все будет выглядеть, изготовил “краник” состоящий из трубы 1/2″ и заглушки с просверленным отверстием на 1,75 мм через который будет выдавливаться готовый пластик. Для этой трубы нашел нагревательные элементы, которые должны нагревать трубу до 200-250 градусов. Так как нагревательные элементы довольно простые, работающие как кипятильник у них нет регулировки по температуре, а мне же нужно держать заданную температуру. Для решил найти терморегулятор естественно пошел на Aliexpress и начал там искать подходящий. Там много “слабых” и дешевых терморегулятором, которые до 100C , но нашелся там терморегулятор и до 1000C и стоил он по моим меркам довольно много, вот ссылка: http://ali.pub/2wpnn1 Поэтому было решено сделать свой термостат. Для этого был закуплен модуль для термопары K типа MAX6675 и реле мощностью на 30A ( как раз для кипятильников) ну и ардуинки у меня уже были закуплены на случай “апокалипсиса”. По цене это все мне обошлось довольно не дорого, так что это получился лучший вариант.

Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.

Приобрести все компоненты можно здесь:

Модуль термопары К типа max6675: http://ali.pub/2wpog0

Итак все компоненты подключил по данной схеме:

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

Блоки FLProg довольно тяжело описывать на сайте, поэтому я просто оставлю ссылку на проект в FLProg: https://yadi.sk/d/S3LleCYav6fQqA

Демонстрация работы в видео:

Оцените статью
TutShema
Добавить комментарий