conectar MAX6675 a arduino uno

buenos dias, soy nuevo en esto de arduino, estoy interesado en construir un sistema que pueda leer la temperatura en dos puntos dentro de un reactor, usando 2 termopares, especificamente en la entrada y en la salida de este.

la lista de materiales que he adquirido basado en información que he encontrado son:
2 Termopar tipo K, 1 arduino uno, 2 modulo MAX6675, y quiero que me muestre la temperatura en un display Lcd 16x2.

algo que encontre fue un diagrama y es en el que me estoy basando:

ahi encontre como que debo instalar una libreria para el MAX6675 y el código para ese circuito, pero aqui solo usan un MAX6675 y yo quiero conectar 2 a mi arduino uno, tambien falta la conexión del LCD donde quiero leer las 2 temperaturas. :confused:

ojalá puedan orientarme en este proyecto que necesito. de antemano muchas gracias.

El Max6675 es un dispositivo SPI (serial peripherical interface). Lo único que debes hacer es repetir las conexiones salvo la que se usa como CS (Chip Select).
Ahora como vas a agregar otro CS debes garantizar que cuando actives un MAX6675 el otro no este activo.
Para ello se ponen Resistencias de 10k pull up.
Habrá que ver si la librería tolera el control de dos MAX6675.

ya veo, entonces mejor hare dos sistemas por separado pára la lectura del termopar, pero aun así me faltaría la conexión del LCD de 16x2 para visualizar los datos. anexo el código que encontre para conectar el max6675 a un arduino uno, muchas gracias por su tiempo.

// Sample Arduino MAX6675 Arduino Sketch

#include "max6675.h"

int ktcSO = 8;
int ktcCS = 9;
int ktcCLK = 10;

MAX6675 ktc(ktcCLK, ktcCS, ktcSO);


void setup() {
Serial.begin(9600);
// give the MAX a little time to settle
delay(500);
}

void loop() {
// basic readout test

 Serial.print("Deg C = "); 
 Serial.print(ktc.readCelsius());
 Serial.print("\t Deg F = ");
 Serial.println(ktc.readFahrenheit());

 delay(500);
}

No necesitas dos Arduinos.
Repito en tu código mal posteado (favor de editar usando etiqueta </>)
dice

int ktcCS = 9;

Este es el Chip Select, o sea el pin que controla que el MAX6675 este o no habilitado.
Si usas dos compartes todos los pines pero usas otro pin para el segundo MAX6675

Supongamos

// Sample Arduino MAX6675 Arduino Sketch

#include "max6675.h"

int ktcSO    = 8;
int ktcCS1   = 9;         // chip select primer MAX6675
int ktcCLK   = 10;
int ktcCS2   = 11;        // chip select segundo MAX6675

MAX6675 ktc1(ktcCLK, ktcCS1, ktcSO);
MAX6675 ktc2(ktcCLK, ktcCS2, ktcSO);

 
void setup() {
  Serial.begin(9600);
  // give the MAX a little time to settle
  delay(500);
}

void loop() {
 // basic readout test
 
  Serial.print("Deg C = "); 
  Serial.print(ktc1.readCelsius());
  Serial.print("Deg C = "); 
  Serial.print(ktc2.readCelsius());
  delay(500);
}

Con la salvedad que pongas una resistencia de 10k en el pin 8 y otra en el pin 9 conectada a 5V en un extremo y al pin indicado en el otro.
Cuando el sistema consulte, pone en LOW ese pin y el otro al estar en HIGH deshabilita el integrado.

hola que tal

espero puedan apoyarme, es posible conectar 3 sensores Max6675 a un arduino, estuve revisando tutoriales pero no me queda claro lo de como conectarlos en cualquier pin de 3 a 13 manejaste este ejemplo
int ktcSO = 8;
int ktcCS = 9;
int ktcCLK = 10;

eso quiere decir que puedo ocupar cualquier salida de arduino o debe ser especial para conectar los pines

De antemano agradeceria que me apoyaran

gracias

Y no leíste la respuesta #3 donde explico como leer 2, pues extiendela a 3.

estimado surbyte, le agradezco mucho el valioso tiempo que le quito al intentar explicarme mis cuestionamientos, disculpa las molestias de antemano pero quizá lo que para usted es demasiado básico para mi no lo es tanto, como dije antes soy nuevo en todo esto de arduino , pero bueno . Intentando descifrar lo que me posteo la vez pasada (disculpe por tardar en responder) he batallado con el circuito y con el código y pues me ha quedado algo así:

#include <max6675.h>


int ktcSO    = 5;
int ktcCS1   = 6;         // chip select primer MAX6675
int ktcCLK   = 7;
int ktcCS2   = 4;        // chip select segundo MAX6675

MAX6675 ktc1(ktcCLK, ktcCS1, ktcSO);
MAX6675 ktc2(ktcCLK, ktcCS2, ktcSO);

 
void setup() {
  Serial.begin(9600);
  // give the MAX a little time to settle


pinMode(4, OUTPUT);
pinMode(6, OUTPUT);
  
  delay(500);
}

