Buenos dias a todos...
He estado trabajando estos dias en realizar de modo facil un interface para la lectura de temperaturas mediante un termopar tipo K. El proyecto comercial es de Ryan McLeng y tiene a disposicion de todos el esquematico y los ficheros gerber de su trabajo, el tema es que por un metodo casero... es inviable dado el tamaño de los componentes y la placa.
Para poder hacerlo en casa, rehice el fichero eagle, para emplear el minimo de componententes superficiales posibles, excepto el Max31855 el level shifter y el regulador de tension de 3.3 v, el resto son componentes throught hole y facilmente localizables. Los componentes superficiales son en encapsulado Soic16, con un poco de paciencia se sueldan...
El resultado es el siguiente:
La libreria que emplea es la MAX31855.h que McLeng tiene en su repositorio.
El ejemplo tipo para la lectura de temperaturas es el siguiente:
/*
read_MAX31855.inoTODO:
Clean up code and comment!!
Also make use of all library functions and make more robust.This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
CC BY-SA 3.0 Deed | Attribution-ShareAlike 3.0 Unported | Creative Commons
*/#include <MAX31855.h>
// Adruino 1.0 pre-defines these variables
#if ARDUINO < 100
int SCK = 13;
int MISO = 12;
int SS = 10;
#endif
int LED = 9;// Setup the variables we are going to use.
double tempTC, tempCJC;
bool faultOpen, faultShortGND, faultShortVCC, x;
bool temp_unit = 1; // 0 = Celsius, 1 = Fahrenheit// Init the MAX31855 library for the chip.
MAX31855 temp(SCK, SS, MISO);void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
}void loop() {
x = temp.readMAX31855(&tempTC, &tempCJC, &faultOpen, &faultShortGND, &faultShortVCC, temp_unit);Serial.print(tempTC);
Serial.print("\t");
Serial.print(tempCJC);
Serial.print("\t");
Serial.print(faultOpen);
Serial.print(faultShortGND);
Serial.println(faultShortVCC);digitalWrite(LED, HIGH);
delay(500);
digitalWrite(LED, LOW);
delay(500);
}
Aqui vienen mis dudas...
Es posible emplear un bucle for para calcular la temperatura media de 10 muestras???
for (int i=0;i<10;i++)
temp_media=temp_TC(i)/10
De igual modo quisiera introducir un valor de correccion ya que hay un error aproximado de dos grados, respecto de una lectura con un medio de referencia como es el agua con hielo y sal, que en condiciones normales es inalterable y igual a 0ºC.
Este no da problemas
int correccion_temperatura= (valor real)
"temp_TC-correccion_temperatura".
No se si he cometido alguna barbaridad, no controlo mucho la sintaxis del entorno de programacion arduino.
Gracias por los consejos