아두이노 나노 MAX6675 열전대 모듈

다른 튜토리얼에서 다룬 대부분의 온도 센서, 즉 DHTxx 계열, DS18B20, LM35는 약 125°C 정도가 한계입니다. 방, 냉장고, 화단의 온도를 재는 데는 문제없지만, 가마나 훈연기 내부, 또는 소형 엔진의 배기 온도를 알아야 할 때는 쓸모가 없습니다. 그런 열을 측정하려면 완전히 다른 감지 소자, 즉 열전대가 필요합니다. 이 튜토리얼에서는 MAX6675 열전대 모듈을 아두이노 나노에 배선하고, 모듈이 알려 주는 온도를 섭씨와 화씨로 읽는 방법을 차근차근 알아봅니다.

아두이노 나노 max6675 열전대 모듈

준비물

1×아두이노 나노 쿠팡 | 아마존
1×USB A to Mini-B USB 케이블 쿠팡 | 아마존
1×MAX6675 Thermocouple Module 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) 아두이노 나노용 스크루 터미널 확장 보드 쿠팡 | 아마존
1×(추천) 아두이노 나노용 브레이크아웃 확장 보드 쿠팡 | 아마존
1×(추천) 아두이노 나노용 전원 분배기 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

열전대란 무엇인가요?

열전대는 서로 다른 금속으로 만든 두 개의 선을 한쪽 끝에서 용접해 붙인 것입니다. 이 접합부를 측온 접점(hot junction)이라고 하며, 가열되면 스스로 작은 전압을 만들어 냅니다. 이 현상을 제베크 효과(Seebeck effect)라고 합니다. 접점이 뜨거워질수록 전압이 더 많이 변하므로, 전압을 측정하면 온도를 알 수 있습니다. 끝부분 근처에 약한 실리콘 부품이 전혀 없기 때문에, 접점은 일반 전자 센서라면 순식간에 망가질 온도까지 견딜 수 있습니다.

제조사는 서로 다른 금속 조합으로 여러 가지 열전대 "타입"을 만드는데, 그중 K타입(크로멜과 알루멜 조합)이 단연 가장 흔하게 볼 수 있는 종류입니다. 저렴하고 튼튼하며, 대략 -328°F에서 +2300°F까지 측정할 수 있어서 취미 프로젝트에 필요한 거의 모든 범위를 다룰 수 있습니다.

문제는 열전대가 만드는 전압이 마이크로볼트 단위라는 점입니다. 아두이노 나노의 아날로그 입력으로 직접 읽기에는 너무 작고 노이즈도 너무 많습니다. 바로 그 일을 위해 설계된 것이 MAX6675 칩입니다.

MAX6675 열전대 모듈에 대하여

실제로 손에 쥐게 되는 것은 MAX6675 칩이 올라간 작은 브레이크아웃 보드와, 보드의 나사 단자에 연결된 K타입 프로브입니다.

MAX6675 모듈 핀아웃

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

MAX6675 칩은 열전대의 미세한 신호를 증폭하고, 내부에서 냉접점 오차를 보정한 다음, 바로 사용할 수 있는 12비트 온도 값을 출력합니다. 아두이노 나노는 간단한 3선 시리얼 인터페이스로 이 값을 읽습니다. 데이터는 모듈에서 나오기만 하고, 모듈로 들어가지는 않습니다. 보드에는 다섯 개의 핀이 있습니다:

  • VCC: 전원 입력으로, 3.0V ~ 5.5V를 사용할 수 있습니다.
  • GND: 접지 기준입니다.
  • SCK: 시리얼 클록으로, 아두이노 나노가 구동합니다.
  • CS: 칩 선택 핀으로, 측정값을 읽는 동안 아두이노 나노가 LOW로 끌어내립니다.
  • SO: 시리얼 데이터 출력입니다(모듈의 유일한 데이터 라인으로, 보내기만 하고 받지는 않습니다).

보드의 반대쪽 가장자리에는 프로브용 2핀 나사 단자가 있습니다. 빨간 선은 +에, 파란 선은 -에 연결합니다. 프로브 자체는 약 18인치 길이의 차폐 케이블 끝에 얇은 금속 팁이 달린 형태입니다. MAX6675 칩은 0°C에서 1024°C까지 디지털화할 수 있지만, 함께 제공되는 프로브의 정격은 0-80°C뿐입니다. 더 높은 온도를 측정할 계획이라면 이 한계를 기억하세요. 그런 경우에는 그에 맞는 고온용 프로브가 필요합니다.

나머지 사양을 정리하면, 이 모듈은 3.0-5.5V에서 동작하고, 약 0.25°C 단위로 온도를 구분하며, 정확도는 대략 ±3°C 이내입니다.

선연결

먼저 모듈에 전원을 연결합니다. VCC를 아두이노 나노의 5V 핀에, GND를 아무 GND 핀에 연결합니다. 그런 다음 SCK, CS, SO에는 비어 있는 디지털 핀 세 개를 아무거나 고릅니다. 라이브러리가 소프트웨어로 칩과 통신하므로 PWM이나 특별한 기능을 지원하는 핀일 필요는 없습니다. 마지막으로 열전대 프로브의 빨간 선을 모듈의 + 단자에, 파란 선을 - 단자에 연결합니다.

아두이노 나노 max6675 열전대 모듈 배선도

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

Arduino Nano와 기타 부품에 전원을 공급하는 가장 효과적인 방법은 다음 링크를 참조하세요: 아두이노 나노 전원 공급 방법.

MAX6675 모듈과 아두이노 나노의 배선표

MAX6675 모듈 아두이노 나노
VCC → 5V
GND → GND
SCK → 4
CS → 3
SO → 2

아두이노 나노 코드

/* * 이 아두이노 나노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-max6675-thermocouple-module */ #include "max6675.h" int SCK_PIN = 4; // Clock (SCK) pin int CS_PIN = 3; // Chip Select (CS) pin int SO_PIN = 2; // Serial Out (SO) pin MAX6675 thermocouple(SCK_PIN, CS_PIN, SO_PIN); // create a MAX6675 object with the specified pins void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. delay(500); // give the MAX6675 chip time for its first conversion } void loop() { Serial.print("Temperature: "); Serial.print(thermocouple.readCelsius()); // read temperature in Celsius Serial.print("\xC2\xB0"); // shows degree symbol Serial.print("C ~ "); Serial.print(thermocouple.readFahrenheit()); // read temperature in Fahrenheit Serial.print("\xC2\xB0"); // shows degree symbol Serial.println("F"); delay(1000); }

빠른 단계

  • 위의 배선도와 똑같이 MAX6675 모듈을 아두이노 나노에 연결합니다.
  • USB 케이블로 아두이노 나노를 PC에 연결합니다.
  • Arduino IDE를 열고 올바른 보드와 COM 포트를 선택합니다.
  • 왼쪽 사이드바에서 Libraries 아이콘을 클릭합니다.
  • 검색창에 "MAX6675"를 입력하고 Adafruit에서 게시한 라이브러리를 찾습니다.
  • Install을 눌러 IDE에 추가합니다.
  • Search for MAX6675 library created by Adafruit and click the Install button.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
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
Arduino Nano on COM15
1
  • 위 스케치를 IDE에 붙여넣습니다.
  • Upload를 눌러 아두이노 나노에 업로드합니다.
  • 프로브 끝을 따뜻한 물체에 대 봅니다. 첫 테스트로는 뜨거운 물 한 컵이 좋습니다.
  • 시리얼 모니터를 열고 측정값이 들어오는 것을 확인합니다.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
Temperature: 24.50°C ~ 76.10°F Temperature: 24.75°C ~ 76.55°F Temperature: 26.00°C ~ 78.80°F Temperature: 29.25°C ~ 84.65°F Temperature: 33.50°C ~ 92.30°F Temperature: 38.75°C ~ 101.75°F Temperature: 41.00°C ~ 105.80°F
Ln 11, Col 1
Arduino Nano on COM15
2

※ 주의:

무엇을 해도 시리얼 모니터에 같은 값만 계속 출력된다면, 먼저 SCK/CS/SO 배선을 다시 확인하세요. 핀이 뒤바뀐 것이 이 모듈에서 단연 가장 흔한 실수입니다.

코드 설명

먼저 MAX6675 라이브러리 헤더를 불러옵니다:

#include "max6675.h"

다음으로, 모듈의 SCK, CS, SO 핀으로 연결되는 선에 사용할 세 개의 핀 번호를 선언합니다:

int SCK_PIN = 4; // Clock (SCK) pin int CS_PIN = 3; // Chip Select (CS) pin int SO_PIN = 2; // Serial Out (SO) pin

그런 다음 이 세 핀을 MAX6675 클래스의 생성자에 넘겨 thermocouple 객체를 만듭니다:

MAX6675 thermocouple(SCK_PIN, CS_PIN, SO_PIN);

setup() 안에서는 시리얼 모니터 연결만 열면 되며, MAX6675 칩이 첫 번째 내부 변환을 완료할 시간을 주기 위해 잠시 대기합니다:

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

loop() 안에서 스케치는 thermocouple 객체에 섭씨로 한 번, 화씨로 한 번, 두 번 측정값을 요청하고 둘 다 시리얼 모니터에 출력합니다:

Serial.print("Temperature: "); Serial.print(thermocouple.readCelsius()); Serial.print("\xC2\xB0"); Serial.print("C ~ "); Serial.print(thermocouple.readFahrenheit()); Serial.print("\xC2\xB0"); Serial.println("F");

루프 마지막에는 1초 지연이 있어서, MAX6675 칩에 연달아 요청을 퍼붓지 않으면서도 시리얼 모니터에서 측정값을 쉽게 따라갈 수 있는 속도를 유지합니다.

동영상

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

댓글