Componentes Eletronicos

Termistor NTC para Controle de Temperatura

Eletrogate 26 de maio de 2022

Introdução

Neste post, será demonstrado o uso de um Termistor NTC para medição de temperatura utilizando um ESP32. Para o cálculo da temperatura, será utilizado a equação Steinhart-Hart, que determina a temperatura do termistor a partir de sua resistência. Por fim, será desenvolvido um projeto de exemplificação para controle de temperatura interna de uma chocadeira que ,através de um cooler e uma resistência de aquecimento, será mantida uma temperatura aproximada de 37.7 °C. Como otimização da leitura do sensor, será utilizado um algoritmo que realizará a média das 10 últimas leituras para o cálculo da temperatura com menos ruído do sensor. Para a visualização da temperatura, será utilizado o Plotter Serial da própria IDE Arduino.


Materiais Necessários para o Projeto Controle de Temperatura com Termistor NTC

Para este post, serão utilizados os seguintes materiais:

Para o projeto de exemplificação, será utilizado, adicionalmente o seguinte material:

cta_cart

 


O Termistor

O termistor, nome derivado do termo resistor termicamente sensível, é um sensor muito preciso e econômico para medição de temperatura. Estes sensores são, normalmente, usados ​​em uma faixa de -55 a +200 °C, mas há termistores que podem ter a faixa de medição de cerca de 0,01 kelvin a 2000 kelvins (-273,14 ° C a 1726,85 ° C).

História

O primeiro termistor NTC foi descoberto em 1833 por Michael Faraday (1791-1867), que relatou o comportamento semicondutor do sulfeto de prata. Faraday notou que a resistência do sulfeto de prata diminuiu drasticamente com o aumento da temperatura (Esta foi também a primeira observação documentada de um material semicondutor). Como os primeiros termistores eram de dificil produção e as aplicações para a tecnologia eram limitadas, a produção comercial de termistores não começou até a década de 1930 quando um termistor comercialmente viável foi inventado por Samuel Ruben (1900-1988).

Termistor NTC (coeficiente de temperatura negativa)

Neste, a resistência do sensor diminui conforme sua temperatura aumenta. Muitos destes termistores NTC são feitos de um disco prensado, haste, placa, cordão ou chip fundido de material semicondutor, como óxidos metálicos sintetizados. Eles funcionam porque o aumento da temperatura de um semicondutor aumenta o número de portadores de carga ativos. Quanto mais portadores de carga estiverem disponíveis, mais corrente um material pode conduzir.

Aplicações do termistor NTC

  • Como termômetro para medições de baixa temperatura, da ordem de 10 Kelvin;
  • Como um dispositivo limitador de corrente em circuitos de alimentação. O termistor apresenta uma resistência maior inicialmente, o que impede que grandes correntes fluam ao ligar. Depois, aquecem e apresentam uma resistência muito menor, o que permite maior fluxo de corrente durante a operação normal. Esses termistores são, geralmente, muito maiores do que os termistores do tipo de medição e são projetados propositadamente para esta aplicação;
  • Como sensores em aplicações automotivas para monitorar temperaturas de fluidos como o líquido de arrefecimento do motor, ar da cabine, ar externo ou temperatura do óleo do motor e alimentar as leituras relativas a unidades de controle como a ECU e ao painel;
  • Para monitorar a temperatura de uma incubadora;
  • Usados ​​em termostatos digitais modernos e para monitorar a temperatura das baterias durante o carregamento;
  • Usados ​​nas extremidades quentes das impressoras 3D (eles monitoram o calor produzido e permitem que o circuito de controle da impressora mantenha uma temperatura constante para derreter o filamento plástico);
  • Na indústria de manipulação e processamento de alimentos (Manter a temperatura correta é fundamental para prevenir doenças transmitidas por alimentos);
  • Em toda a indústria de eletrodomésticos para medição de temperatura. Torradeiras, cafeteiras, geladeiras, freezers, secadores de cabelo, etc. Todos contam com termistores para o controle adequado da temperatura.

Termistor PTC (coeficiente de temperatura positivo)

