ESP32 MAX6675 열전대 모듈

다른 튜토리얼에서 다루는 대부분의 온도 센서 - DS18B20, DHT22, LM35 등 - 는 최대 측정 온도가 약 100-150°C 정도입니다. 방, 냉장고, 화단에는 충분하지만, 용광로나 납땜 인두 팁, 또는 피자 오븐 내부가 실제로 얼마나 뜨거운지 알아야 할 때는 쓸모가 없습니다. 이런 작업에는 취미가들이 대신 열전대를 사용하며, MAX6675라는 작은 디지타이저 칩과 함께 사용합니다.

이 튜토리얼에서는 ESP32를 MAX6675 브레이크아웃 보드 및 K형 열전대 프로브와 연결한 다음, 시리얼 모니터에서 섭씨와 화씨 두 가지로 온도를 읽어봅니다.

ESP32 max6675 열전대 모듈

준비물

1×38-pin ESP32 ESP-WROOM-32 Dev Module - Narrow 쿠팡 | 아마존
1×(또는) 38-pin ESP32 ESP-WROOM-32 Dev Module - Wide 쿠팡 | 아마존
1×(또는) 30-pin ESP32 ESP-WROOM-32 Dev Module - Wide 아마존
1×(또는) ESP32 Uno-form board 아마존
1×(또는) ESP32 S3 Uno-form board 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×MAX6675 Thermocouple Module 아마존
1×브레드보드 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) ESP32용 스크루 터미널 확장 보드 쿠팡 | 아마존
1×(추천) Breakout Expansion Board for ESP32 쿠팡 | 아마존
1×(추천) ESP32용 전원 분배기 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

열전대란 정확히 무엇인가요?

열전대는 서로 다른 두 금속 전선의 한쪽 끝을 용접하여 만든 것으로, 이 접합부를 열접점(hot junction)이라고 합니다. 이 접합부가 뜨거워지거나(또는 차가워지면) 전선 양단에 아주 작은 전압이 나타나며, 이 전압은 온도에 따라 오르내립니다. 섬세한 실리콘 센서가 아니라 그저 두 가닥의 전선이기 때문에, 열전대는 일반 센서라면 즉시 망가질 곳에서도 견디며 측정할 수 있습니다. 크로멜(Chromel)과 알루멜(Alumel) 전선으로 만든 K형이 단연 가장 흔하며, 대략 -328°F부터 +2300°F까지 측정할 수 있습니다.

MAX6675 모듈에 대하여

열전대에서 나오는 밀리볼트 수준의 신호는 그 자체로는 너무 작고 불안정해서 마이크로컨트롤러가 직접 읽을 수 없습니다. MAX6675 모듈이 이 문제를 해결합니다: MAX6675 IC를 중심으로 만든 작은 브레이크아웃 보드로, K형 프로브가 이미 연결된 상태로 함께 판매됩니다.

MAX6675 모듈 핀아웃

max6675 모듈 핀아웃
image source: diyables.io

브레이크아웃 보드의 MAX6675 칩은 프로브의 신호를 계속 샘플링하고, 내부에서 냉접점 보상을 한 뒤, 간단한 3선 버스를 통해 바로 사용할 수 있는 12비트 온도 값을 ESP32에 전달합니다. 핀은 다음과 같습니다:

  • VCC: 전원 입력, 3.0V ~ 5.5V.
  • GND: 접지.
  • SCK: 시리얼 클럭 입력, ESP32가 구동합니다.
  • CS: 칩 선택 - ESP32가 샘플을 읽는 동안 이 핀을 LOW로 내립니다.
  • SO: 시리얼 데이터 출력 전용 (데이터 입력 핀은 없습니다. 모듈은 명령을 받지 않고 데이터를 보내기만 합니다).

보드 반대쪽 가장자리에 있는 작은 나사 단자대에 프로브를 연결하며, +와 -로 표시되어 있습니다. 프로브의 빨간색 리드는 +에, 파란색 리드는 -에 연결합니다.

사양을 마저 정리하면: 브레이크아웃 보드 자체는 0°C부터 1024°C까지의 온도를 디지털로 변환할 수 있고, 약 ±3°C의 정확도를 가지며, 약 0.25°C 단위까지 측정값을 구분합니다 - 다만 다음에 설명할 기본 제공 프로브가 실제 제약 요인입니다.

기본 제공 K형 프로브

모듈과 함께 제공되는 프로브는 끝이 스테인리스강으로 된 얇은 케이블로, 길이는 약 18인치이며 정격 측정 범위는 0°C부터 80°C까지입니다 - 커피 한 잔이나 테라리움에는 괜찮지만, 가마를 측정하려면 더 높은 정격의 프로브가 필요합니다. 브레이크아웃의 단자대에 연결하는 끝부분에서 빨간색(양극)과 파란색(음극) 전선을 찾으세요.

배선도

ESP32에서 모듈에 전원을 공급합니다: VCC는 5V에(3.3V도 동작합니다), GND는 GND에 연결합니다. 나머지 세 핀 - SCK, CS, SO - 는 각각 ESP32의 아무 여유 GPIO에나 연결하면 됩니다. 라이브러리가 하드웨어 SPI 주변장치가 아니라 간단한 비트뱅잉으로 이 핀들을 구동하기 때문입니다. 마지막으로 열전대 프로브의 빨간색과 파란색 리드를 모듈의 +와 - 단자에 끼웁니다.

