31 março 2019

Como usar o Sensor de Temperatura MLX90614

Neste post vamos mostrar como usar o Sensor de Temperatura IR MLX90614, um sensor que faz a leitura da temperatura de objetos ou até mesmo a temperatura corporal sem que seja necessário o contato direto com o sensor.

Como usar o Sensor de Temperatura MLX90614

O MLX90614 se caracteriza por ser um sensor de alta precisão, podendo ser usado por exemplo em projetos de automação residencial, detectores de movimento e projetos automotivos, entre outras aplicações.


Sensor de Temperatura IR MLX90614


O Sensor de Temperatura IR MLX90614 tem uma faixa de medição entre -40 a 125°C para temperatura ambiente e entre -70 a 380°C para medição de temperatura de objetos. Ele é capaz de realizar as duas medições simultaneamente, e veremos isso logo abaixo nos testes desse módulo. A precisão da medição é de 0,5°C.

Módulo sensor de temperatura MLX90614

A comunicação com o microcontrolador é feita via interface I2C ocupando assim apenas 2 pinos do microcontrolador. A alimentação desse módulo é de 5V.

Conexão do MLX90614 ao Arduino


Para conexão do sensor de temperatura IR MLX90614 na placa Arduino Uno usaremos os pinos análogicos A4 (SDA) e A5 (SCL), que são os pinos de comunicação I2C.

No mesmo barramento I2C vamos ligar um display 16x2 I2C backlight azul, onde mostraremos o valor da temperatura ambiente e do objeto que aproximarmos do sensor:

Circuito MLX90614 com Arduino Uno

No barramento I2C a "separação" dos dados recebidos do sensor de temperatura e enviados para o display LCD é possível pois cada componente tem um endereço I2C específico

Programa leitor de temperatura


Para usar o circuito montado anteriormente, vamos usar as bibliotecas LiquidCrystal I2C e Adafruit MLX90614 que podem ser baixadas à partir da própria IDE do Arduino.

Para a instalação das bibliotecas, entre na IDE, em Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas e procure primeiro por Liquid Crystal I2C conforme a figura abaixo, clicando em seguida em Instalar:

Instalação biblioteca LiquidCrystal I2C Arduino

Faça o mesmo procedimento com a biblioteca Adafruit MLX90614:

Instalação biblioteca Adafruit MLX90614 Arduino

Com as bibliotecas instaladas, carregue o programa abaixo no Arduino. Atenção para a linha 11, que define o endereço I2C do display LCD 16x2. No meu caso o endereço é o 0x3B

Se nada aparecer no display, provavelmente o seu tem outro endereço. Utilize o programa I2CScanner, que eu usei neste post, e ele vai te mostrar o endereço I2C dos dispositivos conectados no barramento (inclusive o próprio sensor MLX90614, que no meu caso é o 0x5A). Veja como ficou a minha tela do Serial Monitor ao rodar o I2CScanner:

Tela I2CScanner Serial Monitor

No programa abaixo, utilizamos as variáveis temp_amb e temp_obj para ler os valores das temperaturas ambiente e do objeto, respectivamente. Depois usamos essas variáveis dentro do loop para mostrar os valores tanto no display como no Serial Monitor.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//Programa: Sensor de temperatura I2C MLX90614 Arduino
//Autor: Arduino e Cia

#include <Wire.h>
#include <Adafruit_MLX90614.h>
#include <LiquidCrystal_I2C.h>

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

//Define o endereco I2C do display e qtde de colunas e linhas
LiquidCrystal_I2C lcd(0x3B, 16, 2);

//Array que desenha o simbolo de grau
byte grau[8] = {B00110, B01001, B01001, B00110,
                B00000, B00000, B00000, B00000,};

double temp_amb;
double temp_obj;

void setup()
{
  Serial.begin(9600);
  Serial.println("Sensor de temperatura MLX90614");

  //Inicializa o display LCD I2C
  lcd.init();
  lcd.backlight();

  //Atribui a "1" o valor do array "grau", que desenha o simbolo de grau
  lcd.createChar(1, grau);

  //Inicializa o MLX90614
  mlx.begin();
}

void loop()
{
  //Leitura da temperatura ambiente e do objeto
  //(para leitura dos valores em Fahrenheit, utilize
  //mlx.readAmbientTempF() e mlx.readObjectTempF() )
  temp_amb = mlx.readAmbientTempC();
  temp_obj = mlx.readObjectTempC();

  //Mostra as informacoes no display
  lcd.setCursor(0, 0);
  lcd.print("Ambiente:");
  lcd.setCursor(10, 0);
  lcd.print(temp_amb);
  lcd.setCursor(15, 0);
  lcd.write(1);
  lcd.setCursor(0, 1);
  lcd.print("Objeto:");
  lcd.setCursor(10, 1);
  lcd.print(temp_obj);
  lcd.setCursor(15, 1);
  lcd.write(1);

  //Mostra as informacoes no Serial Monitor
  Serial.print("Ambiente = ");
  Serial.print(temp_amb);
  Serial.print("*C\tObjeto = ");
  Serial.print(temp_obj); Serial.println("*C");

  //Aguarda 1 segundo ate nova leitura
  delay(1000);
}

Logo após o carregamento do programa serão mostradas no display a temperatura ambiente e a temperatura do objeto que você aproximar do sensor. As temperaturas estão em graus Celsius.

Você também pode acompanhar esses dados a partir do Serial Monitor do Arduino, que vai mostrar uma tela como essa abaixo. Repare que a leitura da temperatura ambiente praticamente não se alterou mesmo quando aproximamos um objeto do sensor.

Serial monitor mostrando os dados do sensor MLX90614


Gostou? Então confira outros posts utilizando sensores de temperatura aqui mesmo no Arduino e Cia!

5 comentários:

  1. Para alarme qual a distancia que ele alcança e quantos poderemos ligar.
    DjDMcMagagl .
    djdmcmagal@gmail.com

    ResponderExcluir
    Respostas
    1. Boa noite,

      Para esse sensor especificamente a distância é bem pequena... o objeto tem que estar a 1 ou 2 cm do sensor. Existem outros sensores infravermelhos que detectam objetos mais distantes, mas esses sensores também são mais caros.

      Abraço!

      Adilson

      Excluir
    2. Errado, depende do tamanho do objeto, para alarme pode usar para distancias maiores

      Excluir
  2. Bacana. Se eu colocar esse sensor na saida da agua do chuveiro. Como faço para controlar a temperatura num determinado valor?

    ResponderExcluir
    Respostas
    1. Usando triac e o algorítimo PID pra um controle eficiente da temperatura.

      Excluir