El módulo MAX6675 me arroja valores de 0°C

Hola, alguien que me pueda ayudar, por favor. Compré un termopar tipo K de -60°C a 1250°C. Al hacer la conexión del módulo MAX6675 con el ArduinoMega, este arroja valores de 0°C.

Espero y me puedan aconsejar.

Anexo el código y una foto de la conexión.

#include <SPI.h>

// Definir los pines para la comunicación SPI con el MAX6675
#define MAX6675_SCK 52
#define MAX6675_CS 53
#define MAX6675_SO 50

void setup() {
  Serial.begin(9600); // Inicializar la comunicación serial
  // Configurar los pines para la comunicación SPI
  pinMode(MAX6675_CS, OUTPUT);
  pinMode(MAX6675_SO, INPUT);
  pinMode(MAX6675_SCK, OUTPUT);
  // Configurar el pin de selección de chip (CS) en alto por defecto
  digitalWrite(MAX6675_CS, HIGH);
}

void loop() {
  // Leer la temperatura del termopar
  float temperatura = leerTermopar();
  
  // Imprimir la temperatura en el Monitor Serie
  Serial.print("Temperatura: ");
  Serial.print(temperatura);
  Serial.println(" °C");

  delay(1000); // Esperar 1 segundo antes de la próxima lectura
}

float leerTermopar() {
  digitalWrite(MAX6675_CS, LOW); // Habilitar la lectura de datos
  
  delay(1); // Esperar un breve momento para que el MAX6675 se prepare para enviar datos
  
  // Leer los datos del termopar
  int dato = 0;
  for (int i = 14; i >= 0; i--) {
    digitalWrite(MAX6675_SCK, LOW); // Iniciar la conversión
    delayMicroseconds(1);
    digitalWrite(MAX6675_SCK, HIGH); // Hacer un pulso de reloj
    delayMicroseconds(1);
    bitWrite(dato, i, digitalRead(MAX6675_SO)); // Leer el bit y almacenarlo en la variable 'dato'
  }
  
  digitalWrite(MAX6675_CS, HIGH); // Deshabilitar la lectura de datos
  
  // Comprobar si hay un error de conexión
  if (bitRead(dato, 2)) {
    Serial.println("Error: Termopar desconectado");
    return NAN; // Devolver un valor no numérico (NaN)
  }
  
  // Descartar los bits irrelevantes (los bits 0 y 1)
  dato >>= 3;
  
  // Convertir los datos a temperatura (cada cuenta representa 0.25 grados Celsius)
  float temperatura = dato * 0.25;
  
  return temperatura;
}

psdt:

  • El cable morado es el SO -> 50
  • El cable azul es el CS -> 53
  • El cable verde es el CLK ->52
  • El cable blanco es el Gnd
  • El cable gris es el 5V



He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @brandon_unalm.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

Seguro que el blanco es GND?

Para mí, están invertidos GND y Vcc pero a lo mejor la foto engaña y lo que parece gris es blanco y lo que parece blanco es gris... :wink:

De todos modos, al margen del error de tipeo, según se ve en las fotos estaría bien conectado.

Agrego:

Creo que planteaste mal la secuencia de lectura porque según la hoja de datos del MAX6675
"Read the 16 output bits on the falling edge of the clock."
O sea, "Lea los 16 bits de salida en el flanco descendente del reloj."
Y los estarías leyendo en los flancos ascendentes.

Prueba así

  for (int i = 15; i >= 0; i--) {
    digitalWrite(MAX6675_SCK, LOW); // Iniciar la conversión
    delayMicroseconds(1);
    bitWrite(dato, i, digitalRead(MAX6675_SO)); // Leer el bit y almacenarlo en la variable 'dato'
    digitalWrite(MAX6675_SCK, HIGH); // Hacer un pulso de reloj
    delayMicroseconds(1);
  }

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.