top of page
Crescer (fundo transparente)_Negativo_pn

Sensor PT100 com Arduino e ESP32

Atualizado: 9 de jan.

Medir a temperatura é uma necessidade em diversas aplicações, desde residenciais, dispositivos móveis, industriais e outros. Os PT100 são excelentes opções de sensores. Os PT100 são sensores de temperatura que contém um resistor que altera o valor da resistência conforme sua temperatura se altera.

 

Para facilitar a utilização de PT100 em projetos existe o módulo PTA8D08. Este módulo permite ler 8 PT100 utilizando protocolo MODBUS via RS485. Neste blog vamos ver como utilizar o PTA8D08 Para ler um PT100 utilizando ESP32.




Sumário




1. Conhecendo o módulo PTA8D08


O PTA8D08 é um módulo robusto, adequado para aplicações industriais, que permite a leitura de até 8 sensores de temperatura PT100. A comunicação com o módulo é feita via RS485 utilizando o protocolo MODBUS. Na figura a seguir podemos ver o módulo PTA8D08.



O módulo PTA8D08 possui todo o hardware e ferramentas necessárias para realizar a leitura dos sensores. Portanto, quando solicitamos o valor dos sensores, ele consegue entregar diretamente a temperatura medida.

 

No protocolo MODBUS cada dispositivo deve ter um endereço. Na figura a seguir podemos ver em destaque o conjunto de chaves que é utilizado para definir o endereço do PTA8D08  na rede. Desta forma, definindo endereços diferentes, podemos ligar mais de um módulo PTA8D08 juntos em um mesmo barramento.



Na figura a seguir é possível ver como podemos ligar três sensores de temperatura PT100 no PTA8D08. Em vermelho ligamos os pinos PT+ e em preto GND e PT-.



Na figura a seguir podemos ver a pinagem para alimentação e comunicação com o módulo PTA8D08.



Agora vamos ver como realizar a comunicação com o módulo PTA8D08 por meio de RS485, utilizando o protocolo industrial MODBUS. Para a comunicação via RS485, é essencial empregar o hardware apropriado, incluindo o MAX485. Neste blog, optamos pelo uso do PLC 32, uma de nossas placas projetadas com ESP32 e MAX485. O PLC 32 pode ser visualizado na figura abaixo.



O protocolo MODBUS pode ser implementado por meio de software. O módulo PTA8D08, utiliza o modo RTU (Remote Terminal Unit). Na figura a seguir, apresentamos o formato geral de uma mensagem transmitida nesse modo.



Cada campo da mensagem possui uma finalidade específica. Como exemplo podemos ver o campo “endereço”, que se refere ao valor que identifica o dispositivo na rede.

 

No momento que este artigo foi escrito, não encontramos nenhum manual que descreva com mais detalhes as funções e os registradores internos dele. Porém, com as informações que encontramos, descobrimos que, para fazer uma leitura dos sensores, devemos utilizar a função 0x03 (Leitura de bloco de registradores do tipo holding).

 

O campo “dado” representa o valor enviado, variando de acordo com a função executada. Geralmente, é o endereço do registrador a ser lido ou escrito, seguido pela quantidade de valores a serem lidos ou um valor a ser escrito no registrador. Para o PTA8D08 devemos ler o registrador 0x0000 para o sensor 1, 0x0001 para o sensor 2, 0x0002 para o sensor 3 e assim até o 0x0007 para o sensor 8.

 

No próximo tópico vamos ver com mais detalhes como realizar a comunicação entre ESP32 e o módulo PTA8D08.




2. Como utilizar o módulo PTA8D08 com ESP32


Agora podemos iniciar o estudo sobre como realizar a leitura do PTA8D08 com um ESP32. Para isso, desenvolvemos um código que permite ao ESP32 enviar a temperatura fornecida pelo PTA8D08 para o terminal serial. O código completo pode ser visualizado a seguir:


#include <ModbusMaster.h>

#define MAX485_dir  2
ModbusMaster node;

void preTransmission() {
  digitalWrite(MAX485_dir, 1);
}
void postTransmission() {
  digitalWrite(MAX485_dir, 0);
}

void setup() {
  pinMode(MAX485_dir, OUTPUT);
  digitalWrite(MAX485_dir, 0);

  Serial.begin(9600);
  Serial2.begin(9600);

  node.begin(1, Serial2);

  node.preTransmission(preTransmission);
  node.postTransmission(postTransmission);
}

