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.