Início
/
Projetos Arduino
/
Projetos Squids
/
Básico
/
Projeto 41 - Usando o sensor de temperatura termistor NTC 10K com LCD
Projeto 41 - Usando o sensor de temperatura termistor NTC 10K com LCD
Angelo Luis Ferreira | 05/07/2018
Acessos: 42.731
Básico - Projeto 41
Sensor de temperatura termistor NTC 10K com display
Objetivo
Neste projeto vamos demonstrar o uso de um LCD como mostrador de temperatura obtida através do termistor NTC 10K pelo método Steinhart-Hart. Também mostraremos neste projeto como incluir bibliotecas no IDE do Arduino.
Termistor é um semicondutor que dependendo da temperatura ao qual é submetido, sua resistência elétrica sofre variação. Cada tipo de termistor possui uma curva característica que mostra o aumento ou a diminuição da resistência elétrica em função da temperatura. Existem 2 tipos de termistores:
NTC(do inglês Negative Temperature Coefficient), nesse tipo de termistor o coeficiente de variação de resistência com a temperatura é negativo, ou seja, quanto maior a temperatura, menor é a resistência.
PTC(do inglês Positive Temperature Coefficient), nesse tipo de termistor o coeficiente de variação de resistência com a temperatura é positivo, ou seja, quanto maior a temperatura, maior é a resistência.

Termistor NTC (coeficiente negativo de temperatura) é um resistor sensível a temperatura. Sua resistência elétrica diminui à medida que a temperatura aumenta. Sua curva de temperatura em relação à resistência não é linear e tem um comportamento exponencial. Veja o gráfico abaixo:

No nosso projeto utilizaremos um termistor NTC de 10k, ou seja, na temperatura de 25ºC sua resistência elétrica é de 10.000Ω (10KΩ). Veja a baixo a curva típica de um termistor NTC 10K:

Obs.: Para obter dados mais precisos, acesse o datasheet do fabricante do componente que você irá utilizar no projeto.
Método Steinhart-Hart é o método que iremos utilizar para determinar as temperaturas reais lidas no termistor NTC. O cálculo desse método já está todo programado na biblioteca thermistor.zip que iremos utilizar no nosso projeto. Se você deseja conhecer como calcular os valores da resistência elétrica em função das temperaturas através deste método, leia o tutorial: Utilizando um termistor NTC 10K.
Obs.: Existe outro método para determinar as temperaturas reais no termistor NTC denominado de fator Beta. Leia o artigo http://lusosat.org/hardware/termistor.pdf que apresenta os dois métodos para o cálculo das temperaturas através de um termistor.
Aplicação
Para fins didáticos e projetos onde é necessária a medição e monitoramento de temperaturas do ambiente.
Componentes necessários
Referência
|
Componente
|
Quantidade
|
Imagem
|
Observação
|
Protoboard |
Protoboard 830 pontos |
1 |
 |
No mínimo utilizar protoboard com 830 pontos
|
Jumpers |
Kit cabos ligação macho / macho |
1 |
 |
|
Display LCD |
Display LCD 16X2 com pinos soldados
|
1 |
 |
LCD que utilize o controlador HD44780 (veja na descrição ou datasheet do componente)
O display poderá ser de qualquer cor (fundo verde, azul ou vermelho)
|
Potenciômetro |
Potenciômetro 1OK
|
1 |
 |
O valor do potenciômetro aumenta quando giramos o eixo do componente na direção do polo negativo para o polo positivo.
Obs.: Se não possuir potenciômetro de 10KΩ você poderá utilizar um de outro valor, de 1kΩ até 100kΩ.
|
Sensor de Temperatura - Termistor NTC 10K |
Sensor de Temperatura Termistor NTC 10K
|
1 |

|
Características do termistor NTC 10K:
Modelo: MF521033950 (NTC 10K)
Tipo: 103 (resistência elétrica de 10KΩ a 25ºC)
Faixa temperatura: -55ºC ~ 125ºC
Dissipação: > 2.0mw/ºC
Valor de Beta: 3.950K (+/- 2%)
dimensão: 3mm ou 5mm
datasheet
|
Resistor |
Resistor de 10KΩ
|
1 |
 |
1 Resistor de 10KΩ (sensor NTC 10K) |
Arduino UNO R3 |
Arduino UNO |
1 |
 |
Você poderá utilizar uma placa Arduino UNO original ou similar
|
Montagem do Circuito
Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.