void loop() {
  uint8_t result = node.readHoldingRegisters(0x0000, 1);
  Serial.println("Data Requested");

  if (result == node.ku8MBSuccess) {
    Serial.print("Temperatura: ");
    Serial.println(float(node.getResponseBuffer(0) / 10.00F));
  }
  delay(1000);
}

Primeiro vamos conhecer um pouco do hardware utilizado. Como já mencionado, para a elaboração deste exemplo utilizamos o PLC32. Essa placa possui integrado a ela um MAX485, juntamente com um circuito que isola a comunicação entre ele e o ESP32. São utilizados os pinos da Serial 2 do ESP32, pino 17 para RX e 16 para TX e o 2 para definir o sentido da comunicação. Para mais detalhes sobre o PLC 32 recomendamos consultar o manual da placa. Na figura a seguir podemos ver como conectar o sensor ao PLC 32.



Para a implementação do protocolo MODBUS, empregamos a biblioteca "ModbusMaster", que simplifica a incorporação de todas as particularidades do protocolo, incluindo cálculos CRC. Para utilizar esta biblioteca, é necessário criar um objeto da classe "ModbusMaster" para cada componente ou equipamento na rede. No exemplo dado, instanciamos o objeto "node" para a comunicação com o sensor:


ModbusMaster node;

A comunicação com esse objeto se dá utilizando a Serial 2. Ela será inicializada com o seguinte código:


Serial2.begin(9600);

Considerando o uso do RS485, é crucial definir o pino de direção da comunicação como saída. Isso é realizado da seguinte maneira:


pinMode(MAX485_DIR, OUTPUT);
digitalWrite(MAX485_DIR, 0);

Além disso, são necessárias funções para transmissão (definir pino 2 como nível alto) e recepção (definir pino 2 como nível baixo). Elas podem ser visualizadas abaixo:


void preTransmission() {
  digitalWrite(MAX485_DIR, 1);
}
void postTransmission() {
  digitalWrite(MAX485_DIR, 0);
}

Após a conclusão dessas etapas, é possível iniciar a comunicação com o objeto "node" usando o método "begin", onde informamos o endereço do dispositivo e o meio de comunicação utilizado. No exemplo, o endereço do dispositivo é 1 (definido utilizando as chaves), e optamos por utilizar a Serial2.


node.begin(1, Serial2);

Em seguida, informamos ao objeto "node" as funções que serão executadas antes e depois da comunicação, ou seja, as funções de envio e recebimento.


node.preTransmission(preTransmission);
node.postTransmission(postTransmission);

Assim, é estabelecida a comunicação entre o ESP32 e o PTA8D08 por meio do protocolo MODBUS. No exemplo, utilizamos a função "readHoldingRegisters" para a leitura dos registradores do tipo Holding em dispositivos Modbus, ou seja, os valores dos sensores. Além dessa função, a biblioteca oferece outras, dependendo do tipo de operação desejada, como:


readCoils: para ler valores de bobinas (coils) em dispositivos Modbus.

 

readInputRegisters: semelhante a "readHoldingRegisters", mas para ler registros de entrada.

 

writeSingleCoil: permite escrever um único valor de bobina (coil) em um dispositivo Modbus.

 

writeSingleRegister: permite escrever um único valor em um registro Modbus, seja de entrada ou de saída.

 

writeMultipleCoils: para escrever valores em múltiplas bobinas (coils) em um único pedido.

 

writeMultipleRegisters: similar a "writeSingleRegister", mas permite escrever valores em múltiplos registros Modbus.

 

Na função "readHoldingRegisters", indicamos ao dispositivo quais registradores serão lidos e a quantidade a ser lida a partir do primeiro. No exemplo, optamos por ler um registrador específico: 0x0000.

 

uint8_t result = node.readInputRegisters(0x0000, 1);

 

Caso a comunicação ocorra corretamente, a variável "result" receberá 0. A função "ku8MBSuccess" sempre retorna 0, sendo utilizada aqui para verificar a integridade dos dados recebidos. Na tabela a seguir, apresentamos outras funções e os códigos de erro correspondentes.



Para recuperar os valores recebidos, empregamos a função "getResponseBuffer". Nesta função, especificamos a posição do vetor a ser lido.

 

Caso tudo transcorra conforme o esperado, os resultados visualizados no monitor serial devem assemelhar-se à representação ilustrada na figura subsequente.



Neste exemplo, adotamos as configurações padrão do PTA8D08 e disponibilizamos um código-base para projetos futuros. Para aprofundar seus conhecimentos sobre o PTA8D08 e o protocolo MODBUSS, recomendamos assistir ao vídeo a seguir.



Posts recentes

Ver tudo

Blog Crescer

bottom of page