ESP32 max6675 열전대 모듈 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법.

MAX6675 모듈과 ESP32 간의 배선표

MAX6675 모듈 ESP32
VCC → 5V
GND → GND
SCK → GPIO19
CS → GPIO18
SO → GPIO5

ESP32 코드

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-max6675-thermocouple-module */ #include "max6675.h" const int SCK_PIN = 19; // ESP32's pin GPIO19 connected to SCK pin of the MAX6675 module const int CS_PIN = 18; // ESP32's pin GPIO18 connected to CS pin of the MAX6675 module const int SO_PIN = 5; // ESP32's pin GPIO5 connected to SO pin of the MAX6675 module // create a MAX6675 thermocouple object using the pins above MAX6675 thermocouple(SCK_PIN, CS_PIN, SO_PIN); void setup() { Serial.begin(9600); delay(500); // give the MAX6675 module time to power up before the first read } void loop() { // read the temperature and print it to the Serial Monitor Serial.print("Temperature: "); Serial.print(thermocouple.readCelsius()); Serial.print("C / "); Serial.print(thermocouple.readFahrenheit()); Serial.println("F"); delay(1000); // MAX6675 updates at most once every ~220ms, so pace the reads }

빠른 단계

  • ESP32가 처음이신가요? 먼저 ESP32 - 소프트웨어 설치부터 시작하세요.
  • 위의 배선도와 같이 MAX6675 모듈과 열전대 프로브를 ESP32에 연결합니다.
  • USB 케이블로 ESP32를 컴퓨터에 연결합니다.
  • Arduino IDE를 엽니다.
  • Tools 메뉴에서 맞는 ESP32 보드(예: ESP32 Dev Module)와 올바른 COM 포트를 선택합니다.
  • 왼쪽 아이콘 막대에서 Libraries 패널을 엽니다.
  • 검색 상자에 "MAX6675"를 입력하고 Adafruit에서 게시한 라이브러리를 찾습니다.
  • Install을 누릅니다.
  • Search for MAX6675 library created by Adafruit and click the Install button.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Library Manager
Type:
All
Topic:
All
MAX6675 library by Adafruit
Arduino library for interfacing with MAX6675 thermocouple amplifier More info
1.1.2
INSTALL
Newbiely.ino
···
1 void setup() {
Output
Serial Monitor
Ln 1, Col 1
ESP32 Dev Module on COM15
1
  • 위의 코드를 IDE에 붙여넣습니다.
  • Upload를 눌러 스케치를 ESP32에 업로드합니다.
  • 열전대 끝을 따뜻하게 하거나(손으로 잡거나, 입김을 불거나, 따뜻한 물에 담그기) 식힙니다.
  • 시리얼 모니터를 열어 측정값이 들어오는 것을 확인합니다.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Temperature: 23.50C / 74.30F Temperature: 23.75C / 74.75F Temperature: 24.25C / 75.65F Temperature: 26.00C / 78.80F Temperature: 29.50C / 85.10F Temperature: 34.75C / 94.55F Temperature: 38.25C / 100.85F
Ln 11, Col 1
ESP32 Dev Module on COM15
2

※ 주의:

측정값이 멈춰 있거나 분명히 잘못된 값이 보이나요? 먼저 SCK/CS/SO 배선을 다시 확인한 다음, 열전대의 빨간색과 파란색 리드가 모듈의 나사 단자에 단단히 끼워져 있는지 확인하세요 - 느슨한 리드가 값이 멈추거나 말이 안 되는 측정값의 가장 흔한 원인입니다.

코드 설명

스케치는 MAX6675 라이브러리 헤더를 포함하는 것으로 시작하며, 이를 통해 ESP32 스케치에서 MAX6675 클래스를 사용할 수 있습니다.

#include "max6675.h"

세 개의 상수는 모듈의 SCK, CS, SO 핀이 연결된 ESP32 GPIO를 기록합니다.

const int SCK_PIN = 19; // clock pin const int CS_PIN = 18; // chip select pin const int SO_PIN = 5; // serial data out pin

그런 다음 이 세 핀으로 thermocouple이라는 MAX6675 객체 하나를 생성합니다 - 스케치의 나머지 부분에서 측정값을 얻을 때 호출하는 것이 바로 이 객체입니다.

MAX6675 thermocouple(SCK_PIN, CS_PIN, SO_PIN);

setup()에서는 결과를 출력할 곳이 필요하므로 시리얼 포트만 시작하고, 첫 번째 측정 전에 MAX6675가 전원 공급을 마칠 수 있도록 잠시 지연을 둡니다.

void setup() { Serial.begin(9600); delay(500); }

loop() 안에서 중요한 라이브러리 호출은 두 가지입니다:

  • Thermocouple.readCelsius(): 최신 측정값을 섭씨 온도로 가져옵니다.
  • Thermocouple.readFahrenheit(): 같은 측정값을 화씨로 변환하여 가져옵니다.
Serial.print("Temperature: "); Serial.print(thermocouple.readCelsius()); Serial.print("C / "); Serial.print(thermocouple.readFahrenheit()); Serial.println("F");

loop 끝의 1초 delay() 덕분에 측정값이 시리얼 모니터를 가득 채우지 않고 보기 편한 속도로 스크롤됩니다.

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

댓글