Pages: 1 [2]   Go Down
Author Topic: Reading decimals of milivolts  (Read 1995 times)
0 Members and 1 Guest are viewing this topic.
Dubuque, Iowa, USA
Offline Offline
Edison Member
*
Karma: 45
Posts: 2469
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Send an email to Adafruit and ask very nicely if they'll sell their MAX31855 breakout without the MAX31855 (explain that you want to use the Type-S chip). This assumes you would be able to solder the replacement chip yourself.

Most Arduino "proto shields" have a small SOIC breakout area on them that you could use as well. At a minimum all you need to use is one cap; Adafruit goes the extra mile by including a 3v3 regulator (you might already have 3v3 supply on your Arduino) and diodes to protect the SCK and CS lines from 5V logic but those are not required.
Logged

Santa Fe
Offline Offline
Full Member
***
Karma: 1
Posts: 201
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Couldn't you just use a K type thermocouple? It's good to at least 1250 C?  Otherwise what you might do instead of building your own board is just un-solder  the K chip from the low cost module and solder in the S chip. It's surface mount and a little trick, but I have pulled it off with 8 pin chips and a sharp pointed soldering iron. I positioned the chip and pressed a tiny square of metal to the top of the chip to absorb heat, then ran the iron quickly across the top of the leads on each side.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I think no cheap K-type sensor can measure around 1250ºC... So I'd rather stick with my old S-type and try talking with adafruit for the bare breadboard...
But I'm wondering, what about if I get the regular board with the type K chip, and I connect it to my S type thermopair. Anyway I will have a signal of miliVolts which will be misinterpreted in the digital result, but maybe I can translate it again inside Arduino. I mean, I can borrow another thermometer, make some measures, compare the results and eventually write a function into Arduino to correct the results.
Maybe it's not too academic, but it's a pain to order a bare chip of MAX38155K and pay 20 times the price of it for the transport fee.
 
Logged

Dubuque, Iowa, USA
Offline Offline
Edison Member
*
Karma: 45
Posts: 2469
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

But I'm wondering, what about if I get the regular board with the type K chip, and I connect it to my S type thermopair. Anyway I will have a signal of miliVolts which will be misinterpreted in the digital result, but maybe I can translate it again inside Arduino. I mean, I can borrow another thermometer, make some measures, compare the results and eventually write a function into Arduino to correct the results.
Maybe it's not too academic, but it's a pain to order a bare chip of MAX38155K and pay 20 times the price of it for the transport fee.

That's a pretty good question. With a type K reading 41.276uV/C and a type S reading 9.587uV/C it would seem that you could just multiply measured values by (41.276/9.587) 4.305 and get the proper value.
Logged

Santa Fe
Offline Offline
Full Member
***
Karma: 1
Posts: 201
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The values 41.276uV/C and 9.587uV/C are just approximations. The voltage/temp curve for a thermocouple is pretty non-linear when you are looking at the temperature over the whole range. If you are just looking at a narrow range... maybe less than 100 degrees... you might get away with just some sort of conversion. Depends on how accurate you need to be.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I'm aware of the non-linear properties... And sure it's the biggest issue, maybe I won't get precise readings, and a 100ªC error it's not tolerable for ceramics glazes... I don't know how precise can I get using polynomials to interpolate the curves...
Anyhow, next monday I'm gonna ask for some components and see what I can do with them.
« Last Edit: July 28, 2012, 10:12:35 am by arka » Logged

Kentucky, US
Offline Offline
Full Member
***
Karma: 1
Posts: 193
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

There is a polynomial-based thermocouple library included with the TC4 project.  Currently, there are implementations of type K, type T, and type J.  It would be relatively straightforward to add a class for type S, using the existing classes as a guide.

http://tc4-shield.googlecode.com/svn/applications/libraries/trunk/libraries/thermocouple

This is open source code, released under the BSD license.

Jim
Logged

TC4 Open Source Digital Thermometer and Temperature Controller
http://code.google.com/p/tc4-shield

Santa Fe
Offline Offline
Full Member
***
Karma: 1
Posts: 201
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

If you are running a temperature ramp to do glazes, the non-linearity is not as bad as if you wanted very precise measurement over the entire range. The important thing is reproducibility of the ramp from one run to the next.
I fire to cone 5-6 and control the kiln through an Arduino communicating with a VB app.
Here is the code I use with a AD595 and an op amp to bring the output voltage into the 5 volt range of the Arduino. the MAX38155 is digital so you won't have to worry about matching voltage with the Arduino A/D. You could easily modify it to fit your needs.

Code:
int CS = 6;
int SO = 7;
int SCKX = 5;
float X = 5.0/1023; // analog reading in volts based on 5 volt max
int i=0;
int u=0;
int value = 0;
int err = 0;
float temp = 0;
int samples=1;
int units=0;
int command = 0;       // This is the command char, in ascii form, sent from the serial port


void setup(){
 Serial.begin(9600);
  pinMode(CS, OUTPUT);
  pinMode(SO, INPUT);
  pinMode(SCKX, OUTPUT);
  pinMode(2, OUTPUT);      // Test Com Reset issue 
  pinMode(9, OUTPUT);

}

void Average10() { // average 10 readings
  float Ave;
  int AveCt ;
  AveCt =0;
  Ave = 0;
  delay(50);
 
  do {
      Ave = Ave +  analogRead(0) ;
      AveCt = AveCt + 1;
      delay(10);
  } while  (AveCt < 10 ) ;
  // AD595 output through a LM 358 amp with a gain of 0.4 to reduce 12.5 V to 5.0 V
  temp = (Ave/10)* X * 250; // Convert to 5 volt reading to deg C
  temp= temp - (.0166* temp); // calculated offset factor
}

void loop() {
   if ( analogRead(0)> 1021) {          // it's too high turn it off
          digitalWrite(2,LOW);
      }
     value = 0;
     Serial.flush();
     if (Serial.available()) {      // Look for char in serial que and process if found
      command = Serial.read();
      if (command == 84 & analogRead(0)< 1021) { // If command = "T" turn it on (unless too high)
          digitalWrite(2,HIGH);
         // delay (500); // keep it on for at least half a sec to prevent bounce
      }
      if (command == 67) {          // If command = "C" turn it off
          digitalWrite(2,LOW);
         // delay(500); // keep it off for at least half a second to prevent bounce
      }
      if (command==68){                 //if command ="D" sound tone
        tone(9,220);
      }
      if (command==69){                 //if command ="E" end tone
        noTone(9);
      }
          command = 0;                 // reset command
   }
    delay(50);
    Average10(); // take averaged sample
    delay(50);
    Serial.flush();
   // if (temp <=0)  {temp = 0;} // if it goes negative just utput 0
    Serial.print("@- ");
    Serial.print(temp);       // output to computer USB port
    Serial.println(" -Tmp ");
 
 }
If you are interested in the VB app I'll send you a copy.
Logged

Pages: 1 [2]   Go Up
Jump to: