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.
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 (datasheet) 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.
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 16×2 I2C backlight azul, onde mostraremos o valor da temperatura ambiente e do objeto que aproximarmos do sensor:
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:
Faça o mesmo procedimento com a biblioteca Adafruit MLX90614:
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 16×2. 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:
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.
//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("*CtObjeto = "); 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.
Gostou? Então confira outros posts utilizando sensores de temperatura aqui mesmo no Arduino e Cia!
Para alarme qual a distancia que ele alcança e quantos poderemos ligar.
DjDMcMagagl .
[email protected]
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
Errado, depende do tamanho do objeto, para alarme pode usar para distancias maiores
Bacana. Se eu colocar esse sensor na saida da agua do chuveiro. Como faço para controlar a temperatura num determinado valor?
Usando triac e o algorítimo PID pra um controle eficiente da temperatura.
Para esse sensor, ele detectaria a temperatura de uma pessoa a 1,5/2 metros de distância?
Oi Joerdson,
Pelo que eu testei aqui, funciona para pequenas distâncias. Existe a opção de comprar o sensor com uma lente, como esse daqui.
Abraço!
Adilson
boa noite arduino cia, sou principiante, gostaria de saber como aumentar a distancia de pelo menos 30cm do sensor lmx90614 até ao objecto a ser medido? agradeceria se pudessem me ajudar com isso
Com o uso de lentes adequadas você poderá ampliar a distância.
Estou tentando criar um sistema conectando dois sensores de temperatura infravermelho mlx60914 ao arduino. Porém, por padrão de fábrica, vieram como o mesmo endereço e, pra realizar a comunicação i2c preciso alterar pelo menos um desses endereços, você sabe como posso fazer isso?
Boa noite,
Até onde eu sei não é possível alterar este endereço.
Abraço!
Adilson
Veja página 14 do datasheet
https://www.arduinoecia.com.br/downloads/Datasheet_MLX90614.pdf
sobre sensor de longo alcance, teria algum modelo para me indicar, o objeto estaria de 1 m a 1,5 m de distancia
Oi Joelson,
Para projetos com Arduino, desconheço.. a maioria dos sensores tem um alcance bem curto. Creio que nesse caso você vai ter que procurar um sensor profissional, mais ou menos isso daqui: https://www.keyence.com/products/process/temperature/
Abraço!
Adilson
Eu queria um projeto com este sensor , um sensor de presença e um servo motor. Como acrescentaria um sensor de presença e um servo motor?
O sensor de presença aciona o sensor de temperatura digital que no lcd marca a temperatura e a temperatura estando abaixo de 37,1º aciona o servo motor em 90 graus.
Boa noite, teria como disponibilizar o simulador que vocês utilizaram?
Oi Pedro,
Usamos o Fritzing, que você pode baixar em fritzing.org
Abraço!
Adilson
Bom diaa, gostaria de saber como faço para os valores não aparecerem varias vezes, tipo mede a temperatura e lá no monitor serial so apararece uma vezes os valores de ambiente e objeto e não em sequecia infinita
Oi Gabriel!
Não sei se existe a possibilidade de “apagar” os valores do Serial Monitor sem ser de forma manual.
Abraço!
Adilson
Boa tarde, gostaria de saber como o sensor e o modulo i2c funcionam se estão ligados na mesma porta, no caso A4 e A5
Oi Gabriel,
Cada um tem um endereço I2C diferente, então o microcontrolador “fala” com um de cada vez.
Abraço!
Adilson
eu preciso monitorar a temperatua de um objeto que fica a 250 graus. tem como usar esse sensor?
Oi Felipe,
Segundo o datasheet, ele consegue monitorar temperatura de objetos até 380 graus. Então tem como sim.
Abraço!
Adilson
ola boa tarde, gostaria de saber como posso configurar o sensor para dar um sinal PWM. Preciso programar? Como posso fazer isso?