Neste, a resistência aumenta conforme a temperatura aumenta. A maioria dos termistores PTC são feitos de cerâmica policristalina dopada (contendo titanato de bário e outros compostos), que tem a propriedade de aumentar sua resistência repentinamente a uma determinada temperatura crítica. O titanato de bário é ferroelétrico e sua constante dielétrica varia com a temperatura. Por sua vez, este tipo de termistor é sub-dividido em duas categorias: Silistores e Termistor PTC tipo chaveamento.

Silistores

Utilizam o silício como material semicondutor. Ao contrário dos termistores PTC cerâmicos, os silistores têm uma característica de resistência-temperatura quase linear. Os termistores PTC de silício têm um desvio muito menor do que um termistor NTC.

Termistor PTC tipo chaveamento

O termistor PTC do tipo chaveado possui uma curva resistência-temperatura altamente não linear. Quando o termistor PTC tipo chaveamento é aquecido, a resistência começa a diminuir inicialmente, até que uma determinada temperatura crítica seja atingida. À medida que a temperatura é aumentada acima desse valor crítico, a resistência aumenta drasticamente.

Aplicações do termistor PTC

  • Como dispositivos limitadores de corrente para proteção de circuitos, como substitutos de fusíveis. A corrente através do dispositivo causa uma pequena quantidade de aquecimento resistivo. Se a corrente for grande o suficiente para gerar mais calor do que o dispositivo pode perder para o ambiente, o dispositivo aquece, fazendo com que sua resistência aumente. Isso cria um efeito de auto-reforço que impulsiona a resistência para cima, limitando a corrente;
  • Como aquecedor na indústria automotiva para fornecer calor adicional dentro da cabine com motor diesel ou para aquecer diesel em condições climáticas frias antes da injeção do motor;
  • Em osciladores controlados por tensão de sintetizador (instrumento musical eletrônico) com compensação de temperatura;
  • Em circuitos de proteção de baterias de lítio;
  • Em enrolamentos de muitos motores elétricos e transformadores de potência do tipo seco (quando usados ​​em conjunto com um relé de monitoramento, eles fornecem proteção contra superaquecimento para evitar danos ao isolamento);
  • Em osciladores de cristal para compensação de temperatura, controle de temperatura de equipamentos médicos e automação industrial.

Fonte das informações acima.


Equação Steinhart-Hart

Para a obtenção da temperatura a partir da resistência, é utilizada a equação de parâmetro β, uma equação derivada da equação de Steinhart-Hart. A equação de Steinhart-Hart é uma expressão empírica que foi determinada como sendo a melhor expressão matemática para a relação de temperatura e de resistência de termistores NTC, pois fornece uma boa aproximação da temperatura real e é útil em toda a faixa de temperatura de trabalho do sensor.

História

A equação recebeu o nome de John S. Steinhart (1929-2003) e Stanley R. Hart(1935-) , que publicaram a relação pela primeira vez em 1968. O Professor Steinhart foi membro da União Geofísica Americana e da Associação Americana para o Avanço da Ciência e também foi membro do corpo docente da Universidade de Wisconsin-Madison de 1969 a 1991. O Dr. Hart é um cientista sênior da Woods Hole Oceanographic Institution desde 1989 e membro da Sociedade Geológica da América, da União Geofísica Americana, da Sociedade Geoquímica e Associação Europeia de Geoquímica, à qual foi associado com o professor Steinhart na Carnegie Institution de Washington quando a equação foi desenvolvida.

A Equação Steinhart-Hart

A sentença da equação Steinhart-Hart, descrita anteriormente, é

Onde,

  • T é a temperatura a ser medida (em Kelvin);
  • R é a resistência obtida em T (em ohms);
  • A, β, e C são os coeficientes de Steinhart-Hart, que variam dependendo do tipo e modelo do termistor e da faixa de temperatura de interesse.

A Equação de parâmetro β

A Equação de parâmetro β, como dito antes, é uma equação derivada da equação de Steinhart-Hart. A sentença desta equação é

Onde,

  • T é a temperatura a ser medida (em Kelvin);
  • To é a temperatura de referência (em Kelvin) de 25 ºC (25 °C = 298.15 K);
  • Ro é a resistência do termistor em To;
  • Rt é a resistência do termistor;
  • β é o parâmetro Beta ou B, fornecido pelo fabricante em sua especificação.