void loop() {
 // basic readout test
 digitalWrite(4,HIGH);
 digitalWrite(6,LOW);
  Serial.print("termopar 1 = "); 
  Serial.print(ktc1.readCelsius());
  delay(1000);
 
 digitalWrite(4,LOW);
 digitalWrite(6,HIGH); 
  Serial.print("termopar 2 = "); 
  Serial.print(ktc2.readCelsius());
  delay(1000);
  


}

no se si estoy bien, ni se lo que hice pero al parecer tengo lectura de los 2 termopares, ojala pueda orientarme en esto que creo que ya va tomando forma . un saludo y disculpe las molestias

NO entiendo que cambiaste en el código que yo te puse?
Solo veo que defines dos pines como salidas

pinMode(4, OUTPUT);
pinMode(6, OUTPUT);

Eso no agrega un tercer termopar.
Yo comprendo que seas nuevo pero lo que no comprendo como no te das cuenta que para definir un nuevo termopar solo debes definir un nuevo objeto

Ahora lo describiré paso a paso

Tu ejemplo inicial para solo 1 termopar

int ktcSO = 8;
int ktcCS = 9;             // <= este es el chip select el que debes usar para cada caso
int ktcCLK = 10;

MAX6675 ktc(ktcCLK, ktcCS, ktcSO);

Ahora lo que yo te sugerí para dos termopares

int ktcSO    =   8;
int ktcCLK   = 10;
int ktcCS1   =   9;        // chip select primer MAX6675
int ktcCS2   =   7;        // chip select segundo MAX6675 antes decia 11 y lo cambie a 7

MAX6675 ktc1(ktcCLK, ktcCS1, ktcSO);
MAX6675 ktc2(ktcCLK, ktcCS2, ktcSO);

Lo unico que hice fue definir un nuevo pin para el segundo termopar que es el 7 (en el ejemplo anterior puse 11 pero mejor este valor) y cree dos objetos bien diferenciados ktc1 y ktc2

Ahora ya que no lo ves, te doy la solución para tres

int ktcSO     =  8;
int ktcCS1   =  9;         // chip select primer MAX6675
int ktcCLK   = 10;
int ktcCS2   =  7;        // chip select segundo MAX6675 cambié de 11 a 7 pq 11 daría problemas
int ktcCS3   =  6;        // chip select tercer    MAX6675

MAX6675 ktc1(ktcCLK, ktcCS1, ktcSO);
MAX6675 ktc2(ktcCLK, ktcCS2, ktcSO);
MAX6675 ktc3(ktcCLK, ktcCS3, ktcSO);

Listo... cuando quieras imprimir usas

Serial.print("Deg C = "); 
Serial.print(ktc3.readCelsius());

una disculpa surbyte , creo que te respondi en el comentario que le hiciste a la persona que quiere lo de los 3 termopares y pensaste que el te habia escrito eso jaja, solo queria agradecer por que el código que me facilitaste fue el que sirvió, solo quera comprobar que lo hice bien.

mucas gracias , saludos

Si tienes razón.
Lo borraría pero ya esta, que quede.

buenas surbyte,

el caso es que no entiendo bien una de tus respuestas, ante la pregunta de otro forero de como conectar dos termopares tipo k a una sola placa de arduino.
El código me queda claro, lo que no tengo tan claro es la conexión física en la placa.

Ante:

Code: [Select]
#include "max6675.h"

int ktcSO = 8;
int ktcCS1 = 9; // chip select primer MAX6675
int ktcCLK = 10;
int ktcCS2 = 11; // chip select segundo MAX6675

Tu dices:

"Con la salvedad que pongas una resistencia de 10k en el pin 8 y otra en el pin 9 conectada a 5V en un extremo y al pin indicado en el otro.
Cuando el sistema consulte, pone en LOW ese pin y el otro al estar en HIGH deshabilita el integrado."

Es decir tengo que poner dos resistencias en el 8 y el 9, pero la del pin nueve conectada a 5v?

Me podrías aclarar esto??

Gracias, tengo que entregar el proyecto en dos semanas, pero he pensado que me gustaría añadir otro termopar

muchas gracias

un saludo

Un dispositivo SPI tiene basicamente 4 pines
CLK o CLOCK
MOSI envia datos SPI
MISO recibe datos SPI
CS o Chip Select que es el que habilita el integrado. Es NORMAL BAJO, o sea que cuando esta en LOW se habilita el dispositivo y cuando esta en HIGH esta deshabilitado.

Entonces cuando usas uno solo dispositivo no importa esta situación pero cuando conectas dos o mas, necesistas usar una resistencia PULL-UP de 10k.
Una R pull-up es una R que va del pin CS a 5V y se conecta donde debe en el arduino.

Entonces dos dispositivos MAX6675 con sus CS (chip selects) pines 9 y 11 no como tu afirmas 8 y 9.

Perdona que me he hecho un poco lío, dado el siguiente código:

Code: [Select]
#include "max6675.h"

int ktcSO = 8;
int ktcCS1 = 9; // chip select primer MAX6675
int ktcCLK = 10;
int ktcCS2 = 11; // chip select segundo MAX6675

Según la siguiente imagen de resistencia pull up, en que pines deberia conectarla?