Código de Pesquisa

Usando um MAX6675 (termopar tipo K) com relé e display

Usando um MAX6675 (termopar tipo K) com relé e display

Este projeto demonstra como fazer a interface entre um termopar tipo K MAX6675 e um Arduino, incorporando um relé para controle e um display para leituras de temperatura. Esta configuração é inestimável para várias aplicações que exigem monitoramento preciso da temperatura e respostas automatizadas. Aqui estão algumas ideias de projetos:

MAX6675 Thermocoupler module
  • Proteção contra superaquecimento para equipamentos eletrônicos sensíveis
  • Incubadora com controle de temperatura para experimentos biológicos
  • Sistema automatizado de preparo de café ou cerveja
  • Monitoramento e controle de processos industriais
  • Monitoramento ambiental em uma estufa ou outro ambiente controlado

Hardware/Componentes

Para construir este projeto, você precisará dos seguintes componentes:

  • Arduino Uno (ou placa compatível)
  • Módulo termopar tipo K MAX6675 (no vídeo em 00:58)
  • Módulo de relé
  • Módulo de display LED de 4 dígitos TM1637
  • Fios jumper
  • Fios de ligação

Guia de fiação

A fiação é explicada no vídeo (no vídeo em 05:36). As conexões específicas dependem de você estar usando um chip de montagem em superfície ou um módulo PCB. Consulte o vídeo para um diagrama de fiação detalhado.

Arduino wiring for MAX6675 Thermocoupler module
Arduino wiring for MAX6675 Thermocoupler module

Explicação do Código

O código Arduino usa a biblioteca MAX6675 para ler valores de temperatura do termopar. As principais partes configuráveis do código são:

  • Definições dos pinos do termopar:thermoDO,thermoCS, ethermoCLK(no vídeo em [03:53]). Esses pinos precisam ser ajustados de acordo com seu esquema de fiação.
  • Pino de controle do relé: o pino 10 é usado para controlar o relé (no vídeo em [05:36]). Altere isso se necessário.
  • Configuração do display (se usado): O código inclui seções para configurar o display TM1637. Ajuste os pinos CLK e DIO, se necessário (no vídeo em [03:53]).

O código inclui funções para ler a temperatura em Celsius e Fahrenheit. Uma parte crucial do código é a instrução condicional que verifica se a temperatura excede um limiar (80.0°C neste exemplo). Se assim for, o relé é ativado (pino 10 fica LOW).


// If temperature goes above 80.0C, turn the relay ON
if(thermocouple.readCelsius() > 80.00){
  digitalWrite(10, LOW);// Set pin 10 LOW
} else {
  digitalWrite(10, HIGH);// Set pin 10 HIGH
}

Projeto/Demonstração Ao Vivo

O vídeo demonstra o projeto em ação (no vídeo aos 06:59). O sensor mede com precisão a temperatura ambiente e aumenta quando aquecido. A funcionalidade do relé também é demonstrada.

Capítulos

  • [00:00] Introdução
  • [00:39] Visão geral do sensor
  • [01:40] Conexões dos pinos
  • [02:22] Instalação da biblioteca
  • [03:53] Explicação do Código (Configuração)
  • [04:06] Explicação do Código (Laço)
  • [05:36] Fiação
  • [06:59] Demonstração ao vivo

Imagens

MAX6675 Thermocoupler module
MAX6675 Thermocoupler module
K-Type Thermocoupler module with wire
K-Type Thermocoupler module with wire
K-Type thermocoupler connector
K-Type thermocoupler connector
Arduino wiring for MAX6675 Thermocoupler module
Arduino wiring for MAX6675 Thermocoupler module
MAX6675 Thermocoupler module
MAX6675 Thermocoupler module
24-Arduino code for a MAX6675 K-type thermocouple (without relay and display)
Idioma: C++
/*
 * This is the Arduino code for MAX6675 Thermocouple K-Type with Relay and Display.
 * This code has been explained in our video at https://youtu.be/cD5oOu4N_AE.

 * 
 * Written by Ahmad Shamshiri for Robojax Video
 * Date: December 9, 2017, in Ajax, Ontario, Canada
 * Permission granted to share this code given that this
 * note is kept with the code.
 * Disclaimer: This code is "AS IS" and for educational purposes only.
 * 
 */

 // This example is public domain. Enjoy!
// www.ladyada.net/learn/sensors/thermocouple

#include "max6675.h"