Medindo a Resistência do Termistor

Para posterior cálculo da temperatura, é necessário obter a resistência do termistor. O algoritmo abaixo calcula a resistência do termistor. A ele, deve ser informado o pino ao qual o termistor e o resistor em série estão conectados (na configuração de divisor de tensão), a tensão do microcontrolador (ESP32 é 3.3V), a resolução do ADC (ESP32 é 4095.0), e o valor da resistência do resistor em série, em Ohm’s.

Algoritmo de cálculo da Resistência

O seguinte algoritmo, desenvolvido no Framework Arduino, permite obter a resistência de uma determinada porta analógica de um microcontrolador.

/**
  Obtém a resistência de uma porta analógica informada do microcontrolador. Para isso,
  deve-se estar conectado  um resistor em série na montagem de um divisor de tensão.

  @param pin - O pino da porta à ser medida a resistência.
  @param voltageUc - A tensão nominal do microcontrolador.
  @param adcResolutionUc - O valor máximo da saída do
    ADC (Arduino UNO = 1024.0 | ESP32 = 4095.0).
  @param resistenciaEmSerie - A resistência do resistor em série ao qual
    está conectado à porta analógica.

  @return a resistência, em OHM, obtida.
*/
float getResistencia(int pin, float voltageUc, float adcResolutionUc, float resistenciaEmSerie) {
  float resistenciaDesconhecida = 0;

  resistenciaDesconhecida =
    resistenciaEmSerie *
    (voltageUc /
     (
       (analogRead(pin) * voltageUc) /
       adcResolutionUc
     ) - 1
    );

  return resistenciaDesconhecida;
}

O circuito para a captura da resistência pode ser visto abaixo:

Na Serial, será mostrado o valor da resistência, lida em ohms (11328.12 Ω ≅ 11 KΩ):

Caso deseje, obtenha o sketch de teste completo clicando na imagem de download abaixo: Clique nesta imagem e faça o download do código arduino


Obtendo o Valor Beta do Termistor

Para posterior cálculo da temperatura, é necessário obter o valor Beta do termistor. O valor Beta do Termistor pode ser obtido de suas formas: diretamente no datasheet do Termistor ou calculando através de um algoritmo.

Obter o valor Beta do Termistor pelo datasheet

Para obter o valor Beta de um Termistor pelo datasheet, siga os passos abaixo:

  1. Procure o datasheet do seu Termistor no Google digitando na busca datasheet <Nome do Componente> <valor de resistência em 25ºC> <part number impresso no corpo do termistor (se disponível)>. Ex.: datasheet termistor NTC 10k 103; Caso não tenha encontrado um datasheet equivalente ao termistor, acesse-o por este link.
  2. Após achar o datasheet do componente, procure uma seção semelhante que descreva as Especificações elétricas.
  3. Nesta seção, ache o valor Beta do Termistor correspondente ao seu:

O valor Beta do Termistor, de acordo com o datasheet, é 3380 Kelvin.

Obter o valor Beta do Termistor por Algoritmo

Para obter o valor Beta de um Termistor através de um algoritmo no Arduino, siga os passos abaixo:

  1. Procure o datasheet do seu Termistor no Google digitando na busca datasheet <Nome do Componente> <valor de resistência em 25ºC> <part number impresso no corpo do termistor (se disponível)>. Ex.: datasheet termistor NTC 10k 103; Caso não tenha encontrado um datasheet equivalente ao termistor, acesse-o por este link.
  2. Após achar o datasheet do componente, procure uma seção semelhante que descreva as Características R/T (Resistência/Temperatura).
  3. Nesta seção, ache os valores de resistências do Termistor, na tabela em que o termistor tenha 10000 Ω à 25 ºC (3.), nas temperaturas de 0 ºC (1.) e de 100 ºC (2.):
  4. Com os valores de resistência obtidos (1. e 2.), utilize o seguinte algoritmo para calcular o valor Beta do Termistor:
    /**
      Calcule o valor Beta de um termistor, com os valores de resistência (RT1 e RT2)
        obtidos do datasheet nas temperaturas correspondentes (T1 e T2).
    
      @return O valor Beta.
    */
    float calcularCoeficienteBetaTermistor() {
      float beta;
      const float T1 = 273.15;  // valor de temperatura 0º C convertido em Kelvin.
      const float T2 = 373.15;  // valor de temperatura 100º C convertido em Kelvin.
      const float RT1 = 27.219; // valor da resistência (em ohm) na temperatura T1.
      const float RT2 = 0.974;  // valor da resistência (em ohm) na temperatura T2.
      beta = (log(RT1 / RT2)) / ((1 / T1) - (1 / T2));  // cálculo de beta.
      return beta;
    }
    1. Substitua os valores RT1 e RT2 pelos valores obtidos no passo 3 (valores 1. e 2., respectivamente).
  5. Após criar e fazer o upload de um sketch para exibir (nenhum circuito é necessário, apenas o ESP32), através do Monitor Serial, o valor Beta do termistor, utilizando o algoritmo acima, na Serial, será mostrado o valor Beta do resistor em Kelvins (3394.40 K):

