http://www.artilhariadigital.com/2014/11/Medir-temperatura-com-sensor-infravermelho-MLX90614-e-Arduino.html
Lista de Materiais:
IDE Arduino 1.0.6
1x Board Arduino UNO
1x Protoboard 830 furos
1x Cabo USB-A male to USB-B male
1x Conj. de fios jumper p/ protoboard
1x Sensor de temperatura MLX90615
2x Resistor 4,7k 1/4w
1x Capacitor cerâmico 0,1uF
Montagem:
Firmware:
#include <i2cmaster.h>
void setup(){
Serial.begin(9600);
Serial.println("Setup...");
i2c_init(); //Inicializa a comunicação I2C
PORTC = (1 << PORTC4) | (1 << PORTC5);// Habilita os pullups
}
void loop(){
int dev = 0x5B<<1;
int data_low = 0;
int data_high = 0;
int pec = 0;
i2c_start_wait(dev+I2C_WRITE);
i2c_write(0x07);
i2c_rep_start(dev+I2C_READ);
data_low = i2c_readAck(); //Faz a leitura de 1 byte e depois envia ack
data_high = i2c_readAck(); //Faz a leitura de 1 byte e depois envia ack
pec = i2c_readNak();
i2c_stop();
//Converte os bytes high e low juntos e processa a temperatura, MSB é um bit de erro que é ignorado para temperaturas
double tempFactor = 0.02; // 0.02 graus por LSB (resolução do MLX90615)
double tempData = 0x0000; // Zera os dados
int frac; // dados apos o ponto decimal
// Mascara o bit de erro do high byte, e depois move para esquerda 8 bits e soma o low byte.
tempData = (double)(((data_high & 0x007F) << 8) + data_low);
tempData = (tempData * tempFactor)-0.01;
float celcius = tempData - 273.15;
Serial.print("Celcius: ");
Serial.println(celcius);
delay(1000); // Espera 1 segundo antes de fornecer uma nova saida.
}
Download: i2cmaster.h
Nenhum comentário:
Postar um comentário