Atenção
1. Neste projeto vamos utilizar um display LCD 16x2 com controlador HD44780, que se adapta aos mais diversos projetos com vários modelos de placas e microcontroladores. Este display possui 16 colunas por 2 linhas com backlight (luz de fundo) verde, azul ou vermelha e tem 16 pinos para a conexão. Atenção: Utilize um display LCD com os pinos soldados.
2. Preste muita atenção na montagem do dsiplay LCD. Observe que utilizamos os 6 primeiros pinos do LCD, pulamos os 4 próximos e então utilizamos mais 6 pinos. Veja a tabela abaixo:

3. Monte o thermistor NTC como um divisor de tensão de acordo com o esquema abaixo:

3.1. O sensor NTC varia sua resistência inversamente a temperatura ambiente, ou seja, quando a temperatura aumenta, a resistência diminui. Como pretendemos obter um circuito que forneça tensões mais altas quando aumentamos a temperatura, precisaremos criar um divisor de tensão com o termistor NTC na posição mostrada no esquema acima, ou seja, um terminal conectado ao positivo e o outro no nó entre a saída analógica do Arduino e o resistor de 10KΩ. Para saber mais sobre divisão de tensão, leia Utilizando um termistor NTC 10K ou Divisores de Tensão.
Atenção: Se você inverter o circuito acima, o comportamento das leituras será também invertido, ou seja, o circuito irá fornecer tensões mais baixas quando aumentarmos a temperatura. Assim, quando utilizarmos o método Steinhart-Hart para calcularmos a temperatura real, os valores não serão corretos.
3.2. Veja a montagem do circuito no protoboard:

3.3. O sensor de temperatura termistor NTC 10K, assim como um resistor comum, não tem polaridade.
5. Observe que nesse projeto o potenciômetro foi montado como um divisor de tensão, onde utilizamos os 3 terminais do componente:

Obs.: Ao girar o eixo do potenciômetro, o valor da tensão deverá aumentar do negativo para o positivo, ou seja, se a tensão do circuito for 5V, o potenciômetro irá variar de 0 a 5V.
5.1. No nosso exemplo, girando-se o eixo do potenciômetro no sentido horário, aumentamos a tensão na entrada do pino 3 do display e diminuímos o contraste dos caracteres com o back light (luz de fundo) até que não é mais possível visualizá-los. Fazendo o contrário, ou seja, diminuindo a tensão até o zero, teremos um contraste máximo entre os caracteres e a luz de fundo.
6. A montagem do nosso projeto foi realizada em um protoboard com linhas de alimentação não contínuas, onde acrescentamos jampers para a ligação. Verifique se o seu protoboard possui linhas de alimentação contínuas ou separadas.