Caso deseje, obtenha o sketch de teste completo clicando na imagem de download abaixo: Clique nesta imagem e faça o download do código arduino


Obtendo a Temperatura a Partir da Resistência e Valor Beta

Com a resistência e o valor Beta obtidos, é possível obter a temperatura lida pelo termistor. Ao algoritmo, devem ser informados o valor da resistência do Termistor, calculada anteriormente (em ohm), o valor da resistência do resistor em série com o Termistor (em ohm), a tensão do Microcontrolador (em Volts) e o valor Beta do Termistor, calculado ou obtido anteriormente (em Kelvin).

Algoritmo de cálculo da Temperatura do Termistor

O seguinte algoritmo, desenvolvido no Framework Arduino, permite obter a temperatura de um determinado termistor aplicando a equação de parâmetro β:

/**
  Calcule a temperatura de um termistor através da equação de perâmetro Beta,
    informando como parâmetros o valor da resistência do Termistor (em OHM),
    o valor da resistência do resistor em série com o Termistor (em OHM),
    a tensão do Microcontrolador (em Volts), e o valor Beta do Termistor (em Kelvin).

    @param resistenciaTermistor - A resistência do Termistor.
    @param resistenciaResistorSerie - A resistência do Resistor que está
      ligado em série com o Termsitor.
    @param voltageUc - A tensão de trabalho do Microcontrolador.
    @param Beta - O valor Beta do Termistor.

    @return A temperatura em Graus Celsius.
*/
float readTemperatureNTC(float resistenciaTermistor,
                         float resistenciaResistorSerie,
                         float voltageUc,
                         float Beta) {
  // Constantes locais
  const double To = 298.15;    // Temperatura em Kelvin para 25 graus Celsius
  const double Ro = 10000.0;   // Resistência do termistor a 25 graus Celsius

  // Variáveis locais
  double Vout = 0; // Tensão lida da porta analógica do termistor.
  double Rt = 0; // Resistência lida da porta analógica.
  double T = 0; // Temperatura em Kelvin.
  double Tc = 0; // Temperatura em Graus Celsius.

  Vout = resistenciaResistorSerie /
         (resistenciaResistorSerie + resistenciaTermistor) *
         voltageUc; // Cálculo da tensão lida da porta analógica do termistor.

  Rt = resistenciaResistorSerie * Vout /
       (voltageUc - Vout); // Cálculo da resistência da porta analógica.
  T = 1 /
      (
        1 / To + log(Rt / Ro) / Beta
      ); // Aplicação da equação de parâmetro Beta para obtenção da Temperatura em Kelvin.

  Tc = T - 273.15; // Conversão de Kelvin para Celsius.
  return Tc;
}

No algoritmo acima, foi utilizado uma equação de conversão de Kelvin para Celsius na linha 40. Esta fórmula é:

Onde,

  • Tc é a temperatura em graus Celsius;
  • TK é a temperatura em Kelvin.

Após criar e fazer o upload de um sketch para exibir, através do Monitor Serial, a resistência de um termistor, utilizando o algoritmo acima, e montar o circuito abaixo:

Na Serial será mostrado o valor da temperatura lida em ºCelsius (15.334 ºC):

