搜索代码

Using a MAX6675 K-Type Thermocouple with Relay and Display

Using a MAX6675 K-Type Thermocouple with Relay and Display

This project demonstrates how to interface a MAX6675 K-type thermocouple with an Arduino, incorporating a relay for control and a display for temperature readings. This setup is invaluable for various applications where precise temperature monitoring and automated responses are needed. Here are some project ideas:

MAX6675 Thermocoupler module
  • Overheat protection for sensitive electronics
  • Temperature-controlled incubator for biological experiments
  • Automated brewing system for coffee or beer
  • Industrial process monitoring and control
  • Environmental monitoring in a greenhouse or other controlled environment

Hardware/Components

To build this project, you will need the following components:

  • Arduino Uno (or compatible board)
  • MAX6675 K-type thermocouple module (in video at 00:58)
  • Relay module
  • TM1637 4-digit LED display module
  • Jumper wires
  • Connecting wires

Wiring Guide

The wiring is explained in the video (in video at 05:36). The specific connections depend on whether you are using a surface mount chip or a PCB module. Refer to the video for a detailed wiring diagram.

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

Code Explanation

The Arduino code uses the MAX6675 library to read temperature values from the thermocouple. The key configurable parts of the code are:

  • Thermocouple pin definitions: thermoDO, thermoCS, and thermoCLK (in video at [03:53]). These pins need to be adjusted according to your wiring scheme.
  • Relay control pin: Pin 10 is used to control the relay (in video at [05:36]). Change this if needed.
  • Display configuration (if used): The code includes sections for configuring the TM1637 display. Adjust the CLK and DIO pins if necessary (in video at [03:53]).

The code includes functions to read temperature in Celsius and Fahrenheit. A crucial part of the code is the conditional statement that checks if the temperature exceeds a threshold (80.0°C in this example). If it does, the relay is activated (pin 10 goes 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
}

Live Project/Demonstration

The video demonstrates the project in action (in video at 06:59). The sensor accurately reads the ambient temperature and increases when heated. The relay functionality is also showcased.

Chapters

  • [00:00] Introduction
  • [00:39] Sensor Overview
  • [01:40] Pin Connections
  • [02:22] Library Installation
  • [03:53] Code Explanation (Setup)
  • [04:06] Code Explanation (Loop)
  • [05:36] Wiring
  • [06:59] Live Demonstration

图像

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)
语言: 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)
语言: C++
/*
 * 这是用于MAX6675 K型热电偶、继电器和显示器的Arduino代码。输出引脚10连接到继电器。当温度达到预定值时,引脚10会使继电器开启。
 * 
 * 该代码在我们的视频中进行了讲解,视频链接为https://youtu.be/cD5oOu4N_AE
 * 
 * 作者:Ahmad Nejrabi,Robojax视频
 * 日期:2017年12月9日,加拿大安大略省Ajax
 * 允许分享此代码,前提是保留此说明。
 * 免责声明:此代码为“按现状”提供,仅用于教育目的。
 * 
 * /
 * 
 * // 此示例为公共领域。请享用!
 * // 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);
 // 使用Arduino引脚
  pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH);
  pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW);
    pinMode(10, OUTPUT); // 将引脚10设置为输出

  Serial.println("Robojax: MAX6675 test");
 // 等待MAX芯片稳定
  delay(500);
}

void loop() {
 // 基本读数测试,仅打印当前温度


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

 // 如果温度超过80.0°C,开启继电器。
   if(thermocouple.readCelsius() > 80.00){
    digitalWrite(10, LOW); // 将引脚10设置为低电平
   }else{
    digitalWrite(10, HIGH); // 将引脚10设置为高电平
   }


   delay(1000);
}
26-Arduino code for a MAX6675 K-type thermocouple with relay and display
语言: C++
/*
 * 这是用于MAX6675 K型热电偶与继电器和显示器的Arduino代码。输出引脚10连接到继电器。当温度达到所需值时,引脚10会使继电器开启。温度也会在显示器上显示。您必须包含TM1637库才能使显示器工作。您可以从http://robojax.com/learn/library下载TM1637。该代码已在我们的视频中解释,视频链接为https://youtu.be/cD5oOu4N_AE。
 * 
 * 作者:Ahmad Nejrabi,Robojax视频
 * 日期:2017年12月9日,加拿大安大略省Ajax
 * 允许分享此代码,前提是该说明与代码一同保留。
 * 免责声明:该代码为“按原样”提供,仅用于教育目的。
 */
