Problema Lectura Termopar tipo K sin modulo ADC

Presentacio:

Hola soy estudiante de ingeniería y apenas llevo 2 meses usando Arduino Uno R, para mi servicio social debo instrumentar una bomba de calor usando 6 termopares para puntos diferentes. Los termopares de la bomba no los e identificado porque solo vienen en una protección transparente. Primero quiero aprender usar un termopar tipo K, para economizar no usare el acondicionador max6675.
Ya investigue en el foro y una solución es usar la tabla del termopar tipo K y establecer una relación para la temperatura en funcion de los miliVolts, no indican un diagrama de conexión por lo que yo me invente uno usando un amplificador operacional LM324.

Problema:
El problema que tengo esque los valores que pido usando analogRead no varian aunque los ponga en la flama o en hielo.

Yo esperaría que si por ejemplo estamos a 20°C recibe un valor de 750 con en analogRead que corresponde a 0.73 mV. Cuando este a 30°C debería recibir un valor de 1186.
Y la realidad es que a 90°C recibe como 752

Mi código es:

float temperatura;        // almacenara el valor leido
float sdigital;      // almacenar el valor Digital
int pinentrada = 0;        // utilizaremos el pin A0

void setup()
{
  Serial.begin(9600); // abrimos el puerto serial a 9600 bps
}

void loop()
{
  temperatura = analogRead(pinentrada);                // lectura del pin A0
  sdigital=(temperatura);
  temperatura = (temperatura / 1023 );
  
   Serial.print(" señar digital \n"); 
   Serial.print(sdigital);  
                                  
   Serial.print(" señal analogica mV"); 
  Serial.print(temperatura);                                     

  delay(1000);                                                         // espera un segundo
}

Espero me puedan ayudar

yo empezaria comprobando que tension tienes a la salida del amplificador operacional(opamp), varia con la temperatura?

luego me preguntaria ¿estoy usando el elemento de mediada mas adecuado?no se que estarás haciendo pero un termopar no es lo mejor para medir una sala a 20º se usan para temperaturas muy altas. aparte el termopar mide la diferencia de temperatura entre la caja donde esta atornillado y la punta (busca compensacion de union fria termopar). un lm35 es lo mas sencillo o un termistor.

¿puede ser que no sean termopares?

luego ¿que quieres hacer con esas 6 temperaturas?, ¿hacer la media?, ¿un control on off?

si quiero la media pongo todos en paralelo y listo ojo a que los colores de los cables

ahora
si es un on off lo mas sencillo es usar un opamp como comparador y con un potenciometro ajustas la temperatura a partir de la cual enciendes o apagas. no necesitas arduino para nada

si necesitas un control mas complicado o simplemente quieres ir guardando los datos entonces si que hace falta arduino.

en este enlace aparece una configuración muy sencilla(creo que el termopar esta al revés) y como calcular matemáticamente la temperatura

danos mas información de en que consiste tu proyecto

Hola y muchas gracias.
Voy a checar la tensión en el amplificador operacional.

Mencione que es para una Bomba de calor de una practica de Maquinas Termicas esta puede alcanzar temperaturas de asta 200°c y de -80°c, la maquina ya tiene instalado los termopares y están soldados con plata, asi que me pidieron que de preferencia no cambiarlos.

y lo que se quiere hacer es visualizar la temperatura de 6 puntos diferentes (estaran a temperaturas distintas) durante la operación de la maquina, para visualizarlos usare una o dos pantallas LCD.

Mas adelante se quiere usar el arduino para transmitir la informacion a dispositivos móviles.

Pero primero quiero poder obtener los datos correctamente. Y como mencione los valores que pido usando analogRead no varian aunque los ponga en la flama o en hielo.
termocu.png

a ver con ese montaje no vas a conseguir nada. esta comparando que un voltage sea mayor que el otro asi silo vas a conseguir una salida de 0 o 5v.

esa imagen esta en el link que te pase antes con la formula parar el arduino. pero antes de nada buscaba información de conexiones de opamp, pues igual necesitas crear un pequeño offset de la señal del opamp.

primero si pudieses tener alimentación positiva y negativa la lectura iba a ser mas sencilla pues podrías hacer que -100º fuese 0 y +200º fuese 5v así conseguirías la mayor resolución.

segundo si alimentas con 0v y +5v la tensión mínima que vas a conseguir en el opamp sera 0.5v y la máxima 4.5v, aprox igual se exageran mas los valores. y el circuito se complica un poco a la hora de calibrar pero con los valores que se indican en ese circuito no se si te valdrán pero necesitas si o si un termómetro para realizar la calibración del sofware

Te he enviado un privado para que corrijas tu primer y 2do post para que esten bajo normas.

A mi me gusta usar integrados dedicados.
Una termocupla se puede amplicar con un LM358 pero hay factores que no se estan considerando pero creo que no te va a interesar. Sin embargo como estudiante de ingeniería deberías tener presente que el termopar requiere de una compensación de juntura fria como se llama. Te dejo la inquietud para que la investigues

Aca hay un posible esquema aunque prefiero otro del tipo diferencial.


Todo el artículo esta en este link