Caso deseje, obtenha o sketch de teste completo clicando na imagem de download abaixo: Clique nesta imagem e faça o download do código arduino


Hardware do Projeto

O projeto de exemplificação possui um circuito como no seguinte esquemático:


Software do Projeto

O projeto de exemplificação possui o seguinte sketch:

/******************************************************************************
             Utilize o Termistor NTC junto de um ESP32 como Termômetro

                          Criado em 06 de Maio de 2021
                                por Michel Galvão

  Eletrogate - Loja de Arduino \\ Robótica \\ Automação \\ Apostilas \\ Kits
                            https://www.eletrogate.com/
******************************************************************************/

// Definição dos pinos utilizados
#define pinTermistor 13
#define pinVentilador 32
#define pinAquecedor 33

// Variáveis Globais
const float setPoint = 37.7;


// Protótipo das Funções
float readTemperatureNTC(float resistenciaTermistor,
                         float resistenciaResistorSerie,
                         float voltageUc,
                         float Beta);
float getResistencia(int pin,
                     float voltageUc,
                     float adcResolutionUc,
                     float resistenciaEmSerie);
float calcularCoeficienteBetaTermistor();
float mediaDeVariavel(float variavel);

void setup() {
  Serial.begin(115200);
  pinMode(pinVentilador, OUTPUT);
  pinMode(pinAquecedor, OUTPUT);
  pinMode(pinTermistor, INPUT);
  digitalWrite(pinAquecedor, HIGH);
  digitalWrite(pinVentilador, HIGH);
}

void loop() {

  float resistencia = getResistencia(13, 3.3, 4095.0, 10000.0);
  float beta = calcularCoeficienteBetaTermistor();
  float temperatura = readTemperatureNTC(resistencia,
                                         10000.0,
                                         3.3,
                                         beta);

  Serial.print("Temperatura:");
  Serial.print(temperatura);

  Serial.print(",Média:");
  temperatura = mediaDeVariavel(temperatura);
  Serial.println(temperatura);

  if (temperatura > setPoint) {
    digitalWrite(pinAquecedor, HIGH);   // desliga aquecedor
    digitalWrite(pinVentilador, LOW);   // liga ventilador
    delay(200);
  } else if (temperatura < setPoint) {
    digitalWrite(pinAquecedor, LOW);    // liga aquecedor
    digitalWrite(pinVentilador, HIGH);  // desliga ventilador
    delay(200);
  } else {
    digitalWrite(pinAquecedor, HIGH);   // desliga aquecedor
    digitalWrite(pinVentilador, HIGH);  // desliga ventilador
    delay(200);
  }
  delay(1000);

}

/**
  Calcule a temperatura de um termistor através da equação de perâmetro Beta,
    informando como parâmetros o valor da resistência do Termistor (em OHM),
    o valor da resistência do resistor em série com o Termistor (em OHM),
    a tensão do Microcontrolador (em Volts), e o valor Beta do Termistor (em Kelvin).

    @param resistenciaTermistor - A resistência do Termistor.
    @param resistenciaResistorSerie - A resistência do Resistor que está
      ligado em série com o Termsitor.
    @param voltageUc - A tensão de trabalho do Microcontrolador.
    @param Beta - O valor Beta do Termistor.

    @return A temperatura em Graus Celsius.
*/
float readTemperatureNTC(float resistenciaTermistor,
                         float resistenciaResistorSerie,
                         float voltageUc,
                         float Beta) {
  // Constantes locais
  const double To = 298.15;    // Temperatura em Kelvin para 25 graus Celsius
  const double Ro = 10000.0;   // Resistência do termistor a 25 graus Celsius

  // Variáveis locais
  double Vout = 0; // Tensão lida da porta analógica do termistor.
  double Rt = 0; // Resistência lida da porta analógica.
  double T = 0; // Temperatura em Kelvin.
  double Tc = 0; // Temperatura em Graus Celsius.

  Vout = resistenciaResistorSerie /
         (resistenciaResistorSerie + resistenciaTermistor) *
         voltageUc; // Cálculo da tensão lida da porta analógica do termistor.

  Rt = resistenciaResistorSerie * Vout /
       (voltageUc - Vout); // Cálculo da resistência da porta analógica.
  T = 1 /
      (
        1 / To + log(Rt / Ro) / Beta
      ); // Aplicação da equação de parâmetro Beta para obtenção da Temperatura em Kelvin.

  Tc = T - 273.15; // Conversão de Kelvin para Celsius.
  return Tc;
}

