Arduino - Módulo Termopar MAX6675

Imagine que você quer verificar o quanto a ponta de um ferro de solda realmente esquenta, acompanhar o interior de um forno elétrico enquanto ele assa algo, ou registrar a temperatura da chaminé de um fogão a lenha. Os sensores DS18B20 e da série DHT, mostrados em nossos outros tutoriais, suportam no máximo uns 125°C - nem de longe o suficiente para trabalhos como esses, e forçá-los além do limite simplesmente vai queimar o chip.

É exatamente aí que entra o termopar. Neste tutorial, você vai ligar um módulo termopar MAX6675 - um breakout barato e fácil de encontrar que funciona com uma sonda termopar tipo K - a um Arduino e ler valores de temperatura em tempo real no Serial Monitor.

Arduino com módulo termopar MAX6675

O que Torna um Termopar Diferente

Um termopar não passa de dois fios de metais diferentes torcidos ou soldados juntos em uma das pontas. Essa ponta unida - a junção quente - produz uma tensão muito pequena quando é aquecida, e essa tensão sobe e desce junto com a temperatura. Como não há nenhum circuito frágil na ponta quente, apenas fio de metal simples, um termopar aguenta tranquilamente um calor que destruiria na hora um sensor eletrônico comum.

O tipo mais comum é o termopar tipo K, feito com um par de fios de Chromel e Alumel. Ele é barato, fácil de encontrar e consegue medir uma faixa enorme - aproximadamente de -328°F até +2300°F. O único problema é que o seu sinal de saída é de apenas alguns milivolts, pequeno demais para ser lido diretamente, então é preciso um chip dedicado para transformar essa tensão minúscula em uma leitura de temperatura de verdade. Esse chip é o MAX6675.

Sobre o Módulo MAX6675

O que você vai realmente comprar é uma pequena placa breakout construída em torno do chip MAX6675, vendida junto com uma sonda termopar tipo K.

Pinagem do Módulo MAX6675

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

A placa amostra a tensão da sonda, digitaliza com um ADC de 12 bits e entrega a leitura ao Arduino por uma ligação simples de 3 fios. Como o Arduino só precisa ler dados do chip, não há pino MOSI - apenas:

  • VCC: pino de alimentação, funciona com qualquer tensão de 3.0V a 5.5V.
  • GND: pino de terra.
  • SCK: linha de clock controlada pelo Arduino para retirar cada leitura do chip.
  • CS: chip select, mantido em nível baixo enquanto uma leitura está sendo feita.
  • SO: saída de dados serial - esta é a linha de dados somente leitura do módulo, que leva a leitura de 12 bits de volta ao Arduino.

Na borda oposta da placa há um pequeno borne de 2 pinos para a própria sonda: o fio vermelho vai no encaixe +, e o fio azul no encaixe -.

A sonda que vem no kit tem cerca de 18 polegadas de cabo e é especificada apenas de 0°C a 80°C, embora o chip MAX6675 por trás dela consiga digitalizar leituras de 0°C a 1024°C. Se um projeto precisar medir temperaturas acima de 80°C, você deve usar esse mesmo breakout com uma sonda tipo K para temperaturas mais altas, vendida separadamente, em vez da que vem na caixa.

Mais alguns números que vale a pena conhecer:

  • Tensão de operação: 3.0V a 5.5V
  • Faixa de medição: 0°C a 1024°C (a sonda do kit é limitada a 80°C)
  • Precisão: ±3°C
  • Resolução: cerca de 0.25°C

Diagrama de Ligação

Ligue o pino VCC do módulo ao pino 5V do Arduino e o GND ao GND, depois escolha quaisquer três pinos digitais livres para SCK, CS e SO. Por fim, encaixe os fios vermelho e azul da sonda termopar no borne + e - do módulo.

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

This image is created using Fritzing. Click to enlarge image

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

Módulo MAX6675 Arduino Uno
VCC → 5V
GND → GND
SCK → 5
CS → 4
SO → 3

Código Arduino

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-max6675-thermocouple-module */ #include "max6675.h" // Define the Arduino pins connected to the MAX6675 module #define SCK_PIN 5 // Clock (SCK) pin #define CS_PIN 4 // Chip Select (CS) pin #define SO_PIN 3 // Serial Out (SO) pin MAX6675 thermocouple(SCK_PIN, CS_PIN, SO_PIN); // create a MAX6675 instance void setup() { Serial.begin(9600); // initialize serial communication delay(500); // give the module time to settle before the first read } void loop() { // read the temperature from the thermocouple in both units float tempC = thermocouple.readCelsius(); float tempF = thermocouple.readFahrenheit(); Serial.print("MAX6675 Temperature: "); Serial.print(tempC); Serial.print("\xC2\xB0"); // degree symbol Serial.print("C - "); Serial.print(tempF); Serial.print("\xC2\xB0"); // degree symbol Serial.println("F"); delay(1000); // MAX6675 needs ~220ms per conversion, so 1s keeps reads well-paced }

Passos Rápidos

  • Ligue o módulo MAX6675 ao Arduino Uno seguindo a tabela e o diagrama acima.
  • Prenda os fios vermelho (+) e azul (-) da sonda termopar no borne do módulo, se ainda não tiver feito isso.
  • Conecte o Arduino Uno ao seu computador com um cabo USB.
  • Abra o Arduino IDE e selecione a placa e a porta corretas.
  • Clique no ícone Libraries na barra lateral esquerda do Arduino IDE.
  • Pesquise "MAX6675" e encontre a biblioteca publicada pela Adafruit.
  • Clique no botão Install para adicioná-la.
  • Search for MAX6675 library created by Adafruit and click the Install button.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
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 Uno on COM15
1
  • Copie o código acima e abra-o no Arduino IDE.
  • Clique no botão Upload para enviar o sketch para o Arduino Uno.
  • Encoste a ponta da sonda em algo quente, ou segure-a na mão.
  • Abra o Serial Monitor e acompanhe as leituras chegando.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
MAX6675 Temperature: 23.00°C - 73.40°F MAX6675 Temperature: 23.25°C - 73.85°F MAX6675 Temperature: 31.50°C - 88.70°F MAX6675 Temperature: 45.75°C - 114.35°F MAX6675 Temperature: 62.00°C - 143.60°F MAX6675 Temperature: 74.25°C - 165.65°F MAX6675 Temperature: 79.50°C - 175.10°F
Ln 11, Col 1
Arduino Uno on COM15
2

※ Nota:

Se o Serial Monitor mostrar um valor travado ou claramente errado, verifique se SCK, CS e SO estão ligados exatamente nos pinos usados no sketch, e confira se os fios + e - da sonda estão bem presos no borne, e não apenas apoiados nele.

Explicação do Código

O sketch começa incluindo a biblioteca MAX6675, que cuida da comunicação de baixo nível com o chip.

#include "max6675.h"

Logo depois, três pinos são definidos do lado do Arduino - clock, chip select e saída de dados serial - correspondendo aos pinos que você ligou na seção anterior.

#define SCK_PIN 5 // Clock (SCK) pin #define CS_PIN 4 // Chip Select (CS) pin #define SO_PIN 3 // Serial Out (SO) pin

Em seguida, é criado um objeto MAX6675 chamado thermocouple, informando à biblioteca qual pino faz cada função.

MAX6675 thermocouple(SCK_PIN, CS_PIN, SO_PIN);

Dentro de setup(), só é preciso abrir a conexão serial, junto com um pequeno atraso para deixar o módulo estabilizar antes da primeira leitura.

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

Dentro de loop(), duas funções da biblioteca fazem todo o trabalho: readCelsius() e readFahrenheit() iniciam cada uma uma nova conversão no chip e retornam o resultado na unidade pedida.

float tempC = thermocouple.readCelsius(); float tempF = thermocouple.readFahrenheit();

Os dois valores são então mostrados em uma única linha do Serial Monitor, seguidos de uma pausa de um segundo antes de o loop se repetir.

Serial.print("MAX6675 Temperature: "); Serial.print(tempC); Serial.print("\xC2\xB0"); // degree symbol Serial.print("C - "); Serial.print(tempF); Serial.print("\xC2\xB0"); // degree symbol Serial.println("F"); delay(1000);

Essa pausa de um segundo é bem maior que os cerca de 220 milissegundos de que o MAX6675 precisa para concluir uma conversão internamente, então o Arduino nunca fica esperando por uma leitura que ainda não está pronta.

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!