Aventuras y Desventuras de un hobbyist

Aventuras y Desventuras de un hobbyist....

Termòmetro LCD y led que se enciende cuando se supera una temperatura X

Finalmente he terminado el termómetro digital mediante el cual obtengo la temperatura y el led se enciende si la temperatura es superior a 22ºC.
(Se puede ampliar el sketch para que cuando la temperatura sea menor de 18 un led azul se ilumine, cuando la temperatura sea entre 18 y 24 un led amarillo se ilumine y cuando sea superior a 24 el led rojo se ilumine.)


Los Materiales son los siguientes:
  • Arduino UNO (bricogeek.com)
  • Breadboard (bricogeek.com)
  • LCD PC1602F (16*2) (Diotronic.com)
  • Sensor de Temperatura DS18B20+ (bricogeek.com)
  • Resistencia de 4.7K.
  • LED
  • Cables varios incluido el usb para conectar el arduino al PC.
Para empezar conecte el sensor de temperatura a Arduino en el pin 10, la forma de conectar es la siguiente:
Source: http://www.flickr.com/photos/sctv/3138287688/#/
Primero hice pruebas para ver si el sensor funcionaba correctamente, usando el Serial  Monitor obtuve esto:

Ahora que se que el sensor funciona correctamente conecto el LCD a arduino de la siguiente forma:
Source: http://luckylarry.co.uk
Ahora desarrolamos el código, que os lo podéis descargar de aquí: Archivo.pde(arduino)




#include  //Libreria para el sensor

    #include  //Libreria para el sensor

    #include  //Libreria para el LCD


    // Conectamos el sensor de temperatura al pin 10 de Arduino

    #define ONE_WIRE_BUS 10


    // Setup de oneWire instance para que se comunique con dispositivos OneWire

    OneWire oneWire(ONE_WIRE_BUS);


    // Pasomos la referencia de oneWire a Dallas Temperature.

    DallasTemperature sensors(&oneWire);


    //Iniciamos la libreria del LCD con los respectivos pines

    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


    const int ledPin =  13;      // Pin al que esta conectado el led


    void setup(void)

    {

    //Setup de las lineas y columnas.

      lcd.begin(16, 2);

    //Escribimos Temperatura en el LCD.


      lcd.print("Temperatura:");

     

      // initialize the LED pin as an output:

      pinMode(ledPin, OUTPUT);

      // start serial port

      Serial.begin(9600);

      Serial.println("Control de Temperatura");


      // Start up the library

      sensors.begin();

    }


    float val = 0; // Importate usar el float para obtener la temperatura en formato ºC y NN,NN


    void loop(void)

    {

      // call sensors.requestTemperatures() to issue a global temperature

      // request to all devices on the bus

      Serial.print("Requesting ...");

      sensors.requestTemperatures(); // Send the command to get temperatures

      Serial.println("DONE");

      Serial.print("Temperatura es  ");

      Serial.print(sensors.getTempCByIndex(0))  ; // Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire

      Serial.print("  ");

      float val =  sensors.getTempCByIndex(0) ; // Almacenar la temperatura

      //Serial.println(val);      // print the value to

                                // the serial port

     // set the cursor to column 0, line 1

      // (note: line 1 is the second row, since counting begins with 0):

      lcd.setCursor(0, 1);

      // print the number of seconds since reset:

      lcd.print(val);                       

                            

      if (val >= 22) {

         // turn LED on:  

        digitalWrite(ledPin, HIGH);

      }

      else {

        // turn LED off:

        digitalWrite(ledPin, LOW);

      }


      delay(4000);              // wait for 4 second

    }






Cosas a tomar en cuenta:

  • Usar las librerias oneWire y DallasTemperature para el sensor.
  • No olvidarse de usar "float" a la hora de leer la temperatura, sin esta funcion a mi me salian caracteres muy raros o sino la temperatura sin decimales.
  • Soldar bien los cables en el LCD ya que si no lo estan es muy probable obtener caracteres raros. 
Librerias Necesarias para el proyecto:

Libreria Dallas Temperature