/**
  Calcule o valor Beta de um termistor, com os valores de resistência (RT1 e RT2)
    obtidos do datasheet nas temperaturas correspondentes (T1 e T2).

  @return O valor Beta.
*/
float calcularCoeficienteBetaTermistor() {
  float beta;
  const float T1 = 273.15;  // valor de temperatura 0º C convertido em Kelvin.
  const float T2 = 373.15;  // valor de temperatura 100º C convertido em Kelvin.
  const float RT1 = 27.219; // valor da resistência (em ohm) na temperatura T1.
  const float RT2 = 0.974;  // valor da resistência (em ohm) na temperatura T2.
  beta = (log(RT1 / RT2)) / ((1 / T1) - (1 / T2));  // cálculo de beta.
  return beta;
}

/**
  Obtém a resistência de uma porta analógica informada do microcontrolador. Para isso,
  deve-se estar conectado  um resistor em série na montagem de um divisor de tensão.

  @param pin - O pino da porta à ser medida a resistência.
  @param voltageUc - A tensão nominal do microcontrolador.
  @param adcResolutionUc - O valor máximo da saída do
    ADC (Arduino UNO = 1024.0 | ESP32 = 4095.0).
  @param resistenciaEmSerie - A resistência do resistor em série ao qual
    está conectado à porta analógica.

  @return a resistência, em OHM, obtida.
*/
float getResistencia(int pin, float voltageUc, float adcResolutionUc, float resistenciaEmSerie) {
  float resistenciaDesconhecida = 0;

  resistenciaDesconhecida =
    resistenciaEmSerie *
    (voltageUc /
     (
       (analogRead(pin) * voltageUc) /
       adcResolutionUc
     ) - 1
    );

  return resistenciaDesconhecida;
}

/**
  Calcula a média de uma varável qualquer.

  @param variavel - O valor da variável à ser feita a média.

  @return a média da variável.
*/
float mediaDeVariavel(float variavel) {
  const int qtdLeituras = 10;

  static bool fistExecution = true;  // é a primeira execução do algoritmo de média?
  static float readings[qtdLeituras];  // as leituras da variável
  static int readIndex = 0;            // o índice da leitura atual
  static float total = 0;              // o total de corrida
  float average = 0;                   // a média

  if (fistExecution == true) { // se for a primeira execução do algoritmo de média, ...
    for (int thisReading = 0; thisReading < qtdLeituras; thisReading++) { // Preenche todo o array das leituras da variável com o valor inicial da variável
      readings[thisReading] = variavel;
    }
    total = variavel * qtdLeituras; // faz a soma de todos os valores do array de média
    fistExecution = false; // 
  }

  
  total = total - readings[readIndex]; // subtrai a última leitura

  // define o valor atua ldo array com o valor da variável:
  readings[readIndex] = variavel;
  // some a leitura ao total:
  total = total + readings[readIndex];
  // avançar para a próxima posição no array:
  readIndex = readIndex + 1;

  // se estivermos no final do array, ...
  if (readIndex >= qtdLeituras) {
    // ...volta para o início do array:
    readIndex = 0;
  }

  // calcula a média:
  average = total / qtdLeituras;
  return average;
}

Explicação do Código

Neste código, não é preciso adicionar nenhuma biblioteca externa. Fazemos, primeiro, a definição das portas do ESP32 utilizadas:

Logo após, criamos variáveis locais para o setPoint (valor alvo no qual o ESP32 tenta manter a temperatura).

Fazemos, também, os protótipos das funções utilizadas no programa.

Em void setup(), configuramos a taxa de transferência para 115200 bits por segundo para a transmissão serial. Também configuramos os pinos utilizados pelo ESP32 com seus devidos valores (OUTPUT para saída e INPUT para entrada). Os pinos do módulo rele, configuramos como desligados (O módulo rele tem sua lógica de ativação dos reles invertida: HIGH desliga o rele e LOW liga o rele).

