Go Down

Topic: DS18B20 problem (Read 755 times) previous topic - next topic

medina

Jun 04, 2012, 10:01 pm Last Edit: Jun 05, 2012, 08:49 am by medina Reason: 1
buenas comañeros despues e tener el proyecto casi terminado me encuentro con que la sonda DS18B20 me da una temperatura -127 cuando esta conectada la sonda .trabajo con la version 0023 con sus respectivas librerias ,onwire y dallastemperature.
que creeis que esta pasamdome?
Quote

#include <OneWire.h>
#include <LiquidCrystal.h>
#include <DallasTemperature.h>
#include <Wire.h>   //
#define DS1307_I2C_ADDRESS 0x68
LiquidCrystal lcd(26, 27, 45, 47, 49, 51);
#define ONE_WIRE_BUS 41//temperatura, pin de entrada
OneWire oneWire(ONE_WIRE_BUS);//temperatura
DallasTemperature sensores(&oneWire);
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
int PinVentilador =29;//rele 1-ventilador  disipador
int PinCentilador =30;//rele 2-ventilador  disipador
int PinCalentador = 34;
int EstadoCentil=0;
int EstadoVentil=0;
int EstadoCalent=0;
int Retraso=5000;
}
void setup()
{ pinMode(PinCentilador, OUTPUT);
 pinMode(PinVentilador, OUTPUT);
pinMode(PinCalentador, OUTPUT);
}
void loop() {  
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); //Obtenemos la hora
sensores.requestTemperatures();
Temperatura(minute, hour);
lcd.noBlink();
if (minute < 2)  Retraso=1000;
else if (hour < 5) Retraso=10000;
else Retraso=10000;
}

void Temperatura(int minutos, int horas)
{
 float T1;
 float T2;
 float T3;
 sensores.requestTemperatures();
 T1=sensores.getTempCByIndex(0)+1;
 T2=sensores.getTempCByIndex(1)+1;
 T3=sensores.getTempCByIndex(2)+1;  
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("TEMPERATURA");
  lcd.print("   ");
 if (hour < 10) lcd.print("0");
 lcd.print(hour, DEC);
 lcd.print(":");  
 if (minute < 10) lcd.print("0");
 lcd.print(minute, DEC);
 
 lcd.setCursor(0, 1);
 lcd.print("TACEN-T1:");
 lcd.print(T1);
 lcd.print((char)223);
 lcd.setCursor(0, 2);
 lcd.print("TACEN-T2:");
 lcd.print(T2);
 lcd.print((char)223);
 lcd.setCursor(0, 3);
 lcd.print("WATER-T3:");
 lcd.print(T3);
 lcd.print((char)223);
 if (T2 < 25) EstadoCalent=1;
 if (T2 > 26) EstadoCalent=0;
 if (T1 < 25) EstadoVentil=0;
 if (T1 > 30) EstadoVentil=1;  
 if (T3 < 25) EstadoCentil=0;
 if (T3 > 30) EstadoCentil=1;
 
 lcd.setCursor(16, 3);
   if(EstadoCalent==1 ){
   digitalWrite(PinCalentador, LOW);
   lcd.write(6);
 }
 else
 {
   digitalWrite(PinCalentador, HIGH);
   lcd.write(6);
 }
 lcd.setCursor(16, 1);
 if(EstadoVentil==1 )//decimos al rele el encendido y apagado//
 {
   digitalWrite(PinVentilador, LOW);
   lcd.write(6);lcd.write(5);lcd.write(5);
 }
 else
 {
   digitalWrite(PinVentilador, HIGH);
   lcd.write(6);
 }
 lcd.setCursor(16, 2);
  if(EstadoCentil==1 )//decimos al rele el encendido y apagado//
 {
   digitalWrite(PinCentilador, LOW);
   lcd.write(6);lcd.write(5);lcd.write(5);
 }
 else
 {
   digitalWrite(PinCentilador, HIGH);
    lcd.write(6);
   
 }
 delay(Retraso);
}



ademas compañeros  al abrir el serial monitor despues de copilar el sketch "simple" me dice :

temperature for the device 1 ( index 0) is: -127.00
requesting temperature .......done

jorgepl

El resultado que te está devolviendo no es una temperatura. La librería OneWire te está diciendo que no encuentra el sensor (#define DEVICE_DISCONNECTED -127). ¿Has puesto la resistencia de pull-up en la línea?

Prueba primero con un solo sensor y el ejemplo simple de la librería, y cuando te funcione, pasa a tu código. Por cierto, envías dos veces el comando sensores.requestTemperatures(), una en el loop() y otra en la función Temperatura().

Revisa el montaje y si quieres que te echemos una mano, pon un esquema de las conexiones y/o alguna foto.

Go Up