Introduction: Arduino Tutorial - LCD - Temperature Sensor

About: This is a channel for Homemakers and DIY where you will find useful tutorials about Arduino and IOT systems, some Gardening techniques and Woodworking projects.

No tutorial anterior abordamos uma montagem que utilizava os pinos de entrada analógica do um Arduino UNO com um potenciómetro que funcionava como um sensor de posição, neste tutorial vamos falar sobre um outro sensor resistivo que também altera a sua resistência consoante a temperatura em seu redor, designando-se assim por sensor de temperatura.

Arduino Tutorial - Analog Input - Resistive Sensors - Monitor Serial - https://www.instructables.com/id/Arduino-Tutorial-Analog-Input-Resistive-Sensors-Mo/

Este sensor normalmente é constituído por uma resistência do tipo NTC "Negative Temperature Coefficient", esta diminui a sua resistência eléctrica quando existe um aumento de temperatura, mas também existem sensores de temperatura que utilização uma resistência do tipo PTC "Positive Temperature Coefficient", já esta aumenta a sua resistência eléctrica com a existencial de um aumento de temperatura (Ver gráfico acima).

Este tipo sensor também será ligado aos pinos de entrada analógica através da utilização de uma montagem de um divisor de tensão, variando assim a tensão no pino do Arduino entre os valores de 0 e 5V (Ver imagens acima).

Alem do sensor de temperatura esta montagem terá também um LCD1602 "Liquid Crystal Display", que como a sua referencia indica tem 16 colunas e 2 linhas. O LCD terá como objectivo representar a temperatura sentida pelo sensor num determinado momento sendo representada em graus Celsius (ºC).

Caso queiram saber mais sobre este tipo de LCD, as suas características e configurações, vejam a sua datasheet (Ver ficheiro abaixo), para saber mais sobre o Arduino UNO visitem a página oficial do Arduino em https://store.arduino.cc/arduino-uno-rev3.

Step 1: Motagem

Como esta montagem requer a realização de algumas ligações é assim utilizada uma "Breadboard", ajudando nas ligações entre os componentes electrónicos. É também aconselhado começar a montagem com as ligações do LCD, pois esta é muito mais complexa e requer alguns cuidados e só depois montarmos o nosso sensor de temperatura (Ver imagem acima).

Material necessário:

  • 1x Arduino UNO;
  • 1x Cabo USB;
  • 1x Breadboard;
  • 1x LCD1602;
  • 1x Resistência 220Ω;
  • 1x Resistência 10KΩ;
  • 1x Sensor de temperatura NTC 10KΩ;
  • 1x Potenciómetro 10KΩ.

Instalação do LCD1602:

Cada pino do LCD tem uma função especifica e como podem observar na imagem da montagem completa não são utilizamos todos os seus pinos, assim para explicar mais facilmente o funcionamento do LCD, agrupamos os seus pinos em 3 grupos, o grupo Pinos de Alimentação, o de Pinos de Comunicação e de Pinos de Informação (Ver legenda acima).

Pinos de Alimentação:

  • GND;
  • VCC;
  • V0;
  • LED - ou A (Anodo);
  • LED + ou K (Catodo).

A alimentação do LCD é realizada através dos pinos GND e VCC, devendo ter o pino VCC uma tensão de 5V que será fornecida pelo Arduino UNO, pois este os seus pinos de alimentação tem tensões estáveis e protegidas não permitindo que existam sobrecargas ou curto-circuitos.

O Pino V0 tem como função ajustar o contraste dos caracteres do LCD, para podermos controlar esse ajuste ligamos neste pino uma resistência variável de 10KΩ com uma montagem de um divisor de tensão, alterando assim a tensão a tensão no pino V0 entre os 0 e 5V (Ver imagem acima).

Este tipo de LCD tem um LED como luz de fundo sendo este alimentado através dos pinos A e K fornecida também pelo Arduino, no entanto, como explicado em tutoriais anteriores devemos ligar o LED em série com uma resistência de 220Ω, para que o brilho não seja demasiado intenso e reduzir a probabilidade de este se danificar.

Pinos de Comunicação:

  • RS (Register Select);
  • R/W (Read / Write);
  • E (Enable).

Nos pinos de comunicação apenas teremos de ter mais atenção ao pino R/W, pois este deve estar ligado a GND para que seja permitido escrever no LCD, aparecendo assim os caracteres, caso contrario podemos estar a ler o dados guardados na sua memoria interna ficando o LCD em branco.

Pinos de Informação:

  • D0;
  • D1;
  • D2;
  • D3;
  • D4;
  • D5;
  • D6;
  • D7.

Nesta montagem são utilizados todos os pinos de alimentação e comunicação, no entanto, apenas utilizamos metade dos pinos de informação, isto é possível através da utilização no código da biblioteca LiquidCrystal.h, esta permite ler o "Byte" ou 8bitsde informação enviado pelo Arduino, através da divisão deste em 2 partes, ou seja, são lidos 4bits de cada vez.

Para isso esta biblioteca utiliza os pinos de comunicação, de modo a que o LCD consiga saber qual é a forma que irá receber a informação, ou seja, se com 8bits através dos pinos D0 a D7 ou com 4bits através dos pinos D4 a D7.

Instalação do sensor de temperatura:

Terminada a montagem do LCD colocamos o sensor de temperatura, neste caso utilizámos um sensor que vem instalado na ponta de um cabo e com uma cápsula metálica sendo este à prova de agua. Como foi explicado anteriormente, este é um sensor resistivo do tipo NTC, ou seja, diminuindo a sua resistência à medida que a temperatura aumenta.

Para que o Arduino possa realizar a leitura deste sensor, este terá de se montado num circuito divisor de tensão. Como o sensor de temperatura é de 10KΩ, segundo as especificações do fabricante, a resistência que teremos de colocar no divisor de tensão também terá de ter o mesmo valor.

Por fim, ligamos o ponto comum deste divisor de tensão a qualquer um dos pinos de entrada analógica do Arduino UNO, neste caso escolhemos o o pino A0, logo sempre que a temperatura altera, a tensão nesse no pino do Arduino também irá alterar entre o valor de tensão entre 0 e 5V, sendo assim possível realizar essa leitura (Ver imagem acima).

Step 2: Código

Agora só falta ligamos o cabo USB e carregarmos o respectivo código no Arduino, mas antes iremos explicar resumidamente o código. Em primeiro lugar começamos por importar através do gestor de bibliotecas do Arduino as bibliotecas thermistor.h e a LiquidCrystal.h.

Estas bibliotecas facilitam muito a programação, pois contêm comandos e funções criadas especificamente para determinados componentes. No caso da biblioteca thermistor.h esta permite-nos com apenas com uma função configurar este tipo de sensor de temperatura.

#include "thermistor.h"		//Importar a "thermistor" library

//Esta função define:
THERMISTOR SENSOR (Pino_Sensor, 10000, 3950, 10000);

	//Pino de entrada do sensor;
	//Resistência nominal a 25ºC do sensor;
	//Coeficiente beta do sensor;
	//Valor da resistência do sensor.

A biblioteca LiquidCrystal.h também facilita muito a programação do LCD, sendo apenas necessário configurar 2 funções para que este fique a funcionar em pleno, o que caso contrario seria muitas mais.

//Definir os pinos de comunicação e informação do LCD:
LiquidCrystal lcd ("RS", "E", "D7", "D6", "D5", "D4");

e

void setup(){
	//Inicia a comunicação com LCD 16x2:
	lcd.begin(2, 16);
}

Agora para realizar a leitura do sensor de temperatura, utilizamos o comando sensor.read(), devolvendo o valor numérico relativo à temperatura em graus Celsius (ºC), no entanto, esse valor não tem casas decimais o que obriga a um pequeno cálculo. Para utilizar termos valores com casa decimais teremos de utilizar para os cálculos variáveis declaradas como float.

void loop(){
	//Leitura do sensor de temperatura.
  	Valor_Temp = sensor.read();

	//Calculo do valor da temperatura com casas decimais.
	Valor_Temp= Valor_Temp/10;
}

Para escrever no LCD será necessário primeiro definir o local onde se começará a escrever, ou seja, qual a coluna e a linha, só depois imprimimos o texto que queremos, tendo em atenção que este LCDapenas tem 16 colunas e 2 linhas, no caso do texto passar esses limites do LCD não serão visíveis todos caracteres.

void loop(){
	//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
	lcd.setCursor(0, 0);
	
	//Escreve no LCD:
	lcd.print("Temperatura:");
}

Em abaixo podem observar o código completo para a nossa montagem, onde são utilizados todos os conceitos descritos anteriormente, este é um código muito simples e lembrem-se que podem sempre alterar o tipo de sensor, tendo apenas atenção aos valores resistivos deste.

#include "thermistor.h"		//Importar a "thermistor" library.
#include  <LiquidCrystal.h>	//Importar a LCD library.

int Pino_Sensor = A0;		//Variável para selecção do pino de entrada analógica.
float Valor_Temperatura = 0;	//Variável para o calculo da temperatura com números decimais.

//Definir o pino do sensor;
//Resistência nominal a 25ºC;
//Coeficiente beta do sensor;
//Valor da resistência do sensor.
THERMISTOR sensor(Pino_Sensor, 10000, 3950, 10000);
// Definir os pinos de comunicação e informação do LCD.
LiquidCrystal lcd (12, 13, 11, 10, 9, 8);

//Correr a função SETUP apenas uma vez após ser pressionado Reset:
void setup(){
	//Inicia a Comunicação com LCD 16x2:
	lcd.begin(2, 16);
}

//Correr a função LOOP repetidamente:
void loop(){
	//Leitura do sensor de temperatura.
	Valor_Temperatura = sensor.read();
	//Cálculo do valor da temperatura.
	Valor_Temperatura = Valor_Temperatura/10;

	//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever: 
	lcd.setCursor(0, 0);
	//Escreve no LCD:
	lcd.print("Temperatura:");
	//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever: 
	lcd.setCursor(0, 1);
	//Escreve no LCD:
	lcd.print(Valor_Temperatura);
	//Atraso para o próximo passo.
	delay(1000);
}

Caso queiram saber mais ou tenham dúvidas sobre estas ou outras referências no código, vejam a sua explicação detalhada no site oficial do Arduino, através da ligação https://www.arduino.cc/en/Reference/HomePage.

Procurem os nossos tutoriais acerca do Arduino, onde são explicadas diversas montagens e o funcionamento dos seus componentes, já agora visitem o nosso canal no Youtube, Instagram, Facebook ou Twitter.

Abraço e bons projectos.