Muchas gracias a los dos por sus consejos, de verdad me ayudan mucho.
por un lado no se que es offset de la señal del opamp (lo investigare) y por otro la compensación de junta fría, se realiza con una suma donde V,TemFinal= V(T,temopar) - V(T,ambiente) por lo que el voltaje ambiente es un factor constante de donde se encuentre por lo que entiendo esque si caliento la punta deberá variar el voltaje y eso no ocurre.
Dejare un link: https://forum.arduino.cc/index.php?topic=204291.0
en este plantean la calibración del termopar, básicamente esto es de la tabla de especificaciones se obtiene una función Temperatura respecto a los miliVolts.
Dejo la tabla del termopar tipo K
También dejo mi código con la calibración

int contador;

void setup(){
  
  contador=1;
  Serial.begin(9600);
 
}

void loop(){

  muestreo();
  contador++;
}

void muestreo(){

    int A=analogRead(A0);
    float B= float(A)/1023; // este valor en decimales ya son los microvolts
    float  X=float((24.18*B)+3.5447); // ecuación para convertir
    
    Serial.print(" Muestra: ");  //variable contadora
    Serial.print(contador);        //variable contadora
    Serial.print(" Medida Digital: ");
    Serial.print(A);
    Serial.print(" Medida Analogica: ");
    Serial.println(B,5);


delay(1000);
  }

Hola Nuevamente! :slight_smile:
ya investigue que es offset y ya entiendo por que es necesario a la hora de usar el amplificador, estoy usando el lm324 porque es muy económico pero posiblemente cambie a uno que me ayude mejor.
También ya lei y comprendi mejor lo de la compensación fría y encontré un ejemplo que lo hacen con un sensor LM35.
Creo que puedo hacer otro intento mejor. Gracias por su ayuda y cualquier cosa lo comunicare por aquí e inclusive los resultados

mira te voy a explicar un poco como lo haría yo:

lo voy a hacer a cuchillo nada de compensación fría ni o… , material necesario un termómetro o algo que me permita saber a que temperatura esta el termopar.

con la maquina a una temperatura conocida, mido la salida del opamp o la lectura del arduino y lo anoto, subo la temperatura y realizo otra vez lo mismo, ahora hago la ecuación de la recta y punto (tendrás error pero es lo mas sencillo y no creo que tengas tanto erro como para detectarlo), si pudieses hacer varias medidas metía los resultados en excel y hacia la gráfica, si da mas o menos lineal ni me molestaba.

si la intención es mantenerlo barato, con cualquiera de los circuitos que te pusimos lo puedes conseguir. tienes que poder conseguir primero que el opamp responda luego lo del arduino va sobre ruedas, si ves que no responde opcion A me lo he cargado, lo monto como comparador y si funciona pues el esquema estaba mal, opcion B la salida se semeja a 5v, seguramente este saturando el cacharro, opcion C la salida se semeja a 0v pues tengo poca ganancia o no hay tension entre 0v y una de las entradas

los opamp son muy puñeteros y tienen la dichosa costumbre de irse a los extremos pero al final mides los voltajes en sus patillas y ellos están haciendo lo correcto a no ser que estén muertos. normalmente suele ser que conectas algo al revés o que te equivocaste de patilla.

si quieres un poco mas de ayuda podría desempolvar mis apuntes de acondicionadores de señal. básicamente nos enseñaron a: tienes este trasto y quiero una salida 0 10 v para 0º a 1000º, y buscate la vida es cierto que para conseguir 0v necesitas alimentacion simetrica pero con decir de 1 a 4v igual consigues lo que quieres

Hola,
hace mucho tiempo usé termopar tipo K en cerámica, amplificando la señal con operacionales. Si tu temperatura máxima es de 200ºC te dará unos 8mV, tendrás que amplificar esa señal unas 625 de suerte que el tope sean 5V para el analogRead para una precisión máxima. Es más preciso utilizar chip específicos. Si en tu caso se trata de un ejercicio para aprender, adelante. Pon como tope 1000ºC, que son unos 40mV, los amplificas (x125) con dos operacionales uno detrás de otro, para que entre los dos lleguen a los 5V.

Hola, muchisimas gracias todos.
Al parecer he logrado conseguir usando un OP amp LM324 en lugar del LM358 con ayuda de la aportacion de juand91, extrañamente no me puedo explicar porque al final no necesito un compensador de junta fria y tampoco necesite ajustar el offset.
Para ajusta el offset vi un video (dejo el link) del uso de un termopar usando un OP-AMP TL081 pero no funciono, =(. Sin embargo logre conseguir lo que buscaba y era visualizar los milivolts para pasarlos a grados centigrados en arduino.
Aun no termino el proyecto pero logre un gran avance, gracias.

a ver conseguiste que el amplificador amplifique la entrada, lo de "compensación de junta fría" tienes que tenerlo en cuenta pues la medida que sale por el amplificador es la diferencia entre la junta fria y la caliente.

por software lo haces y tampoco pasa nada, consiste en sumar los grados de la temperatura ambiente. esos grados los puedes sacar del termometro interno que posee arduino.

perdona si no me esplique bien. el offset al que yo me refiero es una pequeña señal que tu metes al opamp por una de sus entradas + o - par que el la señal de salida a -200º se corresponda con un valor conocido de voltaje. aunque también se puede hacer por software.

que conste que vas a necesitar un termometro por infrarrojos o algo que te permita conocer la temperatura real. Pues al final tu tienes una entrada de x volt pero no sabes que º tienes