MAX6675 Module + K Type Thermocouple Sensor - не правильная температура

vde69
Offline
Зарегистрирован: 10.01.2016

купил "MAX6675 Module + K Type Thermocouple Sensor" все вроде работает, знаю, что на низких температурах (менее +400с) эта термопара показывает не точно, по этому при тестировании на комнотной температуре она показывала от 20 до 30 грдусов, что вполне обьяснимо...

но вот на высоких температурах она показывает фигню... показываеть 1000с хотя реально где то от 500 до 700 (в муфеле нет свечения)...

может дело в том, что я обрезал (укоротил) термопару? если да - то как калибровать?

 

скетч использую такой (скомуниздил из библиотеки), может кто пользует проверит???

//*************************************************************************************************
// две процедуры, для получения данных с термопары
//*************************************************************************************************
double readCelsius() {

  uint16_t v;

  digitalWrite(thermoCS, LOW);
  _delay_ms(1);

  v = spiread();
  v <<= 8;
  v |= spiread();

  digitalWrite(thermoCS, HIGH);

  if (v & 0x4) {
    // uh oh, no thermocouple attached!
    //return NAN; 
    return -101;
  }
  v >>= 3;

  return v*0.25;
}

byte spiread() { 
  int i;
  byte d = 0;

  for (i=7; i>=0; i--)
  {
    digitalWrite(thermoCLK, LOW);
    _delay_ms(1);
    if (digitalRead(thermoDO)) {
      //set the bit to 0 no matter what
      d |= (1 << i);
    }

    digitalWrite(thermoCLK, HIGH);
    _delay_ms(1);
  }

  return d;
}

 

Вячеслав 151
Offline
Зарегистрирован: 25.03.2015

Я читал такой прогой. С усреднением значений. И на низких показывает точно

 

#include "max6675.h"
int thermoDO = 2;  //он же SO
int thermoCS = 3;//он же SCK
int thermoCLK = 4;  //

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

int vccPin = 5;  //пин для питания
int gndPin = 6;  //пин для земли

const byte averageFactor = 5;   // коэффициент сглаживания показаний (0 = не сглаживать)
                                // чем выше, тем больше "инерционность"
int sensorValue = 0;            // считанное значение

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // установка  LCD address to 0x27 for a 16 chars and 2 line display

void setup() 
{
 //  Serial.begin(9600);
   
  //активируем питание и землю
  pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH);
  pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW);
  //Serial.println("MAX6675 test");
  //ждем стабилизации чипа MAX
  delay(500);
  
  lcd.init();   // Инициализируем lcd 
 //lcd.begin();
  // Печать приветствия на  LCD.
  lcd.backlight();
  lcd.setCursor(1, 0);
  lcd.print("MAX6675 test");
   lcd.setCursor(4, 1);
  lcd.print("NOVO.SU");
  delay(5000);
  lcd.clear();
}

void loop() 
{
  int newSensorValue = thermocouple.readCelsius();
  
  if (averageFactor > 0)        // усреднение показаний для устранения "скачков"
  {      
    sensorValue = (sensorValue * (averageFactor - 1) + newSensorValue) / averageFactor;  
    // <новое среднее> = (<старое среднее>*4 + <текущее значение>) / 5 я тут немного поправил
  }
  else 
  {
    sensorValue=newSensorValue; // не делаем усреднений, что прочитали то и считаем выводом
  }
  //Serial.print("sensor = " );
  //Serial.println(sensorValue);
  lcd.setCursor(0, 0);
  lcd.print("Temperat: ");
  lcd.print(sensorValue); //Коррекция температуры на 3 градуса
  lcd.print("C  ");
  delay(2000);                     
}

 

alex_r61
Offline
Зарегистрирован: 20.06.2012

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

vde69
Offline
Зарегистрирован: 10.01.2016

может я чего сделал не так когда обрезал термопару?

делал так

1. клемники (похоже из алюминия) разогнул

2. термопару обрезал и зачистил от стекловолокна на 5мм

3. вставил в клемники буквой П и зажал

 

может я клемники перепутал или в бубен не постучал?

 

vde69
Offline
Зарегистрирован: 10.01.2016
померил ЭДС (правда не точно, плюс минус 5 градусов),

70c = 3.0
140c = 7.4
195c = 11.4

судя по таблице http://kipiya.ru/2008/04/04/tablica-termo-eds-standartnyx-termopar/

похоже у меня термопара типа J

если это так, то вместо 1000 градусов в реалии было 720, что почти похоже на правду....