#include "max6675.h"
#include <Arduino.h>
#include <TM1637Display.h>

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

 // 显示的代码
#define CLK 2
#define DIO 3
#define TEST_DELAY   2000
TM1637Display display(CLK, DIO);
 // 显示结束的代码

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

void setup() {
  Serial.begin(9600);
 // 使用Arduino引脚
  pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH);
  pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW);
  pinMode(10, OUTPUT); // 将引脚10设置为输出

  Serial.println("Robojax: MAX6675 test");
 // 等待 MAX 芯片稳定。
  delay(500);
}

void loop() {
 // 基本读数测试,只需打印当前温度。

 // 显示的代码
  display.setBrightness(0x0f);
 // 所有段落开启
  uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 };
  display.setSegments(data);
  delay(1);
  int temp = (int) thermocouple.readCelsius();
  display.showNumberDec(temp, true, 3, 0);
 // 显示结束的代码
   Serial.print("C = ");
   Serial.println(thermocouple.readCelsius());
   Serial.print("F = ");
   Serial.println(thermocouple.readFahrenheit());

 // 如果温度超过 80.0C,则打开继电器。
   if(thermocouple.readCelsius() > 80.00){
    digitalWrite(10, LOW); // 将引脚10设置为低电平
   }else{
    digitalWrite(10, HIGH); // 设置引脚10为高电平
   }


   delay(1000);
}
27-Arduino code for two MAX6675 K-type thermocouples with relay (no display)
语言: C++
/*
 * 这是用于MAX6675 K型热电偶与继电器和显示器的Arduino代码。
 * 输出引脚10连接到继电器。
 * 当温度达到所需值时,引脚10将继电器打开。
 * 
 * 这段代码在我们的视频中进行了说明,网址为https://youtu.be/cD5oOu4N_AE
 * 
 * 作者:Ahmad Shamshiri,Robojax视频
 * 日期:2018年6月2日,加拿大安大略省Ajax
 * 许可分享此代码,前提是保留此注释。
 * 免责声明:此代码为“按原样”提供,仅用于教育目的。
 * 
 * /
 * 
 * // 这个示例为公共领域。尽情享受!
 * // 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); // 第一个热电偶
MAX6675 thermocouple2(thermoCLK2, thermoCS2, thermoDO2); // 第二个热电偶
int vccPin1 = 3;
int gndPin1 = 2;
int relayPin1 =10;

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

void setup() {
  Serial.begin(9600);
 // 使用Arduino引脚
  pinMode(vccPin1, OUTPUT); digitalWrite(vccPin, HIGH);
  pinMode(gndPin1, OUTPUT); digitalWrite(gndPin, LOW);
    pinMode(relayPin1, OUTPUT); // 将引脚10设置为热电偶1的输出。

  pinMode(vccPin2, OUTPUT); digitalWrite(vccPin, HIGH);
  pinMode(gndPin2, OUTPUT); digitalWrite(gndPin, LOW);
    pinMode(relayPin2, OUTPUT); // 将引脚13设置为热电偶2的输出

  Serial.println("Robojax: MAX6675 test");
 // 等待MAX芯片稳定。
  delay(500);
}

void loop() {
 // 基本读数测试,只需打印当前温度

 // 用于热电偶 1
   Serial.print("C = ");
   Serial.println(thermocouple.readCelsius());
   Serial.print("F = ");
   Serial.println(thermocouple.readFahrenheit());

 // 如果温度超过80.0摄氏度,将继电器打开。
   if(thermocouple1.readCelsius() > 80.00){
    digitalWrite(relayPin1, LOW); // 将引脚 relayPin1 设置为低电平
   }else{
    digitalWrite(relayPin1, HIGH); // 设置引脚 relayPin1 为高电平
   }
 // 热电偶1端

 // 用于热电偶2
   Serial.print("C2 = ");
   Serial.println(thermocouple2.readCelsius());
   Serial.print("F2 = ");
   Serial.println(thermocouple2.readFahrenheit());

 // 如果温度超过80.0摄氏度,将继电器打开。
   if(thermocouple2.readCelsius() > 80.00){
    digitalWrite(relayPin2, LOW); // 设置引脚 relayPin2 低电平
   }else{
    digitalWrite(relayPin2, HIGH); // 设置引脚 relayPin2 为高电平
   }
 // 热电偶2端

   delay(1000);
}

文件📁

没有可用的文件。