Авторизация
Зарегистрироваться

avatar
Блог BuyInCoins
RSS блога Подписка

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

  • Цена: $1.22 термопара + $11 остальное

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

Начнем по порядку.
Термопара… как термопара. Метр ровно, К типа, 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/
*/

#include <MAX6675.h>
#include <SD.h>

File myFile;

int time = 0;

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

MAX6675 temp0(9,8,7,units,error);

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

pinMode(10, OUTPUT);
if (!SD.begin(10)) {
Serial.println(«initialization failed!»);
return;
}
Serial.println(«initialization done.»);

// Проверяем, существует ли на карте файл data.csv, если существует, то удаляем его.
if(SD.exists(«temp.csv»)) {
SD.remove(«temp.csv»);
}
// открываем файл. заметьте, что только один файл может быть открыт за раз,
// поэтому вы должны закрыть этот, чтобы открыть другой.
myFile = SD.open(«temp.csv», FILE_WRITE); // открыть на запись

// если файл нормально открылся, запишем в него:
if (myFile) {
Serial.print(«Writing to temp.csv...»);
// закрываем файл:
myFile.close();
Serial.println(«done.»);
}
else {
// а если он не открылся, то печатаем сообщение об ошибке:
Serial.println(«error opening temp.csv»);
}

}
void loop()
{

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
Планирую купить +61 Добавить в избранное +53 +109
Похожие публикации
свернуть развернуть
Комментарии (55)
RSS
+
avatar
  • shaman
  • 28 октября 2013, 18:40
+3
Лично мне понятна только задумка и некоторые компоненты (в частности-виновница обзора :) Это сколько же надо времени на изучение «новомодных» конструкторов, чтобы соединить это всё в одну кучу, а потом, я предполагаю, в «умный дом»?
+
avatar
+1
Задумка неплохая.
Я вот делаю для себя логгер сетевого напряжения.
Взял Ардуино нано, модуль реального времени и модуль для карт памяти.
Для питания раскурочил и приколхозил начинку от китайского БП на 5В.
Для задания напряжения на входе в ардуино сделал резисторный делитель, диодный мост с конденсатором.
Еще приделал дисплей 16*2.
Все это засунул в распредкоробку.
Скетчи написал, осталось поправочные коэффициенты ввести и в путь.
+
avatar
  • wyvern
  • 28 октября 2013, 19:08
0
Дело хорошее. Вот только качество БП, используемого 24/7 стоит трижды проверить.
+
avatar
+2
Это да, хотя там токи — 50мА.
Даже для китайского БП — ничто.
+
avatar
0
А может стоит гальванически развязать?..
+
avatar
  • alamer
  • 03 ноября 2013, 09:46
-1
Модуль ардуино
Модуль карты памяти
Модуль блютус\вайфай для подключения к сети.

Можете минусить но меня тошнит от поделок на ардуине которые выглядят как куча говноплат.
И код ужасный. И либы медленные.
Используйте STM или PIC
+
avatar
  • wyvern
  • 28 октября 2013, 19:06
+5
Да, времени уходит много. Но разобраться в работе с ардуиной несложно. Собственно, для этого она и создана. Потом можно клепать подобные устройства. Вплоть до умного дома. Да хоть мехов собирайте. Главное — получение удовольствия от своего хобби
+
avatar
  • Demosfen
  • 28 октября 2013, 19:53
+1
Умный дом на ардуине? Это только для фанатов ардуинки. Лучше на BBB, RPi и прочих одноплатниках. К ардуинке облезешь обвязку набирать, а потом это еще и программать.
+
avatar
0
Что-то не нашел термопары для 0-2500 С. За обзор спасибо. *ушел искать дальше*
+
avatar
0
Думаю здесь поможет только пирометр.
Да и то нужно постараться
+
avatar
0
Да нет, в закрытой печи с высоким давление азота, думаю не поможет)
+
avatar
0
Ну точность понятие растяжимое — до какойто степени точности.
А как с компенсацией температуры холодного спая?
+
avatar
  • wyvern
  • 28 октября 2013, 19:09
0
+
avatar
+1
Думаю, что для духовки 1.5 +2.5=4 гр цельсия — вполне точность.
+
avatar
  • gamebox
  • 28 октября 2013, 19:14
+2
Если нужно просто подключить термодатчик к компьютеру, то наиболее простой и дешевый способ это подключить DS18B20 к Com-порту через такой переходник

Есть и программа для мониторинга — Temp Keeper
У меня такой датчик уже почти 2 года работает через этот переходник, правда программа самописная.

Хотя конечно термопара по диапазону всё же куда шире, но это зависит от области применения какой датчик лучше использовать
+
avatar
  • char
  • 28 октября 2013, 22:10
+1
Или купить готовый USB-термометр типа TEMPer.
+
avatar
  • Lu-Li
  • 28 октября 2013, 19:47
0
Всегда был интерес к радиопримочкам… )) Интересуюсь, паяльник держать умею, не слишком сложные поломки устраняю с переменным успехом, схемы попроще читаю, но вот для создания готового устройства нет ни опыта, ни полноты понимания… А чтобы их получить, нужно много времени и энтузиазма, которые нынче в дефиците.

Вот мне интересно, кулибины-электронщики, занимающиеся сборкой всяких самодельных штук — они по образованию этим занимаются или самоучки в большинстве? Был курс ВУЗовской электротехники, конечно, понимания прибавила, но не так чтобы прям все стало ясно. И поэтому для себя сделал вывод — что или нужно чтобы к этому делу душа лежала, иначе ему не обучиться (обучать самого себя неинтересному — есть пытка и мазохизм), или профессионально на это учиться.

Автору +1.
+
avatar
  • sav13
  • 28 октября 2013, 20:12
0
За Arduino большой +
А в чем преимущество термопары над уже готовым датчиком, например DHT22?
Там провод специальный термопарный?
+
avatar
  • Demosfen
  • 28 октября 2013, 20:16
0
Ну как-бы разница у максимальной температуры на порядок, а в остальном одна фигня :)
+
avatar
  • wyvern
  • 28 октября 2013, 20:19
0
У DHT22 верхний предел температуры 125°С.
У данной термопары — 800°С.
+
avatar
  • Demosfen
  • 28 октября 2013, 20:22
0
Не, меньше.
dht22: -40 — 80 degrees C temperature range
+
avatar
  • wyvern
  • 28 октября 2013, 20:23
0
А это не DHT11?
даташит на DHT11:
Measuring range humidity 20-90%RH;
temperature 0-50 Celsius

даташит на DHT22:
Measuring range humidity 0-100%RH; temperature -40~125Celsius
+
avatar
  • Demosfen
  • 28 октября 2013, 20:27
0
Гммм… Забавно. Десяток сайтов с первых двух страниц гугла подряд пишут, что до +80, но с первого же скачал даташит, а там 125.
+
avatar
+1
я похоже пропустил, или не нашел область применения…
+
avatar
  • realasd
  • 28 октября 2013, 20:31
0
Всё конечно здорово.
А не ткнёте носом новичка, в блоки, из которых можно собрать штуку для управлением времени нагрева до определённой температуры. Типа нагреть тэном до определённой температуры жидкость, подержать при этой температуре (любое заданное количество) минут, затем возможно ещё нагреть (или остудить) на другое время и т.д.
Грубо говоря как в мультиварках, стиралках, хлебопечках и т.п. только чтоб программу и параметры температуры и времени можно было задавать.
+
avatar
  • wyvern
  • 28 октября 2013, 20:36
+1
Если управлять нагрузкой, то, навскидку — Arduino + N-Channel MOSFET = Управляем высоким напряжением. Еще вот тут почитать.
Если на реле — руководств полно, и все упрощается.
1 ВКЛ — ждем достижения нужной температуры.
2 Достигли? да — ВЫКЛ, иначе — п.1.
3 Температура понизилась — п.1
+
avatar
  • realasd
  • 28 октября 2013, 20:58
