quinta-feira, 10 de março de 2016

Sensor de temperatura MLX90615 - Arquivo 019

Referência:
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