ESP32 - Módulo Termopar MAX6675

A maioria dos sensores de temperatura que abordamos em outros tutoriais - o DS18B20, o DHT22, o LM35 e similares - chega no máximo a algo em torno de 100-150°C. Isso é mais do que suficiente para um cômodo, uma geladeira ou um canteiro de jardim, mas não serve para nada se você precisa saber o quanto esquenta de verdade um forno industrial, a ponta de um ferro de solda ou o interior de um forno de pizza. Para tarefas assim, os hobbistas usam um termopar, combinado com um pequeno chip digitalizador chamado MAX6675.

Neste tutorial, vamos conectar um ESP32 a uma placa breakout MAX6675 e a uma sonda termopar Tipo K e, depois, ler a temperatura no Serial Monitor em Celsius e em Fahrenheit.

Módulo termopar MAX6675 com ESP32

O Que Exatamente É um Termopar?

Um termopar é simplesmente formado por dois fios de metais diferentes soldados juntos em uma das pontas, formando o que chamamos de junção quente. Quando essa junção esquenta (ou esfria), uma tensão muito pequena aparece entre os fios, e essa tensão sobe e desce junto com a temperatura. Como são apenas dois pedaços de fio, e não um sensor de silício delicado, um termopar consegue sobreviver - e medir - em lugares que destruiriam na hora um sensor comum. A versão Tipo K, feita com fios de Chromel e Alumel, é de longe a mais comum e consegue trabalhar aproximadamente de -328°F a +2300°F.

Sobre o Módulo MAX6675

Sozinho, o sinal de nível de milivolts de um termopar é pequeno demais e ruidoso demais para um microcontrolador ler diretamente. O módulo MAX6675 resolve isso: ele é uma pequena placa breakout construída em torno do CI MAX6675, vendida junto com uma sonda Tipo K já conectada a ela.

Pinagem do Módulo MAX6675

Pinagem do módulo MAX6675
image source: diyables.io

O chip MAX6675 na breakout amostra continuamente o sinal da sonda, faz internamente a compensação da junção fria e entrega ao ESP32 uma leitura de temperatura de 12 bits pronta para uso por meio de um barramento simples de 3 fios. Seus pinos são:

  • VCC: entrada de alimentação, de 3.0V a 5.5V.
  • GND: terra.
  • SCK: entrada do clock serial, controlada pelo ESP32.
  • CS: seleção do chip (chip select) - o ESP32 coloca este pino em LOW enquanto está lendo uma amostra.
  • SO: apenas saída de dados serial (não existe pino de entrada de dados; o módulo nunca recebe comandos, ele só envia dados).

Um pequeno bloco de bornes de parafuso na borda oposta da placa é onde a sonda é conectada, marcado com + e -; o fio vermelho da sonda vai no + e o fio azul no -.

Para completar as especificações: a própria breakout consegue digitalizar temperaturas de 0°C até 1024°C, tem precisão de cerca de ±3°C e uma resolução de aproximadamente 0.25°C - embora a sonda incluída, descrita a seguir, seja o verdadeiro fator limitante.

A Sonda Tipo K Incluída

A sonda que vem com o módulo é um cabo fino com ponta de aço inoxidável, com cerca de 18 polegadas de comprimento, e ela é especificada apenas para 0°C a 80°C - ótima para uma xícara de café ou um terrário, mas você vai querer uma sonda com especificação mais alta antes de apontá-la para um forno de cerâmica. Procure os fios vermelho (positivo) e azul (negativo) na ponta que se conecta ao bloco de bornes da breakout.

Diagrama de Ligação

Alimente o módulo pelo ESP32: VCC no 5V (3.3V também funciona) e GND no GND. Os três pinos restantes - SCK, CS e SO - podem ir cada um para qualquer GPIO livre do ESP32, já que a biblioteca os controla com bit-banging simples, em vez de usar o periférico SPI de hardware. Por último, encaixe os fios vermelho e azul da sonda termopar nos terminais + e - do módulo.

Diagrama de ligação do módulo termopar MAX6675 com ESP32

This image is created using Fritzing. Click to enlarge image

Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.

Tabela de ligação entre o Módulo MAX6675 e o ESP32

Módulo MAX6675 ESP32
VCC → 5V
GND → GND
SCK → GPIO19
CS → GPIO18
SO → GPIO5

Código ESP32

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/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 }

Passos Rápidos

  • Novo no ESP32? Comece primeiro pela configuração do ambiente do ESP32 na Arduino IDE.
  • Ligue o módulo MAX6675 e a sonda termopar ao ESP32 como mostrado no diagrama acima.
  • Conecte o ESP32 ao seu computador com um cabo USB.
  • Abra a Arduino IDE.
  • Em Tools, escolha a placa ESP32 correspondente (por exemplo, ESP32 Dev Module) e a porta COM correta.
  • Abra o painel Libraries pela barra de ícones do lado esquerdo.
  • Digite "MAX6675" na caixa de pesquisa e encontre a biblioteca publicada pela Adafruit.
  • Clique em 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
  • Cole o código acima na IDE.
  • Clique em Upload para gravar o sketch no ESP32.
  • Aqueça a ponta do termopar (segure-a, assopre nela, mergulhe-a em água morna) ou deixe-a esfriar.
  • Abra o Serial Monitor para acompanhar as leituras chegando.
∞
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

※ Nota:

Está vendo uma leitura travada ou claramente errada? Primeiro verifique de novo a ligação dos pinos SCK/CS/SO e, depois, confirme se os fios vermelho e azul do termopar estão bem presos nos bornes de parafuso do módulo - um fio solto é a causa mais comum de uma leitura travada ou sem sentido.

Explicação do Código

O sketch começa incluindo o cabeçalho da biblioteca MAX6675, que dá ao sketch do ESP32 acesso à classe MAX6675.

#include "max6675.h"

Três constantes registram em quais GPIOs do ESP32 os pinos SCK, CS e SO do módulo estão ligados.

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

Em seguida, um único objeto MAX6675, thermocouple, é criado com esses três pinos - é ele que o resto do sketch vai chamar para fazer uma leitura.

MAX6675 thermocouple(SCK_PIN, CS_PIN, SO_PIN);

O setup() só precisa iniciar a porta serial, para termos onde imprimir os resultados, e fazer uma pequena pausa para deixar o MAX6675 terminar de ligar antes da primeira leitura.

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

Dentro do loop(), as duas chamadas da biblioteca que importam são:

  • Thermocouple.readCelsius(): obtém a leitura mais recente em graus Celsius.
  • Thermocouple.readFahrenheit(): obtém a mesma leitura convertida para Fahrenheit.
Serial.print("Temperature: "); Serial.print(thermocouple.readCelsius()); Serial.print("C / "); Serial.print(thermocouple.readFahrenheit()); Serial.println("F");

Um delay() de um segundo encerra o loop para que as leituras passem em um ritmo confortável, em vez de inundar o Serial Monitor.

Vídeo

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!