0
Спасибо почитаю.
+
avatar
  • Demosfen
  • 28 октября 2013, 21:04
0
Мосфет для управления тэном? :)
Симистор или релешка. С релешкой только не забыть сделать чуток побольше дельту, чтобы по 20 раз в секунду не щелкала. С симистором интереснее — можно что-то типа шим намутить для поддержания температуры, т.е. открывать короткими импульсами, но это не с любой нагрузкой проканает.
+
avatar
  • wyvern
  • 28 октября 2013, 21:47
0
Ага. Маааленьким таким тэном :) Автомобильным электрочайником. Или кружкой с подогревом. А это, кстати, тема…
+
avatar
+1
Но не дешево — в районе 7 тыр только за сам блок управления.
www.owen.ru/uploads/trm151.pdf
Или делать самому вроде monitor.espec.ws/section44/printview207327p680.html
+
avatar
  • sav13
  • 29 октября 2013, 04:21
+2
Если без DIY то продаются вполне готовые контроллеры температуры
Если мощности по нагрузки не хватит, то можно использовать твердотельное реле на нужную мощность
+
avatar
  • AFCrio
  • 29 октября 2013, 15:48
0
И не забыть о том, что SSR-xx коммутируют только переменку.
+
avatar
  • kaf
  • 29 октября 2013, 20:06
0
SSR-25DD
+
avatar
+1
Спасибо!!! За обзор +. Пишите ещё обзоры.
+
avatar
  • Sanja
  • 29 октября 2013, 10:25
0
Месье знает толк в извращениях.

Лучше бы взяли Dallas'овские DS18B20:

aliexpress.com/snapshot/219876111.html

Датчик полностью цифровой, цепляется по шине OneWire — т.е. вы хоть десять штук к Ардуине подцепите — всё равно будет занимать только один цифровой pin. Преимущества — длина — тот же метр, влагозащита, нержавейка, «цифра».
+
avatar
  • wyvern
  • 29 октября 2013, 11:22
0
Operating temperature range:-55°C to +125°C
Что с ним станет, если я его до 480°C нагрею?
А термопара до 800°C держит, от DS18B20 кроме ножек что-нибудь останется?
+
avatar
  • Sanja
  • 29 октября 2013, 12:04
0
А где из вашего обзора следует, что вы собрались до восьми сотен мерять? Вы же её максимум в диапазоне от нуля до 24С гоняли.

У DS18B20 преобразование показаний в «цифру» происходит рядом с точкой замера, т.е. искажений меньше, что делает его для бытовых случаев гораздо более предпочтительным. Бонус — никакого ЛУТа.

А если у вас пром.применения — тут уже обычно за экономией в $10 не гонятся, себе дороже.
+
avatar
  • ami_go
  • 29 октября 2013, 10:29
0
Спасибо за обзор!
Возьму за основу!
+
avatar
  • engintoo
  • 29 октября 2013, 14:59
0
а не подскажите как с помощью этой термопары просто выводить температуру на на какой-нибудь экранчик малюсенький (типа как в таких вольтметрах)
+
avatar
  • wyvern
  • 29 октября 2013, 15:34