Em void loop(), criamos as variáveis locais que calcularão a resistência, o valor Beta e a temperatura do termistor.

Ainda em void loop(), fazemos a impressão dos valores de temperatura e média na Serial. A média da temperatura é calculada passando, para a função mediaDeVariavel(), o parâmetro de temperatura (verifique na seção Algoritmo de média abaixo a explicação do algoritmo de média). Estes dados serão visualizados no Plotter Serial da IDE Arduino. Para isso, devem ser formatados de modo correto: cada variável deve ser separada por um caractere de separação (seja ele um espaço (” “), um caractere qualquer (“,”) ou um caractere de tabulação (“\t”)).

Em seguida, verificamos se a temperatura está maior do que o setPoint definido anteriormente. Caso seja maior, desligamos o aquecedor e ligamos o ventilador.

Caso a temperatura seja menor do que o setPoint definido anteriormente, ligamos o aquecedor e desligamos o ventilador.

Agora, se a temperatura não atender a nenhuma das condições anteriores, desligamos tanto o aquecedor quanto o ventilador.

Algoritmo de média

O cálculo da média de uma determinada variável é feita através do seguinte algoritmo:

/**
  Calcula a média de uma varável qualquer.

  @param variavel - O valor da variável à ser feita a média.

  @return a média da variável.
*/
float mediaDeVariavel(float variavel) {
  const int qtdLeituras = 10;

  static bool fistExecution = true;  // é a primeira execução do algoritmo de média?
  static float readings[qtdLeituras];  // as leituras da variável
  static int readIndex = 0;            // o índice da leitura atual
  static float total = 0;              // o total de corrida
  float average = 0;                   // a média

  if (fistExecution == true) { // se for a primeira execução do algoritmo de média, ...
    // Preenche todo o array das leituras da variável com o valor inicial da variável:
    for (int thisReading = 0; thisReading < qtdLeituras; thisReading++) { 
      readings[thisReading] = variavel;
    }
    total = variavel * qtdLeituras; // faz a soma de todos os valores do array de média
    fistExecution = false; // 
  }

  
  total = total - readings[readIndex]; // subtrai a última leitura

  // define o valor atual do array com o valor da variável:
  readings[readIndex] = variavel;
  // some a leitura ao total:
  total = total + readings[readIndex];
  // avançar para a próxima posição no array:
  readIndex = readIndex + 1;

  // se estivermos no final do array, ...
  if (readIndex >= qtdLeituras) {
    // ...volta para o início do array:
    readIndex = 0;
  }

  // calcula a média:
  average = total / qtdLeituras;
  return average;
}

Comparação da temperatura com a média da mesma

Verifique, na imagem abaixo, que, enquanto, a temperatura possui ruído de leitura, a média corrige e suaviza as leituras da temperatura.

Este gráfico foi gerado com o Plotter Serial da IDE Arduino. Para acessar esta ferramenta, vá em: Ferramentas → Plotter Serial (Ctrl + Shift + L)


Demonstração do Funcionamento

O termistor foi instalado no interior de uma chocadeira (incubadora de aves) para controle de sua temperatura interna utilizando uma resistência de aquecimento como aquecedor e um ventilador como resfriador.

Veja, no vídeo abaixo, a demonstração de funcionamento do esquemático:


Conclusão

Conhecendo, agora, como operar um termistor no ESP32, pode-se desenvolver outros projetos, como, por exemplo, uma impressora 3D que necessite de um sensor de temperatura em sua extrusora ou, ainda, um visualizador de temperatura ambiente em um display.

Curtiu o post? Avalie e deixe um comentário! Siga-nos também no Instagram e nos marque quando fizer algum projeto nosso: @eletrogate. Até a próxima!

Tenha a Metodologia Eletrogate na sua Escola! Conheça nosso Programa de Robótica Educacional.


Sobre o Autor


Michel Galvão

Hobbysta em Sistemas Embarcados e IoT. Tem experiência em Automação Residencial e Agrícola.


Eletrogate

26 de maio de 2022

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!

Eletrogate Robô

Assine nossa newsletter e
receba  10% OFF  na sua
primeira compra!