Термопара отличается от других датчиков температуры низкой стоимостью, скоростью измерения и большим диапазоном "горячих" температур, обычно от 0 до 400 ºC. Но напрямую к Ардуино ее не подключить, прийдется использовать преобразователь на базе чипа MAX6675.
Схема подключения
Для подачи питания и земли будем использовать 5й и 6й контакты на плате Arduino.
Скетч
Для работы понадобится библиотека MAX6675
#include "max6675.h" int thermoDO = 2; //он же SO int thermoCS = 3; int thermoCLK = 4; //он же SCK MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO); int vccPin = 5; //пин для питания int gndPin = 6; //пин для земли void setup() { Serial.begin(9600); //активируем питание и землю pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH); pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW); Serial.println("MAX6675 test"); //ждем стабилизации чипа MAX delay(500); } void loop() { //Выводим показания в монитор порта Serial.print("C = "); Serial.print(thermocouple.readCelsius()); Serial.print("; F = "); Serial.println(thermocouple.readFahrenheit()); delay(300); }
Результат работы MAX6675
Принцип прост создаем меню с.ячейками которые будут храниться в энергонезависемой памети
Три кнопки , одна для перемешения по меню а остальные для увел и умен значения
А дальше берем показание термопары и запмсываем ее в переменую , после сравниваем с переменой в активном меню если меньше то вкл если больше то выкл.
С такой логикой температура будет гулять +- 20, а то и 120 градусов, в зависимости от инертности нагревателя.
и теперь получаю вот это(фаренгейты я убрал):
MAX6675 test
C = 25.50
C = nan
C = 2043.25
C = nan
C = nan
C = 2039.75
C = nan
C = 2039.75
C = nan
C = nan
C = 2043.75
C = nan
C = 2042.75
C = 2042.75
C = nan
дисплея LCD 16x2 .... :-)
Эта логика применяеться в промышленых моштабах
Описан сам принцип а не код программы
Темпиратура поддерживаеться в импульсном режиме через ШИМ
Все классно работает!
ПыСы не забываем что нумерация выводов плат может отличаться...
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
Но с изменением названия и ножек, например:
MAX6675 thermocoupleNewOne(thermoCLK, thermoCS,12);
А данные соответственно считывать :
float x=thermocouple.readCelsius();// считываем в x данные с первой термопары
float y=thermocoupleNewOne.readCelsius();// считываем в у данные со второй термопары
Ну и дальше отталкиваетесь от того что надо, к разным устройствам ли подключать или фильтрацию делать на одном устройстве
Может кто знает как померить отрицательные температуры К термопарой Ардуиной и MAX6675 ?