int thermoDO = 4;
int thermoCS = 5;
int thermoCLK = 6;


MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
int vccPin = 3;
int gndPin = 2;
  
void setup() {
  Serial.begin(9600);
  // Use Arduino pins 
  pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH);
  pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW);
  
  Serial.println("Robojax: MAX6675 test");
  // Wait for MAX chip to stabilize
  delay(500);
}

void loop() {
  // Basic readout test, just print the current temperature


   Serial.print("C = "); 
   Serial.println(thermocouple.readCelsius());
   Serial.print("F = ");
   Serial.println(thermocouple.readFahrenheit());

   // If temperature goes above 80.0C, turn the relay ON
   if(thermocouple.readCelsius() > 80.00){
    digitalWrite(10, LOW);// Set pin 10 LOW
   }else{
    digitalWrite(10, HIGH);// Set pin 10 HIGH
   }
    
 
   delay(1000);
}
25-Arduino code for a MAX6675 K-type thermocouple with relay (no display)
Idioma: C++
/*
 * Este é o código Arduino para o termopar K-Type MAX6675 com relé e display. O pino de saída 10 está conectado ao relé. Quando a temperatura atinge o valor desejado, o pino 10 liga o relé.
 * 
 * Este código foi explicado em nosso vídeo em https://youtu.be/cD5oOu4N_AE
 * 
 * Escrito por Ahmad Nejrabi para Robojax Video. Data: 9 de dezembro de 2017, em Ajax, Ontário, Canadá. Permissão concedida para compartilhar este código, desde que esta nota seja mantida com o código. Isenção de responsabilidade: este código é "COMO ESTÁ" e para fins educacionais apenas. 
 * 
 * /
 * 
 *  // Este exemplo é de domínio público. Aproveite! // www.ladyada.net/learn/sensors/thermocouple
 */
#include "max6675.h"


int thermoDO = 4;
int thermoCS = 5;
int thermoCLK = 6;


MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
int vccPin = 3;
int gndPin = 2;

void setup() {
  Serial.begin(9600);
 // Use pinos do Arduino
  pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH);
  pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW);
    pinMode(10, OUTPUT); // defina o pino 10 como saída

  Serial.println("Robojax: MAX6675 test");
 // aguardar o chip MAX estabilizar
  delay(500);
}

void loop() {
 // teste básico de leitura, apenas imprima a temperatura atual


   Serial.print("C = ");
   Serial.println(thermocouple.readCelsius());
   Serial.print("F = ");
   Serial.println(thermocouple.readFahrenheit());

 // Se a temperatura ultrapassar 80,0 °C, ative o relé.
   if(thermocouple.readCelsius() > 80.00){
    digitalWrite(10, LOW); // defina o pino 10 como baixo
   }else{
    digitalWrite(10, HIGH); // defina o pino 10 como ALTO
   }


   delay(1000);
}
26-Arduino code for a MAX6675 K-type thermocouple with relay and display
Idioma: C++
/*
 * Este é o código Arduino para o termopar K-Type MAX6675 com relé e display. O pino de saída 10 está conectado ao relé. Quando a temperatura atinge o valor desejado, o pino 10 liga o relé. A temperatura também é exibida no display. Você deve incluir a biblioteca TM1637 para que o display funcione. Você pode baixar o TM1637 em http://robojax.com/learn/library. Este código foi explicado em nosso vídeo em https://youtu.be/cD5oOu4N_AE
 * 
 * Escrito por Ahmad Nejrabi para o vídeo Robojax. Data: 9 de dezembro de 2017, em Ajax, Ontário, Canadá. Permissão concedida para compartilhar este código, desde que esta nota seja mantida com o código. Aviso Legal: Este código é "COMO ESTÁ" e apenas para fins educacionais.
 */
#include "max6675.h"
#include <Arduino.h>
#include <TM1637Display.h>

int thermoDO = 4;
int thermoCS = 5;
int thermoCLK = 6;

 // Código para exibição
#define CLK 2
#define DIO 3
#define TEST_DELAY   2000
TM1637Display display(CLK, DIO);
 // Código para exibição de fim

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
int vccPin = 3;
int gndPin = 2;

void setup() {
  Serial.begin(9600);
 // Use pinos Arduino
  pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH);
  pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW);
  pinMode(10, OUTPUT); // defina o pino 10 como saída

  Serial.println("Robojax: MAX6675 test");
 // aguarde o chip MAX estabilizar
  delay(500);
}