Incluindo bibliotecas no IDE do Arduino
Neste projeto vamos mostrar como adicionar uma biblioteca no IDE do Arduino. Uma das grandes vantagens das placas Arduino é a diversidade de bibliotecas disponíveis que podem ser utilizadas em seus programas. Estas bibliotecas podem ser criadas para a linguagem "C" ou especificamente para o Arduino, reduzindo drasticamente o tempo gasto com programação.
Download dos arquivos da biblioteca do Thermistor
Para trabalharmos de forma mais fácil com o thermistor NTC através do método Steinhart-Hart, podemos baixar a biblioteca Thermistor que foi desenvolvida para os sensores de temperatura NTC 10K:
DOWNLOAD - Thermistor.zip
Para saber detalhes desta biblioteca clique aqui.
Instalando a biblioteca pelo IDE do Arduino
Após fazer o download do arquivo Thermistor.zip com todos os arquivos da biblioteca compactados no formato zip, abra o IDE do Arduino e siga o tutorial: Como incluir uma biblioteca no IDE do Arduino.
Ligando o display LCD
1. Para visualizar o display funcionando, digite o código abaixo no ambiente de desenvolvimento IDE do Arduino. Faça a verificação e o upload:
/*******************************************************************************
*
* Testando o Display LC 16 X 2
* http://squids.com.br/arduino
*
*******************************************************************************/
//Carrega a biblioteca LiquidCrystal
#include <LiquidCrystal.h>
//Define os pinos que serão utilizados para ligação ao display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
//Define LCD 16 colunas por 2 linhas
lcd.begin(16, 2);
//Posiciona o cursor na coluna 0, linha 0;
lcd.setCursor(0,0);
//Envia o texto entre aspas para o LCD
lcd.print("Ola, meu nome e:");
//Posiciona o cursor na coluna 1, linha 1;
lcd.setCursor(1,1);
//Envia o texto entre aspas para o LCD
lcd.print("Squids Arduino");
}
void loop() {
}
2. Se o display acender e mostrar os caracteres como na figura abaixo, a ligação está correta.
ATENÇÃO: Se o display acender e não mostrar os caracteres provavelmente é em função do contraste. Gire o eixo do potenciômetro no sentido anti-horário para aumentar o contraste. Se mesmo assim o display não mostrar os caracteres, corrija a montagem do circuito e/ou o código.
Comandos do display LCD para a biblioteca LiquidCrystal
No projeto vamos utilizar alguns comandos de controle do display LCD através da biblioteca LiquidCrystal que já vem embutida na IDE do Arduino. Para conhecer todos os comandos desta biblioteca, acesse o link: Comandos display LCD para biblioteca LiquidCrystal e LiquidCrystal Library (Arduino Reference).
Obs.: Para acessarmos uma biblioteca embutida na IDE do Arduino, assim como, para acessarmos um biblioteca local através de um header file, utilizaremos a diretiva #include.
Código do Projeto (Sketch)
1) Faça o dowload e abra o arquivo projeto41.ino no IDE do Arduino: DOWNLOAD - projeto41.ino
Ou se preferir, copie e cole o código abaixo no IDE do Arduino:
/*******************************************************************************
*
* Projeto 41 - Usando o sensor de temperatura temistor NTC 10K com LCD
* http://squids.com.br/arduino
*
*******************************************************************************/
#include <Thermistor.h>
#include <LiquidCrystal.h>
Thermistor temp(1); // termistor conectado na porta A1 (cria o objeto)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop() {
float temperature = temp.getTemp(); //calcula a temperatura
//Imprimindo no monitor serial
Serial.print("Temperatura: ");
Serial.print(temperature);
Serial.println("°C");
//imprimindo no LCD
lcd.setCursor(0,0); // Define o cursor na posição de início
lcd.print("Temp. = ");
lcd.print(temperature);
lcd.write(B11011111); // Imprime o símbolo de grau
lcd.print("C");
delay(1000);
}
Vídeo
Como o projeto deve funcionar
1. Ao executar o programa, a temperatura atual em Celsius será exibida no display LCD.
2. Para visualizar a leitura das temperaturas registradas, clique no ícone monitor serial, como mostra a figura abaixo:

Explicando o código do projeto
1. Primeiro definimos e declaramos as bibliotecas, constantes e variáveis do projeto.

1.1. Através do comando #include incluímos as bibliotecas Thermistor.h e LiquidCrystal.h para serem compiladas junto ao sketch (não utilize ponto e vírgula no final de uma diretiva #include).
1.1.1. A diretiva #include é utilizada para incluir bibliotecas externas em um sketch. Isso dá ao programador acesso a um grande grupo de bibliotecas C padrão (grupos de funções pré definidas) e também bibliotecas específicas para o Arduino.
1.1.2. Como já mencionamos anteriormente, o arquivo da biblioteca Thermistor.h deve ser inserido no IDE do Arduino. Se tiver dúvidas leia o artigo Como incluir uma biblioteca no IDE do Arduino.
1.1.3. A biblioteca LiquidCrystal.h já vem incluída no IDE do Arduino e contém todos os comandos e recursos para controlar um display LCD.
1.2. O comando Thermistor temp(1) instância o objeto definido pela classe temp inserida na biblioteca Thermistor.h como conectado na porta analógica A1. Isto irá possibilitar a utilização dos métodos (funções) da biblioteca para uso no programa.
1.3. Através da instrução LiquidCrystal lcd(12, 11, 5, 4, 3, 2); a biblioteca do LCD faz com que o programa do Arduino saiba que ao dar o comando LiquidCrystal lcd iremos utilizar um display, e faremos a comunicação utilizando os seguintes pinos do Arduino: 12, 11, 5, 4, 3, conforme mostra a tabela abaixo:

2. Através da estrutura void setup(), definimos:

2.1. A função Serial.begin() serve para dizer ao Arduino que será coletado dados para o computador a partir da porta serial e o cabo USB. O número entre os parênteses significa qual é a taxa de dados que a placa vai se comunicar com o computador. Utilizaremos a taxa padrão de 9600bps (bits-per-second).
2.2. Através da instrução lcd.begin(16,2); a biblioteca do LCD informa ao Arduino que será utilizado um display com 16 colunas e 2 linhas.
3. Através da estrutura void loop(), obtemos:

3.1. A variável local temperature recebe os valores da temperatura lida no sensor NTC 10K através do método temp.getTemp() controlado pela biblioteca Thermistor.h.
3.1.1. Observe que utilizamos a variável tipo float. Veja na tabela abaixo as diferenças nos tipos de constantes e variáveis:
Tipo |
Valores Válidos para Variáveis e Constantes
|
char
|
letras e símbolos: 'a', 'b', 'H', '^', '*','1','0' (utiliza 1 byte da memória,) |
uint32_t, unsigned_long |
de 0 a 4.294.967.295 (números inteiros) (utiliza 2 bytes da memória) |
unsigned int, uint16_t |
de 0 a 65.535 (números inteiros) (utiliza 2 bytes da memória) |
long |
de - 2.147.483.648 a 2.147.483.647 (números inteiros) (utiliza 4 bytes da memória) |
int, short
|
de -32767 até 32767 (números inteiros) (utiliza 2 bytes da memória) |
float, double |
de -3.4 x 1038 até +3.4 x 10+38com até 6 dígitos de precisão (2 casas depois da vírgula - ponto flutuante) (utiliza 4 bytes da memória) |
byte, uint8_t
|
de 0 a 255 (números inteiros) (utiliza 1 byte da memória) |
boolean
|
true (1) , false (0) (utiliza 1 byte de memória) |
3.2. Os valores da temperatura são exibidos no monitor serial, sendo:

3.2.1. Através da função Serial.print() é exibido o texto "Temperatura: ".
3.2.2. Em seguida, é exibido no monitor serial o valor armazenado na variável temperature, que é o valor da temperatura lido no sensor.
3.2.3. Através da função Serial.println() é exibido o texto "ºC". O comando println() diz ao monitor que se deve pular uma linha após escrever o valor definido entre parêntesis.
3.3. Em seguida, será exibido no display LCD o valor da temperatura definida pela variável temperature, sendo que:

Obs.: Para saber mais detalhes da biblioteca LiquidCrystal, leia: Biblioteca LiquidCrystal - Comandos display LCD
3.3.1. Através do comando lcd.setCursor(0,0) definimos a posição do cursor no primeiro caractere da primeira linha do display.
3.3.2. Com base na posição do cursor definida acima, é exibido no display LCD o texto "Temp. = ", através do comando lcd.print().
3.3.3. É exibido o valor da temperatura ambiente obtido pela leitura do termistor NTC 10K que foi armazenado na variável temperature.
3.3.4. Através do comando lcd.write(B11011111) é exibida o símbolo de grau (º):
3.3.4.1. Diferentemente de lcd.print(), que imprime uma string no display, a função lcd.write() imprime um caractere.
3.3.4.2. Utilizamos um valor binário para definir o nosso caractere (11011111). Em C++, precisamos utilizar o prefixo "B" antes de um número binário, por isso lcd.write(B11011111) . Veja a tabela abaixo:
Obs1.: Leia a referência para usos de constantes com base binário, octal ou hexadecimal - Constantes Inteiras
Obs2: Se você converter o valor binário 11011111 para decimal e hexadecimal encontrará os valores 223 (decimal) e DF (hexadecimal). Assim, você poderia escrever lcd.write(B11011111) como lcd.write(223) ou lcd.write(0xDF) que o símbolo de grau seria exibido de qualquer forma. Teste: Teste as conversões na Calculadora para Converter número Decimal para Binário, Octal e Hexadecimal.
3.3.4.3. O valor do caractere utilizado foi obtido na tabela de caracteres Tabela de caracteres para display LCD. Usamos o prefixo 1101 (linha horizontal) com o final xxxx1111 (linha vertical) e obtemos o valor binário 11011111. (Nota do Autor: Lembre-se, um caractere tem 1byte, ou seja, 8 bits).
3.2.3.4. Através do comando lcd.print() é exibida no display LCD a string "C".
3.4. Finalmente pausamos o loop através da função delay(1000). Isto é necessário para exibirmos a temperatura a cada segundo (1000ms = 1segundo).
Desafios
Com base neste projeto, resolva o seguinte desafio: Desafio 22
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários