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.
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.