열전대온도센서 를 연결 하기 위해 여러 유형의 변환기를 사용할 수 있습니다 .
열전대는 매우 낮은 온도와 매우 높은 온도를 측정할 수 있습니다.
K-타입 열전대온도센서를 마이크로컨트롤러 SPI 버스에 연결하기 위한 MAX6675 모듈
저렴한 MAX6675모듈은 SPI 버스를 통해 열전대에서 가져온 데이터를 전송합니다.
보드에 12비트 ADC가 있습니다.
0 ~ + 700 ℃의 온도만 측정하고 열전대의 파손을 감지할 수 있습니다. 가격은 약 1.5 USD입니다.
K-타입 열전대온도센서를 SPI 버스의 마이크로컨트롤러에 연결하기 위한 MAX31855 모듈
MAX6675를 대체하는 보다 고가의 최신 모듈인 MAX31855 도 SPI 버스를 통해 데이터를 전송합니다.
기능은 MAX6675보다 우수합니다.
- 14비트 ADC.
- 파손의 정의the definition of the breakage와는 별도로
열전대 출력은 VCC 또는 GND에 의해 추가로 결정됩니다. - 측정된 온도 범위 -270 ~ +1768 ℃(최대 범위).
- 가격은 약 1.9 USD이며 러시아로부터 배송됩니다.
열전대에 MAX31855 연결
그 판에는 한 가지 문제가 있습니다. 나사 커넥터는 개발자가 의도한 대로 열전대 단자를 고정할 수 없습니다.
터미널 절반의 나사를 조여야 하지만 정상적으로 유지됩니다.
에 Aliexpress 가능 적어도 세 MAX31855와 보드의 변형. 가장 비싼 것은 광범위한 스트랩과 함께 제공됩니다. 비용은 약 8 USD입니다. 저렴한 옵션의 차이점을 몰랐습니다. 3V와 Vin 입구가 따로 있다는 점만 빼면. 나는 1.9 USD 보드를 사용했고 3.3V를 공급했습니다. 중국산 비교 설명에서는 예산이 비싼 보드를 찾지 못했다.
- https://datasheets.maximintegrated.com/en/ds/MAX6675.pdf
- https://datasheets.maximintegrated.com/en/ds/MAX31855.pdf
기사 중 하나 에서 자동 치즈 요리를 위한 회로에 대해 썼습니다 . 우유의 온도와 증기욕의 액체 온도를 측정하기 위해 방금 열전대를 사용했습니다.
Wemos D1 min 및 MAX6675K
MAX6675K | 위모스 D1 미니 |
Vcc | 3.3V(저는 BP를 사용했습니다) |
접지 | 접지 (BP 및 Wemos D1 Mini에서) |
그래서 | D6(GPIO12) |
SS/CS | D7(GPIO13) |
Csk | D8(GPIO15) |
Earth (GND) MAX6675 및 (GND) Wemos D1 Mini는 MAX6675가 별도의 전원으로 구동되는 경우 연결되어야 합니다.
SPI 인터페이스는 데이터 교환을 위해 4개의 라인을 사용합니다.
- SCLK-직렬 클럭: 클럭 신호(리드에서) 기타
명칭: SCK, CLK - MOSI-마스터 출력, 슬레이브 입력: Vedomo
mudrugie 표기법으로 이어지는 데이터 : SDI, DI, SI - MISO — 마스터 입력, 슬레이브 출력: Vedushhemudrug
즉 구동 표기법의 데이터: SDO, do, SO - SS-슬레이브 선택: 슬레이브 선택; 에 의해 설립
NCS, CS, CSB, CSN, NSS, STE : 다른 명칭
https://github.com/YuriiSalimov/MAX6675_Thermocouple 라이브러리가 사용됩니다. d MAX6675 카드에서 열전쌍 데이터를 제거합니다. A dafruit Max6675 라이브러리 의 이전 라이브러리를 기반으로 합니다.
#include "MAX6675_열전대. H"//https://github.com/YuriiSalimov/MAX6675_Thermocouple
#define SCK_PIN 15//D8
#define CS_PIN 13//D7
#define SO_PIN 12//D6
/**
평균 온도를 결정하기 위해 얼마나 많은 판독값을 취했는지.
값이 많을수록 보정이 더 오래 수행되고,
그러나 판독 값이 더 정확할 것입니다.
*/
#define READINGS_NUMBER 20
/**
온도 판독 사이의 지연 시간
온도 센서(ms)에서.
*/
#define DELAY_TIME 20
MAX6675_Thermocouple * 열전쌍 = NULL ;
무효 설정 ()
{
연속물. 시작 ( 9600 ) ;
써모커플 = 새로운 MAX6675_Thermocouple ( SCK_PIN, CS_PIN, SO_PIN, Readings_number, DELAY_TIME ) ;
}
무효 루프 ()
{
Const 이중 섭씨 = 열전쌍- > readCelsius () ;
Const DOUBLE Kelvin = 열전대- > readKelvin () ;
Const 이중 화씨 = 열전쌍- > readFahrenheit () ;
연속물. 인쇄 ( "온도:" ) ;
연속물. Print ( 문자열 ( 섭씨 ) + "C," ) ;
연속물. Print ( String ( Kelvin ) + "K," ) ;
연속물. println ( 문자열 ( 화씨 ) + "F" ) ;
지연 ( 500 ) ;
}
프로그램 결과:
19 : 14 : 01.820 - > 온도 : 28.50 C, 301.65 K, 83.30 F
19 : 14 : 05.538 - > 온도 : 28.75 C, 301.90 K, 83.75 F
19 : 14 : 09.278 - > 온도 : 28.50 C, 301.65 K, 83.30 F
19 : 14 : 13.025 - > 온도 : 28.50 C, 301.65 K, 83.30 F
19 : 14 : 16.730 - > 온도 : 28.75 C, 301.90 K, 83.75 F
실내 온도가 28.5 Oc가 아니라 더 낮기 때문에 센서를 보정해야 합니다.
ESP32 DevKit 및 MAX6675K
이 요금은 ESP32 보드로 사용 됩니다.
MAX6675K | ESP32 데브킷 |
Vcc | 3.3V(저는 BP를 사용했습니다) |
접지 | 접지 (BP 및 Wemos D1 Mini에서) |
그래서 | 12 (IO12) |
SS/CS | 13 (IO13) |
Csk | 15 (IO15) |
변경되지 않은 코드는 ESP32에서 작동합니다.
#include "MAX6675_열전대. H"//https://github.com/YuriiSalimov/MAX6675_Thermocouple
#SCK_PIN 15 정의
#CS_PIN 13 정의
#SO_PIN 12 정의
/**
평균 온도를 결정하기 위해 얼마나 많은 판독값을 취했는지.
값이 많을수록 보정이 더 오래 수행되고,
그러나 판독 값이 더 정확할 것입니다.
*/
#define READINGS_NUMBER 20
/**
온도 판독 사이의 지연 시간
온도 센서(ms)에서.
*/
#define DELAY_TIME 20
MAX6675_Thermocouple * 열전쌍 = NULL ;
무효 설정 ()
{
연속물. 시작 ( 9600 ) ;
써모커플 = 새로운 MAX6675_Thermocouple ( SCK_PIN, CS_PIN, SO_PIN, Readings_number, DELAY_TIME ) ;
}
무효 루프 ()
{
Const 이중 섭씨 = 열전쌍- > readCelsius () ;
Const DOUBLE Kelvin = 열전대- > readKelvin () ;
Const 이중 화씨 = 열전쌍- > readFahrenheit () ;
연속물. 인쇄 ( "온도:" ) ;
연속물. Print ( 문자열 ( 섭씨 ) + "C," ) ;
연속물. Print ( String ( Kelvin ) + "K," ) ;
연속물. println ( 문자열 ( 화씨 ) + "F" ) ;
지연 ( 500 ) ;
}
결과:
21 : 16 : 42.882 - > 온도 : 26.25 C, 299.40 K, 79.25 F
21 : 16 : 46.554 - > 온도 : 26.75 C, 299.90 K, 80.15 F
21 : 16 : 50.256 - > 온도 : 26.50 C, 299.65 K, 79.70 F
21 : 16 : 53.926 - > 온도 : 26.25 C, 299.40 K, 79.25 F
21 : 17 : 30.707 - > 온도 : 26.50 C, 299.65 K, 79.70 F
이상하지만 ESP32는 ESP8266보다 정확한 온도를 읽습니다. 방의 온도는 약 26.5 Oc입니다.
ESP32 및 MAX31855
ESP32는 Adafrui t C 소프트웨어 에뮬레이션 에서 라이브러리를 얻었습니다 . GPIO는 MAX6675의 예와 동일하게 사용되었습니다.
#포함 < SPI. 시간.
#include "Adafruit_MAX31855. H"//https://github.com/adafruit/Adafruit-MAX31855-library/
기본 연결되어 사용하여 소프트웨어 SPI,하지만 주석 과 의 주석 하나
소프트웨어 SPI 와 하드웨어 SPI 사이 를 전환하는 아래의 두 가지 예 :
3개에서 소프트웨어 SPI를 사용하여 Thermocouple 인스턴스를 생성하는 예
디지털 IO 핀.
#MAXDO 12 정의
#MAXCS 13 정의
#MAXCLK 15 정의
열전대 초기화
Adafruit_MAX31855 열전대 ( MAXCLK, MAXCS, MAXDO ) ;
하드웨어 SPI로 Thermocouple 인스턴스를 생성하는 예
주어진 CS 핀에서.
#MAXCS 10 정의
Adafruit_MAX31855 열전대 ( MAXCS ) ;
무효 설정 () {
연속물. 시작 ( 115200 ) ;
연속물. println ( "MAX31855 테스트" ) ; 대기 에 대한 MAX 칩 안정
지연 ( 500 ) ;
}
무효 루프 () {
기본 판독 테스트, 현재 온도만 인쇄
연속물. 인쇄 ( "온도:" ) ;
더블 c = 열전대. 섭씨 읽기 () ;
if ( isNaN ( c )) {
연속물. println ( "열전쌍에 문제가 있습니다!" ) ;
또 다른
연속물. 인쇄 ( 문자열 ( c ) + "C," ) ;
연속물. Print ( 문자열 ( 열전대. readFarenheit ()) + "F," ) ;
연속물. println ( 문자열 ( 열전대. readInternal ()) + "C (내부)" ) ;
}
지연 ( 1000 ) ;
}
결과:
15시 39분 : 44.805 - > 온도 : 24.25 C, 77.90 F, 25.94 C ( 내부 )
15시 39분 : 45.977 - > 온도 : 24.25 C, 77.45 F, 25.88 C ( 내부 )
15:39 : 47.190 - > 온도 : 25.50 C, 77.90 F, 25.94 C ( 내부 )
15:39 : 48.396 - > 온도 : 25.25 C, 77.90 F, 25.94 C ( 내부 )
15시 39분 : 49.618 - > 온도 : 25.00 C, 78.35 F, 25.94 C ( 내부 )
하드웨어 SPI로 라이브러리를 실행해 보겠습니다.
- SPI MOSI-GPIO23
- SPI 미소-GPIO19
- SPI SCK-GPIO18
- SPI SS(CS)-GPIO5
코드는 훨씬 간단하지만 모든 것이 잘 작동합니다.
#포함 < SPI. 시간.
#include "Adafruit_MAX31855. H"//https://github.com/adafruit/Adafruit-MAX31855-library/
#MAXCS 5 정의
Adafruit_MAX31855 열전대 ( MAXCS ) ;
무효 설정 () {
연속물. 시작 ( 115200 ) ;
연속물. println ( "MAX31855 테스트" ) ; 대기 에 대한 MAX 칩 안정
지연 ( 500 ) ;
}
무효 루프 () {
기본 판독 테스트, 현재 온도만 인쇄
연속물. 인쇄 ( "온도:" ) ;
더블 c = 열전대. 섭씨 읽기 () ;
if ( isNaN ( c )) {
연속물. println ( "열전쌍에 문제가 있습니다!" ) ;
또 다른
연속물. 인쇄 ( 문자열 ( c ) + "C," ) ;
연속물. Print ( 문자열 ( 열전대. readFarenheit ()) + "F," ) ;
연속물. println ( 문자열 ( 열전대. readInternal ()) + "C (내부)" ) ;
}
지연 ( 1000 ) ;
}
https: //github.com/SV-Zanshin/MAX31855/Library 는 SPI 하드웨어에서 잘 작동합니다.
#포함 < MAX31855. h >//https://github.com/SV-Zanshin/MAX31855/
/**************************************************** *********************************************** ****************
* * 모든 프로그램 상수 선언 * *
************************************************** *********************************************** ***************/
Const uint32_t SERIAL_SPEED = 115200; < 전송 속도 설정 을위한 직렬 I / O를
Const uint8_t SPI_CHIP_SELECT = 5; < SPI 용 칩 선택 PIN
Const uint8_t SPI_MISO = MISO; < SPI 용 Master-In, Slave-Out PIN
Const uint8_t SPI_SYSTEM_CLOCK = SCK; < SPI 용 시스템 클록 PIN
/**************************************************** *********************************************** ****************
* * 전역 변수 선언 및 클래스 인스턴스화 * *
************************************************** *********************************************** ***************/
MAX31855_클래스 MAX31855; < MAX31855의 인스턴스 생성
/**************************************************** ************************************************** *********/ /*!
* @brief Arduino 메서드는 시작 시 시스템을 초기화하기 위해 한 번 호출됩니다.
* @details 부팅 또는 재시작 시 가장 먼저 호출되는 Arduino IDE 메서드입니다. 한 번만 호출됩니다.
* 그런 다음 제어는 메인 "loop()"로 이동합니다. 컨트롤이 반환되지 않는 메서드
* @반환 무효
************************************************** *********************************************** ***************/
무효 설정 ()
{
연속물. 시작 ( SERIAL_SPEED ) ;
#ifdef __Avr_atmegea32u4__//이것이 32U4 프로세서인 경우 인터페이스가 초기화될 때까지 3초 동안 기다립니다.
지연 ( 3000 ) ;
#endif
연속물. println ( F ( " MAX31855 용 소프트웨어 SPI 데모 프로그램 시작 하기 " )) ;
연속물. Print ( F ( "MAX31855 ensorn 초기화 중" )) ;
/**************************************************** *******************************************
* * 사용 중인 하드웨어 또는 소프트웨어 SPI 호출의 주석 해제 * *
************************************************** **********************************************/
while ( ! MAX31855. 시작 ( SPI_CHIP_SELECT )) // MAX31855 용 하드웨어 SPI
while ( ! MAX31855. Begin ( SPI_CHIP_SELECT, SPI_MISO, SPI_SYSTSEM_CLOCK )) // MAX31855 용 소프트웨어 SPI
{
연속물. println ( F ( "MAX31855를 시작할 수 없습니다. 3초 동안 대기 중입니다." )) ;
지연 ( 3000 ) ;
}//기기를 찾을 때까지 루프
연속물. println () ;
}//메소드 설정()
/**************************************************** ************************************************** *********/ /*!
* 메인 프로그램 루프를 위한 @brief Arduino 메소드
* @details 아두이노 IDE의 메인 프로그램으로 무한루프이고 계속 반복됩니다.
* @반환 무효
************************************************** *********************************************** ***************/
무효 루프 ()
{
int32_t 주변 온도 = MAX31855. readAmbient () ; MAX31855 다이 검색 주변 온도
int32_t 프로브 온도 = MAX31855. 읽기 프로브 () ; 열전대 프로브 온도 검색
uint8_t 오류 코드 = MAX31855. 오류 () ; 오류 코드 검색
if ( faultCode )//있는 경우 오류 코드 표시
{
연속물. 인쇄 ( "오류 코드" ) ;
연속물. 인쇄 ( faultCode ) ;
연속물. println ( "반환되었습니다." ) ;
}
또 다른
{
연속물. 인쇄 ( "주변 온도는" ) ;
연속물. 인쇄 (( float ) ambientTemperature/1000,3 ) ;
연속물. println ( "xC2xB0" "C" ) ;
연속물. 인쇄 ( "프로브 온도는" ) ;
연속물. 인쇄 (( float ) probeTemperature/1000,3 ) ;
연속물. println ( "xC2xB0" "Cn" ) ;
}//If-then-else 오류가 발생했습니다.
지연 ( 5000 ) ;
}//Of 메서드 루프()
유용한 링크
- MAX6675K 와 함께 작동하는 라이브러리 . Adafruit의 이전 라이브러리 코드를 기반으로 합니다.
- MAX6675 K 와 함께 작업하기 위한 Adafruit Li brary .
- MAX3185 5 와 함께 작업하기 위한 Adafruit Li brary .
- Adafruit보다 최신 MAX31855 와 함께 작동하는 라이브러리 .
- https://www.instructables.com/id/Power-and-Temperature-Data-Logger-With-ESP32-and-A/
- http://www.esp8266learning.com/wemos-max6675-example.php
- http://www.esp32learning.com/code/esp32-and-max6675-example.php
- http://henrysbench.capnfatz.com/henrys-bench/arduino-temperature-measurements/max6675-temp-module-arduino-manual-and-tutorial/
- http://www.electronoobs.com/eng_arduino_tut24.php
- https://protosupplies.com/product/max6675-thermocouple-temperature-module/
[출처] https://www.bizkit.ru/en/2019/03/13/13547/
'ESP32' 카테고리의 다른 글
How to work with RS485 interface on ESP32 (0) | 2021.08.23 |
---|---|
Inexpensive RS485 module with ESP32 (hardware serial) (0) | 2021.08.23 |
ESP32 Serial 통신 라이브러리 (0) | 2021.08.17 |
ESP32 Data Logging Temperature to MicroSD Card (0) | 2021.08.16 |
ESP32 NTP Client-Server: Get Date and Time (Arduino IDE) (0) | 2021.08.16 |