Objetivo

 

  • Presentar el sensor de temperatura MLX90614 .
  • Montar un circuito que nos permita medir temperatura a distancia.
  • Realizar un montaje completo con display y el sensor.
  •  

    Material requerido.

     

    Imagen de Arduino UNO  Arduino Uno o similar.

     

    Protoboardconexiones Una Protoboard mas  cables.
    Display de 128x64 pixels Un display OLED de 0.96
    MOntaje en breakout Un sensor MLX90614

    Midiendo Temperaturas

     

    Parece que medir temperaturas en el mundo Arduino es una especie de clásico incombustible. Desde expertos en instrumentación hasta aprendices novicios, todo el mundo quiere medir la temperatura de algo del modo que sea.

    No es raro porque hay mil motivos para precisar semejantes medidas y el mercado siempre dispuesto a venderte cosas que hagan que aflojes la cartera, encuentra mil y una maneras de vendernos sensores de diferentes tipos, colores y condiciones con sus propias ventajas e inconvenientes.

    En esta humilde casa hemos ido viendo sensores de temperatura como los LM35DZ de coste despreciable y magnifico rango de medida, a modelos menos sofisticados pero mas cómodos como los DHT11 y DHT22 que además nos dan la humedad ambiente y están mas pensados para la industria alimentaria. Y como no, un clásico como  las PT100 y diferentes tipos de termopares dependiendo de las necesidades.

    Paro todos estos sensores tienen una cosa en común: Necesitan contacto físico con el medio a medir. Si se trata de un líquido hay que sumergirlo ocn los problemas que esto representa para cualquier dispositivo eléctrico / electrónico.

    Por eso en este caso vamos a probar un sensor de temperatura diferente. Un modelo basado en el sensor MLX90614, aunque yo voy a usar un breakout con el sensor integrado para que sea mas cómodo de usar.

    Sensor independiente
    MOntaje en breakout

    La curiosidad de este sensor, es que mide la temperatura de un objeto a distancia, en función de la emisión de Infrarrojos que el objeto produce.  ¿Qué te parece el truco?

    Eso significa que no necesitamos contacto físico con el elemento cuya temperatura queremos medir, sino que basta con apuntar el sensor hacia el objeto. Además como ocurre con los buenos sensores electrónicos es auto calibrado.

    El fabricante nos pone fácil usar el sensor MLX90614, ya que es básicamente un sensor de infrarrojos encapsulado y con la electrónica precisa para conectarse al bus I2C, con lo que se simplifica mucho las conexiones y lecturas permitiendo hasta un máximo de 100 de estos pequeños monstruos en la misma red.

    Algunas características de la familia:

    • Incluye sensores para la temperatura ambiente TA y para la temperatura del objeto al que se apunta TO.
    • Calibrado de fábrica para un rango de temperaturas más amplio de lo habitual:
      • -40 to 125 ˚C para la temperatura ambiente
      • -70 to 380 ˚C para la temperatura del objeto
    • Buena precisión: 0.5°C sobre un amplio rango.
    • Sirve para medir la temperatura corporal (Lo probaré la próxima vez que tenga fiebre)
    • Bajo coste.

    Todo esto hace que se ideal para jugar midiendo la temperatura a distancia de una forma cómoda y sobre todo con bastante precisión por lo que no me he podido resistir a probarlos.

     

    Arduino y los sensores MLX90614

     

    Vale pues. ¿Qué tal es usar un Arduino para leer estos sensores? Pues francamente sencillo. Basta con conectar el sensor a tensión y GND y conectar los dos hilos del I2C para que estemos listos para leer las lecturas de temperaturas remotas.

    Después basta con instalar una sencilla librería de Adafruit-MLX90614-Library-master,  y ya podemos empezar. La conexión es trivial:

    Sensor Vin GND SCL SDA
    Arduino 5 V GND A6 A5

    Para el programa vamos a empezar con un par de includes, para el I2C y el sensor:

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

    Después creamos una instancia de un objeto por cada sensor:

    Adafruit_MLX90614 mlx = Adafruit_MLX90614();

    Y ya podemos ir hasta el setup()

    void setup()
    {
       Serial.begin(9600);
       mlx.begin();
    }

    Donde incializamos el objeto con la segunda línea. Y en el loop utilizamos las dos instrucciones básicas de este sensor para leer la temperatura ambiente, y la del objeto al que apuntamos:

    void loop() 
      {
         Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC());  
         Serial.print("*C\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C");
         Serial.println();  
         delay(1000);
      }

    Y eso es todo. Resulta frustrantemente sencillo. Si ejecutáis el programa obtendréis medidas variables en la puerta serie según adonde vayáis apuntando el sensor:

    SAlida a consola arduino

    Veréis que requiere unas cuantas medidas adaptarse al la temperatura de un objeto cuando le modificamos de forma brusca la temperatura de objeto (Como ponerle agua casi hirviendo después de apuntar a algo frio)

     

    Complicando todo un poco

     

    La cosa ha sido tan fácil que no me pagarían si dejo esta sesión así, de modo que hay que complicar todo un poco para que parezca que esto es algo difícil que solo cuatro podemos entender, y como me sobra tiempo (Y también porque quiero cobrar) no me puedo resistir a construir un termómetro a distancia que nos de la temperatura de un objeto cuando lo apuntamos con nuestra pistola lectora.

    Para ello voy a usar un display OLED de 0.96” y basándome en el antiguo programa que usamos para manejarlo aquí: https://www.prometec.net/oled/

    • El tuto del display OLED está un tanto obsoleto porque está hecho a pelo, pero de entonces aquí han desarrollado librerías específicas para manejar este display como cualquier otro y lo suyo seria hacer un nuevo tuto aplicando las librerías gráficas, pero que queréis que os diga, no me sobra tanto tiempo. Quizás en la próxima ocasión. 

    Fotografia de confunto

    La idea es modificarlo sin entrar en mucho detalle ese programa para que presente las medidas de temperatura ambiente y del objeto apuntado en el display OLED, porque me encanta y adema es muy fácil usarlo como sensor remoto a modo de pistola a la que apuntar el sensor.

    Como no quiero volver a hablar de ese programa y de como manejar el display OLED bastara con copiar las funciones instrumentales y modificar un poco el apartado de la generacional de los textos que queremos mostrar en pantalla.

    Aquí os dejo el listado del programa completo:

    #include "stdio.h"
    #include <Wire.h>
    #include <Adafruit_MLX90614.h>
    
    Adafruit_MLX90614 mlx = Adafruit_MLX90614();
    char buffer[12];
    
    void setup()
    {
       LEDPIN_Init();
       LED_Init(); 
       mlx.begin();
    }
    
    void loop()
    {
       int Amb = mlx.readAmbientTempC();
       int Obj = mlx.readObjectTempC();  
       int n = sprintf(buffer, "%02d C : %02d C", Amb, Obj);
    
       LED_P8x16Str(20,0,  "Prometec.net" );
       LED_P8x16Str(20,4,  buffer );
       LED_P8x16Str(20,6,  "    ...." );
    }

     

    No he intentado volver a describir el uso del display OLED ni sus conexiones, porque está todo documentado en la sesión previa que tenéis marcada mas arriba y veréis que lo único que hace el programa es adaptar al display las lecturas del sensor I2C.

    Os dejo aquí un vídeo con el resultado:

      

    Deja una respuesta