Mostrando entradas con la etiqueta Sensor de temperatura. Mostrar todas las entradas
Mostrando entradas con la etiqueta Sensor de temperatura. Mostrar todas las entradas

3 jul 2012

Sensor de temperatura MLX90614

Otro sensor de temperatura. Este a diferencia de los demas mide la temperatura por infrarrojos por lo que no necesita contactar con el cuerpo para medir la temperatura. También funciona con el protocolo i2c. Por si se necesitan más detalles aqui va el datasheet del mlx90614

Actualizado:


Y aqui el código .ino para el arduino

#include <Wire.h>
 
void setup(){
Serial.begin(9600);
Serial.println("Setup...");

i2c_init(); //Initialise the i2c bus
PORTC = (1 << PORTC4) | (1 << PORTC5);//enable pullups
}
 
void loop(){
    int dev = 0x5A<<1;
    int data_low = 0;
    int data_high = 0;
    int pec = 0;
 
    i2c_start_wait(dev+I2C_WRITE);
    i2c_write(0x07);
 
    // read
    i2c_rep_start(dev+I2C_READ);
    data_low = i2c_readAck(); //Read 1 byte and then send ack
    data_high = i2c_readAck(); //Read 1 byte and then send ack
    pec = i2c_readNak();
    i2c_stop();
 
    //This converts high and low bytes together and processes temperature, MSB is a error bit and is ignored for temps
    double tempFactor = 0.02; // 0.02 degrees per LSB (measurement resolution of the MLX90614)
    double tempData = 0x0000; // zero out the data
    int frac; // data past the decimal point
 
    // This masks off the error bit of the high byte, then moves it left 8 bits and adds the low byte.
    tempData = (double)(((data_high & 0x007F) << 8) + data_low);
    tempData = (tempData * tempFactor)-0.01;
 
    float celcius = tempData - 273.15;
    float fahrenheit = (celcius*1.8) + 32;
 
    Serial.print("Celcius: ");
    Serial.println(celcius);
 
    Serial.print("Fahrenheit: ");
    Serial.println(fahrenheit);
 
    delay(1000); // wait a second before printing again
}


Os dejo los enlaces para descargar el archivo fritzing y el código fuente

23 jun 2012

Sensor de temperatura TC74V5

Sigo con el tema de los sensores de temperatura. En este caso he optado por el sensor TC74V5. Al ser i2c es de fácil montaje incluso en el primer test lo hice sin resistencia pullup y funcionó todo correcto.
Falta el código para el arduino pues de no ser así quedaria cojo el post.

 
#include "Wire.h"
//wire library
 
#define address 0x4A    // Ojo este numero va segun la version que tengas.

#define delayC 1000
 
void setup()
{
  Wire.begin();
  Serial.begin(9600);
  Serial.println("Init");
}
 
void loop()
{
  Serial.print("temperature in Celsius: ");
 
  float temperature;
 
  Wire.beginTransmission(address);
  Wire.send(0x00);
  Wire.requestFrom(address, 1);
  if (Wire.available()) {
    temperature = Wire.receive();
    Serial.println(temperature);
  } 
  else {
    Serial.println("---");
  }
 
  Wire.endTransmission();
 
  delay(delayC);
}


Sin tener en cuenta si estaba delante de un sensor preciso y sin desviaciones le vi varios defectos para mi proyecto. El primero es que era lento y el segundo tardaba tiempo en recuperarar la temperatura ambiente. Aún así es pronto para hablar mal sobre el pues seguro que tendrá lugar para más de un proyecto.
Y como sigue siendo habitual pongo la fuente dónde creo que saque la información