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.
Excelente trabajo, enhorabuena.
ResponderEliminarhola oie meda este error
ResponderEliminarlcd_thermo_led.cpp:1:21: error: OneWire.h: No such file or directory
lcd_thermo_led.cpp:2:31: error: DallasTemperature.h: No such file or directory
lcd_thermo_led:8: error: 'OneWire' does not name a type
lcd_thermo_led:11: error: 'DallasTemperature' does not name a type
lcd_thermo_led.cpp: In function 'void setup()':
lcd_thermo_led:28: error: 'sensors' was not declared in this scope
lcd_thermo_led.cpp: In function 'void loop()':
lcd_thermo_led:39: error: 'sensors' was not declared in this scope
amigo pasame las librerias porfavor me urge josca_taz@hotmail.com
ResponderEliminarya que no las encuentro por ningun lado
Anonimo josca_taz:
ResponderEliminarAl final del post he añadido las dos librerias.
Suerte.
Buenas! te hago una sugerencia; porque no lo pruebas con el bus I2C? asi SOLO te quedan 2 cables a conectar!
ResponderEliminarHola me llamo adan alberto y actualmente estoy llevando a cabo un proyecto donde debo utilizar el 18B20 para medir 3 temperaturas. El micro que debo utilizar es el ATmega128. Queria pedirte de favor si podrias asesorarme con el sensor de temperatura. mi correo es adan_skate@hotmail.com
ResponderEliminarde antemano gracias.
Gracias por la sugerencia del I2C, tengo en mis planes realizar algo con I2C seguro que lo primero que haga sea con estos sensores de temperatura.
ResponderEliminarMuy bien explicado ya que nos ha surgido un error con un termómetro y queremos intentar solucionarlo antes de llamar a la empresa, muy bien explicado
ResponderEliminar