+1
С 1602 будет проще (пара $ против одного за 7-сегментный индикатор) — удаляем все, что касается карточки, подключаем библиотеку (#include <LiquidCrystal.h>), инициализируем LCD (LiquidCrystal lcd(12, 11, 5, 4, 3, 2); — пины свои) и заменяем Serial.print на lcd.print. Не забываем менять положение курсора (lcd.setCursor)

Если нужен именно такой:

Читаем: 7-сегментный-индикатор и вот это.
+
avatar
  • engintoo
  • 29 октября 2013, 17:20
0
Спасибо, правда для меня Ардуина — это тёмный лес :D. Просто хотелось бы такую как у вас термопару скрестить с чем то вроде этого или этого. Если просто К такому термометру перепаять вашу термопару — будет ли относительно (+-5С) точно работать?
+
avatar
  • wyvern
  • 29 октября 2013, 17:39
+1
Первый отпадает сразу. Второй — сомнительное занятие. В руководствах по использованию термопары куча ограничений на удлинение провода и подобные вещи. А этот термометр стоит почти как MAX6675ISA, вряд ли он это нормально воспримет.

Может взять готовый?

Обзор
+
avatar
  • engintoo
  • 29 октября 2013, 18:24
0
во!!! т.е. можно к нему просто вашу термопару (нужна именно резьба для установки и бронированный кабель) подключить и получить искомое! Спасибо!
+
avatar
  • wyvern
  • 29 октября 2013, 18:31
0
Сабж для термопар К-типа. В теории — поддерживает
+
avatar
  • mooni73
  • 29 октября 2013, 15:44
0
Давно уже подыскиваю себе логгер напряжения с целью мерять емкость аккумов. Приведенная конструкция близка, но хочется еще проще.
+
avatar
  • wyvern
  • 29 октября 2013, 16:42
+1
+
avatar
  • yta4ka
  • 14 февраля 2014, 15:02
0
подскажите а если есть необходимость мерять температуру в 3 или 6 разных точках одновременно можно повесить на одну ардуину соответственное кол-во MAX6675ISA и термопар, и как тогда программу переписать ???
+
avatar
  • wyvern
  • 21 февраля 2014, 11:09
0
Плодите строки
MAX6675 temp0(9,8,7,units,error);
прописывая соответствующие номера пинов и имена датчиков (например temp0,temp1 и т.п.).
Обращаясь к этим именам получаете температуру как в строке
temp_out = temp0.read_temp(5);
Можно попробовать подключить MISO/MOSI/SCK линии датчиков параллельно, и только CS развести по разным пинам, но не все устройства полноценно поддерживают SPI, некоторым нужен только «железный» и т.п. Поэтому желательно предварительно проверить такой способ подключения.
+
avatar
  • yta4ka
  • 23 февраля 2014, 00:59
0
спасибо, нарисовал параллельную схему как ее можно проверить?
+
avatar
  • wyvern
  • 23 февраля 2014, 16:19
0
Собственно, изучать библиотеку или собрать и посмотреть.
Как Вы видите, я использовал SOP-8 -> DIP-переходник, тогда можно использовать макетные провода для проверки и не придется выпаивать SMD в случае чего.
+
avatar
  • yta4ka
  • 26 февраля 2014, 13:35
0

собрать и посмотреть
+
avatar
  • wyvern
  • 02 марта 2014, 19:36
0
Тогда
MAX6675 temp1(1,12,13,units,error);
MAX6675 temp2(2,12,13,units,error);
MAX6675 temp3(3,12,13,units,error);

temp_out1 = temp1.read_temp(5);
temp_out2 = temp2.read_temp(5);
temp_out3 = temp3.read_temp(5);
+
avatar
  • yta4ka
  • 03 марта 2014, 01:55
0
спасибо
+
avatar
  • Away
  • 06 августа 2014, 23:39
0
прошу прощения за глупый вопрос
а как эту термопару прицепить к мультиметру напрямую?
есть ли какая зависимость температуры от сопротивления?
задача поддерживать в тигле нужную температуру (примерно 350 градусов)
в чем будет показывать мультиметр «температуру» (в градусах или омах ) непринципиально.

кароче… есть ли какой график…
+
avatar
  • wyvern
  • 07 августа 2014, 08:39
0
Проще всего — купить мультиметр с поддержкой термопар. Или вот такую штуку

Потому что термопара генерирует термо-ЭДС — напряжение в милливольтах. Вот тут есть градуировочные таблицы для термопар. Вряд ли некий абстрактный мультиметр (вероятно, 830) даст нужную точность. Нужен усилитель.

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.