void loop() {
 // Teste básico de leitura, apenas imprima a temperatura atual.

 // Código para exibição
  display.setBrightness(0x0f);
 // Todos os segmentos ativos
  uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 };
  display.setSegments(data);
  delay(1);
  int temp = (int) thermocouple.readCelsius();
  display.showNumberDec(temp, true, 3, 0);
 // Código para exibição de fim
   Serial.print("C = ");
   Serial.println(thermocouple.readCelsius());
   Serial.print("F = ");
   Serial.println(thermocouple.readFahrenheit());

 // Se a temperatura ultrapassar 80,0 °C, ligue o relé.
   if(thermocouple.readCelsius() > 80.00){
    digitalWrite(10, LOW); // defina o pino 10 como BAIXO
   }else{
    digitalWrite(10, HIGH); // defina o pino 10 como ALTO
   }


   delay(1000);
}
27-Arduino code for two MAX6675 K-type thermocouples with relay (no display)
Idioma: C++
/*
 * Este é o código Arduino para o termopar K-Type MAX6675 com relé e display.  
 * O pino de saída 10 está conectado ao relé.  
 * Quando a temperatura atinge o valor desejado, o pino 10 liga o relé.  
 * 
 * Este código foi explicado em nosso vídeo em https://youtu.be/cD5oOu4N_AE  
 * 
 * Escrito por Ahmad Shamshiri para Robojax Video  
 * Data: 02 de junho de 2018, em Ajax, Ontário, Canadá  
 * Permissão concedida para compartilhar este código, desde que esta  
 * nota seja mantida com o código.  
 * Isenção de responsabilidade: Este código é "COMO ESTÁ" e para fins educacionais apenas.  
 * 
 * /  
 * 
 * // Este exemplo é domínio público. Aproveite!  
 * // www.ladyada.net/learn/sensors/thermocouple
 */
#include "max6675.h"


int thermoDO1 = 4;
int thermoCS1 = 5;
int thermoCLK1 = 6;

int thermoDO2 = 7;
int thermoCS2 = 8;
int thermoCLK3 = 9;


MAX6675 thermocouple1(thermoCLK1, thermoCS1, thermoDO1); // primeiro termopar
MAX6675 thermocouple2(thermoCLK2, thermoCS2, thermoDO2); // 2º termopar
int vccPin1 = 3;
int gndPin1 = 2;
int relayPin1 =10;

int vccPin2 = 11;
int gndPin2 = 12;
int relayPin2 =13;

void setup() {
  Serial.begin(9600);
 // use pinos do Arduino
  pinMode(vccPin1, OUTPUT); digitalWrite(vccPin, HIGH);
  pinMode(gndPin1, OUTPUT); digitalWrite(gndPin, LOW);
    pinMode(relayPin1, OUTPUT); // defina o pino 10 como saída para termopar 1

  pinMode(vccPin2, OUTPUT); digitalWrite(vccPin, HIGH);
  pinMode(gndPin2, OUTPUT); digitalWrite(gndPin, LOW);
    pinMode(relayPin2, OUTPUT); // defina o pino 13 como saída para termopar2

  Serial.println("Robojax: MAX6675 test");
 // aguarde o chip MAX estabilizar
  delay(500);
}

void loop() {
 // teste básico de leitura, apenas exiba a temperatura atual

 // para termopar 1
   Serial.print("C = ");
   Serial.println(thermocouple.readCelsius());
   Serial.print("F = ");
   Serial.println(thermocouple.readFahrenheit());

 // se a temperatura ultrapassar 80,0°C, ligue o relé
   if(thermocouple1.readCelsius() > 80.00){
    digitalWrite(relayPin1, LOW); // defina o pino relayPin1 como BAIXO
   }else{
    digitalWrite(relayPin1, HIGH); // defina o pino relayPin1 ALTO
   }
 // termopar1 fim

 // para termopar 2
   Serial.print("C2 = ");
   Serial.println(thermocouple2.readCelsius());
   Serial.print("F2 = ");
   Serial.println(thermocouple2.readFahrenheit());

 // se a temperatura ultrapassar 80,0°C, ligue o relé
   if(thermocouple2.readCelsius() > 80.00){
    digitalWrite(relayPin2, LOW); // defina o pino relayPin2 LOW
   }else{
    digitalWrite(relayPin2, HIGH); // definir pino relayPin2 ALTO
   }
 // termopar2 final

   delay(1000);
}

Arquivos📁

Nenhum arquivo disponível.